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