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