Multiple Email Notification

Ni_a Sy
Tera Contributor

A notification that will remind users that haven’t login to their account for the last 4 months and a scheduled job that will trigger the notification created above every 15th of the month. Another 2nd notification that will inform the users that received the 1st notification. A Scheduled job that will trigger every 30th of the month with the following: 
Store the roles of the user (haven’t login to their account for the last 4 months) in custom table named Archived User Roles (u_ar_sys_user_has_role)  Trigger the notification mentioned and remove roles of the user/s.
What I did:

I  created event:remind.user.login
I created email Notification: Eval Notification- haven’t login
I created Schedule Job:

===

var gr = new GlideRecord('sys_user');
gr.addNotNullQuery('last_login_timeRELATIVELT@month@ahead@4');
gr.query();
var gdt = new GlideDateTime();
gdt.addDaysUTC(-360);
while(gr.next())
{
if(gr.getValue('last_login') < gdt.getLocalDate())
{
gs.eventQueue('remind.user.login', gr, gr.user_name, gr.email);
}
}

===

Not working. What I am missing? Thank you.

3 ACCEPTED SOLUTIONS

Muhammad Khan
Mega Sage
Mega Sage

@Ni_a Sy 

 

I have tried to implement your requirement and it seems to be working for me. Below are the steps which I have used for 1st notification.

  1. Created an event for 1st notification which will be triggered on 15th of every month. MuhammadKhan_0-1665309468021.png

     

  2. Created 1st Notification which will be sent when 1st event will be triggered.  MuhammadKhan_2-1665309583985.pngMuhammadKhan_4-1665309653506.pngMuhammadKhan_6-1665309708613.png
  3. Created system property which will store emails of those users to whom the 1st notification was sent. 

    MuhammadKhan_7-1665309840318.png
  4. Created 1st scheduled job which will trigger the 1st event. 

    MuhammadKhan_8-1665309965031.png

 

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
grUser.addEncodedQuery('last_loginRELATIVELT@month@ago@4');
grUser.query();

var emails = [];
while(grUser.next()){
	if(!grUser.email.nil()){
		gs.eventQueue('community.answer.last.login.notification', grUser, grUser.getValue('email'));
		emails.push(grUser.getValue('email'));
	}
}

if(emails.length > 0){
	gs.setProperty('community.answer.last.login.notification', emails.join());
}else{
	gs.setProperty('community.answer.last.login.notification', '');
}

 

 

 

 

Output/Result:

MuhammadKhan_9-1665310129153.png

 

 

Below are the steps which I have used for 2nd notification.

  1. Created 2nd event for 2nd notification which will be triggered on 30th of every month. MuhammadKhan_10-1665310243569.png
  2. Created 2nd Notification which will be sent when 2nd event will be triggered. MuhammadKhan_11-1665310318630.pngMuhammadKhan_12-1665310346774.pngMuhammadKhan_13-1665310394132.png
  3. Created 2nd scheduled job which will trigger the 2nd event. 

           MuhammadKhan_14-1665310493110.png

 

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
var emails = gs.getProperty('community.answer.last.login.notification');
grUser.addEncodedQuery('emailIN' + emails);
grUser.query();

while (grUser.next()) {
    gs.eventQueue('community.answer.last.login.2nd.notifica', grUser, grUser.getValue('email'));
	
	/*var grGroup = new GlideRecord('sys_user_grmember');
	grGroup.addQuery('user', grUser.getValue('sys_id'));
	grGroup.query();
	while(grGroup.next()){
		grGroup.deleteRecord();
	}*/
		
}

gs.setProperty('community.answer.last.login.notification', '');​

 

 

 

 

Output/Result:

MuhammadKhan_15-1665310554290.png

 

 

Above steps might help you fulfil your requirement.

View solution in original post

Hello,

 

As the script is written in scheduled job you can use execute now to trigger the schedule job

 

Saurav11_0-1665320965279.png

 

So first do the execute now for 1st scheduled job and check if the notification got triggered for users by

 

Going to sent in Navigation:-

 

Saurav11_1-1665321114008.png

 

And then see if all the notification go triggered to the users or not

 

Saurav11_2-1665321147515.png

 

Then once you confirm that you can trigger the second scheduled job by clicking on execute button

 

Saurav11_3-1665321193229.png

 

And then again go to sent and see if the second notification got triggered or not:-

 

Saurav11_5-1665321290545.png

 

 

Please mark my answer as correct based on Impact.

 

View solution in original post

I see that you have written the System property name as  system.property.last.login.notification

 

and in the script you are using last.login.notification, please check if you are using the correct name

View solution in original post

11 REPLIES 11

Check if is system properties named "community.answer.last.login.notification" has the emails as per the script.

 

Then also check if the second event is getting triggered or not:-

 

Go to event by searching for event in navigation under system logs

 

Saurav11_1-1665324375278.png

 

And check if you are bale to see the second event is getting triggered or not.

 

Saurav11_2-1665324427986.png

 

Please mark my answer as correct based on Impact.

Ni_a Sy
Tera Contributor

Still no luck:

Here are the step and name of what I did:

1.Event Registry Name: last.login.notification
2.Email Notification name:Last Login Notification
3.System property name:system.property.last.login.notification
4.Scheduled Job Name: Send Notification to user whom last login before 4 months


================
1. Event Registry Name: last.login.2nd.notif
2.Email Notification Name: Last Login 2nd Notification
3.Scheduled Job Name: Send Second Notification to user whom last login before 4 months and remove roles

 

Here is the script:

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
var emails = gs.getProperty('last.login.notification');
grUser.addEncodedQuery('emailIN' + emails);
grUser.query();

while (grUser.next()) {
gs.eventQueue('last.login.2nd.notif', grUser, grUser.getValue('email'));

/*var grGroup = new GlideRecord('sys_user_grmember');
grGroup.addQuery('user', grUser.getValue('sys_id'));
grGroup.query();
while(grGroup.next()){
grGroup.deleteRecord();
}*/

}

gs.setProperty('last.login.notification', '');

I see that you have written the System property name as  system.property.last.login.notification

 

and in the script you are using last.login.notification, please check if you are using the correct name

Ni_a Sy
Tera Contributor

Thank you so much. Everything is working perfectly.

Ni_a Sy
Tera Contributor

How can I store the roles of the user (haven’t login to their account for the last 4 months) in custom table named Archived User Roles (u_ar_sys_user_has_role) ?

 

Table details:

Archived User Roles (u_ar_sys_user_has_role) 

Field 1- “User” 

Field 2- “Role”