XPages:保存时请求确认,如果确认,则设置一个值

XPages:保存时请求确认,如果确认,则设置一个值,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我有一个使用xagent发布的文档(它对文档执行各种操作) 在发送给xagent之前,我想询问用户是否希望将文档的生效日期设置为今天的日期。目前,我在页面的编辑模式下没有该字段,但我想我需要它 最大的问题是,在实际保存文档并将其发送到xagent页面之前,如何请求确认(是否希望将日期设置为今天?)并将日期放入字段中。我已经在“保存”按钮中执行了一些简单的操作。代码如下: <xp:button value="Save and Publish" id="button6"> <

我有一个使用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>


我认为你可以用几种方法来做。如果您正在使用扩展库,则可以使用对话框。因此,“保存和发布”按钮将打开一个对话框,其中包含您的问题甚至其他字段。然后,您当然会在对话框中添加一个取消按钮,但也会添加一个“继续”按钮。如果您输入了任何字段或知道字段需要“今天”的日期,则该按钮将访问这些字段,然后该按钮将调用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返回值。就是这样:我在客户端使用了一个简单的确认来问我的问题!谢谢你们两位抽出时间:)