Apex Action Masking

Apex Action is a special action provided in the DataMasker for masking the field value. Using Apex Action, users can encrypt the field value. This encryption will be based on the key specified in the custom metadata types. This key works by encrypting the field value character by character.

(Note: Users have to create custom metadata types with the values that should replace the old values after masking the desired records/fields.)

For example – Here “Key” is the custom metadata type and “New” and “Old” are the two custom fields that will hold both the list of characters and their replaceable characters.



Now click on the “Manage Keys” button and add labels for keys.


Click on the label link to add “New” and “Old” values.


After the creation of all the keys users have to add a custom class ‘DM_OfbuscationCustomV1’ in the org which will inherit managed package class ‘DM_OfbuscationService’ to mask data using Apex action.

global class DM_OfbuscationCustomV1 implements pcldm.DM_OfbuscationService {
    global map < String, Object > ofbuscateData(map < String, Object > dataMap) {
        if (dataMap.containsKey('objectName') && dataMap.containsKey('fieldName') && dataMap.containsKey('fieldType') && dataMap.containsKey('fieldValue')) {
            String objectName = (String) dataMap.get('objectName');
            String fieldName = (String) dataMap.get('fieldName');
            String fieldType = (String) dataMap.get('fieldType');
            String fieldValue = (String) dataMap.get('fieldValue');
            if (String.isNotBlank(fieldValue)) {
                Map < String, String > charMap = new Map < String, String > ();
                for (Key__mdt k: Key__mdt.getall().values()) {
                    charMap.put(k.Old__c, k.New__c);
                List < String > tempArray = fieldValue.split('');
                String returnStr = '';
                for (String character: tempArray) {
                    returnStr += charMap.containsKey(character) ? charMap.get(character) : character;
                if (String.isBlank(returnStr)) {
                    returnStr = fieldValue;
                returnStr = returnStr.escapeCsv();
                dataMap.put('fieldValue', returnStr);
        return dataMap;

Below are the steps to implement an Apex Action masking solution –
Step 1: Create a New Configuration

Open the Data Masker app and click on ‘Configuration’ in order to create a new configuration record. Click on the ‘New’ button and name the configuration.


Open the configuration by clicking on the link..


Step 2: Create an Object Masking record

Create an Object Masking record for the Object on which you want to use Apex Action. In this case, the Object is Contact.


Click on the object link to add fields for making. Users will be redirected to the field masking layout.


Step 3: Add the Apex Action Class Name

Click on the ‘New’ button to add a field in the masking with the appropriate action. Add the Apex Action class name in the ‘Enter Value’ text field. Here, you can add more fields as per business requirements.


 Here, mapping is all set and users can mask records with defined Apex Action.

For example, suppose we want to replace firstname “John” of the contact with Apex Action and the user has created a key as follows –

J -> X , o -> w , h -> b , n -> c. 

Then, after masking “John”, it will be masked with the mentioned key and the new firstname will look like “Xwbc”.

Let’s take a Contact record  “John Smith”.


Now open the configuration and start masking for Apex Action by clicking on the “Object Masking” button and follow the steps.


After successfully masking, the record will be masked as mentioned keys in the Custom Metadata. In this case “John”  will be replaced with the text “Xwbc”.


In this way, the user can add multiple fields in masking and can mask data with APEX action.

Powered by BetterDocs