2014-09-02 4 views
0

У меня есть экран slickgrid (в обычной форме Domino), в котором пользователь может выбирать и обновлять некоторые документы. Мне нужно было показать всплывающее отображение статуса каждого выбранного документа, чтобы я создал XPage. В моем XPage я перебираю выделенный массив документов (json) и вызываю метод RPC для каждого документа. Код для вызова метода RPC находится в кнопке, на которую нажимается событие onClientLoad XPAGE. RPC работает нормально, потому что документы обновляются по мере необходимости. Раньше у меня был RPC-код возврата HTML для строки(), который добавлялся к таблице HTML. Он работает в Firefox, но не в IE. Теперь я пытаюсь добавить строки с помощью Dojo, но это тоже не работает.xpages JSON-RPC Ответ на обработку обслуживания от callback funciton


Вот мой код 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 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> 

Заранее спасибо

ответ

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 выше во время цикла. Я могу опубликовать весь код, если кому-то интересно!

 Смежные вопросы

  • Нет связанных вопросов^_^