1

我有一个 VBA 函数,它初始化一个 lotus notes 会话,创建一个文档并发送它。它还接受我附加到电子邮件正文的 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 传递给此函数来解决所有这些问题。所以,现在我用 3 个可选对象而不是 1 个来调用这个过程。万岁。

Edit-New Solution found 好吧,以前的解决方案给我带来了问题,所以在我找到(或有人建议)解决方法之前,我只会对需要它的报告使用一些自定义电子邮件程序。它确实重复了一些代码,但并不显着。

4

3 回答 3

1

问题可能是 NtSession 对象正在您的子程序中重新初始化。如果调用例程发送富文本项,我假设它也必须创建并初始化一个 NotesSession。如果是这种情况,您可能希望您的代码重新使用同一个会话。看起来 NtSession 是一个全球性的——如果是这样的话,你可以:

  1. 强制调用路由始终初始化该全局会话;
  2. 可选择传入 NtSession 对象作为参数(您的代码可以在创建和初始化自己的会话之前检查该对象是否为空);或者
  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

在这里查看一些代码会有所帮助。不过,我会猜测发生了什么。

在您的 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 回答
0

(我写这篇文章是为了结束我的问题)我已经解决了这个问题,只需为需要自定义设置的报告设置单独的电子邮件过程。是的,有一些重复的代码,但它比我即将制作的庞然大物要好得多。

于 2010-09-16T14:46:11.327 回答