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

Offical Documentation

Official Docs: