xpages - 请让我知道是否可以将 Mime 项目附加到另一个 MIME 项目,例如 AppendRTItem

标签 xpages

表单中有两个富文本字段,XPage 中有两个 CKEditor。

第一个是可编辑的,第二个是计算的。

用户在第一个条目中输入信息(文本、链接、文件和图片等),内容应转到第二个富文本字段,该字段不可编辑,如带有用户名和时间戳和内容的日志。 一旦文档被保存(保存后事件),值就会像这样从第一个字段传到第二个字段。然后我们删除第一个字段值。

我们在 lotus 脚本中使用 AppendRTItem。现在应用程序已经转换为网络;请告诉我如何做到这一点,以便可以像 AppendRTItem 一样附加两个带有 mime 部分的条目。

最佳答案

此代码在 LotusScript 中适用于我(但我不使用图片进行测试),请尝试一下。如果需要或使用“使用文档上下文运行”代理,请为 ssjs/java 重写它。

此代码使用带附件的 mime“正文”创建邮件,并附加其他 mime 元素。对不起脏代码。希望能帮到你。

Private Function CreateMessage( xDoc As NotesDocument, xFrom As String, xSendTo As Variant, xSubject As String,  xBodyHTML As String, xFilepath As String ) As NotesDocument
    On Error GoTo Except

    Dim mail As NotesDocument
    Dim body As NotesMIMEEntity, bodyChild As NotesMIMEEntity, header As NotesMIMEHeader
    Dim stream As NotesStream
    Dim link As String
    Dim convertMime As Boolean
    convertMime = CommonTools_Session.Convertmime
    CommonTools_Session.Convertmime = False

    Set mail= CommonTools_GetSystemMailBox.CreateDocument
    res.ReplaceItemValue "Form", "Memo"
    res.ReplaceItemValue "PostedDate", CDat(Now)
    res.ReplaceItemValue "From", xFrom
    res.ReplaceItemValue "Subject", xSubject    
    res.ReplaceItemValue "SendTo", xSendTo
    res.ReplaceItemValue "Recipients", xSendTo

    Set body = mail.CreateMIMEEntity("Body")
    Set header = body.CreateHeader("Content-Type")
    Call header.SetHeaderValAndParams(|multipart/mixed;  boundary="boundary-example-1"; type=text/html|)

    Set stream = CommonTools_session.CreateStream   

    If xFilepath <> "" Then
        Set bodyChild = body.Createchildentity()
        Call bodyChild.SetContentFromText( stream, "text/html; charset=windows-1251", ENC_NONE )
        Call stream.Truncate()
        If stream.Open( xFilepath ) Then
            Set bodyChild = body.Createchildentity()
            Set header = bodyChild.Createheader( "Content-Disposition" )
            Call header.Setheaderval( {attachment; filename="Meeting minutes.xls"; charset=windows-1251} )
            Call bodyChild.Setcontentfrombytes( stream, "application/vnd.ms-excel", ENC_NONE )
            Call stream.Close()
            Call stream.Truncate()
            xBodyHTML = "<br><br>" + xBodyHTML
        Else
            Error 5001, "Cannot open file"
        End If
    End If

    Dim mime As NotesMIMEEntity
    Set mime = xDoc.Getmimeentity( "MM_BodyAgenda" )
    If Not mime Is Nothing Then
        Set bodyChild = body.Createchildentity()
        Call bodyChild.Encodecontent( ENC_NONE )
        Call appendMimeToBody( mime, bodyChild )
    End If

    Call stream.WriteText( "<br><br>" + link + "<br><br>" + xBodyHTML + "<br>" + link + "<br><br>", EOL_NONE )
    Set bodyChild = body.Createchildentity()
    Call bodyChild.SetContentFromText( stream, "text/html; charset=windows-1251", ENC_NONE )

    Call mail.CloseMIMEEntities( True, "Body" )

    Set CreateMessage = mail
    CommonTools_Session.Convertmime = convertMime
End Function




Sub appendMimeToBody( xMime As NotesMIMEEntity, xBody As NotesMIMEEntity)
    Dim ct, cst, thisname, hn, hv, thishead
    ct = xMime.ContentType
    cst = xMime.ContentSubType
    Dim encoding As Integer
    encoding = xMime.Encoding
    Dim stream As NotesStream
    Dim ttCharset As String
    ttCharset = "utf-8"
    thisname = "" ' name of file if this part is an attachment

    ForAll header In xMime.HeaderObjects ' handles Subject and other headers
        hn = header.HeaderName
        If hn="Content-Type" Then
            thisname = header.GetParamVal("name") ' could be filename
        End If
        If Not (hn="Content-Type" Or hn="X-Notes-Item" ) Then ' don't pass X-Notes-Item ' 
            hv = header.GetHeaderValAndParams
            Set thishead = xBody.CreateHeader(hn)
            Call thishead.SetHeaderValAndParams(hv)
        End If
    End ForAll

    If ct="multipart" Then
        Set thishead = xBody.CreateHeader("Content-Type")
        Call thishead.SetHeaderVal(ct+"/"+cst + {; charset="} + ttCharset + {"; boundary="boundary-example-1} + "qqqqwerty" + {"} )
        xBody.Preamble = xMime.Preamble
        Dim child As NotesMIMEEntity
        Dim outchild As NotesMIMEEntity
        Set child = xMime.GetFirstChildEntity
        Do While Not child Is Nothing
            Set outchild = xBody.CreateChildEntity
            Call doPart(child, outchild)
            Set child = child.GetNextSibling
        Loop
    Else ' pass unchanged
        Set stream = CommonTools_Session.CreateStream
        Call xMime.GetContentAsBytes(stream, False)
        Dim s As String
        s = stream.ReadText()
        Dim b As Variant
        b = stream.Read()
        If Trim(thisname)="" Then
        If ct = "text" And cst = "html" Then Call stream.Writetext( "<br><br><br>" )
            Call xBody.SetContentFromBytes(stream, ct+"/"+cst+{;charset="} + ttCharset + {"}, encoding)
        Else
            Call xBody.SetContentFromBytes(stream, ct+"/"+cst+{;charset="} + ttCharset + {";name=}+thisname, encoding)
        End If
    End If
End Sub

关于xpages - 请让我知道是否可以将 Mime 项目附加到另一个 MIME 项目,例如 AppendRTItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709786/

相关文章:

junit - 想在 Domino Designer/Java Beans 中使用 JUnit - 但一直收到 "Class not found"错误?

mobile - 对于单个 XPage,xsp.client.script.libraries=none

xpages - XPage 应用程序、Notes 客户端和 Connections 之间的 SSO

jquery - 重新初始化 JQuery 有 XPage 部分刷新更新 DOM

css - 可以让我的中心对齐工作

java - 安装了最新版本的 extlib 但未激活?

html - 使用自定义 css 将 styleClass 应用于 div

html - Notes 客户端和 Web 浏览器之间的 css 功能不同

javascript - 无法设置未定义的属性 'class'

xpages - 需要通过 SSJS 在新数据库上设置 Launch 属性