Name

global.PreviewRevertUpdateVersionAjax

Description

Ajax helper class for helping the Revert UI action on Update Version entries for Upgrade Preview

Script

var PreviewRevertUpdateVersionAjax = Class.create();

  		PreviewRevertUpdateVersionAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  			
  			revertToBaseSystemPreview : function (sys_id) {
  				// prevent transaction cancellation by quota rules
  				var transaction = null;
  				var isUncancelable = false;
  				try {
  					transaction = GlideTransaction.get();
  					if (transaction != null) {
  						isUncancelable = transaction.isUncancelable();
  						transaction.setCannotCancel(true);
  					}
  					
  					this._revert(sys_id);

  				} finally {
  					if (transaction != null)
  						transaction.setCannotCancel(isUncancelable);
  				}
  			},

  			retainCustomizationPreview : function (sys_id) {
  				// prevent transaction cancellation by quota rules
  				var transaction = null;
  				var isUncancelable = false;
  				try {
  					transaction = GlideTransaction.get();
  					if (transaction != null) {
  						isUncancelable = transaction.isUncancelable();
  						transaction.setCannotCancel(true);
  					}

  					this._retain(sys_id);

  				} finally {
  					if (transaction != null)
  						transaction.setCannotCancel(isUncancelable);
  				}
  			},

  			_revert: function(sys_id) {
  				var previewLogRecord = this._getUpgradePreviewLogRecord(sys_id);
  				var fileName = this._getFileName(previewLogRecord);
  
  				// current version
  				var grHead = GlideappUpdateVersion.getHeadVersion(fileName);
  				
  				// check permissions
  				if (!GlideappUpdateVersion.canWriteRecordInVersion(grHead.sys_id)) {
  					gs.addErrorMessage(gs.getMessage('Not allowed to revert this record'));
  					return;
  				}
  					
  				// baseline version
  				var grBaselineHead = GlideappUpdateVersion.getVersion(fileName, null, "sys_upgrade_history", null);
  				if (!grBaselineHead.isValidRecord()) {
  					this._sendUINotification(previewLogRecord);						
  					return;
  				}
  					
  				// revert
  				var glideappUpdateVersion = new GlideappUpdateVersion();
  				var isSuccess = glideappUpdateVersion.revert(grBaselineHead.sys_id);
  				glideappUpdateVersion.addUINotification();
  				this._updatePreviewLogReverted(previewLogRecord, isSuccess);
  			},

  			_retain: function(sys_id) {
  				var previewLogRecord = this._getUpgradePreviewLogRecord(sys_id);
  				var fileName = this._getFileName(previewLogRecord);

  				// current version
  				var grHead = GlideappUpdateVersion.getHeadVersion(fileName);

  				// check permissions
  				if (!GlideappUpdateVersion.canWriteRecordInVersion(grHead.sys_id)) {
  					gs.addErrorMessage(gs.getMessage('Not allowed to write to this record'));
  					return;
  				}

  				// revert to customization if most recently reverted to baseline, otherwise keep customization
  				var isSuccess;
  				if (grHead.getValue('source_table') === 'sys_upgrade_history') {
  					var glideappUpdateVersion = new GlideappUpdateVersion();
  					var grVersion = new GlideRecordSecure('sys_update_version');
  					grVersion.addQuery('name', fileName);
  					grVersion.addQuery('source_table', '!=', 'sys_upgrade_history');
  					grVersion.orderByDesc('sys_recorded_at');
  					grVersion.query();

  					if (grVersion.next())
  						isSuccess = glideappUpdateVersion.revert(grVersion.sys_id);
  					else
  						isSuccess = false;
  					glideappUpdateVersion.addUINotification();
  				} else {
  					isSuccess = true;
  				}

  				this._updatePreviewLogRetained(previewLogRecord, isSuccess);
  			},
  						
  			_getUpgradePreviewLogRecord: function(sys_id) {
  				var previewLogRecord = new GlideRecordSecure('upgrade_preview_log');
  				previewLogRecord.get(sys_id);
  				
  				return previewLogRecord;
  			},
  			
  			_getFileName: function(previewLogRecord) {
  				var fileName = previewLogRecord.file_name;
  				fileName = fileName.replace('.xml', '');
  				
  				return fileName;
  			},
  			
  			_sendUINotification: function(previewLogRecord) {
  				var gr = new GlideRecordSecure('upgrade_preview');
  				gr.get(previewLogRecord.preview);
  				var uin = new UINotification();
  				uin.setText(gs.getMessage('Your update version entry cannot be reverted because no base system version was found for upgrade {0}', gr.getValue('target_version')));
  				uin.send();
  			},
  			
  			_updatePreviewLogReverted: function(previewLogRecord, isSuccess) {
  				if (!isSuccess)
  					return;
  				
  				previewLogRecord.disposition = '5';
  				previewLogRecord.resolution = 'reverted';
  				previewLogRecord.update();
  			},

  			_updatePreviewLogRetained: function(previewLogRecord, isSuccess) {
  				if (!isSuccess)
  					return;

  				previewLogRecord.disposition = '4';
  				previewLogRecord.resolution = 'retained';
  				previewLogRecord.update();
  			},

  			toString: function () {
  				return 'PreviewRevertUpdateVersionAjax';
  			}
  		});

Sys ID

5cdeb4330fb60010bc7e40c1df767ed8

Offical Documentation

Official Docs: