Name

sn_sow_chg.UpcomingLinkProvider_Changes

Description

Implements extension point sn_sow.UpcomingLinkProvider

Script

var UpcomingLinkProvider_Changes = Class.create();
UpcomingLinkProvider_Changes.prototype = {
  type: 'UpcomingLinkProvider_Changes',
  initialize: function() {},
  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 TODAY_QUERY = '^start_dateONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()';
      var TOMORROW_QUERY = '^start_dateONTomorrow@javascript:gs.beginningOfTomorrow()@javascript:gs.endOfTomorrow()';
      var encodedQuery = null;
      var listTitle = gs.getMessage("Changes");
      if ('beginningOfToday' == request.from && 'endOfToday' == request.to) {
          encodedQuery = PREFIX_QUERY + TODAY_QUERY;
      } else if ('beginningOfTomorrow' == request.from && 'endOfTomorrow' == request.to) {
          encodedQuery = PREFIX_QUERY + TOMORROW_QUERY;
      } else {
          throw gs.getMessage("Unsupported date range");
      }
  	var LIMIT = 10;
      var gr = new GlideRecordSecure('change_request');
      gr.addEncodedQuery(encodedQuery);
  	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} change", [count]) + "";
          } else {
              if (count > LIMIT) {
                  msg = gs.getMessage("More than {0} changes", [LIMIT.toString()]) + "";
              } else {
                  msg = gs.getMessage("{0} changes", [count]) + "";
              }
          }
          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": "change-outline",
                  "align": "center"
              },
              "opensWindow": false,
              "configAria": {},
              "download": false
          };
          items.push(item);
      }
      return items;
  }
};

Sys ID

b40ee4c3c3e63010965e070e9140dd0e

Offical Documentation

Official Docs: