【问题标题】:Please let me know if append Mime item with another mime item is possible like AppendRTItem请让我知道是否可以将 Mime 项目附加到另一个 mime 项目,如 AppendRTItem
【发布时间】:2015-02-26 20:58:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我想知道为什么这被否决了 2 次,因为这是一个好问题。
  • @Oliver:这是“First Posts”评论的结果——不了解主题的人(在这种情况下是 XPages)判断问题的质量......这是他们只是没有任何评论他们为什么这样做。 +1 弥补他们。
  • 这个问题及其答案对您有帮助吗? stackoverflow.com/q/15121385/785061
  • 感谢您的评论。我已经看过这个帖子了。我正在寻找附加功能;实际上不是这个。
  • 我可以在从 postsave 调用的 lotus 脚本代理中使用 mime。

标签: xpages


【解决方案1】:

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

此代码使用带有附件的 mime 'body' 创建邮件并附加其他 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2020-09-30
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多