Name

global.StandardChangeProcessSNC

Description

Base ServiceNow API extended by StandardChangeProcess.

Script

var StandardChangeProcessSNC = Class.create();

StandardChangeProcessSNC.prototype = Object.extendsObject(ChangeProcess, {

  initialize: function(changeGr) {
  	ChangeProcess.prototype.initialize.call(this, changeGr);
  	this._standardChangeActive = pm.isActive('com.snc.change_management.standard_change_catalog');
  	
  	if (this._standardChangeActive) {
  		var gr = new GlideRecord("std_change_properties");
  		gr.addQuery("internal_name", "main_config");
  		gr.query();
  		if (gr.next())
  			this._readOnlyFields = (gr.readonly_fields + "").split(",");
  	}
  },

  applyTemplate: function(standardChangeTemplate) {
  	if (!this._standardChangeActive)
  		return true;

  	standardChangeTemplate = this._validateStandardChangeTemplate(standardChangeTemplate);
  	if (standardChangeTemplate === null)
  		return false;

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[apply] template: " + standardChangeTemplate.getGlideRecord().name);

  	return standardChangeTemplate.applyToChange(this._gr);
  },

  copyAttachments: function(standardChangeTemplate) {
  	standardChangeTemplate = this._validateStandardChangeTemplate(standardChangeTemplate);
  	if (standardChangeTemplate === null)
  		return false;

  	return standardChangeTemplate.copyAttachments(this._gr);
  },

  canWriteTo: function(fieldName) {
  	if (!fieldName)
  		return false;

  	var canWrite = this._gr[fieldName].canWrite() && this._readOnlyFields.indexOf(fieldName) === -1;

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[canWriteTo] fieldName: " + fieldName + " canWrite: " + canWrite + " readOnlyFields: " + this._readOnlyFields);

  	return canWrite;
  },

  _validateStandardChangeTemplate: function(standardChangeTemplate) {
  	if (typeof standardChangeTemplate === "string")
  		standardChangeTemplate = StandardChangeTemplate.findById(standardChangeTemplate);

  	if (typeof standardChangeTemplate !== "object" || standardChangeTemplate.type !== "StandardChangeTemplate")
  		return null;

  	return standardChangeTemplate;
  },

  type: "StandardChangeProcessSNC"
});

StandardChangeProcessSNC.newChange = function(standardChangeTemplate, nameValuePairs) {
  var changeProcess = StandardChangeProcess.newChangeProcess(standardChangeTemplate, nameValuePairs);

  if (!changeProcess || !changeProcess.insert())
  	return null;

  changeProcess.copyAttachments(standardChangeTemplate);
  return changeProcess;
};

StandardChangeProcessSNC.newChangeProcess = function(standardChangeTemplate, nameValuePairs) {
  var changeProcess = new StandardChangeProcess(ChangeRequest.newStandard().getGlideRecord());

  if (pm.isActive("com.snc.change_management.standard_change_catalog")) {
  	standardChangeTemplate = typeof standardChangeTemplate === "string" ? StandardChangeTemplate.findById(standardChangeTemplate) : standardChangeTemplate;
  	if (!standardChangeTemplate || standardChangeTemplate.type !== "StandardChangeTemplate")
  		return null;

  	var standardChangeTemplateApplied = changeProcess.applyTemplate(standardChangeTemplate);
  	if (!standardChangeTemplateApplied)
  		return null;
  }

  var chgModel;
  if (nameValuePairs.chg_model) {
  	chgModel = nameValuePairs.chg_model;
  	delete nameValuePairs.chg_model;
  }

  var fields = changeProcess.setValues(nameValuePairs);
  if (fields.ignored && fields.ignored.length > 0)
  	changeProcess.__ignoredfields = fields.ignored;

  if (chgModel) {
  	if (!changeProcess.__ignoredfields)
  		changeProcess.__ignoredfields = [];
  	changeProcess.__ignoredfields.push("chg_model");
  }

  return changeProcess;
};

StandardChangeProcessSNC.findAll = function(orderBy, textSearch, encodedQuery) {
  orderBy = orderBy || ChangeProcessSNC.NUMBER;
  var changeRequestGr = new GlideRecordSecure(ChangeRequest.CHANGE_REQUEST);
  changeRequestGr.addActiveQuery();
  changeRequestGr.addQuery("type", ChangeRequest.STANDARD);

  if (textSearch && textSearch.trim() !== "")
  	changeRequestGr.addQuery(ChangeCommon.matchAll(), textSearch);

  if (encodedQuery && encodedQuery.trim() !== "")
  	changeRequestGr.addEncodedQuery(encodedQuery);

  changeRequestGr.orderBy(orderBy);
  changeRequestGr.query();
  return changeRequestGr;
};

StandardChangeProcessSNC.findById = function(sysId) {
  if (!sysId)
  	return null;

  var changeRequestGr = new GlideRecordSecure(ChangeRequest.CHANGE_REQUEST);
  changeRequestGr.addQuery("type", ChangeRequest.STANDARD);
  changeRequestGr.addQuery("sys_id", sysId);
  changeRequestGr.query();
  if (!changeRequestGr.next())
  	return null;

  return new StandardChangeProcess(changeRequestGr);
};

Sys ID

dc74a534534313004667ddeeff7b1278

Offical Documentation

Official Docs: