Name

global.AWADocumentReevaluationUtils

Description

Utility to query all queued work items and fire event if work item s document condition does not match the corresponding service channel condition anymore

Script

var AWADocumentReevaluationUtils = Class.create();
AWADocumentReevaluationUtils.prototype = {
  initialize: function() {},

  queueDocumentsToReevaluate: function() {
      var workItemDocuments = [];

      var workItemGR = new GlideRecord('awa_work_item');
      workItemGR.addQuery('state', 'NOT IN', 'accepted, cancelled');
      workItemGR.orderBy('queue.service_channel');
      workItemGR.setWorkFlow(false);
      workItemGR.query();
      workItemGR.setWorkFlow(true);

      var lastChannel = null;
      var previousDocumentTable = null;

      while (workItemGR.next()) {
          if (workItemGR.queue && workItemGR.queue.service_channel && workItemGR.document_table) {

              if (lastChannel && lastChannel !== workItemGR.queue.service_channel.getValue('sys_id')) {
                  this.queueEvent(this.retrieveDocumentsForReevaluation(previousDocumentTable, workItemDocuments, lastChannel), lastChannel);
                  workItemDocuments = [];
              }
              workItemDocuments.push(workItemGR.document_id.getValue('sys_id'));
              lastChannel = workItemGR.queue.service_channel.getValue('sys_id');
              previousDocumentTable = workItemGR.document_table.getValue('sys_class_name');
          }
      }
      this.queueEvent(this.retrieveDocumentsForReevaluation(previousDocumentTable, workItemDocuments, lastChannel), lastChannel);

  },

  retrieveDocumentsForReevaluation: function(documentTable, workItemDocuments, serviceChannel) {
      if (!documentTable || !workItemDocuments || workItemDocuments.length == 0 || !serviceChannel) {
          return;
      }
      var documentGR = new GlideRecord(documentTable);
      documentGR.addQuery('sys_id', 'IN', workItemDocuments);
      documentGR.addEncodedQuery(sn_awa.ServiceChannelUtils.getServiceChannelConditions(serviceChannel));
      documentGR.query();
      while (documentGR.next()) {
          var workItemIndex = workItemDocuments.indexOf(documentGR.getValue('sys_id'));
          if (workItemIndex > -1) {
              workItemDocuments.splice(workItemIndex, 1);
          }
      }
      return workItemDocuments;
  },


  // query docs and create events for last channel, maybe with helper method(s) to reuse code
  queueEvent: function(documentIds, serviceChannel) {
      if (!documentIds || documentIds.length == 0 || !serviceChannel) {
          return;
      }
      for (var i = 0; i < documentIds.length; i++) {
          gs.eventQueue('awa-reevaluation', null, serviceChannel, documentIds[i], 'awa');
          new AWALoggingUtils().atInfo().log('Queued awa-reevaluation event for document ' + documentIds[i]+ ', service channel '+serviceChannel);
      }
  },
  type: 'AWADocumentReevaluationUtils'
};

Sys ID

c91081c4eb22211043ad0d94d8522873

Offical Documentation

Official Docs: