我希望能够提示用户发表评论,然后能够在电子邮件中发送此变量评论。但是,我无法将该变量从CSJS传递给SSJS。我的文档处于读取模式。
这是一个示例按钮代码,我似乎无法通过我的评论。
有谁知道怎么做?
提前致谢:)
<xp:panel readonly="false">
<xp:inputHidden id="inputHidden1" value="#{viewScope.tester}">
</xp:inputHidden>
</xp:panel>
<xp:button value="Reject" id="button7" style="margin-right:5.0px"
save="false">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var doc:NotesDocument = currentDocument.getDocument();
doc.replaceItemValue("status", "0");
doc.save();
database.updateFTIndex(false);
var comment = viewScope.tester; /* HOW DO I GET COMMENT FROM CSJS TO HERE */
var ndoc = database.createDocument();
ndoc.appendItemValue("from", "tome@somewhere.com");
ndoc.appendItemValue("SendTo", "someone@somewhere.com);
ndoc.appendItemValue("subject", "My Subject");
var rti:NotesRichTextItem = ndoc.createRichTextItem("Body");
rti.appendText("Reason:" + comment + "\n\n");
ndoc.send()
}]]></xp:this.script>
</xp:executeScript>
<xp:openPage name="/mainpage.xsp"></xp:openPage>
</xp:actionGroup>
</xp:this.action>
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[
var comment = XSP.prompt("Please enter a comment:");
XSP.getElementById("#{id:inputHidden1}").value = comment;
/*
XSP.partialRefreshGet("#{id:computedField1}",
{
params:{"para1":"1", "para2":"2"}
});
*/
]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>
答案 0 :(得分:0)
不要将该字段绑定到您的文档(处于读取模式)。将其绑定到viewScope
或requestScope
变量。
另外,请here寻找灵感。
答案 1 :(得分:0)
XSP.prompt
将使用默认的浏览器提示窗口。您将拥有有限的功能,在我看来,并不是一个出色的用户体验。我建议您使用拒绝按钮打开带有编辑框的XPage扩展库对话框以输入注释。将编辑框绑定到requestScope
变量 - 对话框关闭后您将不需要该值,因此您需要更高的范围级别。在对话框的“确定”按钮中运行SSJS并使用Dialog组件的SSJS hide()
方法关闭对话框,如果需要部分刷新,则在页面上为组件添加参数。
答案 2 :(得分:0)
为了在过去完成此操作,我使用CSS来隐藏输入字段和按钮。客户端脚本与按钮操作分开定义。
<xp:text escape="false"><xp:this.value><![CDATA[
<script>
function promptBox(){
// ... do whatever to get the data input into
// XSP.getElementById("#{id:inputText1}").value
// OR if using JQuery $('.tester).val()
// then click hidden Save button
$('.reject').click()
// OR
XSP.getElementById("#{id:button1}").click()
}
</script>
]]></xp:this.value></xp:text>
<!-- hide the input field with CSS -->
<xp:inputText
id="inputText1"
value="#{viewScope.tester}"
defaultValue="#{viewScope.tester}"
styleClass="tester hidden">
</xp:inputText>
<!-- hide the button with CSS -->
<xp:button
value="Reject"
styleClass="reject hidden"
id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var doc:NotesDocument = currentDocument.getDocument();
doc.replaceItemValue("status", "0");
doc.save();
database.updateFTIndex(false);
var comment = viewScope.tester; /* scoped variable already set */
var ndoc = database.createDocument();
ndoc.appendItemValue("from", "tome@somewhere.com");
ndoc.appendItemValue("SendTo", "someone@somewhere.com);
ndoc.appendItemValue("subject", "My Subject");
var rti:NotesRichTextItem = ndoc.createRichTextItem("Body");
rti.appendText("Reason:" + comment + "\n\n");
ndoc.send()
}]]></xp:this.script>
</xp:executeScript>
<xp:openPage name="/mainpage.xsp"></xp:openPage>
</xp:actionGroup>
</xp:button>
<!-- use link for button - style it with CSS -->
<a href="javascript:promptBox()" class="btn btn-success">Reject</a>
我不喜欢将客户端和服务器端脚本绑定到同一个按钮,代码的执行顺序不容易管理。还有其他方法可以组合这些客户端字段和服务器端脚本,但这是一个简单的演示。