Name
sn_grc.GRCFunctionalDomainUserActionUtilBase
Description
No description available
Script
var GRCFunctionalDomainUserActionUtilBase = Class.create();
GRCFunctionalDomainUserActionUtilBase.prototype = {
initialize: function() {},
insertOrUpdateFunctionalDomainUserAction: function(table, record, prevFunctionalDomain) {
var arrUtil = new global.ArrayUtil();
var userModifiedFunctionalDomains = this._getUserModifiedFunctionalDomainsForRecord(record, prevFunctionalDomain, arrUtil);
var existingFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
existingFunctionalDomains.addQuery('table_name', table);
existingFunctionalDomains.addQuery('record_id', record.getUniqueValue());
existingFunctionalDomains.query();
if (existingFunctionalDomains.hasNext()) {
this._deleteOrInsertFunctionalDomains(table, record.getUniqueValue(), existingFunctionalDomains, userModifiedFunctionalDomains, arrUtil);
} else {
this._insertManualFunctionalDomains(table, record.getUniqueValue(), userModifiedFunctionalDomains.removed, 'remove');
this._insertManualFunctionalDomains(table, record.getUniqueValue(), userModifiedFunctionalDomains.added, 'add');
}
},
getUserModifiedFunctionalDomainRecords: function(table, functionalDomain, actionType) {
var manualAssociatedFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
manualAssociatedFunctionalDomains.addQuery('table_name', 'IN', table);
manualAssociatedFunctionalDomains.addQuery('functional_domain', functionalDomain);
manualAssociatedFunctionalDomains.addQuery('action_type', actionType);
manualAssociatedFunctionalDomains.query();
var recIds = [];
while (manualAssociatedFunctionalDomains.next()) {
recIds.push(manualAssociatedFunctionalDomains.getValue('record_id'));
}
return recIds;
},
_insertManualFunctionalDomains: function(table, recordId, functionalDomains, actionType) {
var manualFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
for (var i = 0; i < functionalDomains.length; i++) {
manualFunctionalDomains.initialize();
manualFunctionalDomains.setValue('table_name', table);
manualFunctionalDomains.setValue('record_id', recordId);
manualFunctionalDomains.setValue('functional_domain', functionalDomains[i]);
manualFunctionalDomains.setValue('action_type', actionType);
manualFunctionalDomains.insert();
}
},
_getUserModifiedFunctionalDomainsForRecord: function(record, prevFunctionalDomains, arrUtil) {
var currentTags = [];
if (record.functional_domain)
currentTags = record.functional_domain.split(',');
if (prevFunctionalDomains)
prevFunctionalDomains = prevFunctionalDomains.split(',');
else
prevFunctionalDomains = [];
var removedFunctionalDomains = arrUtil.diff(prevFunctionalDomains, currentTags);
var addedFunctionalDomains = arrUtil.diff(currentTags, prevFunctionalDomains);
var userAssociatedFunctionalDomains = {
"removed": removedFunctionalDomains,
"added": addedFunctionalDomains
};
return userAssociatedFunctionalDomains;
},
_deleteOrInsertFunctionalDomains: function(table, record, existingFunctionalDomains, userModifiedFunctionalDomains, arrUtil) {
var deleteExistingEntries = [];
var removedFunctionalDomains = [];
var addedFunctionalDomains = [];
while (existingFunctionalDomains.next()) {
if (arrUtil.contains(userModifiedFunctionalDomains.removed, existingFunctionalDomains.getValue("functional_domain"))) {
removedFunctionalDomains.push(existingFunctionalDomains.functional_domain + '');
deleteExistingEntries.push(existingFunctionalDomains.getUniqueValue());
}
if (arrUtil.contains(userModifiedFunctionalDomains.added, existingFunctionalDomains.getValue("functional_domain"))) {
addedFunctionalDomains.push(existingFunctionalDomains.functional_domain + '');
deleteExistingEntries.push(existingFunctionalDomains.getUniqueValue());
}
}
if (deleteExistingEntries.length > 0)
this._deleteExistingUserAction(table, deleteExistingEntries);
removedFunctionalDomains = arrUtil.diff(userModifiedFunctionalDomains.removed, removedFunctionalDomains);
addedFunctionalDomains = arrUtil.diff(userModifiedFunctionalDomains.added, addedFunctionalDomains);
this._insertManualFunctionalDomains(table, record, addedFunctionalDomains, 'add');
this._insertManualFunctionalDomains(table, record, removedFunctionalDomains, 'remove');
},
_deleteExistingUserAction: function(table, deleteExistingEntries) {
var existingUserActions = new GlideRecord('sn_grc_functional_domain_user_action');
existingUserActions.addQuery("sys_id", "IN", deleteExistingEntries);
existingUserActions.query();
if (existingUserActions.hasNext())
existingUserActions.deleteMultiple();
},
type: 'GRCFunctionalDomainUserActionUtilBase'
};
Sys ID
2c546bada397011004685a3716fcda71