Name
sn_sow_inc.SOWUpcomingLinkProvider_Incidents
Description
Implements extension point sn_sow.UpcomingLinkProvider
Script
var SOWUpcomingLinkProvider_Incidents = Class.create();
SOWUpcomingLinkProvider_Incidents.prototype = {
type: 'SOWUpcomingLinkProvider_Incidents',
initialize: function() {},
_buildLink: function(gr, count, msg, listTitle, icon) {
var route = {
route: 'simplelist',
fields: {
table: gr.getTableName()
},
params: {
listTitle: listTitle,
query: gr.getEncodedQuery()
}
};
if (1 == count) {
route = {
route: 'record',
fields: {
table: gr.getTableName(),
sysId: gr.getUniqueValue()
}
};
}
var item = {
label: msg,
type: 'route',
value: route,
"startsWith": {
"icon": icon,
"align": "center"
},
"opensWindow": false,
"configAria": {},
"download": false
};
return item;
},
process: function(request, fromDateTime, toDateTime, assginToQuery) {
// Return array of objects per the link set api
// https://developer.servicenow.com/dev.do#!/reference/now-experience/quebec/shared-components/now-link-set/api
var PREFIX_QUERY = 'active=true^' + assginToQuery;
var SLA_AT_RISK_TODAY_QUERY = '^JOINincident.sys_id=task_sla.task!planned_end_timeONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()';
var SLA_AT_RISK_TOMORROW_QUERY = '^JOINincident.sys_id=task_sla.task!planned_end_timeONTomorrow@javascript:gs.beginningOfTomorrow()@javascript:gs.endOfTomorrow()';
var SLA_AT_RISK_SUFFIX_QUERY = '^JOINincident.sys_id=task_sla.task!has_breached=false';
var SLA_BREACH_SUFFIX_QUERY = '^JOINincident.sys_id=task_sla.task!has_breached=true';
var encodedSlaAtRiskQuery = null;
var encodedSlaBreachQuery = null;
var listTitle = gs.getMessage("Incident SLAs");
if ('beginningOfToday' == request.from && 'endOfToday' == request.to) {
encodedSlaAtRiskQuery = PREFIX_QUERY + SLA_AT_RISK_TODAY_QUERY + SLA_AT_RISK_SUFFIX_QUERY;
encodedSlaBreachQuery = PREFIX_QUERY + SLA_BREACH_SUFFIX_QUERY;
} else if ('beginningOfTomorrow' == request.from && 'endOfTomorrow' == request.to) {
encodedSlaAtRiskQuery = PREFIX_QUERY + SLA_AT_RISK_TOMORROW_QUERY;
} else {
throw gs.getMessage("Unsupported date range");
}
var LIMIT = 10;
var gr = new GlideRecordSecure('incident');
gr.addEncodedQuery(encodedSlaAtRiskQuery);
gr.setLimit(LIMIT + 1);
gr.query();
var count = gr.next() ? gr.getRowCount() : 0;
var items = [];
if (count > 0) {
var msg = null;
if (1 == count) {
msg = gs.getMessage("{0} incident with SLA at risk", [count]) + "";
} else {
if (count > LIMIT) {
msg = gs.getMessage("More than {0} incidents with SLA at risk", [LIMIT.toString()]) + "";
} else {
msg = gs.getMessage("{0} incidents with SLA at risk", [count]) + "";
}
}
items.push(this._buildLink(gr, count, msg, listTitle, "clock-outline"));
}
if (false == gs.nil(encodedSlaBreachQuery)) {
var breachGr = new GlideRecordSecure('incident');
breachGr.addEncodedQuery(encodedSlaBreachQuery);
gr.setLimit(LIMIT + 1);
breachGr.query();
var breachCount = breachGr.next() ? breachGr.getRowCount() : 0;
if (breachCount > 0) {
var breachMsg = null;
if (1 == breachCount) {
breachMsg = gs.getMessage("{0} incident with breached SLA", [breachCount]) + "";
} else {
if (breachCount > LIMIT) {
breachMsg = gs.getMessage("More than {0} incidents with breached SLA", [LIMIT.toString()]) + "";
} else {
breachMsg = gs.getMessage("{0} incidents with breached SLA", [breachCount]) + "";
}
}
items.push(this._buildLink(breachGr, breachCount, breachMsg, listTitle, "exclamation-triangle-outline"));
}
}
return items;
}
};
Sys ID
96a9e26cb7723010965e56bf7e11a9a8