Filter User with Title in Script Include

Community Alums
Not applicable

Hi There,

 

I have a requirement to filter users having 'Regional Director' or 'Regionsdirektør' title in user table and assign them approver role.

 

We already have scheduled script which runs daily to scan the users who need approver role and the functions we have defined in script include. I have to add one more function to the script which is to assign approver role to the users having 'Regional Director' or 'Regionsdirektør' title.

 

I tried adding the below function to the script include but its not working

(Note: All functions are working correctly except the below function. I have added the new function to the end of the script include)

 

New Function:

 

 _isRegionalDirector: function(userRecord) {
        var grTitle = new GlideRecord("sys_user");
        grTitle.addEncodedQuery('title='+ userRecord.title('Regional Director', 'Regionsdirektør'));
        grTitle.query();
        //if(grTitle.title=='Regional Director'|| grTitle.title=='Regionsdirektør')
        gs.log("The list of stakeholders is: "+grTitle);
        return grTitle.next();
    },
 
Script Include:
 
var AssignApprover = Class.create();
AssignApprover.prototype = {
    initialize: function() {
        this.roleAssignmentGroup = "fdec78064736a91013e2df27e26d430e";
    },
 
    /**
     * Add or remove approves roles for a given user.
     * @Param {GlideRecord} userRecord
     */
    assignApprover: function(userRecord) {
        if (this.requireApprover(userRecord)) {
            this._addGroupMember(userRecord);
        } else {
            this._removeGroupMember(userRecord);
        }
    },
 
    /**
     * validates all existing approver role assignments and removes unecessary ones.
     * Note will add/remove users from the designated group in this script include only.
     */
    ValidateApprovers: function() {
        var grUsrHasRole = new GlideRecord("sys_user_has_role");
        grUsrHasRole.addEncodedQuery("role.nameSTARTSWITHapprover_user");
        grUsrHasRole.query();
 
        while (grUsrHasRole.next()) {
            this.assignApprover(grUsrHasRole.user.getRefRecord());
        }
    },
 
    /**
     * returns true if the user requires approver rights to operate.
     * @Param {GlideRecord} userRecord
     * @returns {boolean}
 
     */
    requireApprover: function(userRecord) {
        if (this._isActive(userRecord)) {
            //delegation
            var haveDelegation = this._haveActiveDelegation(userRecord);
            //Manager
            var isManagerHQ = this._isManager(userRecord);
            //branch manager
            var isBranchManager = this._isBranchManager(userRecord);
            //regional director
            var isRegionalDirector = this._isRegionalDirector(userRecord);
 
            return haveDelegation || isBranchManager || isManagerHQ || isRegionalDirector || false;
        }
    },
 
    /**
     * Will evaluate all users and assign approver if needed.
     * NB. only required for intial go live.
     * @Example 
     * var ut = new AssignApprover()
     * ut.initializeApprover("country=DA^ORcountry=NO^ORcountry=SE^active=true")
     */
    initializeApprover: function(encodedQuery) {
        var grUser = new GlideRecord("sys_user");
 
        grUser.addEncodedQuery(encodedQuery);
        grUser.query();
 
        while (grUser.next()) {
            this.assignApprover(grUser);
        }
    },
 
    /**
     * add user to the designated approver group.
     * @Param {GlideRecord} userRecord
     */
    _addGroupMember: function(userRecord) {
        //ensure users is only added once.
        var grGrpMemValidate = new GlideRecord("sys_user_grmember");
        grGrpMemValidate.addEncodedQuery(
            "user=" +
            userRecord.getUniqueValue() +
            "^group=" +
            this.roleAssignmentGroup
        );
        grGrpMemValidate.query();
 
        if (!grGrpMemValidate.next()) {
            var grGrpMemAdd = new GlideRecord("sys_user_grmember");
            grGrpMemAdd.initialize();
            grGrpMemAdd.setValue("user", userRecord.getUniqueValue());
            grGrpMemAdd.setValue("group", this.roleAssignmentGroup);
            grGrpMemAdd.insert();
        }
    },
 
    /**
     * removes user from the designated approver group.
     * @Param {GlideRecord} userRecord
     */
    _removeGroupMember: function(userRecord) {
        //ensure users is only added once.
        var grGrpMemDelete = new GlideRecord("sys_user_grmember");
        grGrpMemDelete.addEncodedQuery(
            "user=" +
            userRecord.getUniqueValue() +
            "^group=" +
            this.roleAssignmentGroup
        );
        grGrpMemDelete.query();
        //in case of dublicates.
        grGrpMemDelete.deleteMultiple();
    },
 
    /**
     * Retrieves all delegation entries with end after today for a user
     * @Param {Glidere} userRecord
     * @return {boolean}
     */
    _haveActiveDelegation: function(userRecord) {
        var grGranDel = new GlideRecord("sys_granular_delegate");
        grGranDel.addEncodedQuery(
            "ends>javascript:gs.endOfToday()^delegate=" + userRecord.getUniqueValue()
        );
 
        grGranDel.query();
        return grGranDel.next();
    },
 
    /**
     * Returns true if user is assigned branch manager on 1 or more locations.
     * @Param {GlideRecord} userRecord
     * @return {boolean}
     */
    _isBranchManager: function(userRecord) {
        var grLoc = new GlideRecord("cmn_location");
        return grLoc.get("u_branch_manager", userRecord.getUniqueValue());
    },
 
    /**
     * returns true if user is set as manager for 1 or more users.
     * @Param {GlideRecord} userRecord
     * @returns {boolean}
     */
    _isManager: function(userRecord) {
        var grLoc = new GlideRecord('cmn_location');
        var grUsr = new GlideRecord("sys_user");
        grUsr.addEncodedQuery('manager=' + userRecord.getUniqueValue());
        grUsr.query();
        grLoc.addEncodedQuery('u_location_hq=true^sys_id=' + userRecord.location);
        grLoc.query();
 
        return grLoc.next() && grUsr.next();
    },
 
    /**
     * returns true if user is active and have signed on
     * @Param {GlideRecord} userRecord
     * @returns {boolean}
     */
    _isActive: function(userRecord) {
        return userRecord.active && userRecord.last_login;
    },
 
    /**
     * returns true if user have "Regional Director" title
     * @Param {GlideRecord} userRecord
     * @returns {boolean}
     */
    _isRegionalDirector: function(userRecord) {
var grTitle = new GlideRecord("sys_user");
grTitle.addEncodedQuery('title='+ userRecord.title('Regional Director', 'Regionsdirektør'));
        grTitle.query();
//if(grTitle.title=='Regional Director'|| grTitle.title=='Regionsdirektør')
gs.log("The list of stakeholders is: "+grTitle);
        return grTitle.next();
    },
 
    type: "AssignApprover"
};
5 REPLIES 5

Community Alums
Not applicable

Hello @Maddysunil ,

 

Can you help me here please.

 

Thanks,

Tejas

 

Thanks,

Tejas