Ben Dubuc
Ben Dubuc

Reputation: 523

XPages: ask a confirmation when saving and set a value if confirmed

I have a document that gets published using an xagent (that does all sorts of things to the document).

Before sending to the xagent, I would like to ask the user if he wants the effective date of the document to be set to today's date. For now, I don't have that field available in edit mode on the page, but I guess I'll need it.

The big question is how to ask a confirmation (do you want the date to be set to today?) and put the date in the field before actually saving the document and sending it to the xagent page. I already have some simple actions into that save button. Here is the code:

<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>

Upvotes: 1

Views: 319

Answers (2)

Paul Stephen Withers
Paul Stephen Withers

Reputation: 15729

Presumably pageDocument is a dominoDocument datasource. A dominoDocument datasource is either all read only or all editable. And SSJS has access to that datasource. So add another executeScript action and you can modify whichever other field you want to as well.

What I'd recommend, though, is to skip the simple actions and do everything in script. The SSJS editor allows you to see all the methods available for a dominoDocument datasource. With a little knowledge of LotusScript or a little investigation, it should be obvious which method to use to replace an item value for the "Modify Field" simple action (quick tip, again go to the datasource rather than the publishLater1 component) and which method to save the document. If you start breaking away from simple actions and building your confidence in SSJS, it will give you greater flexibility in the long run.

Upvotes: 1

David Leedy
David Leedy

Reputation: 3593

You could do it several ways I'd think. If you're using the extension library you could use a dialogBox. so your save and publish button opens a dialog box with your question or even additional fields. Then you add a cancel button of course to the dialog box but also a "continue" button. That button accesses the fields if you put any in or knows that they want "today's" date and then that button calls the xagent passing in any appropriate parameters.

Upvotes: 2

Related Questions