|
| 1 | +(function() { |
| 2 | + var groupName = 'Incident Management'; |
| 3 | + var emailFrom = 'no-reply@yourcompany.com'; |
| 4 | + var emailSubject = 'ServiceNow Daily Summary'; |
| 5 | + |
| 6 | + var todayStart = new GlideDateTime(); |
| 7 | + todayStart.setDisplayValue(gs.beginningOfToday()); |
| 8 | + |
| 9 | + var dayAgo = new GlideDateTime(); |
| 10 | + dayAgo.addDaysUTC(-1); |
| 11 | + |
| 12 | + // Open Incidents (not closed) |
| 13 | + var grOpenInc = new GlideAggregate('incident'); |
| 14 | + grOpenInc.addAggregate('COUNT'); |
| 15 | + grOpenInc.addQuery('state', '!=', '7'); |
| 16 | + grOpenInc.query(); |
| 17 | + grOpenInc.next(); |
| 18 | + var openIncidents = grOpenInc.getAggregate('COUNT'); |
| 19 | + |
| 20 | + // Pending Approvals |
| 21 | + var grApprovals = new GlideAggregate('sysapproval_approver'); |
| 22 | + grApprovals.addAggregate('COUNT'); |
| 23 | + grApprovals.addQuery('state', 'requested'); |
| 24 | + grApprovals.query(); |
| 25 | + grApprovals.next(); |
| 26 | + var pendingApprovals = grApprovals.getAggregate('COUNT'); |
| 27 | + |
| 28 | + // SLAs Breached Today |
| 29 | + var grSLA = new GlideAggregate('task_sla'); |
| 30 | + grSLA.addAggregate('COUNT'); |
| 31 | + grSLA.addQuery('planned_end_time', '>=', todayStart); //Breach time is the field Label |
| 32 | + grSLA.addQuery('stage', 'breached'); |
| 33 | + grSLA.query(); |
| 34 | + grSLA.next(); |
| 35 | + var breachedSLAs = grSLA.getAggregate('COUNT'); |
| 36 | + |
| 37 | + // High Priority Incidents (P1 & P2 open) |
| 38 | + var grHighPri = new GlideAggregate('incident'); |
| 39 | + grHighPri.addAggregate('COUNT'); |
| 40 | + grHighPri.addQuery('priority', 'IN', '1,2'); |
| 41 | + grHighPri.addQuery('state', '!=', '7'); |
| 42 | + grHighPri.query(); |
| 43 | + grHighPri.next(); |
| 44 | + var highPriorityOpen = grHighPri.getAggregate('COUNT'); |
| 45 | + |
| 46 | + // Incidents unassigned > 24 hours |
| 47 | + var grUnassigned = new GlideAggregate('incident'); |
| 48 | + grUnassigned.addAggregate('COUNT'); |
| 49 | + grUnassigned.addQuery('assigned_to', 'ISEMPTY'); |
| 50 | + grUnassigned.addQuery('opened_at', '<=', dayAgo); |
| 51 | + grUnassigned.addQuery('state', '!=', '7'); |
| 52 | + grUnassigned.query(); |
| 53 | + grUnassigned.next(); |
| 54 | + var unassignedOld = grUnassigned.getAggregate('COUNT'); |
| 55 | + |
| 56 | + var emailBody = ''; |
| 57 | + emailBody += ' *ServiceNow Daily Summary (' + gs.nowDate() + ')*\n\n'; |
| 58 | + emailBody += '• Open Incidents: ' + openIncidents + '\n'; |
| 59 | + emailBody += '• Pending Approvals: ' + pendingApprovals + '\n'; |
| 60 | + emailBody += '• SLAs Breached Today: ' + breachedSLAs + '\n'; |
| 61 | + emailBody += '• High Priority Incidents (P1/P2): ' + highPriorityOpen + '\n'; |
| 62 | + emailBody += '• Unassigned Incidents > 24h: ' + unassignedOld + '\n'; |
| 63 | + emailBody += '\n'; |
| 64 | + var recipients = []; |
| 65 | + |
| 66 | + var group = new GlideRecord('sys_user_group'); |
| 67 | + if (group.get('name', groupName)) { |
| 68 | + var m2m = new GlideRecord('sys_user_grmember'); |
| 69 | + m2m.addQuery('group', group.sys_id); |
| 70 | + m2m.query(); |
| 71 | + while (m2m.next()) { |
| 72 | + var user = m2m.user.getRefRecord(); |
| 73 | + if (user.active && user.email) { |
| 74 | + recipients.push(user.email.toString()); |
| 75 | + } |
| 76 | + } |
| 77 | + } else { |
| 78 | + gs.error('Group "' + groupName + '" not found. No emails sent.'); |
| 79 | + return; |
| 80 | + } |
| 81 | + |
| 82 | + if (recipients.length === 0) { |
| 83 | + gs.info('No active users with email found in group "' + groupName + '". No emails sent.'); |
| 84 | + return; |
| 85 | + } |
| 86 | + |
| 87 | + for (var i = 0; i < recipients.length; i++) { |
| 88 | + var email = new GlideRecord('sys_email'); |
| 89 | + email.initialize(); |
| 90 | + email.type = 'send-ready'; |
| 91 | + email.recipients = recipients[i]; |
| 92 | + email.from = emailFrom; |
| 93 | + email.subject = emailSubject; |
| 94 | + email.body = emailBody; |
| 95 | + email.insert(); |
| 96 | + } |
| 97 | + |
| 98 | +})(); |
0 commit comments