How to set RITM state value from Client Script running on SC_TASK
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-16-2023 01:11 PM
I have a client script running on a sc_task. Script is onChange reacting to a choice variable that is Review Status. (script is shown below).
Intent of script is to get the value of the Review Status variable (4 choices: Under Review, Awaiting Client, Awaiting Job Builder, and Completed) and then use the selected value to set the state on the requested_item from the catalog task. Based on the alerts, I am going to the correct switch elements but the RITM state is not being updated.
Possibly guessing that using g_form.SetValue('request_item.state', 'XX') is not working and maybe I need glide record but I am not sure.
Please help with correct coding to do this.
Thanks
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var status = g_form.getValue('comp_reviewStatus');
alert("The selected reveiw status is " + status);
switch (status) {
case "under_review":
//g_form.setValue('state', '2');
g_form.setValue('request_item.state', '2');
alert("On the Under Review branch");
break;
case "awaiting_client":
//g_form.setValue('state', 'Awaiting Client');
g_form.setValue('request_item.state', '5');
alert("On the Awaiting Client branch");
break;
case "job_builder":
//g_form.setValue('state', 'Awaiting Job Builder');
g_form.setValue('request_item.state', '22');
alert("On the Awaiting Job Builder branch");
break;
case "completed":
//g_form.setValue('state', '2');
g_form.setValue('request_item.state', '2');
alert("On the Completed branch");
break;
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-16-2023 01:18 PM
Hi,
You're unable to set the RITM state value that was in an sc_task client script. You'd have to utilize GlideAjax to communicate from the client to the server, to set that record's value or...consider using an "after" business rule on the sc_task table to change the RITM value (via GlideRecord) after the sc_task has been saved to the database.
Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-17-2023 10:01 AM
Thank you for your response. I have now used Glide Ajax to set the status on sc_req_item.
Problem I am having is getting the RITM number on the sc_task client script.
var ritm = g_form.getValue('current.request_item.number');
Dot walking isn't working. Must have something wrong.
Full client script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var status = g_form.getValue('current.variables.comp_reviewStatus');
var ritm = g_form.getValue('current.request_item.number');
alert("The selected reveiw status is " + status + " for " + ritm);
var ritmStatus;
switch (status) {
case "under_review":
ritmStatus = 2; // state = Work in Progress
alert("On the Under Review branch");
break;
case "awaiting_client":
ritmStatus = 5; // state = Awaiting Client
alert("On the Awaiting Client branch");
break;
case "job_builder":
ritmStatus = 18; // state = Awaiting Job Builder
alert("On the Awaiting Job Builder branch");
break;
case "completed":
ritmStatus = 2; // state = Work in Progress
alert("On the Completed branch");
break;
}
// ajax script call to set State on RITM
var setState = new GlideAjax('SHR_set_RITM_State');
gaTitle.addParam('sysparm_name', 'setState');
gaTitle.addParam('sysparm_ritm', ritm);
gaTitle.addParam('sysparm_status', ritmStatus);
//gaTitle.getXML(Job_Answer);
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-17-2023 06:02 PM
Hello,
You don't have access to "current" in client script, you have access to g_form to retrieve form values.
In the request_item field on the sc_task is a reference to the RITM table, thus you get an sys_id of the RITM record, that's all you'd need to pass to your script include.
In your script include, query the sc_req_item table using the sys_id that was passed to the script include from the client (not number).
Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-16-2023 02:31 PM
Hi,
you cannot change the RITM value about the form. You have to use a GlideRecord.
Create a Business Rule on sc_task that will be executed after the update. The filter condition can be based on changes in the Review Status, so that it triggers only then.
Then make a script which switches the Review Status and updates the RITM:
(function executeRule(current, previous /*null when async*/ ) {
var ritmStatus;
switch (current.comp_reviewStatus) {
case 'under_review':
ritmStatus = 2;
break;
case 'awaiting_client':
ritmStatus = 5;
break;
}
var gr = new GlideRecord('sc_req_item');
gr.get(current.request_item);
gr.setValue('state', ritmStatus);
gr.update();
})(current, previous);
Greetings
Please mark my reply as Helpful and/or Accept Solution, if applicable. Thanks!