ServiceNow,如何将值填充到列表变量

ServiceNow, How to populate value to a list variable

我正在使用 ServiceNow 开发实例创建一个 table,其中一个字段是列表类型。列表的值由 Outgoing Rest 消息填充。

在业务规则中,我做了一个硬编码,看看列表值应该是什么样的形式。代码列表为 below/1/: 但当我更新现场计算机室时,计算机列表的值未填充。它看起来像在 image/2/.如何将值填充到列表类型的字段?

/3/ 是以漂亮格式返回的 json 字符串。我尝试将主机名填充到计算机列表,但失败了。

/1/ 业务规则中的脚本:

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

/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/业务规则脚本更新为:

(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);

答案如下:

(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;
}

})(当前,上一个);