0

我想访问 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?

4

0 回答 0