Search code examples
xpageskendo-ui-grid

Error setting sessionScope variable in KendoUI grid to open document


My app uses KendoUI Grids for user views, but Xpages with custom controls for form pages (at least for now).

The Xpage looks for a sessionScope variable to determine if it is a new doc (nothing in the scope Var) or and update (unid is in the var).

<xp:this.data>
        <xe:objectData
            saveObject="#{javascript:PCModel.save()}"
            var="PCModel">
            <xe:this.createObject><![CDATA[#{javascript:var pc = new com.scoular.model.PC();
var unid = sessionScope.get("key");

if (unid != null) {
    pc.loadByUnid(unid);
    sessionScope.put("key","");
    viewScope.put("readOnly","Yes");
} else {
    pc.create();
    viewScope.put("readOnly","No");
}
viewScope.status = pc.status;
return pc;}]]></xe:this.createObject>
        </xe:objectData>
    </xp:this.data>

This worked for a completely Xpage app. I just put a value in the sessionScope key and called the Xpage.

In the Kendo UI code I am using client-side javascript and I don't see a way to set the sessionScope.

I can control the URL, so I could switch gears and use that, however the data for my app is in a different DB than my code.

Any help would be greatly appreciated.


Solution

  • The easiest way is indeed using the URL:
    call the XPage with a parameter ?key=... and change your CSJS code line to

    var unid = param.key;
    

    In case you really need to set a sessionScope variable from client side
    then add this empty computed text field

    <xp:text
        escape="true"
        id="setSessionScope"
        value="#{javascript: if (param.key) {sessionScope.key = param.key} ''}" />
    

    to your XPage and set the sessionScope variable in CSJS code with

    XSP.partialRefreshGet("#{id:setSessionScope}", {params: {'key': 'your key'}})