How to avoid updating certain field values in Salesforce using trigger?

In the below example, if the account type is Customer - Direct and if the user tries to update any fields other than Industry and Description, it will throw an error.

Field Set:



Sample Code:


  1. trigger AccountTrigger on Account ( before update ) {  
  2.   
  3.     Map < String, Schema.SObjectField > accountFieldsMap = new Map < String, Schema.SObjectField >();  
  4.     Set < String > setFieldsToIgnore = new Set < String >();  
  5.       
  6.     for ( Schema.FieldSetMember f :  SObjectType.Account.FieldSets.Fields_To_Excluded_for_Update.getFields() )     
  7.         setFieldsToIgnore.add( f.getFieldPath() );    
  8.       
  9.     for ( Schema.SObjectField objField : Schema.SObjectType.Account.fields.getMap().values() ) {  
  10.       
  11.         Schema.DescribeFieldResult F = objField.getDescribe();  
  12.         String strFieldName = F.getName();  
  13.           
  14.         if ( F.isUpdateable() && !setFieldsToIgnore.contains( strFieldName ) )  
  15.             accountFieldsMap.put( strFieldName, objField );  
  16.           
  17.     }  
  18.   
  19.     for ( Account objAcc : trigger.new ) {  
  20.       
  21.         Account oldAcc = trigger.oldMap.get( objAcc.Id );  
  22.       
  23.         if ( objAcc.Type == 'Customer - Direct' && oldAcc.Type == 'Customer - Direct' ) {  
  24.               
  25.             List < String > fieldNames = new List < String >();  
  26.             for ( String objField : accountFieldsMap.keySet() ) {  
  27.                   
  28.                 if ( objAcc.get( objField ) != oldAcc.get( objField ) )  
  29.                     fieldNames.add( accountFieldsMap.get( objField ).getDescribe().getLabel() );  
  30.               
  31.             }  
  32.               
  33.             if ( fieldNames.size() > 0 )  
  34.                 objAcc.addError( 'You cannot edit ' + String.join( fieldNames, ', ' ) );  
  35.           
  36.         }  
  37.           
  38.     }  
  39.   
  40. }  

Output:


No comments:

Post a Comment