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

Offical Documentation

Official Docs: