XPages:保存时请求确认,如果确认,则设置一个值
我有一个使用xagent发布的文档(它对文档执行各种操作) 在发送给xagent之前,我想询问用户是否希望将文档的生效日期设置为今天的日期。目前,我在页面的编辑模式下没有该字段,但我想我需要它 最大的问题是,在实际保存文档并将其发送到xagent页面之前,如何请求确认(是否希望将日期设置为今天?)并将日期放入字段中。我已经在“保存”按钮中执行了一些简单的操作。代码如下:XPages:保存时请求确认,如果确认,则设置一个值,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我有一个使用xagent发布的文档(它对文档执行各种操作) 在发送给xagent之前,我想询问用户是否希望将文档的生效日期设置为今天的日期。目前,我在页面的编辑模式下没有该字段,但我想我需要它 最大的问题是,在实际保存文档并将其发送到xagent页面之前,如何请求确认(是否希望将日期设置为今天?)并将日期放入字段中。我已经在“保存”按钮中执行了一些简单的操作。代码如下: <xp:button value="Save and Publish" id="button6"> <
<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>
我认为你可以用几种方法来做。如果您正在使用扩展库,则可以使用对话框。因此,“保存和发布”按钮将打开一个对话框,其中包含您的问题甚至其他字段。然后,您当然会在对话框中添加一个取消按钮,但也会添加一个“继续”按钮。如果您输入了任何字段或知道字段需要“今天”的日期,则该按钮将访问这些字段,然后该按钮将调用xagent传递任何适当的参数。推测pageDocument
是dominoDocument数据源。dominoDocument数据源要么全部为只读,要么全部为可编辑。SSJS可以访问该数据源。因此,添加另一个executeScript
操作,您也可以修改任何其他您想要修改的字段
不过,我建议您跳过简单的操作,用脚本完成所有操作。SSJS编辑器允许您查看dominoDocument数据源可用的所有方法。通过对LotusScript的一点了解或一点调查,应该可以清楚地知道使用哪种方法替换“修改字段”简单操作的项值(快速提示,再次转到数据源而不是
publishLater1
组件)以及保存文档的方法。如果您开始摆脱简单的操作并建立对SSJS的信心,那么从长远来看,这将给您带来更大的灵活性。谢谢Paul,但是如果我改为SSJS,在执行保存和重定向之前,如何获得用户的输入?这就是我被卡住的地方。。。我可以使用SSJS代码而不是简单的操作。我看过一些关于这个主题的帖子,但是客户端代码是在SSJS代码运行后在完成时触发的,所以它对我想要做的事情并不起作用。。。我可以在ExecuteScript标记中添加客户端代码吗???任何事件处理程序都可以在SSJS之前运行CSJS,只需使用client选项卡。如果CSJS代码返回true,则刷新发生并运行SSJS;如果不是,则不会触发刷新。(如果您意识到这一点,请道歉!)这是否涵盖了您需要的内容?请记住,CSJS中任何计算的SSJS都是计算出来的,并且输出会传递到浏览器,因此,例如,您不能使用SSJS获取另一个组件的新修改值。您需要获取组件的客户端ID并使用CSJS检索其值。我不知道客户端Js在SSJS之前运行,并且SSJS代码的运行取决于客户端的Js返回值。就是这样:我在客户端使用了一个简单的确认来问我的问题!谢谢你们两位抽出时间:)