Name
sn_rf.RFEvaluationTypeService
Description
Class for sn_rf_evaluation_type table utility functions.
Script
var RFEvaluationTypeService = Class.create();
RFEvaluationTypeService.prototype = {
tableName: RFConstants.tables.SN_RF_EVALUATION_TYPE,
initialize: function(grOrSysId) {
this.rfLogger = new RFLogger('RFEvaluationTypeService');
if (grOrSysId && grOrSysId.sys_class_name == this.tableName) {
this.currentRecord = grOrSysId;
} else if (grOrSysId) {
var gr = new GlideRecord(this.tableName);
if (gr.get(grOrSysId)) {
this.currentRecord = gr;
}
}
},
hasValidRecord: function() {
return this.currentRecord && this.currentRecord.sys_class_name == this.tableName;
},
getEvaluationTypeName: function() {
return this.currentRecord.getValue(RFConstants.fields.SN_RF_EVALUATION_TYPE_NAME);
},
getEvaluationScript: function() {
return this.currentRecord.getValue(RFConstants.fields.SN_RF_EVALUATION_TYPE_EVALUATION_SCRIPT);
},
getEvaluationScriptAPIName: function() {
return this.currentRecord[RFConstants.fields.SN_RF_EVALUATION_TYPE_EVALUATION_SCRIPT][RFConstants.fields.SYS_SCRIPT_INCLUDE_API_NAME];
},
getEvaluationTypeOutputSchema: function(rule, inputs) {
var apiName = this.getEvaluationScriptAPIName();
var funcName = RFConstants.evaluatorFunction.GET_EVALUATION_OUTPUT_SCHEMA;
var script = RFConstants.evaluatorVariable.RESULT + ' = new ' + apiName + '().' + funcName + '(param);';
var param = {};
var scriptInputs = {};
param[RFConstants.evaluatorVariable.INPUTS] = inputs || rule.getEvaluationTypeInputs();
scriptInputs[RFConstants.evaluatorVariable.PARAM] = param;
var res = RFUtils.evaluateScript(script, scriptInputs, RFConstants.evaluatorVariable.RESULT);
if (res.status == RFConstants.EXCEPTION) {
this.rfLogger.logError('Error executing script ' + script + '. Error: ' + res.error.message, 'RFEvaluationTypeService - getEvaluationTypeOutputSchema');
return {
'status': RFConstants.ERROR,
'errorCode': 40001,
'errorMessage': res.error.message
};
}
return res;
},
getEvaluationTypeOutput: function(rule, contextRecord) {
var inputs = rule.getEvaluationTypeInputs();
var outputSchema = this.getEvaluationTypeOutputSchema(rule, inputs);
if (outputSchema && outputSchema.status == RFConstants.SUCCESS) {
var metaData = outputSchema.metaData;
var confidenceFieldName = metaData && metaData[RFConstants.evaluatorVariable.CONFIDENCE];
var uniqueKeys = metaData && metaData[RFConstants.evaluatorVariable.UNIQUE_KEY];
var hidden = (metaData && metaData[RFConstants.evaluatorVariable.HIDDEN]) || [];
var apiName = this.getEvaluationScriptAPIName();
var funcName = RFConstants.evaluatorFunction.GET_EVALUATION_OUTPUTS;
var script = RFConstants.evaluatorVariable.RESULT + ' = new ' + apiName + '().' + funcName + '(param);';
var param = {};
var scriptInputs = {};
param[RFConstants.evaluatorVariable.INPUTS] = inputs;
param[RFConstants.evaluatorVariable.CONTEXT_RECORD] = contextRecord;
scriptInputs[RFConstants.evaluatorVariable.PARAM] = param;
var output = RFUtils.evaluateScript(script, scriptInputs, RFConstants.evaluatorVariable.RESULT);
if (output && output.status == RFConstants.SUCCESS && output.evaluationOutputs) {
var evaluationOutputs = output.evaluationOutputs;
var validEvaluationOutputs = [];
var schema = outputSchema.schema || [];
for (var idx1 = 0; idx1 < evaluationOutputs.length; idx1++) {
var evaluationOutput = evaluationOutputs[idx1];
var confidenceScore = evaluationOutput[confidenceFieldName] || 100;
evaluationOutput[RFConstants.evaluatorVariable.CONFIDENCE_INTERNAL] = confidenceScore;
evaluationOutput[RFConstants.evaluatorVariable.UNIQUE_KEYS_INTERNAL] = uniqueKeys;
evaluationOutput[RFConstants.evaluatorVariable.HIDDEN_INTERNAL] = hidden;
var isEvaluationOutputValid = true;
for (var idx2 = 0; idx2 < schema.length; idx2++) {
var schemaElement = schema[idx2];
if (schemaElement.type == RFConstants.evaluationOutputTypes.REFERENCE) {
var table = schemaElement.referenceTable;
if (table) {
var schemaElementName = schemaElement.name;
//Check if the record is accessible to logged-in user. Skip ACLs check if the schema element is hidden.
if (hidden.indexOf(schemaElementName) != -1) {
var gr = new GlideRecord(table);
} else {
gr = new GlideRecordSecure(table);
}
if (gr.get(evaluationOutput[schemaElementName])) {
evaluationOutput[schemaElementName] = gr;
} else {
isEvaluationOutputValid = false;
break;
}
}
}
}
if (isEvaluationOutputValid) {
validEvaluationOutputs.push(evaluationOutput);
}
}
output.evaluationOutputs = validEvaluationOutputs;
}
if (output.status == RFConstants.EXCEPTION) {
this.rfLogger.logError('Error executing script ' + script + '. Error: ' + output.error.message, 'RFEvaluationTypeService - getEvaluationTypeOutput');
return {
'status': RFConstants.ERROR,
'errorCode': 40001,
'errorMessage': output.error.message
};
}
return output;
}
},
type: 'RFEvaluationTypeService'
};
Sys ID
c3f1e56b53c33010e530ddeeff7b1218