Search code examples
dojocallbackxpageslotus-noteslotus-domino

XPages: how to create a dialog box with callback to the caller


I have an XPage with 2 custom controls. The 1st custom control has a repeat control and the second is used just as a dialog box.

The user can delete a row from the repeat control by clicking on a delete link. then i use rowVar.getDocument.getNoteID and i delete the document. What i want is to ask the user first: "are you sure you want to delete it?"

I used "window.confirm()" in CSJS but i dont like the default prompt box. So then i used dojo dialog box but i cant use rowVar of repeat control in it to get the documentId.

Currently i have code in the OK button of the dialog but i want to use OK/Cancel buttons only as a true/false and execute the code in the main custom control. Is there a way of passing the value of the button back to the caller?


Solution

  • I have done this in many ways. Basically, write the information you need to find the document to delete to a viewScope variable. Then create a stand alone event handler that is called from the OK or Cancel buttons of the dialog.

    So the eventHandler looks like this post by Jeremey Hodge:

    <xp:eventHandler
        event="onfubar"
        id="eventHandler1"
        submit="false">
        <xp:this.action><![CDATA[#{javascript:
    // write the ssjs to save the doc base on viewScope parameters
    }]]></xp:this.action>
    </xp:eventHandler>
    

    Then the dialog buttons look something like this (based on the Mastering XPages book and many other sources):

    XSP.partialRefreshGet("#{id:eventHandler1}", {
        params : {action :"OK" },
        onComplete : function () {
            // do something else if needed
        },
        onError : function() {
            alert("no soup for you!");
        }
    });