Name

sn_mobile_card_bui.ViewConfigRepository

Description

No description available

Script

var ViewConfigRepository = Class.create();
ViewConfigRepository.prototype = {
initialize: function() {},

type: 'ViewConfigRepository',

save: function(viewConfig) {
  var viewConfigGR = new GlideRecord('sys_sg_view_config');

  this.setIfPresent('description', viewConfig.description, viewConfigGR);
  this.setIfPresent('template', viewConfig.template, viewConfigGR);
  this.setIfPresent('table', viewConfig.table, viewConfigGR);
  this.setIfPresent('name', viewConfig.name, viewConfigGR);
  viewConfigGR.setValue('active', true);

  viewConfigGR.insert();

  if (
    viewConfig.viewConfigElements != undefined &&
    viewConfig.viewConfigElements.length > 0
  ) {
    this.saveViewConfigElements(
      viewConfigGR.getUniqueValue(),
      viewConfig.viewConfigElements
    );
  }

  if (
    viewConfig.mobileUiRules != undefined &&
    viewConfig.mobileUiRules.length > 0
  ) {
    this.saveMobileUiRules(viewConfig.mobileUiRules);
  }

  return viewConfigGR;
},

deleteUnusedRecords: function(unusedRecords, table) {
  var slotsGr = new GlideRecord(table);
  /*
      Be very careful about moving logic out of this for loop.
      I elected to keep the query in here and delete record rather than do deleteMultiple
      with a check that the array exists because if you remove that check all view template slots
      will get deleted. Delete mutiple seems too dangerous to use for this.
      */
  if (unusedRecords) {
    unusedRecords.forEach(function(unusedRecordId) {
      if (slotsGr.get(unusedRecordId)) {
        slotsGr.deleteRecord();
      }
    });
  }
},

update: function(id, viewConfig) {
  var viewConfigGR = new GlideRecord('sys_sg_view_config');

  if (viewConfigGR.get(id)) {
    this.setIfPresent('description', viewConfig.description, viewConfigGR);
    this.setIfPresent('template', viewConfig.template, viewConfigGR);
    this.setIfPresent('table', viewConfig.table, viewConfigGR);
    this.setIfPresent('name', viewConfig.name, viewConfigGR);

    viewConfigGR.update();

    if (viewConfig.resetViewConfigElements) {
      this.resetViewConfigElements(viewConfigGR.getUniqueValue());
    }

    if (
      viewConfig.viewConfigElements != undefined &&
      viewConfig.viewConfigElements.length > 0
    ) {
      this.saveViewConfigElements(
        viewConfigGR.getUniqueValue(),
        viewConfig.viewConfigElements
      );
    }

    if (
      viewConfig.mobileUiRules != undefined &&
      viewConfig.mobileUiRules.length > 0
    ) {
      this.saveMobileUiRules(viewConfig.mobileUiRules);
    }

    //deletes unused elements
    this.deleteUnusedRecords(
      viewConfig.elementsToDelete,
      'sys_sg_view_config_element'
    );

    //deletes unused element attributes
    this.deleteUnusedRecords(
      viewConfig.elementAttributesToDelete,
      'sys_sg_view_config_element_attribute'
    );

    //deletes unused ui rules
    if (
      viewConfig.mobileUiRulesToDelete != undefined &&
      viewConfig.mobileUiRulesToDelete.length > 0
    ) {
      this.deleteMobileUiRules(viewConfig.mobileUiRulesToDelete);
    }

    //deletes unused ui rule actions
    if (
      viewConfig.mobileUiRuleActionsToDelete != undefined &&
      viewConfig.mobileUiRuleActionsToDelete.length > 0
    ) {
      this.deleteMobileUiRuleActions(viewConfig.mobileUiRuleActionsToDelete);
    }

    return viewConfigGR;
  }

  return null;
},

resetViewConfigElements: function(viewConfigId) {
  var viewConfigElementsGR = new GlideRecord('sys_sg_view_config_element');
  viewConfigElementsGR.query('view_config', viewConfigId);

  while (viewConfigElementsGR.next()) {
    viewConfigElementsGR.deleteRecord();
  }
},

saveViewConfigElements: function(viewConfigId, elements) {
  var elementGR = new GlideRecord('sys_sg_view_config_element');
  elements.forEach(
    function(element) {
      elementGR.initialize();

      if (element.id && elementGR.get(element.id)) {
        this.setIfPresent('name', element.name, elementGR);
        this.setIfPresent(
          'view_template_slot',
          element.templateSlot,
          elementGR
        );
        this.setIfPresent('view_config', viewConfigId, elementGR);
        elementGR.update();
      } else {
        elementGR.newRecord();
        this.setIfPresent('name', element.name, elementGR);
        this.setIfPresent(
          'view_template_slot',
          element.templateSlot,
          elementGR
        );
        this.setIfPresent('view_config', viewConfigId, elementGR);
        elementGR.insert();
      }

      if (
        element.viewConfigElementAttributes != undefined &&
        element.viewConfigElementAttributes.length > 0
      ) {
        this.saveViewConfigElementAttributes(
          elementGR.getUniqueValue(),
          element.templateSlot,
          element.viewConfigElementAttributes
        );
      }
    }.bind(this)
  );
},

saveMobileUiRules: function(mobileUiRules) {
  var mobileUiRuleRepository = new MobileUiRuleRepository();
  mobileUiRules.forEach(function(mobileUiRule) {
    mobileUiRuleRepository.saveMobileUiRule(mobileUiRule);
  });
},

deleteMobileUiRules: function(mobileUiRuleSysIds) {
  var mobileUiRuleRepository = new MobileUiRuleRepository();
  mobileUiRuleSysIds.forEach(function(mobileUiRuleSysId) {
    mobileUiRuleRepository.deleteMobileUiRule(mobileUiRuleSysId);
  });
},

deleteMobileUiRuleActions: function(mobileUiRuleActionSysIds) {
  var mobileUiRuleRepository = new MobileUiRuleRepository();
  mobileUiRuleActionSysIds.forEach(function(mobileUiRuleActionSysId) {
    mobileUiRuleRepository.deleteMobileUiRuleAction(mobileUiRuleActionSysId);
  });
},

saveViewConfigElementAttributes: function(elementId, slotId, elementAtts) {
  var elementAttGR = new GlideRecord('sys_sg_view_config_element_attribute');
  elementAtts.forEach(
    function(elementAtt) {
      elementAttGR.initialize();

      if (elementAtt.id && elementAttGR.get(elementAtt.id)) {
        this.setIfPresent(
          'description',
          elementAtt.description,
          elementAttGR
        );
        this.setIfPresent('value', elementAtt.value, elementAttGR);
        this.setIfPresent(
          'translated_value',
          elementAtt.translatedValue,
          elementAttGR
        );
        this.setIfPresent(
          'name',
          this.getName(elementAtt.name),
          elementAttGR
        );
        this.setIfPresent('view_config_element', elementId, elementAttGR);
        elementAttGR.update();
      } else {
        elementAttGR.newRecord();
        this.setIfPresent(
          'description',
          elementAtt.description,
          elementAttGR
        );
        this.setIfPresent('value', elementAtt.value, elementAttGR);
        this.setIfPresent(
          'translated_value',
          elementAtt.translatedValue,
          elementAttGR
        );
        this.setIfPresent(
          'name',
          this.getName(elementAtt.name),
          elementAttGR
        );
        this.setIfPresent('view_config_element', elementId, elementAttGR);
        elementAttGR.insert();
      }
    }.bind(this)
  );
},

createAttachment: function(grToAttachTo, fileName, fileType, base64Data) {
  var gsa = new GlideSysAttachment();
  var attachmentSysId = gsa.writeBase64(
    grToAttachTo,
    fileName,
    fileType,
    base64Data
  );
  return attachmentSysId;
},

getName: function(nameAtt) {
  if (nameAtt === undefined) {
    return null;
  }
  var nameGR = new GlideRecord('sys_sg_view_element_attribute_name');
  var nameExists = false;

  if (nameAtt.id) {
    nameExists = nameGR.get(nameAtt.id);
  } else {
    nameGR.query('name', nameAtt.name);
    nameExists = nameGR.next();
  }

  if (nameExists) return nameGR.getUniqueValue();
},

setIfPresent: function(field, value, gr) {
  if (value !== undefined) {
    gr.setValue(field, value);
  }
},
};

Sys ID

e8b93565b71310108223e126de11a9b9

Offical Documentation

Official Docs: