我想访问 Lotus Notes 数据库并从其中的文档中获取附件。我可以打开数据库和文档并遍历所有项目。问题是,我不能将这些项目用作 NotesRichTextItem,因此不检查是否有任何 item.EmbeddedObject。我想这是项目声明的问题。一般来说:如果我使用 VS2010 进行调试,则 doc 和数据库和 NotesSession 具有“值” System.__ComObject 并且“类型”是应该是的 Domino.Notes 对象。例如 WATCH 中的文档:
Name VALUE TYPE
doc {System.__ComObject} Domino.NotesDocument
但是如果我使用 doc.GetType() 命令,结果是
doc.GetType() = {Name = "__ComObject" FullName = "System.__ComObject"}
因为我不知道我的 doc.item 是否是 NotesRichTextItem,所以我将它定义为一个对象,然后想检查是类型。我不能,因为函数的返回值也和上面的 doc 一样。这是我目前使用的完整代码,我从 COM 部分加载了 Lotus Domino 参考。
Public Sub OpenDocumentLN()
Try
Dim ns As New Domino.NotesSession
Dim db As Domino.NotesDatabase
Dim doc As Domino.NotesDocument
Dim view As Domino.NotesView
If Not (ns Is Nothing) Then
ns.Initialize()
db = ns.GetDatabase("", sLotusNotesPath & sLotusNotesDB, False)
If Not (db Is Nothing) Then
view = db.GetView(sLotusView)
doc = view.GetFirstDocument
While Not doc Is Nothing
Dim lnNextDoc As Domino.NotesDocument = view.GetNextDocument(doc)
For Each item As Domino.NotesItem In doc.Items
Dim rtItem As Object = doc.GetFirstItem(item.Name)
If rtItem Is Nothing Then Continue For
If Not rtItem.GetType() = GetType(Domino.NotesRichTextItem) Then Continue For
' NEVER reach this part of the code since the IF clause prevents it due to the type problem
If rtItem.EmbeddedObjects Is Nothing Then Continue For
For Each o As Domino.NotesEmbeddedObject In rtItem.EmbeddedObjects
o.ExtractFile(sLotusExportPath & o.Source)
Next
Next
doc = lnNextDoc
End While
End If
db = Nothing
ns = Nothing
End If
Catch ex As Exception
End Try
End Sub
如何将我的 rtitem 用作 NotesRichTextItem 以便我可以适当地处理它?为什么所有对象都被视为 ComObjects?