- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2015 04:21 AM
Hi, i have read lots of posts around automating this process but not quite the same requirements.
We have a Catalogue Request Item called - Add user to group - ServiceDeskOnline
This has two variable sets
Variable Set - SDO_Group
Variable - GroupName
Reference - sys_user_group
Variable Set - essAddUsers
Variable - essAccountUsers
List collector - sys-user
Providing the requested group has Assignment Group checked i would like them added automatically.
Would someone be able to provide steps to automate this?
Many Thanks
Solved! Go to Solution.
- Labels:
-
Service Catalog
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-04-2015 07:30 AM
addUsersToGroup();
function addUsersToGroup()
{
var myUsers = current.variables.essAccountUsers;
//gs.log("//\\ list collector: " + myUsers);
//gs.log("//\\ type of list collector: " + typeof myUsers);
myUsers = myUsers.toString();
//myUsers = myUsers.replace(/\s/g, '');
//gs.log("//\\ type of myUsers: " + typeof myUsers);
var myUsersInd = myUsers.split(",");
//gs.log("//\\ splited part: " + myUsersInd);
//gs.log("//\\ type of object : " + typeof myUsersInd);
//gs.log("//\\ first element: " + myUsersInd[0]);
var countUsers = myUsersInd.length;
//gs.log("//\\ users count: " + countUsers);
//gs.log("//\\ Group Name is :" +current.variables.GroupName.getDisplayValue());
//gs.log(" initial variable list collector: " + myUsers);
var existingMembers = [];
var retrive = new GlideRecord('sys_user_grmember');
retrive.addQuery('group',current.variables.GroupName);
retrive.query();
while(retrive.next())
{
existingMembers.push(retrive.user.toString());
}
for(var i = 0 ; i < countUsers ; i++)
{
var arrUt = new ArrayUtil();
var grp = new GlideRecord('sys_user_group');
grp.get(current.variables.GroupName.toString());
gs.log("//\\ grpName " + grp.sys_id + " " + grp.name + " " + grp.u_assignment_group);
var member = new GlideRecord('sys_user');
member.get(myUsersInd[i].toString());
gs.log("//\\ memberRec " + member.sys_id + " " + member.user_name);
var grMember = new GlideRecord('sys_user_grmember');
if(arrUt.indexOf(existingMembers,myUsersInd[i].toString()) == -1)
{
if(grp.u_assignment_group == true) // if u_assignment_group is checked, then directly add user to group without creating a catalog task
{
grMember.initialize();
grMember.group = current.variables.GroupName;
grMember.user = myUsersInd[i];
grMember.insert();
gs.log("//\\ User " + myUsersInd[i] + " has been added to group " + current.variables.GroupName);
}
else // create a catalog task for manual fulfillment for each user
{
gs.log("//\\ Group is not an assignment group and hence creating task ");
var ctsk = new GlideRecord('sc_task');
ctsk.initialize();
ctsk.request_item = current.sys_id;
ctsk.assignment_group.setDisplayValue('Database');
ctsk.short_description = " Check if user to be added to group or not";
ctsk.description = "Please check for user " + member.user_name + " has to be added or not to Group " + current.variables.GroupName.getDisplayValue();
ctsk.insert();
}
}
}
}
Hi Richard,
Above version is working and also made available in your developement instance.
It is working as expected. You can test it throughly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-03-2015 10:16 AM
var myUsers = current.variables.essAccountUsers;
var myUsersInd = myUsers.split(",");
var countUsers = myUsersInd.length;
var gr = new GlideRecord('sys_user_grmember');
for(var i = 0 ; i < countUsers ; i++)
{
gr.addQuery('group',current.variables.GroupName);
//gr.addQuery('group.u_assignment_group',true); // check if group is assignment group as well
gr.query();
var count = 0;
while(gr.next())
{
if(myUsersInd[i].toString() == gr.user.toString()) // added the missing parenthesis here
{
gs.log("User already exists is a group")
}
count++;
}
if(count ==0)
{
if(group.u_assignment_group == true) // if u_assignment_group is checked, then directly add user to group without creating a catalog task
{
gr.initialize();
gr.group = current.variables.GroupName;
gr.user = myUsersInd[i];
gr.insert();
gs.log("User " + myUsersInd[i] + " has been added to group " + current.variables.GroupName);
}
else // create a catalog task for manual fulfillment for each user
{
var ctsk = new GlideRecord('sc_task');
ctsk.initialize();
ctsk.request_item = current.sys_id;
ctsk.assignment_group.setDisplayValue('Assignment Group Name should go here');
ctsk.short_description = " Check if user to be added to group or not";
ctsk.insert();
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-04-2015 02:02 AM
Hi Deepak,
Thanks again for taking time to look at this.
Unfortunately it doesn't appear to be working. It neither adds to the group or creates a task. i tried adding in a 5 sec timer before the script but have the same issue. Feel free to Skype me.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-04-2015 02:10 AM
Hi Richard,
Can you check "Script log statements" and see if it has our log statement generated?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-04-2015 07:30 AM
addUsersToGroup();
function addUsersToGroup()
{
var myUsers = current.variables.essAccountUsers;
//gs.log("//\\ list collector: " + myUsers);
//gs.log("//\\ type of list collector: " + typeof myUsers);
myUsers = myUsers.toString();
//myUsers = myUsers.replace(/\s/g, '');
//gs.log("//\\ type of myUsers: " + typeof myUsers);
var myUsersInd = myUsers.split(",");
//gs.log("//\\ splited part: " + myUsersInd);
//gs.log("//\\ type of object : " + typeof myUsersInd);
//gs.log("//\\ first element: " + myUsersInd[0]);
var countUsers = myUsersInd.length;
//gs.log("//\\ users count: " + countUsers);
//gs.log("//\\ Group Name is :" +current.variables.GroupName.getDisplayValue());
//gs.log(" initial variable list collector: " + myUsers);
var existingMembers = [];
var retrive = new GlideRecord('sys_user_grmember');
retrive.addQuery('group',current.variables.GroupName);
retrive.query();
while(retrive.next())
{
existingMembers.push(retrive.user.toString());
}
for(var i = 0 ; i < countUsers ; i++)
{
var arrUt = new ArrayUtil();
var grp = new GlideRecord('sys_user_group');
grp.get(current.variables.GroupName.toString());
gs.log("//\\ grpName " + grp.sys_id + " " + grp.name + " " + grp.u_assignment_group);
var member = new GlideRecord('sys_user');
member.get(myUsersInd[i].toString());
gs.log("//\\ memberRec " + member.sys_id + " " + member.user_name);
var grMember = new GlideRecord('sys_user_grmember');
if(arrUt.indexOf(existingMembers,myUsersInd[i].toString()) == -1)
{
if(grp.u_assignment_group == true) // if u_assignment_group is checked, then directly add user to group without creating a catalog task
{
grMember.initialize();
grMember.group = current.variables.GroupName;
grMember.user = myUsersInd[i];
grMember.insert();
gs.log("//\\ User " + myUsersInd[i] + " has been added to group " + current.variables.GroupName);
}
else // create a catalog task for manual fulfillment for each user
{
gs.log("//\\ Group is not an assignment group and hence creating task ");
var ctsk = new GlideRecord('sc_task');
ctsk.initialize();
ctsk.request_item = current.sys_id;
ctsk.assignment_group.setDisplayValue('Database');
ctsk.short_description = " Check if user to be added to group or not";
ctsk.description = "Please check for user " + member.user_name + " has to be added or not to Group " + current.variables.GroupName.getDisplayValue();
ctsk.insert();
}
}
}
}
Hi Richard,
Above version is working and also made available in your developement instance.
It is working as expected. You can test it throughly.