Help with Script Include to get Roles Based on Group and User

patricial
Tera Contributor

Ok I need some help please!

I am jammed up with getting this to work.

I have a catItem that adds a user to Group

I need to first check what roles the group has

Check what roles the user has

If the group has itil and the user has itil = success

If the group has appover_user and user has approver_user = success

If group has itil and user does not have itil = fail

If group has approver_user and user does not have approver user = fail

If group does not have either itil or approver_user = success (regardless of what roles user has)

Here is my script Include (My client script follows) in my client script I need to return a message based on which role the user failed on

So if the user does not have ITIL (User does not have ITIL message)

If the user does not have approver_user (User does not have approver_user message)

/******* script include *********/

var getRolesAjax = Class.create();

getRolesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getRole: function(){

gs.log('>>>DEBUG: returnGroup Role() started...');

var list = [];

var grp = this.getParameter('sysparm_group');

gs.log(grp,'shipra0');

var grGroup = new GlideRecord('sys_group_has_role');

grGroup.addQuery('group', grp);

grGroup.addQuery('role.name', 'itil');//itil

grGroup.query();

while(!grGroup.next()){

//var rol = grGroup.role.getDisplayValue(); //group itil

//return 'success';

//continue;

var gr2Group = new GlideRecord('sys_group_has_role');

gr2Group.addQuery('group', grp);

gr2Group.addQuery('role.name', 'approver_user');//approver user

gr2Group.query();

while(!gr2Group.next()){

//var rol2 = gr2Group.role.getDisplayValue(); //group approver_user

//gs.log('>>>TRICIA Query GROUP APPROVER:' +urol);

return 'success';

//continue;

}

var rol = grGroup.role.getDisplayValue(); //group itil

var rol2 = gr2Group.role.getDisplayValue(); //group approver_user

var usr = this.getParameter('sysparm_requestedby');

var grUser = new GlideRecord('sys_user_has_role');

grUser.addQuery('user', usr);

grUser.addQuery('role.name', rol); //itil from group

grUser.query();

while (grUser.next()) {

var urol = grUser.role.getDisplayValue(); //itil role

var usr2 = this.getParameter('sysparm_requestedby');

var gr2User = new GlideRecord('sys_user_has_role');

gr2User.addQuery('user', usr);

gr2User.addQuery('role.name', rol2); //approver_user role

gr2User.query();

while (gr2User.next()) {

var urol2 = gr2User.role.getDisplayValue(); //approver user

gs.log('>>>TRICIA Query USER ITIL:'+rol + " " +urol);

if(rol == urol || rol == ''){

gs.log('>>>TRICIA Query USER ITIL:'+rol + " " +urol);

continue;

//return 'success';

}

if(rol2 == urol2 || rol2 == ''){

gs.log('>>>TRICIA Query for USER APPROVER:'+rol2 + " " +urol2);

return 'success';

}

}

}

}

},

type: 'getRolesAjax'

});

/*******Client Script*********/

function onChange(control, oldValue, newValue, isLoading, isTemplate) {

if (isLoading || newValue === '') {

return;

}

g_form.setValue('no_license', 'false');

g_form.setValue('request_license', 'No');

var grp = g_form.getValue('group_name');

var usr = g_form.getValue('requested_by');

alert('Calling getRole... ' + grp);

var ga = new GlideAjax('getRolesAjax');

ga.addParam('sysparm_name','getRole');

ga.addParam('sysparm_group', grp);

ga.addParam('sysparm_requestedby', usr);

ga.getXML(AsyncCall);

}

function AsyncCall(response) {

var answer = response.responseXML.documentElement.getAttribute("answer");

if (answer == 'success') {

g_form.setValue('no_license', 'false');

g_form.setValue('request_license', 'Yes');

alert(answer);

}

else{

g_form.addInfoMessage('ITIL Role is required for Group Access.');

g_form.setValue('no_license', 'true');

    }

}

1 ACCEPTED SOLUTION

Please check if this helps..



Script Include:


var getRolesAjax = Class.create();


getRolesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {


getRole: function(){


var isITIL, isAPUSER, isANYGRPROLE;


var grGroup = new GlideRecord('sys_group_has_role');


grGroup.addQuery('group', this.getParameter('sysparm_group'));


grGroup.query();


while(grGroup.next()){


var grUser = new GlideRecord('sys_user_has_role');


grUser.addQuery('user', this.getParameter('sysparm_requestedby'));


if((grGroup.getDisplayValue('role') == 'itil')){


grUser.addQuery('role', grGroup.getValue('role'));


grUser.query();


if(grUser.next()){


if((grUser.getDisplayValue('role') == 'itil')){


gs.log('isITIL = true');


isITIL = true;


}


}


else


isITIL = false;


}


if((grGroup.getDisplayValue('role') == 'approver_user')){


grUser.addQuery('role', grGroup.getValue('role'));


grUser.query();


if(grUser.next()){


if((grUser.getDisplayValue('role') == 'approver_user')){


gs.log('isAPUSER = true');


isAPUSER = true;


}


}


else


isAPUSER = false;


}


if(grGroup.getDisplayValue('role') != 'approver_user' && grGroup.getDisplayValue('role') != 'itil')


isANYGRPROLE = true;


}


if(isITIL == true || isAPUSER == true || isANYGRPROLE == true)


return 'Success';


else if(isITIL == false && isAPUSER == false)


return 'Approver User and ITIL Role is required for Group Access.';


else if(isITIL == false || isAPUSER == false)


{


if(isITIL == false)


return 'ITIL Role is required for Group Access.';


else if(isAPUSER == false)


return 'Approver User Role is required for Group Access.';


}


},


type: 'getRolesAjax'


});





