- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 12:32 PM - edited ‎11-01-2023 12:52 PM
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
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 01:05 PM - edited ‎11-01-2023 01:07 PM
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);
Please mark this response as correct and helpful if it helps you can mark more that one reply as accepted solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 02:07 PM
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'.
Please mark this response as correct and helpful if it helps you can mark more that one reply as accepted solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 12:41 PM
Add a line within the while block to save the update:
cs.update();
If it's still not working, add some log lines to confirm the correct record is returned in your query.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 12:46 PM - edited ‎11-01-2023 12:48 PM
I have added this log before while loop, and it's returning "[object GlideRecord] sys_id TEST"
gs.log(cs + comp + 'TEST');
Is it correct way to get the value of the dot-walked field using current?
var comp= current.request_item.configuration_item;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 12:52 PM - edited ‎11-01-2023 12:57 PM
Inside the while block you need to determine if the correct record is present, so try something more like
gs.log(cs.name + ' TEST');
after the while statement. Is the 'name' field on your custom table a reference to cmdb_ci?
Since you're getting a sys_id in the log of comp, it must work if that's the correct sys_id, but OOTB there is no field named request_item on the task table.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-01-2023 12:57 PM
@Brad Bowman , it's not getting into the while statement.
The name field is the 'computer system name' in the 'u_cmdb_ci_computersystem' table. It is not reference field