
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-15-2018 05:08 PM
Hi All,
I'm trying to implement some code to automatically set the assignee of an Incident. I have created a Before Business Rule called 'Set Assignee to Auto-Follow', on the 'Incident' table, run on 'insert' and 'update', order 100, condition 'active=true'. Code for this is below:
(function executeRule(current, previous /*null when async*/) {
//Auto add user as a follower of record
var gp = new GlideRecord('live_group_profile');
gp.addQuery('document', current.sys_id);
gp.addQuery('table', current.getTableName());
gp.query();
if (gp.next()) {
gs.info('Profile record == ' + gp.short_description);
addMember(gp.sys_id, current.assigned_to);
}
function addMember(id, user) {
//first need to check if assigned to user has live feed profile
var lpUser = checkLiveFeedProfile(user);
//now to check to see if user is in group already, if not, add
var gr = new GlideRecord('live_group_member');
gr.addQuery('group.sys_id', id);
gr.addQuery('member.sys_id', lpUser);
gr.query();
if (gr.next() && (gr.state == 'active' || gr.state == 'admin')) { //need to make sure user wasn't already following.
gs.info('user =' + gr.member.name + ' already a member as ' + gr.state);
} else {
//this will handle if user was in group already but inactive(meaning they unfollow record) and will just create member if not in group already
gs.info('User = ' + user.name + ' was added/reactivated to live group');
gr.state = 'active';
gr.group = id;
gr.member = lpUser;
gr.update();
}
}
function checkLiveFeedProfile(user) {
var lp = new GlideRecord('live_profile');
lp.addQuery('document', user);
lp.query();
if (lp.next()) {
//user already has live profile
gs.info('User ' + lp.name + ' had an live feed account');
return lp.sys_id;
} else {
//create one
gs.info('user ' + user.name + ' did not have live feed profile account. creating now...');
lp.table = 'sys_user';
lp.document = user.sys_id;
lp.type = 'user';
lp.name = user.name;
return lp.update();
}
}
})(current, previous);
The code was used from another post which is Make a user a follower via a script - but I can't get it working - although others appear to have it working successfully...
The debug below shows it's running, see below - but when I impersonate the user assigned to a ticket they aren't automatically set to 'following'.
13:51:14.103: Global ==> 'Set Assignee to Auto-Follow' on incident:INC0044360
13:51:14.104: Execute before query business rules on live_group_profile:
13:51:14.104: Global ==> 'LiveFeed Group Profile Visibility' on live_group_profile:
13:51:14.104: Global <== 'LiveFeed Group Profile Visibility' on live_group_profile:
13:51:14.104: Global ==> 'LiveFeed Group Profile Visibility 2.0' on live_group_profile:
13:51:14.105: Global <== 'LiveFeed Group Profile Visibility 2.0' on live_group_profile:
13:51:14.105: Finished executing before query business rules on live_group_profile:
13:51:14.107: Global <== 'Set Assignee to Auto-Follow' on incident:INC0044360
I'm hoping I've just forgotten something simple - any help is appreciated!
I will also need to do this for HR Cases, but once I have the above working I'll be able to transfer this across.
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 01:55 PM
Hi Carl,
Made one update to the script. Please try this and let me know if it works.
(function executeRule(current, previous /*null when async*/) {
//Auto add user as a follower of record
var gp = new GlideRecord('live_group_profile');
gp.addQuery('document', current.sys_id);
gp.addQuery('table', current.getTableName());
gp.query();
if (gp.next()) {
gs.addInfoMessage('Profile record == ' + gp.short_description);
addMember(gp.sys_id, current.assigned_to);
}
else
{
gp.initialize();
gp.setWorkflow(false);
gp.name = current.number;
gp.short_description = current.short_description;
gp.document = current.sys_id;
gp.document_group = "true";
gp.table = current.getTableName();
gp.visible_group = "false";
gp.public_group = "false";
var gpid = gp.insert();
addMember(gpid, current.assigned_to);
}
function addMember(id, user) {
//first need to check if assigned to user has live feed profile
var lpUser = checkLiveFeedProfile(user);
//now to check to see if user is in group already, if not, add
var gr = new GlideRecord('live_group_member');
gr.addQuery('group.sys_id', id);
gr.addQuery('member.sys_id', lpUser);
gr.query();
if (gr.next() && (gr.state == 'active' || gr.state == 'admin')) { //need to make sure user wasn't already following.
gs.addInfoMessage('user =' + gr.member.name + ' already a member as ' + gr.state);
} else {
//this will handle if user was in group already but inactive(meaning they unfollow record) and will just create member if not in group already
gs.addInfoMessage('User = ' + user.name + ' was added/reactivated to live group');
gr.state = 'active';
gr.group = id;
gr.member = lpUser;
gr.update();
}
}
function checkLiveFeedProfile(user) {
var lp = new GlideRecord('live_profile');
lp.addQuery('document', user);
lp.query();
if (lp.next()) {
//user already has live profile
gs.addInfoMessage('User ' + lp.name + ' had an live feed account');
return lp.sys_id;
} else {
//create one
gs.addInfoMessage('user ' + user.name + ' did not have live feed profile account. creating now...');
lp.table = 'sys_user';
lp.document = user.sys_id;
lp.type = 'user';
lp.name = user.name;
return lp.update();
}
}
})(current, previous);
Please mark this response as correct or helpful if it assisted you with your question.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 02:49 PM
Thanks for that Sanjiv - this now works all as required.
Only thing i had to do was run the business rue in the Global scope and not the HR:Code scope as the new line 'gp.setWorkflow(false);' produced an error when called under the HR scope.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 03:07 PM
You may try creating a cross scope privilege record and see if it works
How to use 'setWorkflow' in scoped app scripting
Please mark this response as correct or helpful if it assisted you with your question.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 04:38 PM
Hi Sanjiv,
Tried that - it didn;t work as it's not the 'live_group_profile' it's having trouble with - see the below error message:
Access to api 'setWorkflow' from scope 'sn_hr_core' has been refused due to the api's cross-scope access policy
It looks like it's the api 'setWorkflow' - i tried a few things but couldn't get the right value for the 'Target Name'... I'm assuming the 'Target Type' should also be set to 'script include' or 'scriptable'

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 06:16 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-16-2018 07:30 PM