2017-10-04 4 views
0

Je travaille dans ServiceNow et je crée un widget qui affiche une liste de cas avec des options d'impression. Je voudrais remplir un tableau basé sur l'option Cas et impression sélectionnée, mais j'ai des problèmes pour faire passer les choses entre les scripts client et serveur. Ci-dessous mon HTML et aperçu de ce que le widget ressemble à:Communication de script ServiceNow angularjs client/serveur

<div class="btn-group" role="group"> 
    <button id="btnGroupDrop1" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 
     Printing Options <i class="fa fa-caret-down"/> 
     </button> 
     <div class="dropdown-menu" aria-labelledby="btnGroupDrop1" > 
     <li ng-repeat="print in c.docSetPrint"> 
      <a class="dropdown-item" href="#">{{print.document_set_name}}</a> 
     </li> 
     </div> 
    </div> 

<table id="print_table" class="table table-striped table-hover table-responsive"> 
    <thead> 
     <tr> 
     <th><input type="checkbox" id="selectAll"/></th> 
      <th>${Case Number}</th> 
      <th>${Short Description}</th> 
      <th>${Start Date}</th> 
      <th>${Work Location}</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr ng-repeat="item in c.ONCase track by $index"> 
     <td><input type="checkbox" id="{{item.number}}"/></td> 
      <td>{{item.number}}</td> 
      <td>{{item.short_description}}</td> 
      <td>{{item.start_date}}</td> 
      <td>{{item.location}}</td>    
     </tr> 
     </tbody> 
    </table> 

enter image description here

Dans le tableau ci-dessus, je voudrais faire une boucle à travers chaque entrée et si elle a été sélectionnée ou cochée, retourne alors une tableau de tous les numéros de cas sélectionnés. Dans mon script client, j'ai quelque chose comme ça jusqu'à présent:

c.printDocs = function(){ 
    var arr = []; 

    for(i=0; i<c.data.ONCase.length; i++){ 
     if(document.getElementById(c.data.ONCase[i].number).checked == true){ 
      arr.push({ 
       case_num: c.dataONCase.number <--?? 
      }); 
     } 
    } 
    c.server.get({ 
     action: 'print_docs', 
     cases: arr 
    })then(function(response) { 
     // do stuff after 
    }); 
}; 

Je suis assez confus sur la façon dont le script entre les scripts client et serveur. Une fois que j'obtiens le tableau des numéros de cas, comment puis-je transmettre cela au serveur?

Répondre

0

Sur le script client, vous pouvez mettre vos données à envoyer au script du serveur à c.data. Ensuite, sur le script du serveur, il est disponible dans l'objet input.

Script client

function() { 
    var c = this; 

    c.myFunction = function() { 
     // populate the c.data object 
     c.data.cases= ['CASENUM01','CASENUM02','CASENUMO3']; 

     // send the c.data object to the server 
     c.server.update().then(function() { 
      // do cleanup if needed 
      c.data.cases = []; 
     }); 
    } 
} 

serveur Script

(function() { 

    // input here contains c.data from client script 
    if (input && input.cases) { 
     for (var i = 0; i < input.cases.length; i++) { 
      // write to system log 
      gs.info(input.cases[i]); 
     } 
    } 
}); 

Un bon tutoriel à ce sujet est à https://serviceportal.io/communicating-between-the-client-script-and-the-server-script-of-a-widget/