Name
sn_ent.EnterpriseContentEAMUtils
Description
Scripts used for enterprise model tables.
Script
var EnterpriseContentEAMUtils = Class.create();
EnterpriseContentEAMUtils.prototype = {
initialize: function() {},
type: 'EnterpriseContentEAMUtils'
};
EnterpriseContentEAMUtils.ENTERPRISE_MODEL_CATEGORY_NAME = 'Enterprise';
EnterpriseContentEAMUtils.ENTERPRISE_FACILITIES_MODEL_CATEGORY_NAME = 'Facilities';
EnterpriseContentEAMUtils.ENTERPRISE_INDUSTRIAL_MODEL_CATEGORY_NAME = 'Industrial';
EnterpriseContentEAMUtils.ENTERPRISE_MEDICAL_MODEL_CATEGORY_NAME = 'Medical';
EnterpriseContentEAMUtils.ENTERPRISE_RETAIL_MODEL_CATEGORY_NAME = 'Retail';
EnterpriseContentEAMUtils.ENTERPRISE_TRANSPORTATION_MODEL_CATEGORY_NAME = 'Transportation';
EnterpriseContentEAMUtils.ENTERPRISE_TACTICAL_MODEL_CATEGORY_NAME = 'Tactical Equipment';
EnterpriseContentEAMUtils.ENTERPRISE_CONSTRUCTION_MODEL_CATEGORY_NAME = 'Construction';
EnterpriseContentEAMUtils.ENTERPRISE_WEARABLE_MODEL_CATEGORY_NAME = 'Wearables';
EnterpriseContentEAMUtils.ENTERPRISE_MODEL = 'sn_ent_model';
EnterpriseContentEAMUtils.ENTERPRISE_ASSET = 'sn_ent_asset';
EnterpriseContentEAMUtils.ENTERPRISE_FACILITIES_MODEL = 'sn_ent_facility_model';
EnterpriseContentEAMUtils.ENTERPRISE_FACILITIES_ASSET = 'sn_ent_facility_asset';
EnterpriseContentEAMUtils.ENTERPRISE_INDUSTRIAL_MODEL = 'sn_ent_industrial_model';
EnterpriseContentEAMUtils.ENTERPRISE_INDUSTRIAL_ASSET = 'sn_ent_industrial_asset';
EnterpriseContentEAMUtils.ENTERPRISE_MEDICAL_DEVICE_MODEL = 'sn_ent_medical_device_model';
EnterpriseContentEAMUtils.ENTERPRISE_MEDICAL_MODEL = 'sn_ent_medical_model';
EnterpriseContentEAMUtils.ENTERPRISE_MEDICAL_ASSET = 'sn_ent_medical_asset';
EnterpriseContentEAMUtils.ENTERPRISE_RETAIL_MODEL = 'sn_ent_retail_model';
EnterpriseContentEAMUtils.ENTERPRISE_RETAIL_ASSET = 'sn_ent_retail_asset';
EnterpriseContentEAMUtils.ENTERPRISE_TRANSPORTATION_MODEL = 'sn_ent_transportation_model';
EnterpriseContentEAMUtils.ENTERPRISE_TRANSPORTATION_ASSET = 'sn_ent_transportation_asset';
EnterpriseContentEAMUtils.ENTERPRISE_TACTICAL_MODEL = 'sn_ent_tactical_model';
EnterpriseContentEAMUtils.ENTERPRISE_TACTICAL_ASSET = 'sn_ent_tactical_asset';
EnterpriseContentEAMUtils.ENTERPRISE_CONSTRUCTION_MODEL = 'sn_ent_construction_model';
EnterpriseContentEAMUtils.ENTERPRISE_CONSTRUCTION_ASSET = 'sn_ent_construction_asset';
EnterpriseContentEAMUtils.ENTERPRISE_WEARABLE_MODEL = 'sn_ent_wearable_model';
EnterpriseContentEAMUtils.ENTERPRISE_WEARABLE_ASSET = 'sn_ent_wearable_asset';
EnterpriseContentEAMUtils.calculateDefaultDisplayName = function(model) {
var values;
var normalized_status;
if (!gs.nil(model.normalized_status)) {
normalized_status = model.normalized_status.toString();
}
if (normalized_status === EnterpriseContentEAMUtils.NORM_STATUSES.NORMALIZED || (normalized_status === EnterpriseContentEAMUtils.NORM_STATUSES.MANUALLY_NORMALIZED && (!gs.nil(model.normalized_model_number)))) {
values = [model.normalized_company.getDisplayValue(), model.normalized_model_name.name, model.normalized_model_number.model_number];
}else{
values = [model.manufacturer.getDisplayValue(), model.name, model.model_number];
}
model.display_name = global.ModelUtils.generateDisplayName(values);
};
EnterpriseContentEAMUtils.calculateClassificationDisplayName = function(modelClassification) {
var values = [modelClassification.description, modelClassification.source.getDisplayValue()];
var displayName = modelClassification.code;
for (var i = 0; i < values.length; i++){
if (values[i] != undefined && values[i] != '') {
displayName += ' - ' + values[i];
}
}
return displayName.trim();
};
EnterpriseContentEAMUtils.doesAModelFieldChangeCondition = function(model) {
var condition = model.manufacturer.changes() || model.name.changes() || model.model_number.changes();
return condition;
};
EnterpriseContentEAMUtils.canDeleteModel = function(current) {
var modelSydId = current.sys_id;
var componentgr = new GlideRecord('cmdb_m2m_model_component');
componentgr.addQuery('child', modelSydId);
componentgr.query();
while (componentgr.hasNext()) {
componentgr.next();
if (!EnterpriseContentEAMUtils.canDeleteModelComponent(componentgr))
return false;
}
return true;
};
EnterpriseContentEAMUtils._getChangesForModelCategories = function(currValues, preValues) {
var changed = [];
for (var i in currValues) {
var item = currValues[i];
if (preValues.indexOf(item) === -1)
changed.push(item);
}
return changed;
};
EnterpriseContentEAMUtils.isRelatedModelCategoryChange = function(current, previous) {
var preValues = previous.getValue('cmdb_model_category').split(',');
var currValues = current.getValue('cmdb_model_category').split(',');
var changedValues = EnterpriseContentEAMUtils._getChangesForModelCategories(currValues, preValues);
var modelclass = current.sys_class_name;
var category = new GlideRecord('cmdb_model_category');
category.addQuery('product_model_class', modelclass);
category.addQuery('sys_id', 'IN', changedValues);
category.query();
if (category.hasNext()) {
if (category.getRowCount() == changedValues.length)
return true;
}
return false;
};
EnterpriseContentEAMUtils.getModelCatForAsset = function(assetClass) {
var modelCatGr = new GlideRecord('cmdb_model_category');
modelCatGr.addQuery('asset_class', assetClass);
modelCatGr.query();
if (modelCatGr.getRowCount() == 1) {
if (modelCatGr.next())
return modelCatGr.getUniqueValue();
}
return null;
};
EnterpriseContentEAMUtils.isComponentAndCategoryRelated = function(current){
var childSysId = current.child;
var categorySysId = current.model_category;
var modelGr = new GlideRecord('cmdb_model');
modelGr.get(childSysId);
var modelCategoryList = modelGr.getValue('cmdb_model_category');
if(modelCategoryList.indexOf(categorySysId) == -1)
return false;
return true;
};
EnterpriseContentEAMUtils.canDeleteModelComponent = function(current){
var parentSysId = current.parent;
var modelGr = new GlideRecord('cmdb_model');
modelGr.get(parentSysId);
if(modelGr.getValue('bundle') == true && modelGr.getValue('status') == 'In Production'){
return false;
}
return true;
};
EnterpriseContentEAMUtils.isEnterpriseClassAsset = function (assetClassName) {
if (gs.nil(assetClassName))
return false;
var isAssetEAM = EnterpriseContentEAMUtils.getEAMAssetClasses().indexOf(assetClassName) > -1;
if (!isAssetEAM) {
isAssetEAM = EnterpriseContentEAMUtils.getTableHierarchy(assetClassName).indexOf('sn_ent_asset') > -1;
}
return isAssetEAM;
};
EnterpriseContentEAMUtils.isEnterpriseModelClass = function (modelClassName) {
if (gs.nil(modelClassName))
return false;
var isModelEAM = EnterpriseContentEAMUtils.getEAMModelClasses().indexOf(modelClassName) > -1;
if (!isModelEAM) {
isModelEAM = EnterpriseContentEAMUtils.getTableHierarchy(modelClassName).indexOf('sn_ent_model') > -1;
}
return isModelEAM;
};
EnterpriseContentEAMUtils.inEAMModelClassHierarchy = function (modelClassName){
return EnterpriseContentEAMUtils.getTableHierarchy(modelClassName).indexOf('sn_ent_model') > -1;
};
EnterpriseContentEAMUtils.inEAMAssetClassHierarchy = function (assetClassName){
return EnterpriseContentEAMUtils.getTableHierarchy(assetClassName).indexOf('sn_ent_asset') > -1;
};
EnterpriseContentEAMUtils.isEnterpriseModelCategory = function (modelCatIds) {
if (gs.nil(modelCatIds)) {
return false;
}
modelCatIds = modelCatIds.split(',');
if (modelCatIds.length > 1) {
return false;
}
var modelCatId = modelCatIds[0];
var modelCatGr = new GlideRecord('cmdb_model_category');
if (!modelCatGr.get(modelCatId)) {
return false;
}
return EnterpriseContentEAMUtils.isEnterpriseModelClass(modelCatGr.product_model_class + '');
};
EnterpriseContentEAMUtils.getTableHierarchy = function (table) {
if (gs.nil(table)){
return [];
}
var gth = new global.GlideTableHierarchy(table);
return gth.getHierarchy();
};
EnterpriseContentEAMUtils.checkIfEAMParent= function(parent) {
var isEAM = false;
if (!gs.nil(parent)) {
if(EnterpriseContentEAMUtils.isEnterpriseModelClass(parent.product_model_class) && EnterpriseContentEAMUtils.isEnterpriseClassAsset(parent.asset_class)){
isEAM = true;
}
}
return isEAM;
};
EnterpriseContentEAMUtils.getModelCategoryRefQual = function(model) {
var refQual = '';
var modelClass = model.sys_class_name +'';
var root = new GlideTableHierarchy(EnterpriseContentEAMUtils.ENTERPRISE_MODEL);
var extensionList = root.getAllExtensions();
if (extensionList.indexOf(modelClass) != -1)
refQual += 'product_model_class='+modelClass;
return refQual;
};
EnterpriseContentEAMUtils.classificationModelCategoryRefQual = function() {
var refQual = '';
var root = new GlideTableHierarchy(EnterpriseContentEAMUtils.ENTERPRISE_MODEL);
var extensionList = root.getAllExtensions();
refQual += 'product_model_classIN' + extensionList;
return refQual;
};
EnterpriseContentEAMUtils.modelClassificationRefQual = function(model) {
var refQual = '';
var modelCat = model.cmdb_model_category;
var catList = [modelCat];
var categories = new GlideRecord('cmdb_model_category');
categories.addQuery('sys_id', modelCat);
categories.query();
categories.next();
var parentRef = categories.parent_cateogry;
catList.push(parentRef);
while (parentRef) {
catList.push(parentRef.parent_cateogry);
parentRef = parentRef.parent_cateogry;
}
refQual += 'cmdb_model_categoryISEMPTY^ORcmdb_model_categoryIN' + catList;
return refQual;
};
EnterpriseContentEAMUtils.assetModelRefQual = function(asset) {
var categoryClause = '';
var isCategoryDefined = (asset.model_category.toString() != '');
if (isCategoryDefined) {
var category = new GlideRecord('cmdb_model_category');
category.get(asset.model_category.toString());
categoryClause = 'cmdb_model_categoryLIKE' +
category.sys_id.toString();
if (category.asset_class.toString() == 'alm_consumable')
isCategoryConsumable = true;
if (category.bundle.toString() == 'true')
isCategoryBundle = true;
} else {
categoryClause = EnterpriseContentEAMUtils._getCategoriesProducingAssetClassOrClause(assetClass);
}
var refQual = categoryClause;
refQual = refQual + '^asset_tracking_strategy=leave_to_category';
refQual = refQual + '^status=' + global.AssetManagementConstants.MODEL_STATUSES.IN_PRODUCTION; // additional condition
return refQual;
};
EnterpriseContentEAMUtils._getCategoriesProducingAssetClassOrClause = function(assetClass) {
var categoryClause = '';
var categories = new GlideRecord('cmdb_model_category');
categories.addQuery('asset_class', assetClass);
categories.query();
while (categories.next()) {
if (categoryClause != '')
categoryClause = categoryClause + '^OR';
categoryClause = categoryClause + 'cmdb_model_categoryLIKE' +
categories.sys_id.toString();
}
return categoryClause;
};
EnterpriseContentEAMUtils.setAssetProperty = function(property, value){
var assetProperty = new GlideRecord(global.AssetUtils.ASSET_PROPERTY);
if (assetProperty.get('key', property)) {
assetProperty.setValue('value',value);
assetProperty.update();
}
};
EnterpriseContentEAMUtils.getAssetProperty = function(property) {
var propertyValue;
var defaultValue;
var assetProperty = new GlideRecord(global.AssetUtils.ASSET_PROPERTY);
if (assetProperty.get('key', property)) {
propertyValue = assetProperty.getValue('value');
}
if (gs.nil(propertyValue) && property == 'com.sn_ent.sn_ent_model_classes')
defaultValue = EnterpriseContentEAMUtils.DEFAULT_MODEL_CLASSES;
else if (gs.nil(propertyValue) && property == 'com.sn_ent.sn_ent_asset_classes')
defaultValue = EnterpriseContentEAMUtils.DEFAULT_ASSET_CLASSES;
return gs.nil(propertyValue) ? defaultValue : propertyValue;
};
EnterpriseContentEAMUtils.syncClassToAssetProperty = function(func, value){
var isEAMClass = false;
if(func == 'asset'){
propertyname = 'com.sn_ent.sn_ent_asset_classes';
isEAMClass = EnterpriseContentEAMUtils.inEAMAssetClassHierarchy(value);
}else{
propertyname = 'com.sn_ent.sn_ent_model_classes';
isEAMClass = EnterpriseContentEAMUtils.inEAMModelClassHierarchy(value);
}
var propValue = EnterpriseContentEAMUtils.getAssetProperty(propertyname);
if (!gs.nil(propValue) && propValue.indexOf(value)<=-1 && isEAMClass){
propValue += ','+value;
EnterpriseContentEAMUtils.setAssetProperty(propertyname, propValue);
}
};
EnterpriseContentEAMUtils.getEAMModelClasses = function() {
return EnterpriseContentEAMUtils.getAssetProperty('com.sn_ent.sn_ent_model_classes');
};
EnterpriseContentEAMUtils.getEAMAssetClasses = function() {
return EnterpriseContentEAMUtils.getAssetProperty('com.sn_ent.sn_ent_asset_classes');
};
EnterpriseContentEAMUtils.setAbortActionOnEnterpriseRecord = function(gr, abortAction) {
if (!gs.nil(gr)) {
var class_name = gr.getValue('sys_class_name');
if (EnterpriseContentEAMUtils.isEnterpriseModelClass(class_name) || EnterpriseContentEAMUtils.isEnterpriseClassAsset(class_name)) {
gr.setAbortAction(abortAction);
}
}
};
EnterpriseContentEAMUtils.setWorkflowOnEnterpriseRecord = function(gr, workflow) {
if (!gs.nil(gr)) {
var class_name = gr.getValue('sys_class_name');
if (EnterpriseContentEAMUtils.isEnterpriseModelClass(class_name) || EnterpriseContentEAMUtils.isEnterpriseClassAsset(class_name)) {
gr.setWorkflow(workflow);
return gr.update();
}
}
return null;
};
EnterpriseContentEAMUtils.NORM_STATUSES = {
NEW: 'new',
NORMALIZED: 'normalized',
PARTIAL_NORMALIZED: 'partially normalized',
MANUFACTURER_NORMALIZED: 'manufacturer normalized',
MATCH_NOT_FOUND: 'match not found',
MANUALLY_NORMALIZED: 'manually normalized',
};
EnterpriseContentEAMUtils.BASE_CLASSES = {
MODEL_BASE_CLASS: 'sn_ent_model',
ASSET_BASE_CLASS: 'sn_ent_asset'
};
EnterpriseContentEAMUtils.DEFAULT_MODEL_CLASSES = "sn_ent_model,sn_ent_industrial_model,sn_ent_facility_model,sn_ent_transportation_model,sn_ent_medical_model,sn_ent_medical_device_model,sn_ent_retail_model,sn_ent_tactical_model,sn_ent_construction_model,sn_ent_wearable_model";
EnterpriseContentEAMUtils.DEFAULT_ASSET_CLASSES = "sn_ent_asset,sn_ent_retail_asset,sn_ent_medical_asset,sn_ent_industrial_asset,sn_ent_facility_asset,sn_ent_transportation_asset,sn_ent_tactical_asset,sn_ent_construction_asset,sn_ent_wearable_asset";
Sys ID
36eb3a217716011004b5a0c64b5a995f