2012-07-06 80 views
1

解析文件,當我使用Domino .NET包裝類,允許用戶從自己的Lotus收件箱拖到電子郵件到一個winform的NotesView的NotesDocument代替。Notes會話收益率的票據URL

我得到的數據對象回來,包含註釋URL的文檔,表單

notes://server/replicaID/viewID/documentUNID 

並將它傳遞給這應該返回匹配Domino.NotesSession.Resolve(金銀絲)文件。其實,在我的瀏覽器中粘貼鏈接(替換註釋://通過http://就像一個魅力,我得到了電子郵件的HTML版本)。

但解決方法將繼續返回什麼似乎是一個爲NotesView,而不是實際的文件:

Dim notesSession as Domino.NotesSession = ' ... Initialize session here 
Dim notesURL as string = "notes://server/replicaID/viewId/documentID" 

Dim draggedDocument = notesSession.Resolve(notesURL) 
' Here, I do get an actual document, but its UnID matches the viewId 
' part of the url, not the document. 

我試圖從URL中移除viewID,但沒有更多的成功。我發現成功地檢索文檔的唯一方法是通過使用OLE對象(蓮花命名空間):

' Get UnId from url 
Dim unid as String = notesURL.Split("/").Last() 

' Get UI Automation object 
Dim workspace = CreateObject("Notes.NotesUIWorkspace") 
' Get currently open DB (the where the drag event was initiated) 
Dim notesDb = workspace.CURRENTDATABASE.Database 
' Retrieve matching document 
Dim notesDoc = notesDb.GetDocumentByUNID(unid) 

雖然這種方法可行,我不想使用UI自動化類(OLE),但多米諾COM包裝(.NET)。

那麼,如何準確地這些筆記的URL在互操作工作?有什麼辦法可以在不知道數據庫的情況下檢索匹配的文檔嗎?爲什麼Resolve方法在給定文檔URL時返回視圖對象?

任何幫助歡迎。

回答

2

這聽起來像你正在處理的解決方法的錯誤。但你的第二個想法似乎是一個合理的解決方法。但是,我不認爲有必要撥打CreateObject。包裝類應該可以正常工作。

您在第一個代碼示例(Domino.NotesSession對象)中擁有NotesSession,因此您應該能夠調用其上的Resolve方法以基於您擁有的NotesUrl檢索數據庫對象。您不需要獲取視圖,只需要數據庫對象。從那個對象中,你可以調用GetDocumentByUNID方法來檢索你想要的文檔。如果Resolve方法爲你做到了,那會很好,但它聽起來像讓你足夠接近。

Dim notesSession as Domino.NotesSession = <Session> 
Dim notesURL as string = "notes://server/replicaID"  
Dim notesDocUNID as string = "parse URL to get the UNID" 

Dim notesDatabase = notesSession.Resolve(notesURL) 
Dim document = notesDatabase.GetDocumentByUNID(notesDocUNID) 
+0

其實,我重新輸入第二個樣本,並犯了一個錯誤:它的CreateObject(「Notes.NotesUIWorkspace」),但我想你的觀點仍然是正確。感謝您的見解:) – 2012-07-06 15:13:19

+0

小澄清術語:本Domino.NotesSession是互操作層下面的COM類。如您所說,Notes.NotesUIWorkspace是一個OLE類,用於UI自動化。 一件事:你說你試圖從URL中移除視圖組件,但你嘗試用「0」代替它,使用注意事項://服務器/ replicaID/0/documentUNID? – 2012-07-06 15:35:44

+0

好的,抱歉,我在問題中解決了這個問題。我試圖按照您的建議將視圖ID替換爲0:它將返回數據庫對象。由於我無法解析網址,因此我會採用Ken Pespisa的方法。 – 2012-07-06 17:46:52

0

Session.resolve不返回NotesDocument。它返回一個通用對象(關閉我的頭我會說Base - 所有Notes數據對象的基類)。您必須相應地調暗你的變量然後檢查的類型和其轉換成一個文件