@邮件发送入xpages按钮

@邮件发送入xpages按钮,xpages,lotus-notes,Xpages,Lotus Notes,在客户端Notes编程中,有一个操作按钮: @MailSend(Destinatari;"";"";"Subject";"";"";IncludeDoclink])& @Command([FileSave])&@Command([FileCloseWindow]) 我想在我的xpage应用程序中做一个类似的操作,它可以在XPiNC和web中工作 我的sendto字段是一个可以有多个值的DjTextarea 我试图从xpage:操作:发送邮件为我的按钮创建一个简单操作。这样,我可

在客户端Notes编程中,有一个操作按钮:

@MailSend(Destinatari;"";"";"Subject";"";"";IncludeDoclink])&
@Command([FileSave])&@Command([FileCloseWindow])
我想在我的xpage应用程序中做一个类似的操作,它可以在XPiNC和web中工作

我的
sendto
字段是一个可以有多个值的
DjTextarea

我试图从xpage:
操作:发送邮件
为我的按钮创建一个
简单操作
。这样,我可以将
IncludeDoclink
从Lotus Notes>嵌入邮件正文中吗?或者我需要为此操作编写javascript

谢谢你的时间

更新:根据@Lothar的建议,我的
Save&Send
按钮有以下代码行:

if(frmDoc.isNewNote()){
    frmDoc.save();
}
var thisdoc = frmDoc.getDocument();
var tempdoc = database.createDocument();
tempdoc.replaceItemValue("Form", "Memo");
tempdoc.replaceItemValue("SendTo", thisdoc.getItemValue("txt_names"));
tempdoc.replaceItemValue("Subject", "subject");
var tempbody:NotesRichtextItem = tempdoc.createRichTextItem("Body");
tempbody.appendText("This is my Mail, click on the doc link below to open the original doc:")
tempbody.addNewLine(2);
tempbody.appendDocLink(thisdoc);
tempdoc.send();
thisdoc.recycle();
tempbody.recycle();
tempdoc.recycle();

其中,
frmDoc
是我的文档数据源。我在
appendDocLink
行得到一个错误,如:
NotesRichTextItem.appendDocLink(lotus.domino.local.Document)null
我在@Fredrik有用的建议中也注意到了同样的错误。

我在Xpage中发送电子邮件时使用了可以在xSnippets中找到的HTML电子邮件功能

它们都不是用于附加doclink的函数,但您可以手动向文档添加url

另一种方法是通过创建数据库文档来手动创建电子邮件 添加名为body的richtextfield、subject和sendto字段。 并将doclink添加到Body字段

var doc:NotesDocument = database.createDocument();
var My_DocLink_Doc:NotesDocument=database.getDocumentByUNID("UNID_of_Document")
doc.replaceItemValue("form", "Memo");
doc.replaceItemValue("sendTo", "the_emailadress");
doc.replaceItemValue("subject", "an email to you");
var RT:NotesRichTextItem=doc.createRichTextItem("Body")
RT.appendText("This is my Text")
RT.addNewLine()
RT.appendDocLink(My_DocLink_Doc)
doc.send();

弗雷德里克的回答没有什么可补充的,但我担心你可能看错了他的解决方案。我只是自己测试了一下,效果很好,下面是结果,一步一步:

我的xpage使用名为mailDoc的文档数据源绑定到名为testMail的Notes表单。它是这样建造的:
控件#1是一个文本区域,将多个分隔符设置为逗号,以便我可以输入多个由逗号分隔的邮件地址。文本区域绑定到名为“发送到”的Notes字段:

<xp:inputTextarea
    value="#{mailDoc.SendTo}"
    id="sendTo1"
    multipleSeparator=",">
</xp:inputTextarea>
结果:按钮代码向我以前在SendTo字段中输入的所有收件人发送一封包含Notes文档链接的邮件

如果我将testMail表单的属性设置为在Notes中使用Xpage(默认值为>>打开>>显示Xpage,而不是>>邮件发送测试),那么这也适用于XPinc版本。如果接收者点击doc链接,那么原始文档当然也会以XPinc模式打开

