Daily Email Summary for Active Tickets Assigned to Users

Created a summary email for Active ServiceNow tasks assigned to users. (Code could be optimized but it’s a good starting point.)

Create Event
Events -> Registry -> New
Name: my.active.tasks.daily

Notification
Name: Tasks assigned to me daily digest
Table: Task
Send When: Event is fired
Event: my.active.tasks.daily
Event parm 1 contains recipient: True

Subject: Summary of Active Tickets assigned to ${event.parm2}
Message HTML: ${mail_script:task.assigned.to.me.digest}

Email Script
Name: task.assigned.to.me.digest

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

    var tsk = new GlideRecord("task");

    tsk.addEncodedQuery('sys_class_name=incident^ref_incident.incident_stateIN1,2,3^NQsys_class_name=problem^ORsys_class_name=sc_task^ORsys_class_name=change_request^ORsys_class_name=change_task^active=true');
    tsk.addQuery('assigned_to', event.parm1);
    tsk.orderBy('sys_class_name');
    tsk.query();
    template.print('<table style = "font-family: arial, sans-serif; border-collapse: collapse; width: 100%;"> <tr>  <th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> Number </th><th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> Task Type </th>  <th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> Short Description </th> <th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> State </th> <th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> Opened </th>  <th style = "border: 1px solid #dddddd; text-align: left; padding: 8px;"> Last Updated </th> </tr>');
    while (tsk.next()) {
		

// age since opened
 var start = new GlideDateTime(tsk.opened_at.getDisplayValue());
var end = new GlideDateTime(gs.nowDateTime());
var dur = GlideDateTime.subtract(start, end);
var days = dur.getRoundedDayPart();

		// age since updated
 var start2 = new GlideDateTime(tsk.sys_updated_on.getDisplayValue());
var end2 = new GlideDateTime(gs.nowDateTime());
var dur2 = GlideDateTime.subtract(start, end);
var days2 = dur.getRoundedDayPart();
		

		
        template.print('<tr><td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + '<a href="https://' + gs.getProperty('instance_name') + '.service-now.com/nav_to.do?uri=task.do?sys_id=' + tsk.sys_id + '">' + tsk.number + '</td>');
        template.print('<td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + tsk.sys_class_name.getDisplayValue() + '</td>');
        template.print('<td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + tsk.short_description + '</td>');
        template.print('<td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + tsk.state.getDisplayValue() + '</td>');
        template.print('<td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + new GlideDateTime(tsk.opened_at).getDate().getByFormat('MM/dd/yyyy') + '</td>');
		template.print('<td style = "border: 1px solid #dddddd; text-align: left; padding: 8px;">' + new GlideDateTime(tsk.sys_updated_on).getDate().getByFormat('MM/dd/yyyy') + '</td></tr>');
    }
    template.print('</table>');

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

Scheduled Job
Name: Daily Tasks assigned to me list
Run: Daily
Condition:

var answer = false;


var now = new GlideDateTime();


if(now.getDayOfWeekUTC() !=6 && now.getDayOfWeekUTC() !=7 )       // this scheduled job will run only on Weekdays


{


      answer = true;


}


Run this Script:

var resource = new GlideRecord("sys_user");
resource.query();
while (resource.next()) {
	var tsk = new GlideRecord('task');
tsk.addEncodedQuery('sys_class_name=incident^ref_incident.incident_stateIN1,2,3^NQsys_class_name=problem^ORsys_class_name=sc_task^ORsys_class_name=change_request^ORsys_class_name=change_task^active=true');
tsk.addQuery('assigned_to',resource.sys_id);
tsk.query();
if (tsk.next()) {
    gs.log('\n;');
    gs.log(tsk.assigned_to.name);
    gs.eventQueue("my.active.tasks.daily", tsk, tsk.assigned_to, tsk.assigned_to.name);

}

}


Leave a comment

Latest Posts