Implemented 3 types of triggers. Each having their own business rules Implemented FAProperty script for re-usable properties like tables Created UI Macro to create new Fulfillment Plan from trigger
145 lines
4.5 KiB
XML
145 lines
4.5 KiB
XML
<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_script_include">
|
|
<sys_script_include action="INSERT_OR_UPDATE">
|
|
<access>public</access>
|
|
<active>true</active>
|
|
<api_name>x_355681_fa.CoreUtils</api_name>
|
|
<caller_access/>
|
|
<client_callable>false</client_callable>
|
|
<description/>
|
|
<name>CoreUtils</name>
|
|
<script><![CDATA[var CoreUtils = Class.create();
|
|
CoreUtils.prototype = {
|
|
initialize: function() {
|
|
},
|
|
|
|
isFA: function(type){
|
|
var answer = false;
|
|
|
|
let bool = false;
|
|
switch(type){
|
|
case "task":
|
|
var taskTriggerGr = new GlideRecord(FAProperty.table.taskTriggerTable);
|
|
taskTriggerGr.addQuery("condition_table", current.getTableName());
|
|
taskTriggerGr.addActiveQuery();
|
|
taskTriggerGr.orderBy("order");
|
|
taskTriggerGr.query();
|
|
while(taskTriggerGr.next()){
|
|
bool = this._isValidTrigger(taskTriggerGr);
|
|
if(!bool) continue;
|
|
|
|
//We have one plan that will run so we return true;
|
|
break;
|
|
}
|
|
break;
|
|
case "rp":
|
|
var catalog_item = current.getValue('producer');
|
|
current = current.task.getRefRecord(); //Need to overwrite current for GlideFilter
|
|
//No break cause we continue in the sc case
|
|
case "sc":
|
|
var scTriggerGr = new GlideRecord(FAProperty.table.scTriggerTable);
|
|
scTriggerGr.addQuery("catalog_item", current.cat_item || catalog_item);
|
|
scTriggerGr.addActiveQuery();
|
|
scTriggerGr.orderBy("order");
|
|
scTriggerGr.query();
|
|
while(scTriggerGr.next()){
|
|
bool = this._isValidTrigger(scTriggerGr);
|
|
if(!bool) continue;
|
|
|
|
//We have one plan that will run so we return true;
|
|
break;
|
|
}
|
|
|
|
this.LOG.debug("is it picked up: " + bool);
|
|
break;
|
|
}
|
|
|
|
answer = bool
|
|
return answer;
|
|
},
|
|
|
|
_isValidTrigger: function(triggerGr){
|
|
var answer = true;
|
|
var runCondition = triggerGr.getValue("run_if");
|
|
if(runCondition){
|
|
answer = GlideFilter.checkRecord(current, runCondition);
|
|
}
|
|
|
|
if(!!triggerGr.script_condition && !!answer){ //casting to boolean
|
|
var triggerUtils = new TriggerUtils();
|
|
answer = triggerUtils.runTriggerScript(triggerGr);
|
|
}
|
|
//We have one plan that will run so we return true;
|
|
return answer;
|
|
|
|
},
|
|
|
|
saveProperty: function(property, value){
|
|
var answer = false;
|
|
var propertyGr = new GlideRecord('sys_properties');
|
|
|
|
if(propertyGr.get('name', property)){
|
|
propertyGr.setValue('value', value);
|
|
answer = propertyGr.update();
|
|
}
|
|
return answer;
|
|
},
|
|
|
|
getCatalogItemTargetTable: function(catalogItemID){
|
|
var answer = false;
|
|
|
|
var catalogItemGr = new GlideRecord('sc_cat_item');
|
|
if(catalogItemGr.get(catalogItemID)){
|
|
var table = catalogItemGr['ref_' + catalogItemGr.getValue('sys_class_name')].table_name;
|
|
answer = table || "sc_req_item";
|
|
}
|
|
|
|
return answer;
|
|
},
|
|
|
|
showUIActionButton: function(table){
|
|
var answer = false;
|
|
|
|
var settings = JSON.parse(gs.getProperty("x_355681_fa.form.admin.settings", "{}"));
|
|
if(settings.quickActions){
|
|
var tables = [];
|
|
var quickActions = settings.quickActions;
|
|
if(quickActions.taskUiAction){
|
|
var taskActions = quickActions.task;
|
|
if(taskActions.allTaskTables){
|
|
var taskTables = new GlideTableHierarchy("task");
|
|
tables = tables.concat(taskTables.getAllExtensions());
|
|
}else{
|
|
tables = tables.concat(taskActions.taskRelatedTables);
|
|
}
|
|
}
|
|
if(quickActions.serviceCatalogUiAction){
|
|
var serviceCatalogActions = quickActions.serviceCatalog;
|
|
if(serviceCatalogActions.allServiceCatalogTables){
|
|
var serviceCatalogTables = new GlideTableHierarchy("sc_cat_item");
|
|
tables = tables.concat(serviceCatalogTables.getAllExtensions());
|
|
}else{
|
|
tables = tables.concat(serviceCatalogActions.serviceCatalogRelatedTables);
|
|
}
|
|
}
|
|
gs.info(JSON.stringify(tables))
|
|
answer = tables.indexOf(table) > -1;
|
|
}
|
|
|
|
return answer;
|
|
},
|
|
|
|
type: 'CoreUtils'
|
|
};
|
|
new ProcessorUtils("x_355681_fa").wrapPrototype(CoreUtils.prototype);]]></script>
|
|
<sys_class_name>sys_script_include</sys_class_name>
|
|
<sys_created_by>admin</sys_created_by>
|
|
<sys_created_on>2023-01-29 15:32:58</sys_created_on>
|
|
<sys_id>bc225ffb976461105838bfb3f153afee</sys_id>
|
|
<sys_name>CoreUtils</sys_name>
|
|
<sys_package display_value="Fulfilment Automater" source="x_355681_fa">c04afa629713111093a8337e6253af6d</sys_package>
|
|
<sys_policy>read</sys_policy>
|
|
<sys_scope display_value="Fulfilment Automater">c04afa629713111093a8337e6253af6d</sys_scope>
|
|
<sys_update_name>sys_script_include_bc225ffb976461105838bfb3f153afee</sys_update_name>
|
|
</sys_script_include>
|
|
</record_update>
|