Name
sn_mab_api.CategoryService
Description
No description available
Script
var CategoryService = Class.create();
CategoryService.prototype = {
initialize: function () {
this.errorHandler = new sn_mab_api.ErrorHandler();
this.validationHandler = new sn_mab_api.ValidationHandler();
},
type: 'CategoryService',
// this method has been extracted from getCategoryRecords because sys_sg_native_client is the
// only table the has records potentially in every scope.
getMobileAppCategoryRecords: function () {
var groupingResult = [];
var table = 'sys_sg_native_client';
var configKeyGenerator = new sn_mab_api.ConfigKeyFactory().getGenerator(table);
var recordList = this._getRecordsByEncodedQuery({table: table});
recordList.forEach(function(record) {
groupingResult.push(this._simplifiedRecord(record, configKeyGenerator, table));
}, this);
return groupingResult;
},
getCategoryRecords: function (queryParams) {
if (!queryParams.tables)
this.errorHandler.throwBadRequestError('Malformed query parameter for [tables]');
var scope = this._createScopeQuery(queryParams);
var retrievedRecordIds = {};
var groupingResult = [];
var tables = queryParams.tables[0].split(',');
var selectedRecordIds = queryParams.selectedRecordIds ? queryParams.selectedRecordIds : null;
//This encoded query shall apply to all the tables
//This encoded query shall match the encoded query pattern from platform
var encodedQuery = queryParams.encodedQuery ? queryParams.encodedQuery : null;
var additionalFields = [];
if (queryParams.additionalFields) {
// Like 'tables' param above, strings are being converted into arrays
additionalFields = queryParams.additionalFields[0].split(',')
}
tables.forEach(function (table) {
if (!table)
this.errorHandler.throwBadRequestError('Malformed query parameter for [tables]: ' + queryParams.tables);
var isValidTable = this.validationHandler.isValidTable(table);
if (!isValidTable)
this.errorHandler.throwNotFoundError('Does not exist for table:' + table);
var requestAttributes = {};
requestAttributes.scope = scope;
requestAttributes.selectedRecordIds = selectedRecordIds;
requestAttributes.table = table;
requestAttributes.encodedQuery = encodedQuery;
var configKeyGenerator = new sn_mab_api.ConfigKeyFactory().getGenerator(table);
var recordList = this._getRecordsByEncodedQuery(requestAttributes);
recordList.forEach(function(record) {
var curSysId = record.sys_id.value;
if (!retrievedRecordIds[curSysId]) {
groupingResult.push(this._simplifiedRecord(record, configKeyGenerator, table, additionalFields));
retrievedRecordIds[curSysId] = curSysId;
}
}, this);
}, this);
return groupingResult;
},
_createScopeQuery: function(queryParams) {
var scope = queryParams.scope
? ''.concat(queryParams.scope)
: null;
// check to see if scope was provided and if it is a valid scope
if (scope != null && !this._hasScope(scope))
this.errorHandler.throwNotFoundError('Does not exist for scope:' + scope);
return scope;
},
getScreens: function(queryParams, param) {
var scope = this._createScopeQuery(queryParams);
if (!param || !this._contains(['non_parameterized', 'parameterized'], param))
this.errorHandler.throwBadRequestError('path variable must include non_parameterized or parameterized');
var uiParams = new MobileAppBuilderDAO('sys_sg_ui_parameter').getRecordsByEncodedQuery("screen!=null");
var uiParamsScreenIds = this._extractUniqueValuePerRecord(uiParams, 'screen').join(',');
var idQuery = param === 'parameterized'
? 'sys_idIN' + uiParamsScreenIds
: 'sys_idNOT IN' + uiParamsScreenIds;
var query = scope
? 'sys_scope=' + scope + '^' + idQuery
: idQuery;
var listScreens = new MobileAppBuilderDAO('sys_sg_list_screen').getRecordsByEncodedQuery(query);
var configKeyGenerator = new sn_mab_api.ConfigKeyFactory().getGenerator('sys_sg_list_screen');
var simplifiedRecords = [];
listScreens.forEach(function(record) {
simplifiedRecords.push(this._simplifiedRecord(record, configKeyGenerator, 'sys_sg_list_screen'));
}, this);
return simplifiedRecords;
},
_extractUniqueValuePerRecord: function(records, field) {
var values = [];
records.forEach(function(record) {
var value = record[field].value;
if (!this._contains(values, value)) {
values.push(value);
}
}, this);
return values;
},
_contains: function(arr, target) {
return (arr.indexOf(target) > -1);
},
_getRecordsByEncodedQuery: function (requestAttributes) {
var table = requestAttributes.table;
var scope = requestAttributes.scope;
var encodedQuery = requestAttributes.encodedQuery;
var selectedRecordIds = requestAttributes.selectedRecordIds;
var categoryDAO = new MobileAppBuilderDAO(table);
var query = '';
if (scope != null)
query = 'sys_scope=' + scope;
if (encodedQuery)
query = query ? query + '^' + encodedQuery : encodedQuery;
if (selectedRecordIds)
query = query ? query + '^NQsys_idIN' + selectedRecordIds.join() + '^EQ' : 'sys_idIN' + selectedRecordIds.join();
return categoryDAO.getRecordsByEncodedQuery(query);
},
_hasScope: function (scope) {
return new GlideRecord('sys_scope').get(scope);
},
_simplifiedRecord: function (record, configKeyGenerator, table, additionalFields) {
additionalFields = additionalFields || [];
var recordName = '';
var className = record.sys_class_name ? record.sys_class_name.value : table;
if (record.name && record.name.displayValue)
recordName = record.name.displayValue;
else if (record.sys_name && record.sys_name.displayValue)
recordName = record.sys_name.displayValue;
var simplifiedRecord = {
name: recordName,
sysClassName: className,
sysClassLabel: this._getClassLabel(record, className),
sysId: record.sys_id.value,
type: this._getTypeForRecord(configKeyGenerator, record, table),
scope: record.sys_scope ? record.sys_scope.value : null,
scopeDisplayValue: record.sys_scope ? record.sys_scope.displayValue : null,
updatedOnDisplayValue: record.sys_updated_on ? record.sys_updated_on.displayValue: null,
};
if (record.label && record.label.displayValue)
simplifiedRecord.label = record.label.displayValue;
// If there are adding additional fields (passed in using 'sysparm_fields'), try to add them
additionalFields.forEach(function (field) {
var valueToDisplay = '';
var retrievedField = record[field];
if (!retrievedField) return;
if (retrievedField.displayValue) {
valueToDisplay = retrievedField.displayValue;
} else if (retrievedField.value) {
valueToDisplay = retrievedField.value;
}
simplifiedRecord[field] = valueToDisplay;
})
return simplifiedRecord;
},
_getTypeForRecord: function (configKeyGenerator, record, table) {
return configKeyGenerator.getTypeForRecord(record, table);
},
_getClassLabel: function (record, table) {
var classLabelGetter = ClassLabelGetterFactory.getInstance();
return classLabelGetter.getLabel(record, table);
},
};
Sys ID
2a3272110f662010e70a4abec4767e3a