Trigger.oldMap & Trigger.New are returning the same information on after update trigger
Last updated 2022-02-10 ·Reference W-3314593 ·Reported By 21 users
Summary
Trigger.old and Trigger.new values are the same for custom long text area fields containing >255 characters only when referencing trigger.old first in after triggers. Applies to debug output or value reference within the trigger body
Repro
1) Create a new custom field for Account:
A. Setup -> Build -> Customize -> Accounts -> Fields
B. Account Custom Fields & Relationships -> New
I. Data type: Text Area (Long)
II. Details:
* Field Label/Name: MyLTA1
* Length: 32768 (default)
III. FLS: accept all visible (default)
IV. Layouts: accept all (default)
V. Save
2) Create a new after update trigger:
A. Open Developer Console -> File -> New -> Apex Trigger
I. Name: MyTrigger1
II. sObject: Account
B. Body:
trigger MyTrigger1 on Account (after update) {
system.debug('old : ' + Trigger.old);
system.debug('new : ' + Trigger.new);
}
3) Create a new Account:
A. Name: Account1
B. MyLTA1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus porta nec diam id ullamcorper. Proin at mauris consequat, venenatis ante eget, accumsan nulla. Fusce viverra, lacus et ornare commodo, magna urna mollis urna, sit amet vulputate odio amet
I. Note the length is 255 chars
4) Execute the following anonymous apex (substitute ID as needed); open log after execution:
Account a = [SELECT Id, MyLTA1__c FROM Account WHERE Id = '001<acct id>'];
a.MyLTA1__c = 'NEW TEXT '+ a.MyLTA1__c;
update a;
system.debug('ANNON DEBUG: ' + a);
*At this point notice that the debug statements output by the trigger correctly show old and new list values.
5) Execute the following anonymous apex again:
Account a = [SELECT Id, MyLTA1__c FROM Account WHERE Id = '001<acct id>'];
a.MyLTA1__c = ‘SECOND ROUND '+ a.MyLTA1__c;
update a;
system.debug('ANNON DEBUG: ' + a);
Note that the last update from step 4 would’ve put this field over the 255 character length. Further note that the debug output logs from the trigger are not incorrect and new value for MyLTA1 is the same as old value. This is incorrect and is the error.
Also note that the update of the field proceeds fine as expected; error only with the Trigger.new context variable.
Workaround
Since this only affects the loading of the clob portion of the field everything works as expected only when referencing the new value FIRST, before making any reference to old. In the repro steps above you can swap lines 2 and 3 of the trigger body, and it will work.
-Alternatively, the field can be limited to 255 or less and avoid this issue.
Reported By (21)




Is it Fixed?
Any unreleased services, features, statuses, or dates referenced in this or other public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make their purchase decisions based upon features that are currently available.