备注:

我需要保存原始文档至少一次,否则附加的文档链接可能对收件人不可用;这可能是弗雷德里克的回答不适合你的原因吗

希望这有帮助。如果这对你有用,请接受弗雷德里克的回答

更新:


在我的代码示例中更改了一些变量名以澄清问题

我只使用以下两行:

变量url= @左侧(facesContext.getExternalContext().getRequest().getRequestURL(),“newDocument.xsp”)+“newDocument.xsp?documentId=“+document1.getDocument().getUniversalID()+”&action=openDocument”; rtitem.appendText(url)


其中newDocument.xsp是文档的表单xsp,rtitem是邮件的富文本字段。这会将整个链接添加到您的文档中。

谢谢。My_DocLink_Doc应该包含文档的UNID吗?我发现此参数有一个错误。它应该包含一个NotesDocument或NotesDatabase。NotesDocument表示当前文档是一个XPage,保存后,它将在url链接上显示UNID?作为XPiNC和浏览器应用程序,我应该使用url链接吗?您需要两个链接,一个用于web,一个用于XPiNC。正如Fredrik指出的,
My_DocLink_Doc
应该是文档句柄,而不是UNID。换句话说,
document1.getDocument()
,而不是
document1.getDocument().getUniversalID()
。谢谢!是否可以只使用一个数据源/表单来限制xpage?我得到以下错误:frmDoc(我的数据源)未定义?在不知道完整上下文的情况下,无法回答此问题。在上面的示例中,我只使用了一个名为maildoc的文档数据源。不幸的是,我在我的按钮代码中为不同的对象使用了相同的变量名,也许这是在暗示你;我会相应地修改我的示例代码,希望这个帮助我提出了一个新问题-我尝试了你的步骤,出现了一个新问题(现有文档的编辑模式/读取模式)。因此我提出了一个新问题。目前我也在使用一个表单/唯一的数据源。(我认为必须为邮件表单使用新表单。我修改了代码,现在得到:调用方法NotesRichTextItem.appendDocLink(lotus.domino.local.Document)时发生异常)空-在appendDoclink行。-我在Fredrik建议中也注意到了相同的错误。请发布发送按钮的完整代码;只需将其放入原始问题中,标记为更新;否则无法提供帮助you@Lothar的代码确实适用于我-它创建了一封带有frmDoc有效链接的电子邮件ar thisdoc=frmDoc.getDocument(true);虽然:参数
true
返回带有新值的文档。这与文档是否为新文档并在代码开头保存无关,但对现有文档很重要。没有
true
此文档仍保留旧值。但我认为这与您的appendDocLink问题无关。@KnutHerrmann:这是现在我可以开始工作了。祝我快乐!顺便说一句:在使用send方法之后,我如何关闭文档?是否有机会在浏览器中发送用于打开文档的URL链接?(当前,它在XPiNC中打开)@KnutHerrmann我使用tempbody.appendText(context.getUrl().toString())对于URL-丑陋的部分是它在NC的web浏览器中打开,而不是在应用程序运行的浏览器中打开,例如:Chrome。我只需要了解保存后如何关闭当前文档。它应该取决于当前用户的“位置”设置。
<xp:inputText
    value="#{mailDoc.Subject}"
    id="subject1">
</xp:inputText>
if(mailDoc.isNewNote()){
    mailDoc.save();
}
var thisdoc = mailDoc.getDocument();
var tempdoc = database.createDocument();
tempdoc.replaceItemValue("Form", "Memo");
tempdoc.replaceItemValue("SendTo", thisdoc.getItemValue("SendTo"));
tempdoc.replaceItemValue("Subject", thisdoc.getItemValue("Subject"));
var tempbody:NotesRichtextItem = tempdoc.createRichTextItem("Body");
tempbody.appendText("This is my Mail, click on the doc link below to open the original doc:")
tempbody.addNewLine(2);
tempbody.appendDocLink(thisdoc);
tempdoc.send();
thisdoc.recycle();
tempbody.recycle();
tempdoc.recycle();