Search code examples
servicenow

ServiceNow, How to populate value to a list variable


I am using ServiceNow develop instance to create a table, in which one field is type of list. The values of the list is populated by Outgoing Rest message.

In business rule, I make a hard coded to see how list values shall be what kind of form. The codes lists as below/1/: but when I update the field computer room, the computerlist's value is not populated. It looks like in the image/2/. How to populate values to a list type of field?

/3/ is the json string returned in pretty format. I try to populate hostName to computerlist, but failed.

/1/ scripts in business rule:

(function executeRule(current, previous /*null when async*/ ) {

    try {
        var r = new sn_ws.RESTMessageV2('x_383581_aiademo2.AIACmdbReq', 'Default GET');

        var response = r.execute();
        var responseBody = response.getBody();
        var httpStatus = response.getStatusCode();

//      var responseObj = JSON.parse(responseBody);     
        current.computerlist = new Array;
        current.computerlist[0] = "c1";
        current.computerlist[1] = "c2";
        current.computerlist[2] = "c3";

        current.assignto = "How to make it as list";
        current.update();

    } catch (ex) {
        var message = ex.message;
    }

})(current, previous);

/2/enter image description here

/3/

{
  "code": 200,
  "data": {
    "dataList": [
      {
        "hostName": "MysqlServer",
        "deviceIp": "192.168.1.40",
        "site": "SH",
        "hostId": "00000000",
        "location": "Room01",
        "id": 9381947
      },
      {
        "hostName": "192.168.1.32",
        "deviceIp": "192.168.1.32",
        "site": "SH",
        "hostId": "a8c02001",
        "location": "66666",
        "id": 9381950
      },
      {
        "hostName": "back-server",
        "deviceIp": "192.168.1.42",
        "site": "SH",
        "hostId": "00000000",
        "location": "Room01",
        "id": 9381996
      },
      {
        "hostName": "192.168.1.32",
        "deviceIp": "192.168.1.32",
        "site": "SH",
        "hostId": "00-0C-29-E0-31-32",
        "location": "Room01",
        "id": 9382011
      },
      {
        "hostName": "core-server1",
        "deviceIp": "192.168.1.30",
        "site": "SH",
        "hostId": "00000000",
        "location": "Room01",
        "id": 9382014
      }
    ]
  },
  "msg": "success"
}

/4/ business rule script is updated to:

(function executeRule(current, previous /*null when async*/ ) {

    try {
        var r = new sn_ws.RESTMessageV2('x_383581_aiademo2.AIACmdbReq', 'Default GET');

        var response = r.execute();
        var responseBody = response.getBody();
        var httpStatus = response.getStatusCode();

        var responseObj = JSON.parse(responseBody);     
        current.computerlist = responseObj.data.dataList.hostName;
        current.assignto = responseObj.code;
        current.update();

    } catch (ex) {
        var message = ex.message;
    }

})(current, previous);

Solution

  • The answer is as follows:

    (function executeRule(current, previous /*null when async*/ ) {
    
    try {
        var r = new sn_ws.RESTMessageV2('x_383581_aiademo2.AIACmdbReq', 'Default GET');
    
        var response = r.execute();
        var responseBody = response.getBody();
        var httpStatus = response.getStatusCode();
    
        var responseObj = JSON.parse(responseBody);
    
        var listLength = responseObj.data.dataList.length;
    
    
        current.responsetest = responseObj.data.dataList[0].hostName; 
        var temp = new Array(listLength);
        for(var j = 0; j<listLength; j++){
            temp[j] = responseObj.data.dataList[j].hostName; 
        }
        current.computerlist.setValue(temp);
    
        current.assignto = temp[0];
        current.vers = "0.0.1a";
        current.description = responseObj.msg;
    
        current.update();
    
        ////////////////////////good way///////////////////////////////
        ///////////current.computerlist.setValue(["1","2","3","4","5"]);
        ///////////////////////////////////////////////////////////////
    
    } catch (ex) {
        var message = ex.message;
    }
    

    })(current, previous);