Name
global.CSMBaseAPIUtils
Description
No description available
Script
var CSMBaseAPIUtils = Class.create();
CSMBaseAPIUtils.prototype = {
initialize: function() {},
type: 'CSMBaseAPIUtils'
};
CSMBaseAPIUtils.validatePaginationVariables = function(request) {
var paginationVariables = {};
if (request.queryParams.sysparm_offset || request.queryParams.offset)
paginationVariables.offset = request.queryParams.sysparm_offset ? parseInt(decodeURI(request.queryParams.sysparm_offset)) : parseInt(decodeURI(request.queryParams.offset));
else
paginationVariables.offset = 0;
if (paginationVariables.offset && paginationVariables.offset < 0)
throw sn_ws_err.BadRequestError("Negative offset is not supported");
var defaultPageSize = CSMBaseConstants.API_RESPONSE_LIMIT_DEFAULT;
var maxPageSize = CSMBaseConstants.API_RESPONSE_LIMIT_MAX;
if (request.queryParams.sysparm_limit || request.queryParams.limit)
paginationVariables.limit = request.queryParams.sysparm_limit ? parseInt(decodeURI(request.queryParams.sysparm_limit)) : parseInt(decodeURI(request.queryParams.limit));
else
paginationVariables.limit = defaultPageSize;
paginationVariables.limit = Math.min(paginationVariables.limit, maxPageSize);
return paginationVariables;
};
CSMBaseAPIUtils.getJSONFromGR = function(gr, displayValue) {
var jsonObj = {};
var glideSPScriptable = new GlideSPScriptable();
for (var attr in gr) {
var field;
if (!gr.isValidField(attr))
continue;
if (displayValue == 'all')
field = glideSPScriptable.getField(gr, attr);
var type = field ? field['type'] + '' : gr[attr + ''].getED().getInternalType();
if (type != "password" && !attr.includes("password")) {
if (displayValue == 'true' || type === "boolean")
jsonObj[attr] = gr.getDisplayValue(attr);
else if (displayValue == null || displayValue == 'false')
jsonObj[attr] = gr.getValue(attr);
if (displayValue == 'all')
jsonObj[attr] = field;
}
}
if (displayValue == 'true' || displayValue == 'false' || displayValue == null)
jsonObj.sys_id = gr.getUniqueValue();
else if (displayValue == 'all') {
jsonObj['sys_id'] = {};
jsonObj['sys_id'].label = 'Sys ID';
jsonObj['sys_id'].value = gr.getUniqueValue();
jsonObj['sys_id'].displayValue = gr.getUniqueValue();
jsonObj['sys_id'].type = 'GUID';
}
return jsonObj;
};
CSMBaseAPIUtils.getCustomJSONFromGR = function(gr, displayValue, selectedFields) {
var jsonObj = {};
var glideSPScriptable = new GlideSPScriptable();
if (!selectedFields || selectedFields.length == 0) {
jsonObj = this.getJSONFromGR(gr, displayValue);
return jsonObj;
}
var selected_field_length = selectedFields.length;
for (var counter = 0; counter < selected_field_length; counter++) {
var attr = selectedFields[counter];
var field;
if (!gr.isValidField(attr))
continue;
if (displayValue == 'all')
field = glideSPScriptable.getField(gr, attr);
var type = field ? field['type'] + '' : gr[attr + ''].getED().getInternalType();
if (type != "password" && !attr.includes("password")) {
if (displayValue == 'true' || type === "boolean")
jsonObj[attr] = gr.getDisplayValue(attr);
else if (displayValue == null || displayValue == 'false')
jsonObj[attr] = gr.getValue(attr);
if (displayValue == 'all')
jsonObj[attr] = field;
}
}
if (displayValue == 'true' || displayValue == 'false' || displayValue == null)
jsonObj.sys_id = gr.getUniqueValue();
else if (displayValue == 'all') {
jsonObj['sys_id'] = {};
jsonObj['sys_id'].label = 'Sys ID';
jsonObj['sys_id'].value = gr.getUniqueValue();
jsonObj['sys_id'].displayValue = gr.getUniqueValue();
jsonObj['sys_id'].type = 'GUID';
}
return jsonObj;
};
CSMBaseAPIUtils.prepareGlideRecord = function(params, tableName) {
var externalUserValidation = new CaseRESTAPIValidatorForExternalUser();
if (externalUserValidation.isExternalUser() && tableName.equals(global.CSMBaseConstants.CASE_TABLE)) {
return externalUserValidation.prepareGlideRecord(params);
}
var gr = new GlideRecordSecure(tableName);
gr.initialize();
for (var attr in gr) {
if (attr == "comments") {
gr.comments = params[attr];
} else if (params[attr]) {
gr.setValue(attr, params[attr]);
}
}
return gr;
};
CSMBaseAPIUtils.evaluateJSReferenceQualifier = function(referenceQual, record, dependentValues) {
referenceQual = referenceQual.replace('javascript:', '');
var dependentValueArr = dependentValues.split('^');
for (i in dependentValueArr) {
var temp = dependentValueArr[i].split('=');
var column = temp[0];
var value = temp[1];
if (record.isValidField(column)) {
record.setValue(column, value);
}
}
var globals = new Packages.java.util.HashMap();
globals.put('current', record);
var encodedQuery = GlideEvaluator.evaluateStringWithGlobals(referenceQual, globals).toString();
return encodedQuery;
};
CSMBaseAPIUtils.getDependentChoiceValueFromRecord = function(record, column) {
var gr = new GlideRecord('sys_dictionary');
gr.addQuery('name', record.getTableName());
gr.addQuery('element', column);
gr.query();
if (gr.next()) {
if (record[gr.dependent_on_field]) {
return record[gr.dependent_on_field];
}
}
return null;
};
CSMBaseAPIUtils.getReferenceListAndChoices = function(primary_table, column, start, end, query, dependent_value, ref_qual_input, id, reference_field_columns) {
var result = {};
var gr = new GlideRecordSecure(primary_table);
if (id) {
if (!gr.get(id)) {
result['error'] = 'No record found.';
return result;
}
} else gr.newRecord();
if (!gr.isValidField(column)) {
result['error'] = 'Invalid field';
return result;
}
result.list = [];
if (gr[column].getED().getInternalType().equals('reference')) {
var reference_table = gr[column].getRefRecord().getTableName();
var gr2 = new GlideRecordSecure(reference_table);
var reference_qual = gr[column].getED().getReferenceQualifier();
if (reference_qual && reference_qual.indexOf('javascript:') != -1) {
reference_qual = CSMBaseAPIUtils.evaluateJSReferenceQualifier(reference_qual, gr, ref_qual_input);
}
if (query) {
reference_qual = reference_qual ? (reference_qual + '^' + query) : query;
}
if (reference_qual)
gr2.addEncodedQuery(reference_qual);
gr2.chooseWindow(start, end, true);
gr2.query();
while (gr2.next()) {
var record = {};
record.label = gr2.getDisplayValue();
record.value = gr2.getUniqueValue();
var reference_field_col_length = reference_field_columns.length;
if (reference_field_columns && reference_field_col_length > 0) {
for (var counter = 0; counter < reference_field_col_length; counter++) {
var column_name = reference_field_columns[counter] + '';
if (gr2.isValidField(column_name))
record[column_name] = gr2.getValue(column_name);
}
}
result.list.push(record);
}
result.totalRecords = gr2.getRowCount();
} else {
var choiceGenerator;
dependent_value = dependent_value ? dependent_value : CSMBaseAPIUtils.getDependentChoiceValueFromRecord(gr, column);
if (dependent_value)
choiceGenerator = new GlideChoiceListGenerator(primary_table, column, dependent_value);
else
choiceGenerator = new GlideChoiceListGenerator(primary_table, column);
var choices = choiceGenerator.get();
var default_value = gr[column].getED().getDefault() + '';
var min = (choices.size() > 0 && choices.getChoice(0).getLabel().equals('-- None --')) ? 1 : 0;
if (choices.size() > min) {
if (end > choices.size() || end < 1 || end > start)
end = choices.size();
if (start > choices.size() || start < 1)
start = 0;
for (var i = start; i < end; i++) {
var choice = {};
choice.label = choices.getChoice(i).getLabel();
choice.value = choices.getChoice(i).getValue();
if (choice.value.equals(default_value))
choice.default_value = true;
result.list.push(choice);
}
result.totalRecords = choices.size();
} else {
result['error'] = 'Invalid field type.';
}
}
return result;
};
CSMBaseAPIUtils.getCaseActivityStream = function(id, start, end, activityType) {
var result = {};
result.list = {};
var caseGr = new GlideRecordSecure(CSMBaseConstants.CASE_TABLE);
if (caseGr.get(id)) {
var stream = new GlideSPScriptable().getStream(caseGr.getRecordClassName(), caseGr.sys_id);
if (stream) {
if (stream.entries && stream.entries.length) {
if (activityType && activityType !== '') {
activityType = activityType.split(',');
if (activityType.length) {
var entries = [];
stream.entries.forEach(function(entry) {
if (activityType.indexOf(entry.element + '') != -1) {
entries.push(entry);
}
});
stream.entries = entries;
}
}
result.totalRecords = stream.entries.length;
stream.entries = stream.entries.slice(start, end);
}
stream.sys_created_on = caseGr.sys_created_on || "";
stream.sys_created_on_adjusted = caseGr.getDisplayValue("sys_created_on") || "";
result.list = stream;
}
} else
result.error = 'Case ID is invalid or access restricted';
return result;
};
CSMBaseAPIUtils.prepareUpdateGlideRecord = function(sysId, params, tableName) {
var externalUserValidation = new CaseRESTAPIValidatorForExternalUser();
if (externalUserValidation.isExternalUser() && tableName.equals(global.CSMBaseConstants.CASE_TABLE)) {
return externalUserValidation.prepareGlideRecord(params, sysId);
}
var gr = new GlideRecordSecure(tableName);
gr.get(sysId);
for (var attr in gr) {
if (attr == "comments") {
gr.comments = params[attr];
} else if (params[attr]) {
gr.setValue(attr, params[attr]);
}
}
return gr;
};
CSMBaseAPIUtils.validateCaseInputSocialParams = function(params) {
//Validate that all required social parameters are given in input.
if (params.social_handle || params.social_channel || params.social_handle_url || params.social_handle_type || params.social_post_url) {
if (params.social_handle && params.social_channel && params.social_handle_url && params.social_handle_type && params.social_post_url && (params.account || params.consumer || params.contact))
return true;
else
return false;
} else
return true;
};
/*
* Returns true if the given item is null, undefined, or evaluates to the empty string.
*/
CSMBaseAPIUtils.isVarNil = function(item) {
return JSUtil.nil(item);
};
/*
* Returns true if the given item exists and is not empty (the logical inverse of .nil(), above).
*/
CSMBaseAPIUtils.isVarNotNil = function(item) {
return !JSUtil.nil(item);
};
CSMBaseAPIUtils.getRowsCount = function(table, encodedQuery) {
if (JSUtil.nil(table))
return 0;
var gr = new GlideAggregate(table);
if (JSUtil.notNil(encodedQuery))
gr.addEncodedQuery(encodedQuery);
gr.addAggregate("COUNT");
gr.query();
if (gr.next()) {
return gr.getAggregate("COUNT");
}
return 0;
};
CSMBaseAPIUtils.getGlideRecord = function(table, sysId) {
var gr = new GlideRecord(table);
return gr.get(sysId) ? gr : null;
};
CSMBaseAPIUtils.updateField = function(record, field, value) {
if (!record)
return null;
record.setValue(field, value);
return record.update();
};
CSMBaseAPIUtils.isCaseSLAAsyncEnabled = function() {
return gs.getProperty("sn_customerservice.rest.api.case_sla_async") == "true";
};
Sys ID
9f5094015372030097a2ddeeff7b12cf