need help in business rule

2022_ServiceNow
Tera Expert

Hi, I have a business rule which runs on the task table when the particular task state based on the item is changed to closed complete. There is a field in that task 'current.request_item.configuration_item' which is referenced to computer system table. So when task is closed, need to update the field in that record. This is not getting updated.

 

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

    var comp= current.request_item.configuration_item;
    var cs= new GlideRecord('u_cmdb_ci_computersystem');
    cs.addQuery('name', comp);
    cs.query();
    while (cs.next()) {
        cs.setValue('install_status', 'Return');
        cs.update();
    }
})(current, previous);

 

  @Ankur Bawiskar @Amit Gujarathi 

2 ACCEPTED SOLUTIONS

What's output of comp in the log, if its reference column then it must be sys_id of record from table [ [u_cmdb_ci_computersystem]

 

replaced the cs.addQuery('sys_id', comp);

 

 

 

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

    var comp= current.request_item.configuration_item;
    var cs= new GlideRecord('u_cmdb_ci_computersystem');
    cs.addQuery('sys_id', comp);  // if comp value is sys_id then apply the query on column sys_id instead of name 
    cs.query();
    while (cs.next()) {
        cs.setValue('install_status', 'Return');
        cs.update();
    }
})(current, previous);

 

 

 

 

 

 

 

View solution in original post

So its returning sys_id , perfect ..also going inside the while loop ( as TEST1 printed in log ).

 

are you sure that , install_status which is Integer type select box with choice values, I checked the sys_choice table for this install_status,  all values are numeric. Check the same and use the numeric value instead of 'Return'.  

 

AshishKMishra_0-1698872719551.png

 

View solution in original post

13 REPLIES 13

AshishKM
Kilo Patron

Hi @2022_ServiceNow ,

 

You are setting the "install_status" value as "Return" in while loop but not committing/updating that record. 

cs.setValue('install_status', 'Return');
cs.update();

 

@AshishKM I have updated it, still not working

What's output of comp in the log, if its reference column then it must be sys_id of record from table [ [u_cmdb_ci_computersystem]

 

replaced the cs.addQuery('sys_id', comp);

 

 

 

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

    var comp= current.request_item.configuration_item;
    var cs= new GlideRecord('u_cmdb_ci_computersystem');
    cs.addQuery('sys_id', comp);  // if comp value is sys_id then apply the query on column sys_id instead of name 
    cs.query();
    while (cs.next()) {
        cs.setValue('install_status', 'Return');
        cs.update();
    }
})(current, previous);

 

 

 

 

 

 

 

@AshishKM 

After while loops, I have added logs for cs, and it's giving me the correct system name. 

But in the logs before while loop, 

gs.log(cs + comp + 'TEST'); it's returning [object GlideRecord] sys_id TEST

gs.log(cs + comp + 'TEST'); it's returning [object GlideRecord] sys_id TEST

The above line is giving the sys_id value ?  if yes then check if this sys_id belongs a record in table [ u_cmdb_ci_computersystem] 

 

Share the screenshot of BR condition "When to run" tab and script part with log output.