4

API getEmbeddedObjects();添付ファイル(埋め込みオブジェクトとして)を含むメールがスクリプトから送信されると、Dominoサーバーは間違った結果(ゼロ)を返します。添付ファイルはとして送信されますがEmbeddedOBject、をgetEmbeddedObjects();返しますZERO。メールの種類はNOT MIMEです。

これはJavaアプリケーションです。この問題の回避策はありますか?

ドキュメントから本文を取り出します。本文がrichtextitemの場合、添付ファイルが埋め込みオブジェクトとして存在していてもゼロを返すgetEmbeddedObjects()を呼び出します。

4

4 に答える 4

3

ドキュメント内のすべての項目を調べて添付ファイルの可能性を探すのは、無駄に多くの作業を行っていることです。@AttachmentNames 式 (Document 引数を使用して、Session オブジェクトの evaluate() メソッドを介して利用可能) を使用して添付ファイル名のコレクションを取得し、コレクションに複数の空の文字列が含まれている場合は、getAttachment を使用するだけです。ドキュメントの () メソッドを使用して、対応する EmbeddedObject へのハンドルを取得します。

getAttachment() は、RichTextItem に関連付けられているか、V2 スタイルの添付ファイル (Web UI によって作成されるか、外部メールを変換するときに作成される) に関連付けられているかに関係なく、ドキュメントへの添付ファイルを取得できます。そして、適切な場合には式言語を使用することを恐れないでください。式言語を使用すると、作業が大幅に簡素化されます。

于 2011-07-16T03:11:22.270 に答える
2

添付ファイルは、必ずしもリッチテキストフィールド内に埋め込む必要はありません。デザイナーから引用するには-ヘルプ:

ドキュメントに存在するがリッチテキストアイテムの一部ではないOLE/2埋め込みオブジェクトにアクセスする必要がある場合(たとえば、オブジェクトが元々ドキュメントのフォームで作成されたため)、DocumentのEmbeddedObjectsプロパティを使用します。

問題のもう1つの原因は、チェックする必要のある「ボディ」リッチテキスト項目がいくつかあることです。

HTH

于 2011-06-03T06:39:53.787 に答える
2

残念ながら、Lotus Notes は、NotesDocument オブジェクトから添付ファイルを抽出するための信頼できる方法を 1 つも提供していません。徹底するには、文書オブジェクト自体だけでなく、含まれているすべてのリッチテキスト項目を確認する必要があります。

ファイルサイズを削減するために、メールボックスで選択した電子メールから添付ファイルを抽出する次のコードを作成しました (私のユーザーはすべてを保存しました)。ただし、メインループはあなたの質問に関連しています。ドキュメントのすべてのアイテムをループして添付ファイル付きのリッチテキスト アイテムを探し、続いてすべてのアイテムをループしてタイプ "Attachment" のアイテムを探すプロセスを示しています。

(コードのハッキングを許してください。効率のために書かれたものではありません)

Sub Initialize

    Set s = New NotesSession
    Set db = s.CurrentDatabase
    Set dc = db.UnprocessedDocuments
    Set doc = dc.GetFirstDocument
    Dim rtItem As NotesRichTextItem
    Dim RichTextItemNames List As String
    Dim DocumentItemNames List As String
    Dim itemCount as Integer

    While Not (doc Is Nothing)

        'Scan all richtext items in document for embedded objects
        Forall i In doc.Items

            If i.Type = RICHTEXT Then
                Set rtItem = doc.GetFirstItem(i.Name)
                If Not Isempty(rtItem.EmbeddedObjects) Then
                    RichTextItemNames(itemCount) = Cstr(i.Name)
                    itemCount = itemCount + 1
                End If
            End If

        End Forall      

        'Loop through richtext items and extract the embedded attachments
        For j = 0 To itemCount - 1 
            Set rtItem = doc.GetfirstItem(RichTextItemNames(j))
            Forall Obj In rtItem.EmbeddedObjects
                If ( Obj.Type = EMBED_ATTACHMENT ) Then
                    Call ExportAttachment(Obj)
                    Call Obj.Remove
                    Call doc.Save( False, True )  'creates conflict doc if conflict exists
                End If 
            End Forall 
        Next

        'Scan all items in document for Attachment type items
        itemCount = 0
        Forall i In doc.Items           
            If i.Type = ATTACHMENT Then

                DocumentItemNames(itemCount) = i.Values(0)
                itemCount = itemCount + 1

            End If          
        End Forall

        'Loop through all attachment items in document and extract them
        For j = 0 To itemCount - 1 
            Set attachmentObject = doc.GetAttachment(DocumentItemNames(j))
            Call ExportAttachment(attachmentObject)
            Call attachmentObject.Remove            
            Call doc.Save( False, True ) 'creates conflict doc if conflict exists
        Next        

        Set doc = dc.GetNextDocument(doc)
    Wend

End Sub

Sub ExportAttachment(o As Variant)

    Dim sAttachmentName As String
    Dim sNum As String
    Dim sTemp As String

    ' Append number to end of filename if filename exists.
    sAttachmentName = sDir & "\" & o.Source
    While Not (Dir$(sAttachmentName, 0) = "")
        sNum = Right(Strleftback(sAttachmentName, "."), 2)
        If Isnumeric(sNum) Then
            sTemp = Strleftback(sAttachmentName, ".")
            sTemp = Left(sTemp, Len(sTemp) - 2)
            sAttachmentName = sTemp & Format$(Cint(sNum) + 1, "##00") & _
            "." & Strrightback(sAttachmentName, ".")
        Else
            sAttachmentName = Strleftback(sAttachmentName, ".") & _
            "01." & Strrightback(sAttachmentName, ".")
        End If
    Wend

    Print "Exporting " & sAttachmentName
    'Save the file
    Call o.ExtractFile( sAttachmentName )


End Sub
于 2011-06-03T13:43:31.827 に答える
1

If you get the embedded objects from the Document object, they won't contain attachments. Using getEmbeddedObjects with the "Body" RichTextItem gets the attachments too.

Does that help?

于 2011-06-03T05:15:29.370 に答える