Name
sn_grc.IGEntityToEntityTypeActionHandler
Description
No description available
Script
var IGEntityToEntityTypeActionHandler = Class.create();
IGEntityToEntityTypeActionHandler.prototype = {
initialize: function(action) {
this.actionType = action.action;
this.source = action.source;
this.sourceTable = action.table;
this.entityTypeId = action.entity_type_id+'';
this.entityId = action.entity_id;
},
execute: function() {
if (gs.nil(this.entityTypeId) || gs.nil(this.entityId)) {
return;
}
if (this.actionType == 'add_entity_to_entity_type') {
this._addEntityToEntityType();
} else if (this.actionType == 'remove_entity_from_entity_type') {
this._removeEntityFromEntityType();
}
},
_addEntityToEntityType: function() {
var util = new ItemGenerationV2Utils();
// Get all the contents attached to the profile type
var contentToEntityTypeTables = new GlideTableHierarchy('sn_grc_m2m_content_profile_type').getTableExtensions();
for (var i = 0; i < contentToEntityTypeTables.length; i++) {
var contentToEntityTypeTable = contentToEntityTypeTables[i];
this.strategy = util.getStrategy(contentToEntityTypeTable);
if (gs.nil(this.strategy)) {
continue;
}
// Associate as reliant entities to item based on associated entity types
if (!gs.nil(this.strategy.getItemToEntityTable())) {
var itemToEntityType = new GlideRecord(this.strategy.getItemToEntityTypeTable());
itemToEntityType.addQuery('entity_type', this.entityTypeId);
itemToEntityType.addQuery('item.active', 'true');
itemToEntityType.query();
while (itemToEntityType.next()) {
this.strategy.addEntityToItem(this.entityId, itemToEntityType.item + '', 'source_entity_types', this.entityTypeId, true);
}
}
// Get contents
var contentToProfileType = new GlideRecord(contentToEntityTypeTable);
contentToProfileType.addQuery('sn_grc_profile_type', this.entityTypeId);
contentToProfileType.addQuery('sn_grc_content.active', 'true');
contentToProfileType.query();
while (contentToProfileType.next()) {
var contentGr = contentToProfileType.sn_grc_content.getRefRecord();
if (contentGr.isValidRecord() && this.strategy.recordCanCreateItems(contentGr)) {
this.strategy.generateItem(this.entityId, contentGr.getUniqueValue(), this.entityTypeId);
}
}
}
},
_removeEntityFromEntityType: function() {
var util = new ItemGenerationV2Utils();
var itemTables = new ItemInheritance().getChildrenOfItemTable();
for (var i = 0; i < itemTables.length; i++) {
var item = new GlideRecord(itemTables[i]);
item.addQuery('instance', 'true');
item.addQuery('profile', this.entityId);
item.addQuery('source', 'CONTAINS', this.entityTypeId);
item.query();
while (item.next()) {
util.deleteSourceInItem(item, this.entityTypeId);
}
}
//Remove or update source from reliant entity to item associations based on associated entity types
var itemToEntityTables = new ItemInheritance().getChildrenOfItemToEntityTable();
for (var j = 0; j < itemToEntityTables.length; j++) {
var m2mEntityItem = new GlideRecord(itemToEntityTables[j]);
m2mEntityItem.addQuery('entity', this.entityId);
m2mEntityItem.addQuery('source_entity_types', 'CONTAINS', this.entityTypeId);
m2mEntityItem.query();
while (m2mEntityItem.next()) {
util.deleteOrUpdateSourceInItemEntityM2m(m2mEntityItem, 'source_entity_types', this.entityTypeId, true);
}
}
},
type: 'IGEntityToEntityTypeActionHandler'
};
Sys ID
5ea2a29b07e72010bbc77f04a9d30009