1

Lotus Notes データベース (Designer 7.0 を使用) からすべてのドキュメントとその添付ファイルをエクスポートしようとしています。ドキュメント データと添付ファイルを取得できますが、名前をハード コードした場合に限ります。下の 2 つのコード ブロックに示されているように、LotusScript でプログラムによってファイル名を取得する 2 つの方法が機能していないことがわかりました。1 つ目では、doc.GetFirstItem( "Body" ) が Nothing を返します。2 つ目では、Forall 行での実行中に型の不一致があります。添付ファイルを抽出する方法についてのヘルプは大歓迎です! 添付ファイルが「添付ファイル」または OLE として保存されているかどうかはわかりませんが、主に PDF であるため、添付ファイルとして疑われます。

Sub Click(Source As Button)  
Dim session As New NotesSession
Dim db As NotesDatabase
Dim query As String
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim fileCount As Integer
Dim attachment As NotesEmbeddedObject 
Dim fileName As String

Set db = session.CurrentDatabase
' get a document that has an attachment
Set collection = db.FTSearch( "06/25/2013", 10 )

fileNum% = Freefile()
fileName$ = "c:\kcw\lotusexport.txt"
Open fileName$ For Output As fileNum%
Write #fileNum%, "docs found", collection.Count

Set doc = collection.GetFirstDocument
' write out document properties
Forall x In doc.Items
    Write #fileNum%, x.Name, " = ",  x.Text
End Forall
'extract document (using hardcoded name)
Set attachment = doc.GetAttachment("OCSE-FRONT_SCANTODESKTOP_06262013-104822.pdf")
Call attachment.ExtractFile _
( "c:\kcw\attachment" )

'Try to get attachment through "Body", but rtitem is Nothing
Set rtitem = doc.GetFirstItem( "Body" )
Write #fileNum%, "rtitem is Nothing", rtitem Is Nothing
fileCount = 0
If Not rtitem Is Nothing Then
    If ( rtitem.Type = RICHTEXT ) Then
        Write #fileNum%, "rtitem is RICHTEXT"
        Forall o In rtitem.EmbeddedObjects
            Write #fileNum%, "has Embedded Objects"
            fileCount = fileCount + 1
            Write #fileNum%,"rtitem num", fileCount
            Call o.ExtractFile _
            ( "c:\kcw\newfile" & Cstr(fileCount) )
        End Forall
    End If
End If

'Fails with "Type mismatch" at Forall loop
If doc.HasEmbedded Then
    Write #fileNum%, "doc has embedded"     
    Forall objects In doc.EmbeddedObjects
        Write #fileNum%, "in for loop"
        Write #fileNum%, "filename= ", object.Source
    End Forall
End If

Close fileNum%
End Sub
4

4 に答える 4

4

ドキュメント内のすべての添付ファイルのリストが表示されます

objects =  Evaluate("@AttachmentNames", doc)
于 2013-09-24T21:16:46.240 に答える
1

あなたのコードにはいくつかの問題があります。まず、他の人が言ったように、エラー処理を追加する必要があります。次に、NotesEmbeddedObject クラスの Source プロパティを使用して、添付ファイルの元のファイル名を取得します。もちろん、重複を処理するには自分でコードを書く必要があります。

ここに私が書いたプログラムのいくつかの行があります。

Forall i In doc.Items
  ' *** Locate attachments and detach them
  If Left$(i.Name,1)<>"$" Or Lcase(i.Name)="$file" Then
    If i.IsSummary = False Then
      If Not Isempty(i.EmbeddedObjects) Then
        If ( i.Type = RICHTEXT ) Then
          Forall obj In i.EmbeddedObjects
            If ( obj.Type = EMBED_ATTACHMENT ) Then
              Call obj.ExtractFile(basePath & obj.Source)  
            End If
          End Forall
        End If
      End If
    End If
  End If
End Forall

プログラムは、データベース内のすべてのドキュメントを XML としてエクスポートし、添付ファイルを切り離し、埋め込まれた画像をエクスポートし、それらの切り離された/エクスポートされたファイルを XML ファイルにリンクします。詳細については、http ://www.texasswede.com/websites/texasswede.nsf/Page/Notes%20XML%20Exporter をご覧ください。

于 2013-09-25T14:31:00.567 に答える
0

エラーの原因となった行を引用していないことに気付きました。エラーが発生した行に関する情報を取得するための最良の addecrror トラップ:

手順の先頭(1行目?)..

Sub Click(Source As Button)  
On error goto handler

サブの下部に...

fin:
exit sub

handler:
msgbox "Error " & Error$ & " line " & Erl 
resume fin

サブ終了

問題の診断に大いに役立ちます。

于 2013-09-25T11:03:22.610 に答える
0

私はノーツを初めて使用するので、コードの改善と解決策についてのすべての意見に感謝します! 以下のコードで簡単なテストを実行したところ、少なくとも 1 つのドキュメントで動作することがわかりました (データベース全体で未定)。ファイル名が $FILE アイテムの Items に保存されていることがわかりました。このコードは、ファイル名を取得してからファイルを抽出します。

Dim item As NotesItem
 'assumes first item is $FILE
Set item = doc.Items( 0 )
Dim attachmentName As String
attachmentName = item.Values(0)
Write #fileNum%, "attachmentName= ", attachmentName
Set attachment = doc.GetAttachment(attachmentName)
Call attachment.ExtractFile _
( "c:\kcw\" + attachmentName)
于 2013-09-25T20:47:08.247 に答える