Friday, June 1, 2012

Trigger

Trigger:
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
Example:
trigger isValidResource on Training_Feedback__c (before insert, before update) {

Map mapContact = new Map ();
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 mapContact01 = new Map ([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');
}
}
}
}

No comments:

Post a Comment