Client Script:


function onChange(control, oldValue, newValue, isLoading, isTemplate) {


if (isLoading || newValue === '') {


return;


}


var ga = new GlideAjax('getRolesAjax');


ga.addParam('sysparm_name','getRole');


ga.addParam('sysparm_group', g_form.getValue('assignment_group'));


ga.addParam('sysparm_requestedby', g_form.getValue('requested_by'));


ga.getXML(AsyncCall);


}


function AsyncCall(response) {


var answer = response.responseXML.documentElement.getAttribute("answer");


g_form.addInfoMessage(answer);


}



View solution in original post

14 REPLIES 14

Hi Patricia,



Can you please mark my answer correct, if i was able to help you.


Please check if this helps..



Script Include:


var getRolesAjax = Class.create();


getRolesAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {


getRole: function(){


var isITIL, isAPUSER, isANYGRPROLE;


var grGroup = new GlideRecord('sys_group_has_role');


grGroup.addQuery('group', this.getParameter('sysparm_group'));


grGroup.query();


while(grGroup.next()){


var grUser = new GlideRecord('sys_user_has_role');


grUser.addQuery('user', this.getParameter('sysparm_requestedby'));


if((grGroup.getDisplayValue('role') == 'itil')){


grUser.addQuery('role', grGroup.getValue('role'));


grUser.query();


if(grUser.next()){


if((grUser.getDisplayValue('role') == 'itil')){


gs.log('isITIL = true');


isITIL = true;


}


}


else


isITIL = false;


}


if((grGroup.getDisplayValue('role') == 'approver_user')){


grUser.addQuery('role', grGroup.getValue('role'));


grUser.query();


if(grUser.next()){


if((grUser.getDisplayValue('role') == 'approver_user')){


gs.log('isAPUSER = true');


isAPUSER = true;


}


}


else


isAPUSER = false;


}


if(grGroup.getDisplayValue('role') != 'approver_user' && grGroup.getDisplayValue('role') != 'itil')


isANYGRPROLE = true;


}


if(isITIL == true || isAPUSER == true || isANYGRPROLE == true)


return 'Success';


else if(isITIL == false && isAPUSER == false)


return 'Approver User and ITIL Role is required for Group Access.';


else if(isITIL == false || isAPUSER == false)


{


if(isITIL == false)


return 'ITIL Role is required for Group Access.';


else if(isAPUSER == false)


return 'Approver User Role is required for Group Access.';


}


},


type: 'getRolesAjax'


});





Client Script:


function onChange(control, oldValue, newValue, isLoading, isTemplate) {


if (isLoading || newValue === '') {


return;


}


var ga = new GlideAjax('getRolesAjax');


ga.addParam('sysparm_name','getRole');


ga.addParam('sysparm_group', g_form.getValue('assignment_group'));


ga.addParam('sysparm_requestedby', g_form.getValue('requested_by'));


ga.getXML(AsyncCall);


}


function AsyncCall(response) {


var answer = response.responseXML.documentElement.getAttribute("answer");


g_form.addInfoMessage(answer);


}



Thank you so much Shishir!!!!! 🙂


I will try this out for the messages!


I really really appreciate all your help!


Tricia


Thank you Shishir!!!


I got everything working:-)


You're the best!!


Tricia


Shishir,



I almost figured out returning the custom message with json,


I added the   following in the script include after the isANYGRPROLE = true


and the below in my client script


I dont think I have the script include json correct


So I want a custom message based on if they need the itil role or if they need the approver+user role, or if they need both


If I can get one to work I should be good with the others


any idea what I am doing wrong?


Thank you



}


else if(grGroup.getDisplayValue('role') != 'approver_user' || grGroup.getDisplayValue('role') != 'itil'){


if(isITIL == false && isAPUSER == false)


isANYGRPROLE = true;



}



else if(grGroup.getDisplayValue('role') == 'itil'){


if(isITIL == false){



var retNoItilRole = {};


retNoItilRole = 'ITIL role license required for access to this Group';


return new global.JSON().encode(retNoItilRole);


}


}


}



And then added this to the client script to test


function AsyncCall(response) {


var answer = response.responseXML.documentElement.getAttribute("answer");



answer = answer.evalJSON(); //Transform the JSON string to an object


g_form.addInfoMessage(answer);