Need to set reference field value in variable set on catalog task with business rule
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-14-2022 11:37 AM
Hi,
I need to set the value of a reference field that is part of a variable set using a business rule. I know that the syntax for a non reference field would look something like current.variables.(variable set name).(field name) = x
How would I incorporate setValue to make this work for a reference field?
Here's what I have now - current.variables.fsa_add_access.setValue('u_sn_account', current.u_requested_for_s_name);
In another part of the business rule I am able to set a reference field that is not part of the variable set easily with current.setValue('u_requested_for_s_name', user.sys_id);
Thank you!
- Labels:
-
Service Catalog
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-14-2022 12:08 PM
Hi Peter,
If the variable set is a single row, treat it the same as any other variable - no need to specify the variable set name to read or set a value - current.variables.variable_name = value, or current.setValue('variable_name', value). If you're trying to update a variable in a multi-row variable set, that's a whole different animal. I can provide some guidance on that once you confirm.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-14-2022 12:51 PM
Thank you for your response!
I tried to do that and am still not seeing the field get set. Below is the whole business rule:
(function executeRule(current, previous /*null when async*/) {
//gs.addInfoMessage("running, current.variables.u_sn_account: " + current.variables.u_sn_account);
var user = new GlideRecord('sys_user');
user.addQuery('name', current.u_requested_for_stringq);
user.query();
//gs.info('NAME: ' + current.u_requested_for_stringq);
if(user.next()){
if(current.u_requested_for_s_name == '') {
current.setValue('u_requested_for_s_name', user.sys_id);
}
// if(current.short_desctiption == "The Division Manager or COR needs to fill out the necessary information to add User's FSA Access"){
current.setValue('u_sn_account', user.sys_id);
gs.info("CHECK: " + current.variables.fsa_add_access.u_sn_account);
//}
current.update();
}
})(current, previous);
Note that my code for setting the value for 'u_requested_for_s_name' is working, but the code for setting the variable set value of 'u_sn_account' is not working. This is on a service catalog task - the business rule is running on the sc_task table.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-14-2022 12:59 PM
And sorry forgot to mention that it is indeed a single row set
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-15-2022 12:40 PM
Is the 'u_sn_account' variable a reference type, referencing the sys_user table, are you certain the name is exactly correct - case-sensitive and no extraneous leading or trailing spaces, and is it included/shown on the Catalog Task when this BR is executing? If the variable isn't included on this Catalog Task you can use (or maybe try this anyway)
current.request_item.variables.u_sn_account = user.sys_id;
Also, is u_requested_for_s_name a field on the sc_task table, or a variable defined within the Catalog Item? I don't think I've ever used the current.setValue method on variables, so also try this after confirming all of the above
current.variables.u_sn_account = user.sys_id;