1

我正在使用 Domino .NET 包装类来允许用户将电子邮件从他们的 Lotus 收件箱拖到 winform。

我正在获取一个数据对象,其中包含文档的注释 URL,格式为

notes://server/replicaID/viewID/documentUNID

并将其传递给应该返回匹配文档的 Domino.NotesSession.Resolve(pUrl)。实际上,在我的浏览器中粘贴链接(用 http:// 替换 notes:// 就像一个魅力,我得到了电子邮件的 HTML 版本)工作。

但是 Resolve 方法继续返回似乎是 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),而是使用 Domino 的 COM 包装器 (.NET)。

那么这些笔记 URL 究竟是如何在互操作中工作的呢?有没有什么方法可以在不知道数据库的情况下检索匹配的文档?为什么在给定文档 URL 时 Resolve 方法会返回视图对象?

欢迎任何帮助。

4

2 回答 2

2

听起来您正在处理 Resolve 方法中的错误。但是您的第二个想法似乎是一个合理的解决方法。不过,我认为没有必要打电话给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)
于 2012-07-06T15:03:25.527 回答
0

Session.resolve 不返回 NotesDocument。它返回一个通用对象(我会说 Base - 所有 Notes 数据对象的基类)。您必须相应地调暗变量,然后检查类型并将其转换为文档

于 2013-11-30T04:33:37.320 回答