xpages JSON-RPC服务处理来自回调函数的响应

时间:2014-09-02 15:10:47

标签: javascript dojo xpages slickgrid json-rpc

我有一个slickgrid屏幕(在常规Domino表单上),其中用户可以选择和更新某些文档。我需要显示每个所选文档的弹出窗口显示状态,因此我创建了一个XPage。在我的XPage中,我循环选择文档数组(json)并为每个文档调用RPC方法。调用RPC方法的代码位于一个按钮中,该按钮单击XPAGE的onClientLoad事件。 RPC工作正常,因为文档正在根据需要进行更新。早些时候我有row()的RPC返回HTML代码,它被附加到HTML表格。它适用于Firefox但不适用于IE。现在我尝试使用Dojo追加行,但这也不起作用。


这是我点击按钮时的Javascript代码。


var reassign = window.opener.document.getElementById("ResUsera").innerHTML;
var arr = new Array();
var grid = window.opener.gGrid;
var selRows = grid.getSelectedRows();
for (k=0;k<selRows.length;k++)
{
    arr.push(grid.getDataItem(selRows[k]));
}
var tab = dojo.byId("view:_id1:resTable");
while (arr.length > 0)
{   
    var fldList = new Array();
    var ukey;
    var db;
    var reqStatusArr = new Array();
    var docType;
    var docno;

    ukey = arr[0].ukey;
    db = arr[0].docdb;
    docType = arr[0].doctypeonly;
    docno = arr[0].docnum;
    fldList.push(arr[0].fldIndex);
    reqStatusArr.push(arr[0].reqstatusonly);

    arr.splice(0,1)
    for (i=0;i < arr.length && arr.length>0;i++)
    {
        if ((ukey == arr[i].ukey) && (db == arr[i].docdb))
        {
            fldList.push(arr[i].fldIndex);
            reqStatusArr.push(arr[i].reqstatusonly);
            arr.splice(i,1);
            i--;
        }
    }
    console.log(ukey+" - "+db+" - "+docno+" - "+docType);   
    var rmcall = faUpdate.updateAssignments(db,ukey,fldList,reassign); 
    rmcall.addCallback(function(response)
    {
        require(["dojo/html","dojo/dom","dojo/domReady!"],function(html,dom)
        {
                var tbdy = dom.byId("view:_id1:resTable").getElementsByTagName("tbody"); 
                html.set(tbdy, 
                tbdy.innerHTML+"<tr>"+
                 "<td>"+docType+"</td>"+
                 "<td>"+docno+"</td>"+
                 "<td>"+reqStatusArr.join("</br>")+"</td>"+
                 "<td>"+response+"</td></tr>"
                 );

        });
    });
}
dojo.byId("view:_id1:resTable").style.display="inline";
dojo.byId("idLoad").style.display="none";

RPC服务代码


 <xe:jsonRpcService
                id="jsonRpcService2"
                serviceName="faUpdate">
                <xe:this.methods>
                    <xe:remoteMethod name="updateAssignments">
                        <xe:this.arguments>
                            <xe:remoteMethodArg
                                name="dbPth"
                                type="string">
                            </xe:remoteMethodArg>
                            <xe:remoteMethodArg
                                name="uniquekey"
                                type="string">
                            </xe:remoteMethodArg>
                            <xe:remoteMethodArg
                                name="fieldList"
                                type="list">
                            </xe:remoteMethodArg>
                            <xe:remoteMethodArg
                                name="reassignee"
                                type="string">
                            </xe:remoteMethodArg>
                        </xe:this.arguments>
                        <xe:this.script><![CDATA[print ("starting update assignments from future assignments page");
    var db:NotesDatabase = null;
    var vw:NotesView = null;
    var doc:NotesDocument = null;

    try{
        db=session.getDatabase("",dbPth);
        if (null!= db){
            print(db.getFileName());
            vw = db.getView("DocUniqueKey");
            if (null!=vw){
                print ("got the view");
                doc = vw.getDocumentByKey(uniquekey);
                if (null!=doc)
                {
                    //check if the document is not locked
                    if (doc.getItemValueString("DocLockUser")=="")
                    {
                        print ("Got the document");

                        for (i=0;i<fieldList.length;i++)
                        {
                            print (fieldList[i]);
                            doc.replaceItemValue(fieldList[i],reassignee);
                        }
                        doc.save(true);
                        return "SUCCESS";
                    }
                    else
                    {
                        return "FAIL - document locked by "+session.createName(doc.getItemValueString("DocLockUser")).getCommon();
                    }
                }
                else
                {
                    return "FAIL - Contact IT Deptt - Code: 0";
                }
            }
            else
            {
                return "FAIL - Contact IT Deptt - Code: 1";
            }
        }
        else
        {
            return "FAIL - Contact IT Deptt - Code: 2";
        }

    }
    catch(e){
        print ("Exception occured --> "+ e.toString());
        return "FAIL - Contact IT Deptt - Code: 3";
    }
    finally{
        if (null!=doc){
            doc.recycle();
            vw.recycle();
            db.recycle();
        }
    }]]></xe:this.script>
                    </xe:remoteMethod>
                </xe:this.methods>
    </xe:jsonRpcService>

提前致谢

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。首先,CSJS变量在回调函数中没有可靠设置,所以我让RPC返回我想要的HTML字符串。第二个是我在CSJS中的错误。我试图使用

从表中获取tbody
var tbdy = dom.byId("view:_id1:resTable").getElementsByTagName("tbody"); 

返回一个数组,因为它应该是

var tbdy = dom.byId("view:_id1:resTable").getElementsByTagName**("tbody")[0]**; 

我也在循环中移动了tbody。如果有人有兴趣,我可以发布完整的代码!!