1

Lotus Notes セッションを初期化し、ドキュメントを作成してメールで送信する VBA 関数があります。また、オプションのパラメーターとして、電子メールの本文に追加する NotesRichTextItem も受け入れます。

ただし、「すべてのオブジェクトは同じセッションからのものでなければなりません」というエラー メッセージが表示されます。この NotesRichTextItem をセッションに「インポート」するにはどうすればよいですか?

編集コードが追加されました

Sub SendLotusMail(SubjTxt As String, _
                BodyTxt As String, _
                EmailTo As String, _
                EmailCC As String, _
                AutoSend As Boolean, _
                Attach As String, _
                ReportTitle As String, _
                Optional AppendToBody As NotesRichTextItem = Null)
On Error GoTo EH
    NtSession.Initialize
    OpenMailDb ReportTitle
    Set NtDoc = Ntdb.CreateDocument

    NtDoc.AppendItemValue "Form", "Memo"
    NtDoc.AppendItemValue "SendTo", EmailTo
    NtDoc.AppendItemValue "CopyTo", EmailCC
    NtDoc.AppendItemValue "Subject", SubjTxt
    Set NtBodyRT = NtDoc.CreateRichTextItem("Body")
    NtDoc.AppendItemValue "Body", NtBodyRT
    If Attach <> "" Then NtBodyRT.EmbedObject EMBED_ATTACHMENT, "", Attach, "Attachment"
    NtBodyRT.AppendText BodyTxt

    'This next line throws the error "All objects must be from the same session"
    NtBodyRT.AppendRTItem AppendToBody

Edit-Solution
は、あまり好きではないことを発見しましたが、RichTextItem オブジェクトをこの関数に渡すことでこれらすべての問題を回避しました。これは親 NotesDocument であり、親の親 NotesSession です。そのため、1 つではなく 3 つのオプション オブジェクトを使用してこのプロシージャを呼び出しています。やったー。

編集-新しい解決策が見つかりまし た 以前の解決策では問題が発生していたので、回避策が見つかるまで (または誰かが提案するまで)、必要なレポートに対してカスタムの電子メール手順を使用します。一部のコードが重複しますが、大幅には重複しません。

4

3 に答える 3

1

問題は、NtSessionオブジェクトがサブで再初期化されているという事実である可能性があります。呼び出し元のルーチンがリッチテキストアイテムを送信する場合は、NotesSessionも作成および初期化されている必要があると思います。その場合は、コードで同じセッションを再利用する必要があります。NtSessionはグローバルであるように見えます-その場合、次のことができます。

  1. 呼び出し元のルーティングが常にそのグローバルセッションを初期化するようにします。
  2. オプションで、引数としてNtSessionオブジェクトを渡します(コードは、独自のセッションを作成して初期化する前に、そのオブジェクトがnullかどうかを確認できます)。また
  3. Initializeを呼び出す前に、NtSessionがすでに初期化されているかどうかを確認します。これを行うには、属性を確認して、オブジェクトがエラー(テストされていないコード)をスローするかどうかを確認できます。

    function isNotesSessionInitialized (ns)  
        on error goto err  
        dim sUser  
        sUser = ""  
        sUser = ns.commonUserName  
    err:  
        if (sUser = "") then  
            return false  
        else  
            return true  
        end if  
    end function
    
于 2009-08-20T17:18:26.357 に答える
0

(質問を締めくくるためにこれを書いています)カスタム設定が必要なレポート用に個別の電子メール プロシージャを用意するだけで、この問題を回避できました。はい、コードの重複がいくつかありますが、作成しようとしていた巨大なものよりもはるかに優れています。

于 2010-09-16T14:46:11.327 に答える
0

ここでいくつかのコードを見ると役立ちます。ただし、何が起こっているかを推測します。

VBA 関数では、メール内に新しい NotesRichTextItem オブジェクトを作成する必要があります。例えば:

Dim docMail as New NotesDocument(db)
Dim rtBody as New NotesRichTextItem(docMail, "Body")

Call rtBody.AppendRTItem(myRTparameter)

エラーなしで動作するはずだと思います。

于 2009-08-20T14:52:23.050 に答える