Name

sn_itom_integ_app.pushConnectorHandler

Description

No description available

Script

var pushConnectorHandler = Class.create();
pushConnectorHandler.prototype = {
  initialize: function() {
  },
  
  saveConnectorInstance: function(connectorValues, connectorDynamicValues, shouldActivate){
  	if (!connectorValues)
  		return {success: false, error: {message: gs.getMessage('Instance data is empty')}};
  	
  	var dataValidation = this.validateConnectorData(connectorValues, connectorDynamicValues);
  	if (!dataValidation.isValid){
  		return {success: false, error: {message: dataValidation.errorMessage, errorsArr: dataValidation.errorsArr}};	
  	}
  		
  	var grConnectorInstance = new GlideRecord('sn_em_connector_push_instance');
  	
  	if(grConnectorInstance.get('name', connectorValues.name)){
  		if (!connectorValues.sysId || connectorValues.sysId != grConnectorInstance.sys_id){
  			return {success: false, error: {message: gs.getMessage('Instance name is already exist')}};	
  		}
  	}
  	
  	var result = connectorValues.sysId 
  		? this.updateConnectorInstance(grConnectorInstance, connectorValues, shouldActivate) 
  		: this.createConnectorInstance(grConnectorInstance, connectorValues, shouldActivate);
  	if (!result.success)
  		return result;
  	
  	if(grConnectorInstance.get(result.data.sys_id)){	
  		var instanceDetailsHandler = new connectorInstanceDetailsHandler();
  		instanceDetailsHandler.updateInstanceDetails(result.data.sys_id, connectorValues);		
  		result.data.url = grConnectorInstance.url;
  		result.data.connectorDynamicValues = this.updateConnectorInstanceValues(connectorDynamicValues, result.data.sys_id);
  	}
  	
  	return result;
  },
  
  updateConnectorInstance: function(gr, connectorValues, shouldActivate){
  	if(!gr.get(connectorValues.sysId)){
  		return {success: false, error: {message: gs.getMessage('cannot find sysId of updated instance')}};
  	}
  	delete connectorValues.sysId;
  	delete connectorValues.sys_id;
  	Object.keys(connectorValues).forEach(function(connectorValue){gr[connectorValue] = connectorValues[connectorValue];});
  	var activationAvailablity = this.checkActivationAvailablity(gr);
  	if (shouldActivate && activationAvailablity.available) {
  		gr.active = true;
  	}
  	var sysId = gr.update();
  	return sysId 
  		? !shouldActivate || activationAvailablity.available 
  			? {success: true, data: {sys_id: sysId}}
  			: {success: false, error: {message: activationAvailablity.message}}
  		: {success: false, error: {message: gs.getMessage('Update failed')}};
  },
  
  createConnectorInstance: function(gr, connectorValues, shouldActivate) {
  	gr.newRecord();
  	Object.keys(connectorValues).forEach(function(connectorValue){gr[connectorValue] = connectorValues[connectorValue];});
  	var activationAvailablity = this.checkActivationAvailablity(gr);
  	if (shouldActivate && activationAvailablity.available) {
  		gr.active = true;
  	}
  	var sysId = gr.insert();
  	return sysId 
  		? !shouldActivate || activationAvailablity.available 
  			? {success: true, data: {sys_id: sysId}}
  			: {success: false, error: {message: activationAvailablity.message}}
  		: {success: false, error: {message: gs.getMessage('Insert failed')}};
  },
  
  updateConnectorInstanceValues: function(connectorDynamicValues, sysId){
  	var updatedValues = [];
  	connectorDynamicValues && Object.keys(connectorDynamicValues || {}).forEach(function(connectorDynamicValue){
  		var gr = new GlideRecord('sn_em_connector_push_instance_config_param');	
  		gr.addQuery('push_connector_instance', sysId);
  		gr.addQuery('name', connectorDynamicValue);
  		gr.query();
  		if (gr.next()){
  			gr.value = connectorDynamicValues[connectorDynamicValue];
  			updatedValues.push(gr.update());
  		}
  	});
  	return updatedValues;
  },
  
  activateConnector: function(sysId){
  	var gr = new GlideRecord('sn_em_connector_push_instance');
  	if (sysId && gr.get(sysId)){
  		var activationAvailablity = this.checkActivationAvailablity(gr);
  		if (activationAvailablity.available){
  			gr.active = true;
  			var updateSuccess = gr.update();
  			return updateSuccess 
  			? {success: true, data: {sys_id: sysId}}
  			: {success: false, error: {message: gs.getMessage('Activation failed')}};
  		}
  		return {success: false, error: {message: activationAvailablity.message}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  deactivateConnector: function(sysId){
  	var gr = new GlideRecord('sn_em_connector_push_instance');
  	if (sysId && gr.get(sysId)){
  		gr.active = false;
  		var updateSuccess = gr.update();
  		return updateSuccess 
  		? {success: true, data: {sys_id: sysId}}
  		: {success: false, error: {message: gs.getMessage('Deactivation failed')}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  deleteConnector: function(sysId){
  	var gr = new GlideRecord('sn_em_connector_push_instance');
  	if (sysId && gr.get(sysId)){
  		var deleteSuccess = gr.deleteRecord();
  		return deleteSuccess 
  		? {success: true}
  		: {success: false, error: {message: gs.getMessage('Delete failed')}};
  	}
  	return {success: false, error: {message: gs.getMessage('sys_id not found')}};
  },
  
  validateConnectorData: function(connectorValues, connectorDynamicValues){
  	var formValidatorFields = ['name', 'push_connector_definition'];
  	var errorsList = [];
  	formValidatorFields.forEach(function(field){
  		if (!connectorValues[field] || !connectorValues[field].trim().length) {
  			errorsList.push({fieldName: field, errorMessage: 'field cannot be empty'});
  		}
  	});

  	if (connectorValues.type == '5' && !connectorValues.mid_server)
  		errorsList.push({fieldName: 'mid_server', errorMessage: 'field cannot be empty'});
  	
  	var errorMessage = '';
  	errorsList.forEach(function(error){
  		errorMessage += errorMessage.length ? ', ' : '';
  		errorMessage += error.fieldName + ' - ' + error.errorMessage;
  	});
  	
  	return {isValid: !errorsList.length, errorsArr: errorsList, errorMessage: errorMessage};
  },
  
  checkActivationAvailablity: function(gr_instance){
  	var gr_definition = new GlideRecord('sn_em_connector_listener');
  	if (gr_instance.push_connector_definition && gr_definition.get(gr_instance.push_connector_definition)){
  		return gr_definition.active 
  			? {available: true}
  			: {available: false, message: gs.getMessage('Activation failed - definition is inactive')};
  	}
  	return {available: false, message: gs.getMessage('Cannot find definition sys_id')};
  },
  
  type: 'pushConnectorHandler'
};

Sys ID

aaa612a677642110feb4c84e2c5a99ac

Offical Documentation

Official Docs: