Name

global.PrivacyPopulateClassifiedFieldTechniques

Description

Populate Data Privacy Field Techniques for a data class

Script

var PrivacyPopulateClassifiedFieldTechniques = Class.create();
PrivacyPopulateClassifiedFieldTechniques.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  /*
   * Populate dp_field_technique entries for a privacyConfig and dataClass
   * @sysparm privacyConfigId dp_configuration sys_id
   * @sysparm dataClassid data_classification sys_id
   */
  populateFields: function() {
  	var privacyConfigId = this.getParameter('sysparm_privacyConfigId');
  	var dataClassId = this.getParameter('sysparm_dataClassId');
  	var allInDataClass = JSON.parse(this.getParameter('sysparm_allInDataclass'));
  	return this.populateFieldsUtil(privacyConfigId, dataClassId, allInDataClass);
  },
  
  populateFieldsUtil: function(privacyConfigId, dataClassId, allInDataClass) {
  	var existingFields = this._getExistingFields(privacyConfigId);
  	var possibleFields = this._getPossibleFields(dataClassId, allInDataClass);
  	var fieldsToAdd = this._getFieldsToAdd(existingFields, possibleFields);

  	fieldsToAdd.forEach(function(item) {
  		var gr = new GlideRecord('dp_field_technique');
  		gr.setValue('classified_field', item);
  		gr.setValue('privacy_config', privacyConfigId);
  		gr.insert();
  	});
  	// return a value to make it easy to test excute ACL for this script include
  	return true;
  },
  
  _getExistingFields: function(privacyConfigId) {
  	var gr = new GlideRecord('dp_field_technique');
  	gr.addQuery('privacy_config', privacyConfigId);
  	gr.query();
  	var existingFields = [];
  	while (gr.next())
  		existingFields.push(gr.getValue('classified_field'));
  	return existingFields;
  },

  _getPossibleFields: function(dataClassId, allInDataClass) {
  	var api = new SNC.DataProtectionJob();
  	var response = api.getPossibleFieldsAndWarnings(dataClassId, allInDataClass);
  	var possibleFields = response[0];
  	if (response.length > 1) {
  		var warningMessages = response[1];
  		for (var i=0; i<warningMessages.length; i++)
  			gs.addInfoMessage(warningMessages[i]);
  	}
  	return possibleFields;
  },

  _getFieldsToAdd: function(existingFields, possibleFields) {
  	// We want to return possibleFields - existingFields
  	// Ensure logic works on ES5 and all recent browser versions
  	var fieldsToAdd = [];
  	possibleFields.forEach(function(item) {
  	if (existingFields.indexOf(item) === -1)
  			fieldsToAdd.push(item);
  	});
  	return fieldsToAdd;
  },
  
  type: 'PrivacyPopulateClassifiedFieldTechniques'
});

Sys ID

541b370eebc630101c396f16c5522877

Offical Documentation

Official Docs: