Name

global.CSMBaseAPIUtils

Description

No description available

Script

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

  type: 'CSMBaseAPIUtils'
};

CSMBaseAPIUtils.validatePaginationVariables = function(request) {
  var paginationVariables = {};
  if (request.queryParams.sysparm_offset || request.queryParams.offset)
      paginationVariables.offset = request.queryParams.sysparm_offset ? parseInt(decodeURI(request.queryParams.sysparm_offset)) : parseInt(decodeURI(request.queryParams.offset));
  else
      paginationVariables.offset = 0;
  if (paginationVariables.offset && paginationVariables.offset < 0)
      throw sn_ws_err.BadRequestError("Negative offset is not supported");

  var defaultPageSize = CSMBaseConstants.API_RESPONSE_LIMIT_DEFAULT;
  var maxPageSize = CSMBaseConstants.API_RESPONSE_LIMIT_MAX;
  if (request.queryParams.sysparm_limit || request.queryParams.limit)
      paginationVariables.limit = request.queryParams.sysparm_limit ? parseInt(decodeURI(request.queryParams.sysparm_limit)) : parseInt(decodeURI(request.queryParams.limit));
  else
      paginationVariables.limit = defaultPageSize;
  paginationVariables.limit = Math.min(paginationVariables.limit, maxPageSize);

  return paginationVariables;
};

CSMBaseAPIUtils.getJSONFromGR = function(gr, displayValue) {
  var jsonObj = {};
  var glideSPScriptable = new GlideSPScriptable();
  for (var attr in gr) {
      var field;
      if (!gr.isValidField(attr))
          continue;
      if (displayValue == 'all')
          field = glideSPScriptable.getField(gr, attr);
      var type = field ? field['type'] + '' : gr[attr + ''].getED().getInternalType();
      if (type != "password" && !attr.includes("password")) {
          if (displayValue == 'true' || type === "boolean")
              jsonObj[attr] = gr.getDisplayValue(attr);
          else if (displayValue == null || displayValue == 'false')
              jsonObj[attr] = gr.getValue(attr);
          if (displayValue == 'all')
              jsonObj[attr] = field;
      }
  }
  if (displayValue == 'true' || displayValue == 'false' || displayValue == null)
      jsonObj.sys_id = gr.getUniqueValue();
  else if (displayValue == 'all') {
      jsonObj['sys_id'] = {};
      jsonObj['sys_id'].label = 'Sys ID';
      jsonObj['sys_id'].value = gr.getUniqueValue();
      jsonObj['sys_id'].displayValue = gr.getUniqueValue();
      jsonObj['sys_id'].type = 'GUID';
  }
  return jsonObj;
};

CSMBaseAPIUtils.getCustomJSONFromGR = function(gr, displayValue, selectedFields) {
  var jsonObj = {};
  var glideSPScriptable = new GlideSPScriptable();
  if (!selectedFields || selectedFields.length == 0) {
      jsonObj = this.getJSONFromGR(gr, displayValue);
      return jsonObj;
  }
  var selected_field_length = selectedFields.length;
  for (var counter = 0; counter < selected_field_length; counter++) {
      var attr = selectedFields[counter];
      var field;
      if (!gr.isValidField(attr))
          continue;
      if (displayValue == 'all')
          field = glideSPScriptable.getField(gr, attr);
      var type = field ? field['type'] + '' : gr[attr + ''].getED().getInternalType();
      if (type != "password" && !attr.includes("password")) {
          if (displayValue == 'true' || type === "boolean")
              jsonObj[attr] = gr.getDisplayValue(attr);
          else if (displayValue == null || displayValue == 'false')
              jsonObj[attr] = gr.getValue(attr);
          if (displayValue == 'all')
              jsonObj[attr] = field;
      }
  }
  if (displayValue == 'true' || displayValue == 'false' || displayValue == null)
      jsonObj.sys_id = gr.getUniqueValue();
  else if (displayValue == 'all') {
      jsonObj['sys_id'] = {};
      jsonObj['sys_id'].label = 'Sys ID';
      jsonObj['sys_id'].value = gr.getUniqueValue();
      jsonObj['sys_id'].displayValue = gr.getUniqueValue();
      jsonObj['sys_id'].type = 'GUID';
  }
  return jsonObj;
};

