Name

global.DataSourceDataStreamAjax

Description

When the Data Stream Action input is changed, get the list of dynamic action input variables

Script

var DataSourceDataStreamAjax = Class.create();
DataSourceDataStreamAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  /*
   * To check if for the given data source record has a data stream action associated with action inputs 
   * input : data source record sys_id
   * output : object with property hasActionInputs true or false
   */
  hasDSActionInputs: function() {
      var currentDataSourceRecord = this.getParameter('sysparam_ds_record_sys_id');
      if (!gs.nil(currentDataSourceRecord))
          return this._hasActionInputs(currentDataSourceRecord);
      return '';
  },

  /*
   * To get action inputs for the data stream action associated with data source
   * input : data source record sys_id
   * ouput : object with property dsActionInputs array  and dsActionDBValue and dsSnapshotValue
   */
  getDSActionInputs: function() {
      var currentDataSourceRecord = this.getParameter('sysparam_ds_record_sys_id');
      if (!gs.nil(currentDataSourceRecord))
          return this._getActionInputs(currentDataSourceRecord);
      return '';
  },
  
  /*
   * To get options to override the connection and credential specified in the action, if any
   */
  getConnectionAliases: function() {
      var currentDataSourceRecord = this.getParameter('sysparam_ds_record_sys_id');
  	if (!gs.nil(currentDataSourceRecord))
          return this._getConnectionAliases(currentDataSourceRecord);
      return '';
  },

  _hasActionInputs: function(currentDataSourceRecord) {
      var response = {
          hasActionInputs: false
      };
      var dsActionInputObj = JSON.parse(this._getActionInputs(currentDataSourceRecord));
      if (dsActionInputObj) {
          for (var i = 0; i < dsActionInputObj.dsActionInputs.length; i++) {
              if (!dsActionInputObj.dsActionInputs[i].isHidden)
                  response.hasActionInputs = true;
          }
      }
     
      return JSON.stringify(response);
  },


  _getActionInputs: function(currentDataSourceRecord) {
      var arrayUtil = new ArrayUtil();
      var response = {
          dsActionInputs: [],
          dsActionDBValue: '',
          dsSnapshotValue: ''
      };
      var currentRecord = this._getCurrentDSActionRecord(currentDataSourceRecord);
      var glideVariableRecord = this._getGlideVariableRecord(currentRecord);
      var glideVariableNames = this._getVariableNames(currentRecord);

      if (this._isValidCurrentRecord(currentRecord)) {

          response.dsActionDBValue = currentRecord.data_stream_action.toString();
          response.dsSnapshotValue = currentRecord.data_stream_action.master_snapshot.toString();
          if (!gs.nil(glideVariableRecord)) {
              var elementsList = glideVariableRecord.getElements();
              for (var i = 0; i < elementsList.size(); i++) {
                  if (!arrayUtil.contains(glideVariableNames, elementsList.get(i).getName()))
                      continue;
                  var inputVar = {
                      name: elementsList.get(i).getName(),
                      isMandatory: elementsList.get(i).getED().isMandatory(),
                      isHidden: elementsList.get(i).getAttribute('visible_in_ui') === 'false'
                  };
                  response.dsActionInputs.push(inputVar);
              }
          }
      }

      return JSON.stringify(response);
  },

  _getCurrentDSActionRecord: function(currentDataSourceRecord) {
      var dsGr = new GlideRecord('sys_data_source');
      if (dsGr.get(currentDataSourceRecord))
          return dsGr;

      return null;
  },

  _getConnectionAliases: function(currentDataSourceRecord) {
      var currentRecord = this._getCurrentDSActionRecord(currentDataSourceRecord);
  	var connectionAlias = new sn_impex.FlowActionConnectionUtility().forFlowAction(currentRecord.data_stream_action);
  	
  	if (!connectionAlias) {
  		return JSON.stringify({noAlias: currentDataSourceRecord});
  	}

  	// Resolve the parent alias to get its name and add to drop-down
  	var parent = new GlideRecord('sys_alias');
  	if (!parent.get(connectionAlias)) {
  		return JSON.stringify({noAlias: true});
  	}
  	
  	var response = {
  		aliases: [ 
  			{
  				name: gs.getMessage("{0} (Default Connection)", parent.name.toString()),
  				sysId: parent.sys_id.toString(),
  				isDefault: true
  			}
  		]
  	};

  	var child = new GlideRecord('sys_alias');
  	child.addQuery('parent', connectionAlias);
  	child.query();
  	while(child.next()) {
  		response.aliases.push({
  			name: child.name.toString(),
  			sysId: child.sys_id.toString(),
  			isDefault: false
  		});
  	}
  	response.aliases.sort(function(alias1, alias2) {
  		if (alias1.name < alias2.name) return -1;
  		if (alias2.name < alias1.name) return -1;
  		return 0;
  	});
  	return JSON.stringify(response);
  },
  
  _getGlideVariableRecord: function(currentRecord) {
      var glideVariableRecord = null;
      if (this._isValidCurrentRecord(currentRecord)) {
          glideVariableRecord = currentRecord.data_stream_action_inputs.getVariablesRecord();
      }

      return glideVariableRecord;
  },

  _getVariableNames: function(currentRecord) {
      var glideVariableNames = [];
      if (this._isValidCurrentRecord(currentRecord)) {
          var names = currentRecord.data_stream_action_inputs.getVariableNames();
          for (var i = 0; i < names.length; i++) {
              glideVariableNames.push(names[i]);
          }
      }

      return glideVariableNames;
  },
  
  _getNonSystemVariableNames: function(currentRecord) {
  	var variableNames = this._getVariableNames(currentRecord);
  	var nonSystemVariableNames = [];
  	for (var i = 0; i < variableNames.length; i++) {
  		var name = variableNames[i];
  		if (!name.startsWith("sys_") && !name.startsWith("dynamic_hidden_input_")) {
  			nonSystemVariableNames.push(name);
  		}
  	}
  	return nonSystemVariableNames;
  },

  _isValidCurrentRecord: function(currentRecord) {
      return (!(gs.nil(currentRecord) && gs.nil(currentRecord.data_stream_action) && gs.nil(currentRecord.data_stream_action_input)));
  },

  type: 'DataSourceDataStreamAjax'
});

Sys ID

86c06c937341101057f131d7caf6a7d3

Offical Documentation

Official Docs: