Blog

Context Variables in Salesforce - 1

  • (4.0)
  • | 790 Ratings

All the triggers define implicit variables that allow developers to access run-time context. These variables are contained in the System.Trigger class.



What is Context Variable?


This is a special variable, managed / created by Salesforce itself, where we get the information about the Trigger. And that helps us to write better code with better practice.


For Example: 

Trigger PropertyDiscountTrigger on Property__c (Before Insert){
RowHouseDiscount.applyDiscount(Trigger.new);
}

Trigger.new - It is a default function in Salesforce. After trigger activation, it loads all the records. It cannot be modified, and trigger.new is called as “Context Variable”. It is of List Type.

 
Trigger.new - Assume that it is going to give us lists of records due to which trigger got called.
 
 
Get ahead in your career by learning Salesforce through Mindmajix Salesforce Training.

Now let us compare Trigger.new Vs Trigger.old:


The latest version of that particular record will be inside the “Trigger.new”, Until the trigger gets called. The IMMEDIATE previous version of that particular record(values before modification) will be inside the “Trigger.old”, Until the trigger gets called.


Eg: “Employee Details”  -  Object in Salesforce.


Scenario: Using INSERT Command insert the Data of employee details - Harry | age-20 | Place - NY into the Object and observe the difference between Trigger.new & Trigger.old. 

 

If the trigger goes to Trigger.New ?


Solution: The value will be - (Trigger.New = Harry | 20 | NY)

 

If the trigger goes to Trigger.Old ?


Solution: The value will be - (Trigger.New = NA)


Program Scenario: Using UPDATE Command update the records of the employee details - ( Larry| age-20 | Place - NY &  Harry| age-20 | Place - NY) which are inserted, and observe the difference between Trigger.new & Trigger.old


Before Update the record values:


(Trigger.New = Larry | 20 | NY)
(Trigger.Old = Harry | 20 | NY)

Logic - Instead of “Harry”, Employee Name “Larry”  is updated.


After Update the record values:


(Trigger.New = Jerry | 20 | NY)
(Trigger.Old = Larry | 20 | NY)

 

If the trigger goes to Trigger.New ?


Solution: The value will be - (Trigger.New = Jerry | 20 | NY)

 

If the trigger goes to Trigger.Old ?


Solution: The value will be - (Trigger.Old = Larry | 20 | NY).


Note: Instead of the employee name - “Harry”, “Larry” is updated in the Trigger.old, because it is the IMMEDIATE Previous update in the entry. Trigger.old comes in, only when the record gets EDITED.


Trigger.new & Trigger.old” - gives the data of the current record in the form of “List Data Type”. 
Trigger.newMap & Trigger.oldMap” - gives the data of the current record in the “Map format”. It is the basic difference between New, Old & NewMap, OldMap.


Syntax For newMap, oldMap of Context Variables: The syntax for the content variable od oldMap & newMap are mentioned below:


Trigger.NewMap = (Map<id, entire="" record="">)
Trigger.OldMap = (Map<id, entire="" record="">)</id,></id,>

Eg: [ <(ATDF2GTY6789), (Larry | 20 | NY )> ]


Trigger.Size () -  It specifies the count of the records present in the Trigger.


Trigger Best Practice: We will discuss in detail with a scenario.


Program#1 for Context Variable Demo:


Public class ContextVariableDemo{
Public static void functionA(){
//code
//call this code only when record is about to get inserted
system.debug(‘Function A got called!’);
}
Public static void functionB(){
//code
//call this code only when record is about to get updated
system.debug(‘Function B got called!’);
}
Public static void functionC(){
//code
//call this code only when record is already inserted
system.debug(‘Function C got called!’);
}
Public static void functionD(){
//code
//call this code only when record is already updated
system.debug(‘Function D got called!’);
}
}

The Solution for the above scenario,

Trigger JeanDiscountTrigger on Levis__c (Before Insert, Before Update, After Insert, After Update){
if(trigger.isBefore==True && trigger.isInsert==True){
ContextVariableDemo.functionA();
}
if(trigger.isBefore==True && trigger.isInsert==True){
ContextVariableDemo.functionB();
}
if(trigger.isBefore==True && trigger.isInsert==True){
ContextVariableDemo.functionC();
}
if(trigger.isBefore==True && trigger.isInsert==True){
ContextVariableDemo.functionD();
}
}

Note: 

Never use any trigger without Context Var.
Always use one trigger/object.
Always write class of the code.


Frequently Asked Salesforce Interview Questions & Answers

 
 

Program#2 for Sample Wrong Code For Context Variable Trigger

 
=============Trigger===========

Trigger MobileDiscountTrigger on Mobile_c (after insert){
MobileClassDemonstration MyObj = New MobileClassDemonstration ();
MyObj.applyDiscount(Trigger.new);
}
=============Class===========

Public Class MobileClassDemonstration {
Public Static Void applyDiscount(Set MobileListNew){
for(Mobile__c p : MobileListNew){
if(p.BrandName_c = ‘Samsung’){
p.Price__c = p.Price__c - 20;
}
}
}
}
 
Solution:
 
=============Trigger===========
Trigger MobileDiscountTrigger on Mobile__c (before insert){
if()Trigger.isInsert == True && Trigger.isBefore == True){
MobileClassDemonstration.applyDiscount(MobileClassDemonstration);
}
}
=============Class===========

Public Class MobileClassDemonstration {
Public Static Void applyDiscount(List MobileListNew){
for(Mobile__c p : MobileListNew){
if(p.BrandName__c = ‘Samsung’){
p.Price__c = p.Price__c - 20;
}
}
}
}

In the next topic, we will discuss in-detail about “Testing APEX In Salesforce”. Keep following us for more info on Salesforce Development / Programming.


Explore Salesforce Sample Resumes! Download & Edit, Get Noticed by Top Employers!Download Now!

Mindmajix offers different Salesforce certification training according to your desire with hands-on experience on Salesforce concepts


Subscribe For Free Demo

Free Demo for Corporate & Online Trainings.

Arogyalokesh
About The Author

Arogyalokesh is a Technical Content Writer and manages content creation on various IT platforms at Mindmajix. He is dedicated to creating useful and engaging content on Salesforce, Blockchain, Docker, SQL Server, Tangle, Jira, and few other technologies. Get in touch with him on LinkedIn and Twitter.


DMCA.com Protection Status

Close
Close