CSMBaseAPIUtils.prepareGlideRecord = function(params, tableName) {
  var externalUserValidation = new CaseRESTAPIValidatorForExternalUser();
  if (externalUserValidation.isExternalUser() && tableName.equals(global.CSMBaseConstants.CASE_TABLE)) {
      return externalUserValidation.prepareGlideRecord(params);
  }
  var gr = new GlideRecordSecure(tableName);
  gr.initialize();
  for (var attr in gr) {
      if (attr == "comments") {
          gr.comments = params[attr];
      } else if (params[attr]) {
          gr.setValue(attr, params[attr]);
      }
  }

  return gr;
};

CSMBaseAPIUtils.evaluateJSReferenceQualifier = function(referenceQual, record, dependentValues) {
  referenceQual = referenceQual.replace('javascript:', '');
  var dependentValueArr = dependentValues.split('^');
  for (i in dependentValueArr) {
      var temp = dependentValueArr[i].split('=');
      var column = temp[0];
      var value = temp[1];
      if (record.isValidField(column)) {
          record.setValue(column, value);
      }
  }
  var globals = new Packages.java.util.HashMap();
  globals.put('current', record);
  var encodedQuery = GlideEvaluator.evaluateStringWithGlobals(referenceQual, globals).toString();
  return encodedQuery;
};

CSMBaseAPIUtils.getDependentChoiceValueFromRecord = function(record, column) {
  var gr = new GlideRecord('sys_dictionary');
  gr.addQuery('name', record.getTableName());
  gr.addQuery('element', column);
  gr.query();
  if (gr.next()) {
      if (record[gr.dependent_on_field]) {
          return record[gr.dependent_on_field];
      }
  }
  return null;
};

CSMBaseAPIUtils.getReferenceListAndChoices = function(primary_table, column, start, end, query, dependent_value, ref_qual_input, id, reference_field_columns) {
  var result = {};
  var gr = new GlideRecordSecure(primary_table);
  if (id) {
      if (!gr.get(id)) {
          result['error'] = 'No record found.';
          return result;
      }
  } else gr.newRecord();
  if (!gr.isValidField(column)) {
      result['error'] = 'Invalid field';
      return result;
  }
  result.list = [];
  if (gr[column].getED().getInternalType().equals('reference')) {
      var reference_table = gr[column].getRefRecord().getTableName();
      var gr2 = new GlideRecordSecure(reference_table);
      var reference_qual = gr[column].getED().getReferenceQualifier();
      if (reference_qual && reference_qual.indexOf('javascript:') != -1) {
          reference_qual = CSMBaseAPIUtils.evaluateJSReferenceQualifier(reference_qual, gr, ref_qual_input);
      }
      if (query) {
          reference_qual = reference_qual ? (reference_qual + '^' + query) : query;
      }
      if (reference_qual)
          gr2.addEncodedQuery(reference_qual);
      gr2.chooseWindow(start, end, true);
      gr2.query();
      while (gr2.next()) {
          var record = {};
          record.label = gr2.getDisplayValue();
          record.value = gr2.getUniqueValue();
          var reference_field_col_length = reference_field_columns.length;
          if (reference_field_columns && reference_field_col_length > 0) {
              for (var counter = 0; counter < reference_field_col_length; counter++) {
                  var column_name = reference_field_columns[counter] + '';
                  if (gr2.isValidField(column_name))
                      record[column_name] = gr2.getValue(column_name);
              }
          }
          result.list.push(record);
      }
      result.totalRecords = gr2.getRowCount();
  } else {
      var choiceGenerator;
      dependent_value = dependent_value ? dependent_value : CSMBaseAPIUtils.getDependentChoiceValueFromRecord(gr, column);
      if (dependent_value)
          choiceGenerator = new GlideChoiceListGenerator(primary_table, column, dependent_value);
      else
          choiceGenerator = new GlideChoiceListGenerator(primary_table, column);
      var choices = choiceGenerator.get();
      var default_value = gr[column].getED().getDefault() + '';
      var min = (choices.size() > 0 && choices.getChoice(0).getLabel().equals('-- None --')) ? 1 : 0;
      if (choices.size() > min) {
          if (end > choices.size() || end < 1 || end > start)
              end = choices.size();
          if (start > choices.size() || start < 1)
              start = 0;
          for (var i = start; i < end; i++) {
              var choice = {};
              choice.label = choices.getChoice(i).getLabel();
              choice.value = choices.getChoice(i).getValue();
              if (choice.value.equals(default_value))
                  choice.default_value = true;
              result.list.push(choice);
          }
          result.totalRecords = choices.size();
      } else {
          result['error'] = 'Invalid field type.';
      }
  }
  return result;
};

