- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 10:00 AM - edited 11-06-2024 10:04 AM
Hello, I'm trying to automate the creation of a certain UI policy every time a certain variable set is added to a catalog item. It works, but the only issues I have been having is getting the conditions to add properly.
Here is my business rule: CreateNewRole Varset UI Policy to Parent
Table: Catalog Variable Set [io_set_item]
Advanced: True
When to apply: After Insert or Update
(function executeRule(current, previous /*null when async*/) {
// Step 1: Check if the variable_set in the inserted record matches the specified sys_id
if (current.variable_set == 'c7f2ce6d336d1e101bc9a7273e5c7b68') {
// Retrieve the catalog item sys_id from the inserted io_set_item record
var catalogItemId = current.sc_cat_item.sys_id.toString();
// Step 2: Check if the catalog item has the additional variable set
var hasAdditionalVarSet = false;
var grCatItem = new GlideRecord('io_set_item');
grCatItem.addQuery('sc_cat_item', catalogItemId);
grCatItem.addQuery('variable_set', 'bc2b68a447ac8e1040f5f855516d431a');
grCatItem.query();
if (grCatItem.next()) {
hasAdditionalVarSet = true;
}
// Step 3: Query the catalog_ui_policy table for the UI policy with the specified short description
var grCatItemPolicy = new GlideRecord('catalog_ui_policy');
grCatItemPolicy.addQuery('short_description', 'set cb to true if create_new_role');
grCatItemPolicy.query();
// Step 4: If the UI policy is found, create a copy by updating only the catalog_item and short_description fields
if (grCatItemPolicy.next()) {
// Temporarily change the catalog_item and short_description for the new record
grCatItemPolicy.setValue('catalog_item', catalogItemId); // Set to the new catalog item
if (hasAdditionalVarSet) {
grCatItemPolicy.setValue('short_description', 'set cb to true if create_new_role w/ standard var set');
}
// Insert the modified record as a new entry (clone)
grCatItemPolicy.insert(); // This duplicates the record with all fields and conditions intact
// No need to revert fields since we're inserting a copy, leaving the original untouched
} else {
// Log an error if the specified UI policy is not found
gs.error("UI Policy with short description 'set cb to true if create_new_role' not found in catalog_ui_policy table.");
}
}
})(current, previous);
What I need it to do is what is shown in the first screenshot. What it does is shown in the 2nd screenshot.
Any help is much appreciated! Thank you
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 12:03 PM
I was able to resolve this. Here is the updated script
(function executeRule(current, previous /*null when async*/) {
// Step 1: Check if the variable_set in the inserted record matches the specified sys_id
if (current.variable_set == 'c7f2ce6d336d1e101bc9a7273e5c7b68') {
// Retrieve the catalog item sys_id from the inserted io_set_item record
var catalogItemId = current.sc_cat_item.sys_id.toString();
// Step 2: Check if the catalog item has the additional variable set
var hasAdditionalVarSet = false;
var grCatItem = new GlideRecord('io_set_item');
grCatItem.addQuery('sc_cat_item', catalogItemId);
grCatItem.addQuery('variable_set', 'bc2b68a447ac8e1040f5f855516d431a');
grCatItem.query();
if (grCatItem.next()) {
hasAdditionalVarSet = true;
}
// Step 3: Query the catalog_ui_policy table for the UI policy with the specified short description
var grCatItemPolicy = new GlideRecord('catalog_ui_policy');
grCatItemPolicy.addQuery('short_description', 'set cb to true if create_new_role');
grCatItemPolicy.query();
// Step 4: If the UI policy is found, create a copy by updating only the catalog_item and short_description fields
if (grCatItemPolicy.next()) {
// Temporarily change the catalog_item and short_description for the new record
grCatItemPolicy.setValue('catalog_item', catalogItemId); // Set to the new catalog item
if (hasAdditionalVarSet) {
grCatItemPolicy.setValue('short_description', 'set cb to true if create_new_role w/ standard var set');
grCatItemPolicy.setValue('catalog_conditions', 'IO:9b7b64a447ac8e1040f5f855516d43ea=Create new role^EQ');
}
// Insert the modified record as a new entry (clone)
grCatItemPolicy.insert(); // This duplicates the record with all fields and conditions intact
// No need to revert fields since we're inserting a copy, leaving the original untouched
} else {
// Log an error if the specified UI policy is not found
gs.error("UI Policy with short description 'set cb to true if create_new_role' not found in catalog_ui_policy table.");
}
}
})(current, previous);
Adding this line fixed the issue:
grCatItemPolicy.setValue('catalog_conditions', 'IO:9b7b64a447ac8e1040f5f855516d43ea=Create new role^EQ');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 11:42 AM
confirmed that they do not keep the same IO:sys_id. This is a hard one to figure out.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 11:45 AM
Oh, just kidding, it does keep the IO:sys_id as the original one.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 12:03 PM
I was able to resolve this. Here is the updated script
(function executeRule(current, previous /*null when async*/) {
// Step 1: Check if the variable_set in the inserted record matches the specified sys_id
if (current.variable_set == 'c7f2ce6d336d1e101bc9a7273e5c7b68') {
// Retrieve the catalog item sys_id from the inserted io_set_item record
var catalogItemId = current.sc_cat_item.sys_id.toString();
// Step 2: Check if the catalog item has the additional variable set
var hasAdditionalVarSet = false;
var grCatItem = new GlideRecord('io_set_item');
grCatItem.addQuery('sc_cat_item', catalogItemId);
grCatItem.addQuery('variable_set', 'bc2b68a447ac8e1040f5f855516d431a');
grCatItem.query();
if (grCatItem.next()) {
hasAdditionalVarSet = true;
}
// Step 3: Query the catalog_ui_policy table for the UI policy with the specified short description
var grCatItemPolicy = new GlideRecord('catalog_ui_policy');
grCatItemPolicy.addQuery('short_description', 'set cb to true if create_new_role');
grCatItemPolicy.query();
// Step 4: If the UI policy is found, create a copy by updating only the catalog_item and short_description fields
if (grCatItemPolicy.next()) {
// Temporarily change the catalog_item and short_description for the new record
grCatItemPolicy.setValue('catalog_item', catalogItemId); // Set to the new catalog item
if (hasAdditionalVarSet) {
grCatItemPolicy.setValue('short_description', 'set cb to true if create_new_role w/ standard var set');
grCatItemPolicy.setValue('catalog_conditions', 'IO:9b7b64a447ac8e1040f5f855516d43ea=Create new role^EQ');
}
// Insert the modified record as a new entry (clone)
grCatItemPolicy.insert(); // This duplicates the record with all fields and conditions intact
// No need to revert fields since we're inserting a copy, leaving the original untouched
} else {
// Log an error if the specified UI policy is not found
gs.error("UI Policy with short description 'set cb to true if create_new_role' not found in catalog_ui_policy table.");
}
}
})(current, previous);
Adding this line fixed the issue:
grCatItemPolicy.setValue('catalog_conditions', 'IO:9b7b64a447ac8e1040f5f855516d43ea=Create new role^EQ');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2024 12:07 PM
Nice, glad it worked!