- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-14-2023 08:24 AM - edited 02-14-2023 08:24 AM
Hi All,
I need to create a catalog item where when the user selects the Assignment group the form variables need fill with the group fields and the related records like role, users, type, in the list or choice field.
I got it working for the group fields but cannot pass the values from the script include that fetch the related records.
Can someone look through the below please?
SCRIPT INCLUDE:
addGrpMembers: function(){
var users = [];
var grp = this.getParameter('sysparm_request');
var userMem = new GlideRecord('sys_user_grmember');
userMem.addQuery('group', grp);
userMem.query();
while (userMem.next()){
users.push(userMem.user.sys_id());
gs.log('all usr ' + users); logs all sys id's fine
return 'sys_idIN' + users.join(',');
}
},
Catalog client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var group = g_form.getValue('group');
alert('group ' + group);
var ga = new GlideAjax('addGroups'); //script include
ga.addParam('sysparm_name', 'addGrpMembers'); //call function
ga.addParam('sysparm_request', group);
ga.getXML(getGrpFieldValues);
function getGrpFieldValues(response){
var answer = response.responseXML.documentElement.getAttribute('answer');
var parser = JSON.parse(answer); // convert json string
g_form.setValue('user_to_add_to_the_group', NOT SURE HOW TO SET IT I tried JSON stringfy or parser.users but nothing works
}
Thanks!
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-15-2023 03:57 AM
@Eli7 ,
Please try below code:
SI:
var grp = this.getParameter('sysparm_request');
var userMembers = new GlideRecord('sys_user_grmember');
userMembers.addQuery('group', grp);
userMembers.query();
var groupsArr = [];
while (userMembers.next()) {
groupsArr.push((userMembers.user).getDisplayValue());
}
return JSON.stringify(groupsArr);
Client Script:
var ga = new GlideAjax('sampleScriptInclude'); //script include
ga.addParam('sysparm_name', 'addGrpMembers1'); //call function
ga.addParam('sysparm_request', newValue);
ga.getXML(getGrpFieldValues);
function getGrpFieldValues(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
answer = JSON.parse(answer);
g_form.clearOptions('users')
for (var i = 0; i < answer.length; i++) {
g_form.addOption('users',answer[i],answer[i]);
}
}
Variable:
If my answer solved your issue, please mark my answer as ✅Correct & 👍Helpful based on the Impact!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-15-2023 04:58 AM
@Eli7 ,
The below code will work in the Portal view
SI:
addGrpMembers1:function(){
var grp = this.getParameter('sysparm_request');
var userMembers = new GlideRecord('sys_user_grmember');
userMembers.addQuery('group', grp);
userMembers.query();
var groupsArr = [];
while (userMembers.next()) {
groupsArr.push((userMembers.user.toString()));
}
return groupsArr.toString();
},
CLient Script if your variable is list collector:
var ga = new GlideAjax('sampleScriptInclude'); //script include
ga.addParam('sysparm_name', 'addGrpMembers1'); //call function
ga.addParam('sysparm_request', newValue);
ga.getXML(getGrpFieldValues);
function getGrpFieldValues(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
alert(answer);
var output = answer.split('||');
g_form.setValue('user_to_add_to_the_group',output[0]);
}
If my answer solved your issue, please mark my answer as ✅Correct & 👍Helpful based on the Impact.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-14-2023 09:20 AM
Hi @Eli7
I have updated below script please check it.
Script Include
addGrpMembers: function(){
var users = [];
var grp = this.getParameter('sysparm_request');
var userMem = new GlideRecord('sys_user_grmember');
userMem.addQuery('group', grp);
userMem.query();
while (userMem.next()){
users.push(userMem.user.sys_id());
gs.log('all usr ' + users); //logs all sys id's fine
return users.split(',');
}
Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var group = g_form.getValue('group');
alert('group ' + group);
var ga = new GlideAjax('addGroups'); //script include
ga.addParam('sysparm_name', 'addGrpMembers'); //call function
ga.addParam('sysparm_request', group);
ga.getXMLAnswer(getGrpFieldValues);
function getGrpFieldValues(response){
g_form.setValue('user_to_add_to_the_group', response);
}
Regards,
Chaitanya
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-14-2023 09:39 AM
Hi Chaitanya,
Thank you for your reply. It's not working. Nothing is put into the field
'user_to_add_to_the_group'
Any othe ridea?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-14-2023 09:32 AM
@Eli7 ,
Please try below explained way:
Script include:
addGrpMembers: function() {
var users = [];
var grp = this.getParameter('sysparm_request');
var userMem = new GlideRecord('sys_user_group');
userMem.addQuery('group', grp);
userMem.query();
var obj = {};
if (userMem.next()) {
obj["name"] = userMem.name+"";
obj["manager"] = (userMem.manager).getDisplayValue();
}
var userMemRoles = new GlideRecord('sys_group_has_role');
userMemRoles.addQuery('group', grp);
userMemRoles.query();
var arr = [];
while (userMemRoles.next()) {
arr.push((userMemRoles.role).getDisplayValue()); // I assume you are making fields of choice types NOT Reference if you are creating Reference field just capture sys_ids instead of Name
}
obj["roles"]= arr;
var userMembers = new GlideRecord('sys_user_grmember');
userMembers.addQuery('group', grp);
userMembers.query();
var groupsArr = [];
while (userMembers.next()) {
groupsArr.push((userMembers.user).getDisplayValue());
}
obj["members"] = groupsArr;
return JSON.stringify(obj);
},
Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//alert('group ' + group);
var ga = new GlideAjax('addGroups'); //script include
ga.addParam('sysparm_name', 'addGrpMembers'); //call function
ga.addParam('sysparm_request', newValue);
ga.getXML(getGrpFieldValues);
function getGrpFieldValues(response){
var answer = response.responseXML.documentElement.getAttribute('answer');
answer= JSON.parse(answer);
Object.keys(answer).forEach(function(key) {
alert(key + " " + typeof(answer[key]));
if(key == "name"){
g_form.setValue("NAME_OF_THE_FIELD",answer[key]);
}else if(key == "role"){ //create select box
for(var i = 0 ; i < answer[key].length; i++){
g_form.addOption('NAME_OF_THE_FIELD',answer[key][i],answer[key][i])
}//same with all the fields
}
});
}
}
If my answer solved your issue, please mark my answer as ✅Correct & 👍Helpful based on the Impact.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-15-2023 02:40 AM
Hi Prince,
Thank you very much for your response but I cannot get this to work either 😞
Is your code working for you in your instance?
Could you help me to just try and get the below to work.
SI:
getGrpMembers
var userMembers = new GlideRecord('sys_user_grmember');
userMembers.addQuery('group', grp);
userMembers.query();
var groupsArr = [];
while (userMembers.next()) {
groupsArr.push((userMembers.user).getDisplayValue());
}
obj["members"] = groupsArr;
return JSON.stringify(obj);
CCS
var ga = new GlideAjax('addGroups'); //script include
ga.addParam('sysparm_name', 'addGrpMembers'); //call function
ga.addParam('sysparm_request', newValue);
ga.getXML(getGrpFieldValues);
function getGrpFieldValues(response){
var answer = response.responseXML.documentElement.getAttribute('answer');
answer= JSON.parse(answer);
How should I pass the results? I tried your code but cannot figure it out.
},
Many Thanks!