CSMBaseAPIUtils.getCaseActivityStream = function(id, start, end, activityType) {
  var result = {};
  result.list = {};
  var caseGr = new GlideRecordSecure(CSMBaseConstants.CASE_TABLE);
  if (caseGr.get(id)) {
      var stream = new GlideSPScriptable().getStream(caseGr.getRecordClassName(), caseGr.sys_id);
      if (stream) {
          if (stream.entries && stream.entries.length) {
              if (activityType && activityType !== '') {
                  activityType = activityType.split(',');
                  if (activityType.length) {
                      var entries = [];
                      stream.entries.forEach(function(entry) {
                          if (activityType.indexOf(entry.element + '') != -1) {
                              entries.push(entry);
                          }
                      });
                      stream.entries = entries;
                  }
              }
              result.totalRecords = stream.entries.length;
              stream.entries = stream.entries.slice(start, end);
          }
          stream.sys_created_on = caseGr.sys_created_on || "";
          stream.sys_created_on_adjusted = caseGr.getDisplayValue("sys_created_on") || "";
          result.list = stream;
      }
  } else
      result.error = 'Case ID is invalid or access restricted';

  return result;
};

CSMBaseAPIUtils.prepareUpdateGlideRecord = function(sysId, params, tableName) {
  var externalUserValidation = new CaseRESTAPIValidatorForExternalUser();
  if (externalUserValidation.isExternalUser() && tableName.equals(global.CSMBaseConstants.CASE_TABLE)) {
      return externalUserValidation.prepareGlideRecord(params, sysId);
  }
  var gr = new GlideRecordSecure(tableName);
  gr.get(sysId);
  for (var attr in gr) {
      if (attr == "comments") {
          gr.comments = params[attr];
      } else if (params[attr]) {
          gr.setValue(attr, params[attr]);
      }
  }

  return gr;
};

CSMBaseAPIUtils.validateCaseInputSocialParams = function(params) {
  //Validate that all required social parameters are given in input.
  if (params.social_handle || params.social_channel || params.social_handle_url || params.social_handle_type || params.social_post_url) {
      if (params.social_handle && params.social_channel && params.social_handle_url && params.social_handle_type && params.social_post_url && (params.account || params.consumer || params.contact))
          return true;
      else
          return false;
  } else
      return true;
};

/*
* Returns true if the given item is null, undefined, or evaluates to the empty string.
*/
CSMBaseAPIUtils.isVarNil = function(item) {
  return JSUtil.nil(item);
};

/*
* Returns true if the given item exists and is not empty (the logical inverse of .nil(), above).
*/
CSMBaseAPIUtils.isVarNotNil = function(item) {
  return !JSUtil.nil(item);
};

CSMBaseAPIUtils.getRowsCount = function(table, encodedQuery) {
  if (JSUtil.nil(table))
      return 0;
  var gr = new GlideAggregate(table);
  if (JSUtil.notNil(encodedQuery))
      gr.addEncodedQuery(encodedQuery);
  gr.addAggregate("COUNT");
  gr.query();
  if (gr.next()) {
      return gr.getAggregate("COUNT");
  }
  return 0;
};

CSMBaseAPIUtils.getGlideRecord = function(table, sysId) {
  var gr = new GlideRecord(table);
  return gr.get(sysId) ? gr : null;
};

CSMBaseAPIUtils.updateField = function(record, field, value) {
  if (!record)
      return null;
  record.setValue(field, value);
  return record.update();
};

CSMBaseAPIUtils.isCaseSLAAsyncEnabled = function() {
  return gs.getProperty("sn_customerservice.rest.api.case_sla_async") == "true";
};

Sys ID

9f5094015372030097a2ddeeff7b12cf

Offical Documentation

Official Docs: