XPages:保存时询问确认,如果确认则设置一个值
XPages: ask a confirmation when saving and set a value if confirmed
我有一个使用 xagent 发布的文档(对文档执行各种操作)。
在发送到xagent之前,我想问一下用户是否要将文档的生效日期设置为今天的日期。目前,我在页面的编辑模式下没有可用的字段,但我想我会需要它。
最大的问题是如何在实际保存文档并将其发送到 xagent 页面之前询问确认(您希望将日期设置为今天吗?)并将日期放入字段中。我已经对那个保存按钮进行了一些简单的操作。这是代码:
<xp:button value="Save and Publish" id="button6">
<xp:this.rendered><![CDATA[#{javascript:database.queryAccessRoles(session.getEffectiveUserName()).contains('[Admin]') && currentDocument.isEditable()}]]></xp:this.rendered>
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:modifyField name="Status" var="pageDocument">
<xp:this.value><![CDATA[#{javascript:if(getComponent("publishLater1").getValue() == "1") {
return "Scheduled Publication";
} else {
return "To Be Published";
}}]]></xp:this.value>
</xp:modifyField>
<xp:saveDocument var="pageDocument">
</xp:saveDocument>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript: //remove the lock doc
//unlockDoc(pageDocument.getDocument().getUniversalID());
//for scheduled publications, a LotusScript agent will do the work
var res=facesContext.getExternalContext().getResponse();
if(getComponent("publishLater1").getValue() == "0") {
// Now load the publish Agent
res.sendRedirect(@Left(facesContext.getExternalContext().getRequestContextPath(),".nsf")+".nsf/xPublish?OpenAgent&docid=" + pageDocument.getDocument().getUniversalID());
} else {
//send to the drafts view, to show it has the clock icon in the draft view
res.sendRedirect(@Left(facesContext.getExternalContext().getRequestContextPath(),".nsf")+".nsf/adminDrafts.xsp");
} }]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
<i class="fa fa-newspaper-o pull-left fa-2x">
</i>
</xp:button>
我认为您可以通过多种方式进行。如果您使用的是扩展库,则可以使用对话框。所以您的保存和发布按钮会打开一个对话框,其中包含您的问题甚至其他字段。然后,您当然要向对话框添加一个取消按钮,还要添加一个 "continue" 按钮。如果您输入任何内容或知道他们想要 "today's" 日期,该按钮将访问这些字段,然后该按钮调用传递任何适当参数的 xagent。
推测 pageDocument
是一个 dominoDocument 数据源。 dominoDocument 数据源要么全部只读,要么全部可编辑。 SSJS 可以访问该数据源。因此,添加另一个 executeScript
操作,您也可以修改您想要的任何其他字段。
不过,我的建议是跳过简单的操作并在脚本中完成所有操作。 SSJS 编辑器允许您查看可用于 dominoDocument 数据源的所有方法。对 LotusScript 有一点了解或稍作调查,使用哪种方法替换 "Modify Field" 简单操作的项目值应该很明显(快速提示,再次转到数据源而不是 publishLater1
组件)以及保存文档的方法。如果您开始摆脱简单的操作并建立对 SSJS 的信心,它将在长期 运行.
中为您提供更大的灵活性。
我有一个使用 xagent 发布的文档(对文档执行各种操作)。
在发送到xagent之前,我想问一下用户是否要将文档的生效日期设置为今天的日期。目前,我在页面的编辑模式下没有可用的字段,但我想我会需要它。
最大的问题是如何在实际保存文档并将其发送到 xagent 页面之前询问确认(您希望将日期设置为今天吗?)并将日期放入字段中。我已经对那个保存按钮进行了一些简单的操作。这是代码:
<xp:button value="Save and Publish" id="button6">
<xp:this.rendered><![CDATA[#{javascript:database.queryAccessRoles(session.getEffectiveUserName()).contains('[Admin]') && currentDocument.isEditable()}]]></xp:this.rendered>
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:modifyField name="Status" var="pageDocument">
<xp:this.value><![CDATA[#{javascript:if(getComponent("publishLater1").getValue() == "1") {
return "Scheduled Publication";
} else {
return "To Be Published";
}}]]></xp:this.value>
</xp:modifyField>
<xp:saveDocument var="pageDocument">
</xp:saveDocument>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript: //remove the lock doc
//unlockDoc(pageDocument.getDocument().getUniversalID());
//for scheduled publications, a LotusScript agent will do the work
var res=facesContext.getExternalContext().getResponse();
if(getComponent("publishLater1").getValue() == "0") {
// Now load the publish Agent
res.sendRedirect(@Left(facesContext.getExternalContext().getRequestContextPath(),".nsf")+".nsf/xPublish?OpenAgent&docid=" + pageDocument.getDocument().getUniversalID());
} else {
//send to the drafts view, to show it has the clock icon in the draft view
res.sendRedirect(@Left(facesContext.getExternalContext().getRequestContextPath(),".nsf")+".nsf/adminDrafts.xsp");
} }]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
<i class="fa fa-newspaper-o pull-left fa-2x">
</i>
</xp:button>
我认为您可以通过多种方式进行。如果您使用的是扩展库,则可以使用对话框。所以您的保存和发布按钮会打开一个对话框,其中包含您的问题甚至其他字段。然后,您当然要向对话框添加一个取消按钮,还要添加一个 "continue" 按钮。如果您输入任何内容或知道他们想要 "today's" 日期,该按钮将访问这些字段,然后该按钮调用传递任何适当参数的 xagent。
推测 pageDocument
是一个 dominoDocument 数据源。 dominoDocument 数据源要么全部只读,要么全部可编辑。 SSJS 可以访问该数据源。因此,添加另一个 executeScript
操作,您也可以修改您想要的任何其他字段。
不过,我的建议是跳过简单的操作并在脚本中完成所有操作。 SSJS 编辑器允许您查看可用于 dominoDocument 数据源的所有方法。对 LotusScript 有一点了解或稍作调查,使用哪种方法替换 "Modify Field" 简单操作的项目值应该很明显(快速提示,再次转到数据源而不是 publishLater1
组件)以及保存文档的方法。如果您开始摆脱简单的操作并建立对 SSJS 的信心,它将在长期 运行.