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