Name
global.LabelCacheCleanupFlow
Description
No description available
Script
var LabelCacheCleanupFlow = Class.create();
LabelCacheCleanupFlow.prototype = {
initialize: function() {
},
type: 'LabelCacheCleanupFlow'
};
LabelCacheCleanupFlow.getCleanFlowLabelCacheWithFlow = function(flowText, printDetails) {
var result = null;
try {
flow = JSON.parse(flowText);
var sysId = flow.sys_id || flow.id;
var name = flow.name;
var labelCache = flow.label_cache;
result = LabelCacheCleanupFlow.getCleanFlowLabelCache(sysId, name, labelCache, printDetails);
} catch (e) {
gs.error (e);
}
return result;
};
LabelCacheCleanupFlow.getCleanFlowLabelCache = function(sysId, name, labelCache, printDetails) {
var result = null;
var hitCount = 0;
var missCount = 0;
try {
LabelCacheCleanupFlow.printWithName(name, "Attempting to clean the label cache for flow/subflow \'" + name + "\' with sys id \'" + sysId);
if (!labelCache) {
LabelCacheCleanupFlow.printWithName(name, "Has an empty label cache");
} else {
var parsedLabelCache = JSON.parse(labelCache);
var pills = LabelCacheCleanupFlow.getPills(sysId);
result = labelCache;
LabelCacheCleanupFlow.printWithName(name, "Original label cache before the removal:\n" + name + ": " + labelCache);
var newLabelCache = [];
for (var labelKey in parsedLabelCache) {
if (pills[parsedLabelCache[labelKey].name] || pills['{{' + parsedLabelCache[labelKey].name + '}}'] ) {
if (printDetails)
LabelCacheCleanupFlow.printWithName(name, "We have a match " + parsedLabelCache[labelKey].name);
newLabelCache.push(parsedLabelCache[labelKey]);
hitCount++;
} else {
if (printDetails)
LabelCacheCleanupFlow.printWithName(name, "We have a miss " + parsedLabelCache[labelKey].name);
missCount++;
}
}
result = JSON.stringify(newLabelCache);
if (printDetails) {
LabelCacheCleanupFlow.printWithName(name, "hitCount: " + hitCount + " missCount: " + missCount);
LabelCacheCleanupFlow.printWithName(name, "New label cache after the removal:\n" + name + ": " + labelCache);
}
}
} catch (e) {
gs.error (e);
}
return result;
};
LabelCacheCleanupFlow.getPills = function(flowId) {
var pills = {};
var instances = new GlideRecord("sys_hub_flow_component");
instances.addQuery("flow", flowId);
instances.query();
while(instances.next()) {
var instanceSysId = instances.sys_id || instances.id;
LabelCacheCleanupFlow.findPillsInMapping(instanceSysId, pills);
}
LabelCacheCleanupFlow.findPillsInMapping(flowId, pills);
LabelCacheCleanupFlow.findPillsInTriggerInstance(flowId, pills);
return pills;
};
LabelCacheCleanupFlow.findPillsInTriggerInstance = function(flowId, pills) {
var triggerInstance = new GlideRecord("sys_hub_trigger_instance");
triggerInstance.addQuery("flow", flowId);
triggerInstance.query();
// should be at max one result in triggerInstance
while(triggerInstance.next()) {
var triggerInstanceId = triggerInstance.sys_id || triggerInstance.id;
var sysVariableValue = new GlideRecord("sys_variable_value");
sysVariableValue.addQuery("document_key", triggerInstanceId);
sysVariableValue.query();
while(sysVariableValue.next()) {
var value = sysVariableValue.value;
LabelCacheCleanupFlow.findPillsInValue(value, pills);
}
}
};
LabelCacheCleanupFlow.findPillsInMapping = function(id, pills) {
var elementMapping = new GlideRecord("sys_element_mapping");
elementMapping.addQuery("id", id);
elementMapping.query();
while(elementMapping.next()) {
var value = elementMapping.value;
LabelCacheCleanupFlow.findPillsInValue(value, pills);
}
};
LabelCacheCleanupFlow.findPillsInTransform = function(value, pills) {
// removes "{{fd_transform:" prefix and "}}" postfix
if (value && value.length > 16) {
var uuid = value.substring(15, value.length - 2);
var pillCompound = new GlideRecord("sys_hub_pill_compound");
pillCompound.addQuery("ui_id", uuid);
pillCompound.query();
while (pillCompound.next()) {
var prescription = pillCompound.prescription;
LabelCacheCleanupFlow.findPillsInValue(prescription, pills);
}
}
};
LabelCacheCleanupFlow.findPillsInValue = function(value, pills) {
var result;
var PILL_REGEX = /{{(?!{)([^}]*)}}/g;
while(result = PILL_REGEX.exec(value)) {
if (result[0] && result[0].startsWith("{{fd_transform:") && result[0].length > 16) {
LabelCacheCleanupFlow.findPillsInTransform(result[0], pills);
} else {
pills[result[0]] = true;
}
}
};
LabelCacheCleanupFlow.findPillsInErrorHandling = function(id, pills) {
var errorHandlingMetadata = new GlideRecord("sys_hub_action_status_metadata");
if (!errorHandlingMetadata.get("action_type_id", id))
return;
var statusCondition = new GlideRecord("sys_hub_status_condition");
var errorHandlingMetadataSysId = errorHandlingMetadata.sys_id || errorHandlingMetadata.id;
statusCondition.addQuery("action_status_metadata_id", errorHandlingMetadataSysId);
statusCondition.query();
while (statusCondition.next()) {
LabelCacheCleanupFlow.findPillsInValue(statusCondition.status, pills);
LabelCacheCleanupFlow.findPillsInValue(statusCondition.condition, pills);
}
};
LabelCacheCleanupFlow.printWithName = function(name, text) {
gs.print(name + ": " + text);
};
Sys ID
323669e5ff0221107f944ee9453bf163