2014-09-02 4 views
0

사용자가 일부 문서를 선택하고 업데이트 할 수있는 slickgrid 화면 (일반 Domino 양식)이 있습니다. 모든 선택된 문서의 팝업 상태를 표시하여 XPage를 만들었습니다. 내 XPage에서 선택한 문서 배열 (json)을 반복하고 모든 문서에 대해 RPC 메서드를 호출합니다. RPC 메소드를 호출하는 코드는 XPAGE의 onClientLoad 이벤트를 클릭하는 버튼에 있습니다. 문서가 원하는대로 업데이트되므로 RPC가 정상적으로 작동합니다. 이전에 RPC는 HTML 테이블에 추가 된 row()에 대한 HTML 코드를 반환했습니다. Firefox에서는 작동하지만 IE에서는 작동하지 않습니다. 이제 Dojo를 사용하여 행을 추가하려고 시도하지만 작동하지 않습니다.xpages JSON-RPC 콜백 함수의 응답 처리 서비스


여기는 버튼 클릭시 자바 스크립트 코드입니다. 사전에


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> 

감사

답변

0

이 문제가 해결되었습니다. 첫째, CSJS 변수가 콜백 함수에 안정적으로 설정되지 않아 RPC에서 원하는 HTML 문자열을 반환하도록했습니다. 두 번째는 CSJS에서 저의 실수였습니다. 또한 I는 while 루프 상기 TBODY 이동이

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

를 했어야 그래서 배열을 반환로

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

을 이용하여 테이블에서 TBODY 페치하려고 하였다. 누구나 관심이 있다면 전체 코드를 게시 할 수 있습니다!