0

I have a slickgrid screen (on regular Domino form) wherein user can select and update some documents. I needed to show a pop-up displaying status of every selected document so I created an XPage. In my XPage I am looping through selected documents array (json) and call an RPC method for every document. Code to call RPC method is in a button which is clicked on onClientLoad event of XPAGE. RPC is working fine because documents are being updated as desired. Earlier I had RPC return HTML code for row () which was being appended to HTML table. It works in Firefox but not in IE. Now I am trying to append rows using Dojo but that’s not working either.


Here is my Javascript code on button click.


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


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

Thanks in advance

Arun
  • 229
  • 3
  • 14

1 Answers1

0

I have resolved this issue. First, CSJS variables were not reliably set in callback function so I made RPC return the HTML string I wanted. Second was my mistake in CSJS. I was trying to fetch tbody from table using

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

where as it returns an array so it should have been

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

also I moved tbody above while loop. I can post entire code if anyone is interested!!

Arun
  • 229
  • 3
  • 14