Sync Assigned Users from list collector variable to Virtual PC request list collector field
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2025 06:08 AM
Hey guys!
There are two cat items: 'Virtuell dator standard' and 'Virtuell dator avancerad'. Within these two there is a connected variabel set called 'vgr_virtual_pc_request' which contains a list collector variable 'vpcreq_assigned_to', based on sys_user table. This very list collector variable enables users to add/assign multiple users (user IDs) to a virtual computer (configuration item) (see illustration below):
In the request (sc_req_item) there is a reference field called 'configuration_item' (which is a reference to table 'u_cmdb_ci_pc_hardware_virtual'. In table 'u_cmdb_ci_pc_hardware_virtual' there is a custom list collector field called 'u_vpc_assigned_to'.
The business requirement: I want my custom field 'u_vpc_assigned_to' to be filled with all the chosen users (from the variable set variable 'vpcreq_assigned_to' automatically. So I want custom 'u_vpc_assigned_to' field to be filled with the users chosen in the first illustration. Se illustration below:
So what is needed to achieve this? I tried with this Business Rule, which is not working:
(function executeRule(current, previous /*null when async*/) {
// Get the values from the variable set
var assignedTo = current.variables.vpcreq_assigned_to;
// Check if the variable has values
if (assignedTo) {
// Convert the values to an array
var assignedToArray = assignedTo.split(',');
// Update the reference field with the values
current.u_vpc_assigned_to = assignedToArray.join(',');
current.update();
}
})(current, previous);
What could be wrong?
Thanks in advance!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2025 06:45 AM
It works now that I changed to After insert/update + after I adjusted the script to the following:
(function executeRule(current, previous /*null when async*/) {
// Ensure the variable has values
if (!current.variables.vpcreq_assigned_to || current.variables.vpcreq_assigned_to.nil()) {
gs.log("Business Rule: No users assigned in 'vpcreq_assigned_to'");
return;
}
// Get the assigned users (sys_ids from list collector)
var assignedTo = current.variables.vpcreq_assigned_to.toString();
var assignedToArray = assignedTo.split(',');
// Ensure there's a configuration item linked
if (!current.configuration_item || current.configuration_item.nil()) {
gs.log("Business Rule: No configuration item linked to the request");
return;
}
// Retrieve the related virtual PC record
var vpcRecord = new GlideRecord('u_cmdb_ci_pc_hardware_virtual');
if (vpcRecord.get(current.configuration_item)) {
// Set the custom field properly
vpcRecord.setValue('u_vpc_assigned_to', assignedToArray); // Use setValue() for list fields
if (vpcRecord.update()) {
gs.log("Business Rule: Successfully updated u_vpc_assigned_to with: " + assignedToArray.join(','));
} else {
gs.log("Business Rule: Failed to update u_vpc_assigned_to.");
}
} else {
gs.log("Business Rule: Could not find the corresponding virtual PC record.");
}
})(current, previous);