[object Object] error in notification.Values not displaying correctly in the Email.(License Removal)

vishnumaaya
Tera Contributor

Hi,

Below is the scheduled job script written to remove users from support groups not using itil license.

// Define groups to exclude
var excludedgrps = ['CMDB and ITSM Readers', 'Liberty Mutual Business Stakeholders'];

// Query sys_user_has_role for inactive users that have the itil role, not VIP, not web service access
// If a user never logged in OR not logged in in the last 30 days, not added in the role in the last 7 days
var gr = new GlideRecord('sys_user_has_role');
gr.addEncodedQuery('role.name=itil^user.active=true^user.vip=false^user.web_service_access_only=false^user.last_login_timeISEMPTY^ORuser.last_login_time<javascript&colon;gs.beginningOfLast30Days()^sys_created_on<javascript&colon;gs.beginningOfLast7Days()');
gr.query();

gs.info('RIU - Query executed. Number of Users found: ' + gr.getRowCount());
var removedUsers = [];

while (gr.next()) {
    // Find group membership for the user where the group is of type Support
    var groupGr = new GlideRecord('sys_user_grmember');
    groupGr.addEncodedQuery('group.typeCONTAINS1cb8ab9bff500200158bffffffffff62^user=' + gr.user);
    groupGr.query();

    gs.info('RIU - Query executed. Users to be removed: ' + groupGr.getRowCount());
   
    while (groupGr.next()) {
        var groupName = groupGr.group.getDisplayValue();
        // Check if the user belongs to the excluded group
        if (excludedgrps.indexOf(groupName) == -1) {
            gs.info('Removing user from group: ' + gr.user + ' (Sys ID: ' + gr.sys_id + ') from group: ' + groupName);
            removedUsers.push(gr.name + ' (Sys ID: ' + gr.sys_id + ') from group: ' + groupName);
            groupGr.deleteRecord(); // Remove from the group
        }
    }
}
gs.info('RIU - Script execution Completed');

// Trigger event if users were removed
if (removedUsers.length > 0) {
    // Prepare the event parameters
    var eventParams = {
            parm1 : removedUsers.join('\n'),
    };
// Trigger the event for the notification
    gs.eventQueue('inactive_users_removed_event', gr, eventParams);
    gs.info('RIU - Event triggered for inactive users removed');
} else {
    gs.info('RIU - No users were removed');
}

I have created an event - inactive_users_removed_event (on sys_user_has role table) and an email notification (on sys_user_has_role table)

Below is the Email script written.

var removedUsers = event.parm1 || ''; // 'removed_users' passed in event param
var timeStamp = new GlideDateTime().getDisplayValue();

template.print('<p>The following inactive users have been removed from their assigned support groups:</p>');

template.print('<p><strong>Removed Users:</strong></p>');
template.print('<p>' + removedUsers + '</p>');

template.print('<p>This action was taken on <strong>' + timeStamp + '</strong> because these users:</p>');
template.print('<ul>' +
  '<li>Have not logged in at all</li>' +
  '<li>Have not logged in within the past 30 days</li>' +
  '<li>Or were not recently (within the last 7 days) assigned their role</li>' +
  '</ul>');

template.print('<p>Please refer to the system logs for additional details.</p>');

 

The users are removed, email is getting created, I can see in the logs as well. But I want the list of users removed to the groups to be added in the email, which is not working.

timestamp is working fine but Removed Users is not working.

 

In the email, its like Removed Users : [object Object] is populating.

If anyone can help me on this please?

 

Thanks & Regards,

Vaishnavi

9 REPLIES 9

J Siva
Tera Sage

Hi @vishnumaaya 

I've modified few things.
Try the below script. It'll work.

// Define groups to exclude
var excludedgrps = ['CMDB and ITSM Readers', 'Liberty Mutual Business Stakeholders'];

// Query sys_user_has_role for inactive users that have the itil role, not VIP, not web service access
// If a user never logged in OR not logged in in the last 30 days, not added in the role in the last 7 days
var user_role = new GlideRecord('sys_user_has_role'); //Changes the variable. As a best practice we shouldn't use gr [EDITED]
user_role.addEncodedQuery('role.name=itil^user.active=true^user.vip=false^user.web_service_access_only=false^user.last_login_timeISEMPTY^ORuser.last_login_time<javascript&colon;gs.beginningOfLast30Days()^sys_created_on<javascript&colon;gs.beginningOfLast7Days()');
user_role.query();

gs.info('RIU - Query executed. Number of Users found: ' + user_role.getRowCount());
var removedUsers = [];

