
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 10:20 AM
Hello Experts,
I have a requirement to populate 'Request type' field dropdownlist depending on 'HR service' selected by user on Interaction record, There is dependency between 'Request type' and 'HR Service' on HR case form and same I'm trying to replicate on 'Interaction' form but due to limitation I'm resorted to writing client script to populate 'Request type' based on 'HR service'. Though script is working fine in Native UI but it's not working in Agent workspace. I have read few articles saying that add/remove options won't work in agent workspace but just wanted to understand if there is alternate approach to make it work.
Script :
Client Script :
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
g_form.clearOptions('u_interaction_request_type');
g_form.addOption('u_interaction_request_type', '-- None --', '-- None --');
return;
}
var g = g_form.getDisplayBox('u_hr_service').value;
if (newValue != '') {
//alert("Workspace view");
g_form.clearOptions('u_interaction_request_type');
var userDetails = new GlideAjax('RequestTypeDetails'); //script include UserDetailsUtil
userDetails.addParam('sysparm_name', 'getrequestDetails'); //calling function getUserDetails
userDetails.addParam('sysparm_service', g); //passing the user detail as a parameter
userDetails.getXML(HelloWorldParse);
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
// userDetails.getXML(function(response) {
var userObj = JSON.parse(answer); //parsing the user object received from getUserDetails function
g_form.addOption('u_interaction_request_type', '-- None --', '-- None --');
// g_form.addOption('u_interaction_request_type', userObj.value.toString(), userObj.label.toString());
for (var i = 0; i < userObj.length; i++) {
g_form.addOption('u_interaction_request_type', userObj[i].value, userObj[i].label); //replace with your field name
}
}
}
}
Script include :
var RequestTypeDetails = Class.create();
RequestTypeDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getrequestDetails: function(){
var optionsArray = [];
var processer = new JSON();//definition for getUserDetails function, called from client script
var userObj = {}; //declaring user object
var gg = this.getParameter('sysparm_service');
gs.log("HR Service Name "+gg);
var gr = GlideRecord('sys_choice'); //gliding through the user object
gr.addQuery('element', 'u_request_type');
gr.addQuery('dependent_value', gg);
gr.query();
while (gr.next()) {
optionsArray.push({
'label' : gr.label.toString(),
'value' : gr.value.toString()
});//replace with the field name(s) for your choice list Label and Value
}
return processer.encode(optionsArray);
//return JSON.stringify(userObj); //returning the user defined object with details
},
type: 'RequestTypeDetails'
});
Screenshot:
Regards,
Musab
Solved! Go to Solution.
- Labels:
-
Agent Workspace

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-22-2022 12:38 AM
So I made this work, Issue was with var g = g_form.getDisplayBox('u_hr_service').value; as I got to know that getDisplayBox doesn't work in agent workspace so Instead of this I added some code in Script include.
Client Script :
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading && newValue === '') {
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
// g_form.addOption('u_interaction_request_type', '', '-- None --');
return;
}
if (newValue != '' && !isLoading) {
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
var userDetails = new GlideAjax('RequestTypeDetails'); //script include UserDetailsUtil
userDetails.addParam('sysparm_name', 'getrequestDetails'); //calling function getUserDetails
userDetails.addParam('sysparm_service', newValue); //passing the user detail as a parameter
userDetails.getXML(HelloWorldParse);
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var userObj = JSON.parse(answer); //parsing the user object received from getUserDetails function
//g_form.addOption('u_interaction_request_type', '', '-- None --');
for (var i = 0; i < userObj.length; i++) {
g_form.addOption('u_interaction_request_type', userObj[i].value, userObj[i].label); //replace with your field name
}
}
}
else if(newValue == '' && !isLoading)
{
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
// g_form.addOption('u_interaction_request_type', '', '-- None --');
}
}
Script Include:
var RequestTypeDetails = Class.create();
RequestTypeDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getrequestDetails: function(){
var servicename;
var optionsArray = [];
var processer = new JSON();//definition for getUserDetails function, called from client script
var userObj = {}; //declaring user object
var gg = this.getParameter('sysparm_service');
var rr = gg.name;
var er = new GlideRecord('sn_hr_core_service');
er.addQuery('sys_id', gg);
er.query();
if(er.next())
{
servicename = er.name;
}
var gr = GlideRecord('sys_choice'); //gliding through the user object
gr.addQuery('element', 'u_request_type');
gr.addQuery('dependent_value', servicename);
gr.query();
while (gr.next()) {
optionsArray.push({
'label' : gr.label.toString(),
'value' : gr.value.toString()
});//replace with the field name(s) for your choice list Label and Value
}
return processer.encode(optionsArray);
//return JSON.stringify(userObj); //returning the user defined object with details
},
type: 'RequestTypeDetails'
});
Regards,
Musab
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 08:16 PM
Hi,
If you are having any dependency then addOption won't work
This is mentioned in below KB and has no workaround yet
regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 08:27 PM
Hi
In your client script uncheck global checkbox & select view name as "agent_workspace" then it will work in agent workspace view.
Regards,
Harshal.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-22-2022 12:38 AM
So I made this work, Issue was with var g = g_form.getDisplayBox('u_hr_service').value; as I got to know that getDisplayBox doesn't work in agent workspace so Instead of this I added some code in Script include.
Client Script :
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading && newValue === '') {
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
// g_form.addOption('u_interaction_request_type', '', '-- None --');
return;
}
if (newValue != '' && !isLoading) {
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
var userDetails = new GlideAjax('RequestTypeDetails'); //script include UserDetailsUtil
userDetails.addParam('sysparm_name', 'getrequestDetails'); //calling function getUserDetails
userDetails.addParam('sysparm_service', newValue); //passing the user detail as a parameter
userDetails.getXML(HelloWorldParse);
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var userObj = JSON.parse(answer); //parsing the user object received from getUserDetails function
//g_form.addOption('u_interaction_request_type', '', '-- None --');
for (var i = 0; i < userObj.length; i++) {
g_form.addOption('u_interaction_request_type', userObj[i].value, userObj[i].label); //replace with your field name
}
}
}
else if(newValue == '' && !isLoading)
{
g_form.clearOptions('u_interaction_request_type');
g_form.setValue('u_interaction_request_type', '');
// g_form.addOption('u_interaction_request_type', '', '-- None --');
}
}
Script Include:
var RequestTypeDetails = Class.create();
RequestTypeDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getrequestDetails: function(){
var servicename;
var optionsArray = [];
var processer = new JSON();//definition for getUserDetails function, called from client script
var userObj = {}; //declaring user object
var gg = this.getParameter('sysparm_service');
var rr = gg.name;
var er = new GlideRecord('sn_hr_core_service');
er.addQuery('sys_id', gg);
er.query();
if(er.next())
{
servicename = er.name;
}
var gr = GlideRecord('sys_choice'); //gliding through the user object
gr.addQuery('element', 'u_request_type');
gr.addQuery('dependent_value', servicename);
gr.query();
while (gr.next()) {
optionsArray.push({
'label' : gr.label.toString(),
'value' : gr.value.toString()
});//replace with the field name(s) for your choice list Label and Value
}
return processer.encode(optionsArray);
//return JSON.stringify(userObj); //returning the user defined object with details
},
type: 'RequestTypeDetails'
});
Regards,
Musab