Name
sn_grc.GRCAjaxWS
Description
General AJAX utilities for GRC for workspace
Script
var GRCAjaxWS = Class.create();
GRCAjaxWS.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getItemsDocToProfType: function(tableName, sysparm_ids) {
if (!gs.hasRole('sn_grc.user'))
return "{}";
var sysIds = sysparm_ids.split(',');
var contentToProfileTypeTable = '';
var result = {};
if (tableName == 'sn_risk_m2m_framework_profile_type')
contentToProfileTypeTable = 'sn_risk_m2m_risk_definition_profile_type';
else if (tableName == 'sn_compliance_m2m_policy_profile_type')
contentToProfileTypeTable = 'sn_compliance_m2m_statement_profile_type';
var documentIds = {};
var profileTypeIds = {};
var docToProfileType;
// Get the content to profile type associations
for (var index in sysIds) {
docToProfileType = new GlideRecord(tableName);
docToProfileType.get(sysIds[index]);
documentIds[docToProfileType.sn_grc_document + ''] = true;
profileTypeIds[docToProfileType.sn_grc_profile_type + ''] = true;
}
// Get contents associated to the documents
var contents = this.getContentIds(tableName, Object.keys(documentIds));
var contentToProfileType = new GlideRecord(contentToProfileTypeTable);
contentToProfileType.addQuery('sn_grc_content', 'IN', contents);
contentToProfileType.addQuery('sn_grc_profile_type', 'IN', Object.keys(profileTypeIds));
contentToProfileType.addQuery('created_one_off', 'false');
contentToProfileType.query();
var contentIds = [];
var count = 0;
while (contentToProfileType.next()) {
contentIds.push(contentToProfileType.sn_grc_content + '');
count++;
}
result[contentToProfileTypeTable] = {
'label': this._getPluralFromRecord(contentToProfileTypeTable + ''),
'number': gs.getMessage('{0} record(s)', String(count)),
'operation': 'delete'
};
result[contentToProfileTypeTable].link = 'now/risk/common/list-view/' + contentToProfileTypeTable + '/params/list-title/' + result[contentToProfileTypeTable].label + '/query/' + contentToProfileType.getEncodedQuery();
result = this._getItems(result, 'content', contentIds, Object.keys(profileTypeIds));
return result;
},
isGeneratingForProfileType: function(sysparm_table_name, sysparm_ids) {
var tableName = sysparm_table_name;
var ids = sysparm_ids;
var methodName;
var fieldName;
if (tableName == 'sn_compliance_m2m_policy_profile_type' || tableName == 'sn_risk_m2m_framework_profile_type') {
methodName = 'getItemsDocToProfType';
fieldName = 'sn_grc_profile_type';
} else if (tableName == 'sn_compliance_m2m_statement_profile_type' || tableName == 'sn_risk_m2m_risk_definition_profile_type') {
methodName = 'getItemsContentToProfileType';
fieldName = 'sn_grc_profile_type';
} else if (tableName == 'sn_grc_m2m_profile_profile_type') {
methodName = 'getItemsProfileToProfileType';
fieldName = 'profile_type';
}
switch (methodName) {
case 'getItemsProfileToProfileType':
return this.getItemsProfileToProfileType(tableName, sysparm_ids);
case 'getItemsContentToProfileType':
return this.getItemsContentToProfileType(tableName, sysparm_ids);
case 'getItemsDocToProfType':
return this.getItemsDocToProfType(tableName, sysparm_ids);
}
},
getContentIds: function(tableName, documentIds) {
var content;
var contentIds = [];
if (tableName.match("sn_risk")) {
content = new GlideRecord('sn_risk_definition');
content.addQuery('document', 'IN', documentIds);
content.query();
while (content.next())
contentIds.push(content.sys_id + '');
} else if (tableName.match("sn_compliance")) {
var contentToDoc = new GlideRecord('sn_compliance_m2m_policy_policy_statement');
contentToDoc.addQuery('document', 'IN', documentIds);
contentToDoc.query();
while (contentToDoc.next())
contentIds.push(contentToDoc.content + '');
}
return contentIds;
},
_getItems: function(result, field, ids, profileTypeIds) {
var item = new GlideAggregate('sn_grc_item');
item.addQuery(field, 'IN', ids);
var qc = item.addQuery('source', profileTypeIds[0] + ','); // Checking that the item was generated only for this profile type
if (profileTypeIds.length > 1) {
for (var i = 1; i < profileTypeIds.length; i++)
qc.addOrCondition('source', 'CONTAINS', profileTypeIds[i]);
}
item.addQuery('state', '!=', 'retired');
item.addAggregate('COUNT', 'sys_class_name');
item.query();
while (item.next()) {
var className = item.sys_class_name;
var classNameCount = item.getAggregate('COUNT', 'sys_class_name');
var l10nRecords = gs.getMessage('{0} record(s)', classNameCount);
if (classNameCount > 0) {
result[className] = {
'label': this._getPluralFromRecord(item.sys_class_name + ''),
'number': l10nRecords,
'operation': 'deactivate',
};
result[className].link = 'now/risk/common/list-view/' + className + '/params/list-title/' + result[className].label + '/query/' + item.getEncodedQuery();
}
}
return result;
},
_getPluralFromRecord: function(tableName) {
var now_GR = new GlideRecord(tableName);
now_GR.query();
var ed = now_GR.getED();
return ed.getPlural();
},
getItemsContentToProfileType: function(sysparm_table_name, sysparm_ids) {
if (!gs.hasRole('sn_grc.user'))
return "{}";
var ids = sysparm_ids;
var tableName = sysparm_table_name;
var contentToProfileTypeIds = ids.split(',');
var result = {};
var contentIds = {};
var profileTypeIds = {};
var contentToProfileType;
var query = "contentIN";
for (var index in contentToProfileTypeIds) {
contentToProfileType = new GlideRecord(tableName);
contentToProfileType.get(contentToProfileTypeIds[index]);
contentIds[contentToProfileType.sn_grc_content + ''] = true;
profileTypeIds[contentToProfileType.sn_grc_profile_type + ''] = true;
}
result = this._getItems(result, 'content', Object.keys(contentIds), Object.keys(profileTypeIds));
return result;
},
getItemsProfileToProfileType: function(sysparm_table_name, sysparm_ids) {
if (!gs.hasRole('sn_grc.user'))
return "{}";
var ids = sysparm_ids;
var profileToProfileTypeIds = ids.split(',');
var result = {};
var profileIds = {};
var profileTypeIds = {};
var profileToProfileType;
for (var index in profileToProfileTypeIds) {
profileToProfileType = new GlideRecord(sysparm_table_name);
profileToProfileType.get(profileToProfileTypeIds[index]);
profileIds[profileToProfileType.profile + ''] = true;
profileTypeIds[profileToProfileType.profile_type + ''] = true;
}
result = this._getItems(result, 'profile', Object.keys(profileIds), Object.keys(profileTypeIds));
return result;
},
getDisplayValue: function() {
var tableName = this.getParameter('sysparm_table_name');
var sys_id = this.getParameter('sysparm_sys_id');
var gr = new GlideRecord(tableName);
gr.get(sys_id);
if(gr.canRead())
return gr.getDisplayValue();
else
return '';
},
updateItemFunction: function() {
var itemId = this.getParameter('sysparm_recordId');
var item = new GlideRecord('sn_grc_item');
var itemFunction = this.getParameter('sysparm_itemFunction');
var isUpdateSuccessful = false;
if (item.get(itemId)) {
item.setValue('item_function', itemFunction);
isUpdateSuccessful = item.update();
}
return isUpdateSuccessful;
},
type: 'GRCAjaxWS'
});
Sys ID
436fdc8f07a020102bb2f4ce0ad300e1