while (user_role.next()) {
    // Find group membership for the user where the group is of type Support
    var groupGr = new GlideRecord('sys_user_grmember');
    groupGr.addEncodedQuery('group.typeCONTAINS1cb8ab9bff500200158bffffffffff62^user=' + user_role.user);
    groupGr.query();

    gs.info('RIU - Query executed. Users to be removed: ' + groupGr.getRowCount());
   
    while (groupGr.next()) {
        var groupName = groupGr.group.getDisplayValue();
        // Check if the user belongs to the excluded group
        if (excludedgrps.indexOf(groupName) == -1) {
            gs.info('Removing user from group: ' + user_role.user.getValue('name') + ' (Sys ID: ' + user_role.user.sys_id + ') from group: ' + groupName); //Updated this line to show the user name and user sys id [EDITED]
            removedUsers.push(user_role.user.getValue('name') + ' (Sys ID: ' + user_role.user.sys_id + ') from group: ' + groupName); //Updated this line to show the user name and user sys id [EDITED]
            groupGr.deleteRecord(); // Remove from the group
        }
    }
}
gs.info('RIU - Script execution Completed');

// Trigger event if users were removed
if (removedUsers.length > 0) {
    // Prepare the event parameters
    var eventParams = {
            parm1 : removedUsers.join('\n'),
    };
// Trigger the event for the notification
    gs.eventQueue('inactive_users_removed_event', gr, eventParams);
    gs.info('RIU - Event triggered for inactive users removed');
} else {
    gs.info('RIU - No users were removed');
}

 Regards,
Siva

Its showing the same error 😞

Hi @vishnumaaya 
I've tried your scenario in my PDI using some sample data. It's giving the expected outpur. PFB.
1. Event registry: Table = "sys_user_has_role"

JSiva_0-1744889456416.png

 

2. Notifictaion: Table = "sys_user_has_role"

JSiva_1-1744889543738.pngJSiva_2-1744889563241.pngJSiva_3-1744889589266.png

 

3. Email Script:

JSiva_4-1744889656265.png

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
    /* Optional EmailOutbound */
    email, /* Optional GlideRecord */ email_action,
    /* Optional GlideRecord */
    event) {

    // Add your code here
    var removedUsers = event.parm1 || ''; // 'removed_users' passed in event param
    var timeStamp = new GlideDateTime().getDisplayValue();

    template.print('<p>The following inactive users have been removed from their assigned support groups:</p>');

    template.print('<p><strong>Removed Users:</strong></p>');
    template.print(removedUsers.toString().split(',').join('<br />'));

    template.print('<p>This action was taken on <strong>' + timeStamp + '</strong> because these users:</p>');
    template.print('<ul>' +
        '<li>Have not logged in at all</li>' +
        '<li>Have not logged in within the past 30 days</li>' +
        '<li>Or were not recently (within the last 7 days) assigned their role</li>' +
        '</ul>');

    template.print('<p>Please refer to the system logs for additional details.</p>');

})(current, template, email, email_action, event);

4. Background script: Make sure to modify the script as per your requirement. For testing, i just considered users with itil role and last login time is greater than last 7 days. Also add deleteRecord() method wherever required.

var arr = [];

var user_rec = new GlideRecord('sys_user_has_role');
user_rec.addEncodedQuery('user.last_login_timeRELATIVELT@dayofweek@ago@7^role=282bf1fac6112285017366cb5f867469'); // ITIL ROLE & LAST LOGIN IS GREATER THAN LAST 7 DAYS [EDIT THIS AS PER YOUR REQUIREMENT]
user_rec.query();
while (user_rec.next()) {
    this.removeGrpMembership(user_rec.user.sys_id);
    gs.print("User name: " + user_rec.user.name);
}

function removeGrpMembership(user_rec) {
    var user_grp = new GlideRecord('sys_user_grmember');
    user_grp.addEncodedQuery('user=' + user_rec); //[EDIT THIS AS PER YOUR REQUIREMENT]
    user_grp.query();
    while (user_grp.next()) {
        arr.push(user_grp.user.name + ' (Sys ID: ' + user_grp.user.sys_id + ') from group: ' + user_grp.group.name);
		//[ADD REMOVE USER LOGIC HERE]
    }
}

// Trigger event if users were removed
if (arr.length > 0) {
    gs.eventQueue("inactive_users_removed_even", user_rec, arr);
    gs.info('RIU - Event triggered for inactive users removed');
} else {
    gs.info('RIU - No users were removed');
}

 Output:

JSiva_5-1744890087776.png

Regards,
Siva

Notification and event should be created on which table? Is table causing this issue. It still does not work!!