Salesforce Apex Triggers Example:
Apex characters can be invoked through the use of triggers. Trigger is the Apex script that executes before or after the following types of operations:
• insert
• update
• delete
• merge
• upsert
• undelete.
You can define triggers for any top-level standard object or custom object, such as a Contact or an Account, but not for standard child objects, such as a ContactRole.
All Apex Triggers are the bulk triggers. (i.e.
a trigger can be invoked for 1 record or a batch of records (upto 200 records))
Triggers can be divided into two types of action:
• Before triggers can be used to update or validate record values before they are saved to the database.
• After triggers can be used to access field values that are set by the database (such as a record’s Id or lastUpdated field), and to affect changes in other records, such as logging into an audit table or firing asynchronous events with the queue.
• Trigger on object A can intern invokes another Trigger on Operation object B.
• All such operations are considered as a single unit of work. “Be careful of Governor Limits”.
• Upsert triggers fire both before and after insert or before and after update triggers as appropriate action. Upsert (before, after-Insert)
•Merge triggers fire both before and after delete triggers for the losing records and before update triggers for the winning record only. Merge (before, after-Delete)
•Triggers that execute after the record has been undeleted only work with specific objects.
•Field history is not recorded until the end of a trigger. If you query field history in a trigger, you will not see any history for the current transaction or current action.
Syntax:
trigger triggerName on ObjectName (trigger_events) {
code_block
}
where trigger_events can be a comma-separated list of one or more of the following events:
• before insert
• before update
• before delete
• after insert
• after update
• after delete
• after undelete
Variable and Methods:
• isExecuting- checks the execution
• isInsert- checks inserting the records
• isUpdate- checks for updating records
• isDelete- checks for deleting records
• isBefore- checks for before action of records
• isAfter- checks for after action of records
• isUndelete
• New (only for Insert & Update)
• newMap (only for before update, after insert, and after update triggers.)
• Old (only for update and delete triggers)
• oldMap (only for update and delete triggers)
• size
Trigger Example:
trigger isValidResource on Training_Feedback__c (before insert, before update) {
Map <id, contact=”” style=”background-color: white; color: #333333; font-family: ‘times new roman’; font-size: 14px; line-height: 19px; text-align: justify;”>mapContact = new Map <id, contact=””>();
List lsContact = new List();
List lsContactId = new List ();
for (Training_Feedback__c tf: Trigger.New)
{
lsContactId.add(tf.Contact__c);
}
if(lsContactId != null)
{
lsContact = [select id, employee_id__c from Contact where id in :lsContactId];
for (Contact cont : lsContact)
{
mapContact.put(cont.id, cont);
}
//Map <id, contact=””>mapContact01 = new Map <id, contact=””>([select employee_id__c from contact where id in :lsContactId]);
for (Training_Feedback__c tf: Trigger.New)
{
Contact tempContact = mapContact.get(tf.Contact__c);
if (tempContact.employee_id__c != tf.employee_id__c)
{
tf.addError(‘Invalid Employee Id for the selected Resource’);
}
}
}
}