Based on the date, an email notification should be sent to a specific group in catalogue form.

Sravani47
Tera Contributor

We have one catalogue form in that catalogue with one "Specify end date of roles access" Date field, and an email notification should be sent to a specific group based on that date.

 

Please find the Catalogue form screen shot, This date is always a future date, and only on that date is an email notification sent to the group.

Sravani47_0-1668615941270.png

 

Please help me on this how to do this requirement.

1 ACCEPTED SOLUTION

Hi @Sravani47,

 

Try this updated scripts and modified it accordingly.

var gr = new GlideRecord('sc_req_item');
gr.addQuery('cat_item', "sys_id_of catalog_item");
gr.query();
while (gr.next()) {
	var temp = gr.variables.end_date_of_roles_access.toString();

	if (new GlideDateTime(temp).getDate.getNumericValue() == new GlideDateTime(temp).getDate().getNumericValue()) {
	    
	//	gs.info("RITM Number: "+ gr.number + new GlideDateTime(temp).getDate.getNumericValue() + " - " + new GlideDateTime(temp).getDate().getNumericValue())
		gs.eventQueue('Request.RoleRevoke.Enddata', gr, gr.assigned_to.toString()); // fire this events

	}
}

 

Thanks,
Sagar Pagar

The world works with ServiceNow

View solution in original post

23 REPLIES 23

Chances that line 6 would run at the exact time when that statement returns true are quite random.

Change it to:

gs.nowDateTime() >== gr.end_date_of_roles_access

 

Again, would suggest not to run this job every second.

Please make it correct or helpful if this solves or help you with your issue for other to make use it.

Thanks & Regards,
Vikrant Sharma

vikrantsharma
Kilo Guru

Hi, 

 

I would recommend adding an encoded query when you are doing a glide record on sc_req_item, to only query the record where the current time is ==> then End date.

This will also be effective to only iterate as many time as required, rather then querying on all active record.

 

I would also recommend this to run only once a day, off hours, to have less performance impact.

 

Please make it correct or helpful if this solves or help you with your issue for other to make use it.

Thanks & Regards,
Vikrant Sharma

Hi @Sravani47,

 

Try this updated scripts and modified it accordingly.

var gr = new GlideRecord('sc_req_item');
gr.addQuery('cat_item', "sys_id_of catalog_item");
gr.query();
while (gr.next()) {
	var temp = gr.variables.end_date_of_roles_access.toString();

	if (new GlideDateTime(temp).getDate.getNumericValue() == new GlideDateTime(temp).getDate().getNumericValue()) {
	    
	//	gs.info("RITM Number: "+ gr.number + new GlideDateTime(temp).getDate.getNumericValue() + " - " + new GlideDateTime(temp).getDate().getNumericValue())
		gs.eventQueue('Request.RoleRevoke.Enddata', gr, gr.assigned_to.toString()); // fire this events

	}
}

 

Thanks,
Sagar Pagar

The world works with ServiceNow

Few Catalogue forms , the below code is working.

var gr1 = new GlideRecord('sc_req_item');
gr1.addQuery('cat_item', 'Sys ID of catalogue item');
gr1.query();
while (gr1.next()) {
if (gr1.variables.end_date_of_roles_access == new GlideDateTime().getDate())
{
gs.eventQueue('Request.RoleRevoke.Enddata', gr1, gr1.assigned_to.toString());
}
}