- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-05-2023 11:06 PM
Hi Community,
I am doing an automation form that allows users to update the Available For of a catalog item. I have a list collector field (Available for?) that gets all data from the [sc_cat_item_user_criteria_mtom] table when we input an item in the Select a Catalog item question.
I am finding a way to update the Available For list from the workflow. For example: If a user removed France and/or added a new country Korea to the list above, how can we update exactly what users add/remove and keep the existing ones?
Fin Nguyen
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2023 01:44 AM
Hi @Fin Nguyen
Let's try the approach below.
1. Define a function to Add new criteria case.
function addUserCriteria(cat_item, user_criteria){
var gr = new GlideRecord('sc_cat_item_user_criteria_mtom');
gr.addQuery('sc_cat_item', cat_item);
gr.addQuery('user_criteria', user_criteria);
gr.query();
if(gr.hasNext()){
return '';
}
gr.initialize();
gr.sc_cat_item = cat_item;
gr.user_criteria = user_criteria;
return gr.insert();
}
2. Another function to Remove existing criteria case.
function removeUserCriteria(cat_item, arr_user_criteria){
var gr = new GlideRecord('sc_cat_item_user_criteria_mtom');
gr.addQuery('sc_cat_item', cat_item);
gr.addQuery('user_criteria', 'NOT IN', arr_user_criteria);
gr.query();
gr.deleteMultiple();
}
3. Call the function above in your workflow (flow, producer).
var cat_item = current.variables.cat_item.toString(); //replace your Cat Item variable
var arrUserCriteria = current.variablers.user_criteria.split(','); //replace your Criteria variable
for (var i in arrUserCriteria){
addUserCriteria(cat_item, arrUserCriteria[i]);
}
removeUserCriteria(cat_item, arrUserCriteria);
Let me know if it works for you.
Cheers,
Tai Vu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2023 01:44 AM
Hi @Fin Nguyen
Let's try the approach below.
1. Define a function to Add new criteria case.
function addUserCriteria(cat_item, user_criteria){
var gr = new GlideRecord('sc_cat_item_user_criteria_mtom');
gr.addQuery('sc_cat_item', cat_item);
gr.addQuery('user_criteria', user_criteria);
gr.query();
if(gr.hasNext()){
return '';
}
gr.initialize();
gr.sc_cat_item = cat_item;
gr.user_criteria = user_criteria;
return gr.insert();
}
2. Another function to Remove existing criteria case.
function removeUserCriteria(cat_item, arr_user_criteria){
var gr = new GlideRecord('sc_cat_item_user_criteria_mtom');
gr.addQuery('sc_cat_item', cat_item);
gr.addQuery('user_criteria', 'NOT IN', arr_user_criteria);
gr.query();
gr.deleteMultiple();
}
3. Call the function above in your workflow (flow, producer).
var cat_item = current.variables.cat_item.toString(); //replace your Cat Item variable
var arrUserCriteria = current.variablers.user_criteria.split(','); //replace your Criteria variable
for (var i in arrUserCriteria){
addUserCriteria(cat_item, arrUserCriteria[i]);
}
removeUserCriteria(cat_item, arrUserCriteria);
Let me know if it works for you.
Cheers,
Tai Vu
