I created a trigger to open a case in my account if (Atribuido__c == 'SIM')

I want the trigger to fire just when this field is updated.

If this field is already updated and I update any other fields in my Account the trigger should not.

The trigger that I've done is firing always when I update my account if (Atribuido__c == 'SIM')

trigger CriarCaseAccount_AR on Account (after update) {
    List<Case> Cases = new List<Case>();
    List<Account> act = Trigger.new;

    for (Account ct : act) {
        if (ct.Antecipado__c == 'SIM' && ct.RecordTypeID == '012U00000000vYx' || ct.Antecipado__c == 'AR' && ct.RecordTypeID == '012U00000000vYx'){
            Case c = new Case(
                AccountID = ct.id,
                RecordTypeID = '012U000000011yC',
                Motivo__c = 'Formandos AR',
                Prazo_para_resolucao__c = Date.today(),
                Description = 'Montagens',
                Subject = ct.id,
                Ownerid = '005U0000001KraS'


     insert cases;

How I determine the trigger just fire when this specific field is updated?

Thanks Phil !

I just made some changes and works perfectly !

I was trying to fire my trigger just when "Antecipado" == 'SIM' or 'AR'. If this field is already 'SIM' or 'AR' and I update another field in my Account. The trigger can't be fired.


for (Account acc: Trigger.new) {
    Account oldAccount = Trigger.oldMap.get(acc.ID);

    if (acc.Antecipado__c != oldAccount.Antecipado__c) {
        If (acc.Antecipado__c == 'SIM' || acc.Antecipado__c == 'AR') {

  • what do you mean: if the field is already updated? I assume it's translation thing, but can you be more specific? do you want to compare to the before update? was it updated on a previous transaction?
    – Saariko
    Apr 30, 2013 at 15:22
  • Great, glad it worked @Everton CP7, if click on the Tick next to my answer, that marks it as answered. May 1, 2013 at 7:03

1 Answer 1


For this, you can reference the Trigger.oldMap and Trigger.newMap map collections. So, you can compare old values with new values. For example:

for( Id accountId : Trigger.newMap.keySet() )
  if( Trigger.oldMap.get( accountId ).Antecipado__c != Trigger.newMap.get( accountId ).Antecipado__c )
     // do something here because your field has changed

So, the Trigger will always 'fire' but you will only act upon it if the new and old values are different (i.e. if the user updated the value).

  • Help I have almost the same problem, however, it doesn't seem to be working for me. **trigger PropOwned on Contact (after update) {<br> for (Contact c : Trigger.new){<br> Contact oldContact = Trigger.oldMap.get(c.id);<br> if (c.One_Prop_Owned__c != oldContact.One_Prop_Owned__c){<br> if (c.One_Prop_Owned__c == '');<br> McLabs2__Ownership__c newOwn = new McLabs2__Ownership__c();<br> newOwn.McLabs2__Contact__c = c.id;<br> newOwn.McLabs2__Property__c = c.One_Prop_Owned__c;<br> insert newOwn;<br> }<br> }<br> Nov 10, 2014 at 20:35
  • 5
    I believe you need to change Account to Id in the for loop. At least I did.
    – Matt Brown
    Jun 15, 2018 at 14:32
  • 3
    You're right, have modified - only took 5 years for someone to notice :) Jun 16, 2018 at 17:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .