Name

global.AppCollaborationTableCleaner

Description

No description available

Script

var AppCollaborationTableCleaner = Class.create();
AppCollaborationTableCleaner.prototype = {
  initialize: function() {
  	this._emptyRecords = {};
  	this._sysAppReferenceField = {
  		fieldName: 'application',
  		referenceTableName: 'sys_app'
  	};
  },
  
  _hasEmptyReferenceFields: function (glideRecord, referenceFields) {
  	var hasEmptyReference = false;
  	
  	for (var i=0; i<referenceFields.length; i++ ){
  		var referenceField = referenceFields[i];
  		var refRecord = glideRecord.getElement(referenceField.fieldName).getRefRecord();
  		
  		if (!refRecord.isValidRecord()) {
  			hasEmptyReference = true; 
  			break;
  		}
  	}
  	
  	return hasEmptyReference;
  },
  
  _cleanTable: function(current, options) {
  	/* options: {
  		execute: boolean,
  		tableName: 'string'
  		referenceFields: [{fieldName, referenceTableName}]
  	} */
  	
  	var gr = new GlideRecordSecure(options.tableName);
  	gr.addQuery('descriptor', current.getValue('sys_id'));
  	gr.query();
  	
  	this._emptyRecords[options.tableName] = {
  		sysIds: [],
  		count: 0
  	};
  	
  	while(gr.next()) {
  		var recordSysId = gr.getValue('sys_id');
  		
  		if(this._hasEmptyReferenceFields(gr, options.referenceFields)) {
  			this._emptyRecords[options.tableName].sysIds.push(recordSysId);
  			
  			if(options.execute) {
  				gr.deleteRecord();
  			}
  		}
  	}
  	
  	this._emptyRecords[options.tableName].count = this._emptyRecords[options.tableName].sysIds.length;
  },
  
  _cleanTables: function (current, execute) {
  	this._cleanAppCollaborationGroupTable(current, execute);
  	this._cleanAppCollaborationUserTable(current, execute);
  },
  
  _cleanAppCollaborationGroupTable: function (current, execute) {
  	var options = {
  		execute: execute,
  		tableName: 'sys_appcollab_group',
  		referenceFields: [
  			{
  				fieldName: 'group',
  				referenceTableName: 'sys_user_group'
  			},
  			this._sysAppReferenceField
  		]
  	};
  	
  	this._cleanTable(current, options);

  },
  
  _cleanAppCollaborationUserTable: function (current, execute) {				
  	var options = {
  		execute: execute,
  		tableName: 'sys_appcollab_user',
  		referenceFields: [
  			{
  				fieldName: 'user',
  				referenceTableName: 'sys_user'
  			},
  			this._sysAppReferenceField
  		]
  	};
  	
  	this._cleanTable(current, options);
  },

  /**
  * Returns an object that can be used to preview information for
  * records that will be removed
  * @param {Object} current GlideRecord [sys_appcollab_descriptor]
  * @return {Object} map tableName: {sysIds: [], count }
  */
  previewCleanTables: function(current) {
  	this._cleanTables(current, false);

  	return this._emptyRecords;
  },
  
  /**
  * Returns an object that can be used to display information for
  * records that were removed
  * @param {Object} current GlideRecord [sys_appcollab_descriptor]
  * @return {Object} map tableName: {sysIds: [], count }
  */
  cleanTables: function(current) {
  	this._cleanTables(current, true);
  	
  	return this._emptyRecords;
  },

  type: 'AppCollaborationTableCleaner'
};

Sys ID

f66e62cd77611110a346d599cf5a9936

Offical Documentation

Official Docs: