Browsing "Older Posts"

Browsing Category "Salesforce Trigger Interview Questions"
  • What is Recursive Trigger in Salesforce? How can we Avoid Recursive Trigger in Salesfore with Example

    salesforcepoint Tuesday, 21 March 2017

    What is Recursive Trigger in Salesforce?

    Recursive Trigger is a trigger which is called and called itself when some DML operation occurs. Recursion basically occurs when we perform same dml in the apex trigger method (ex: If we perform update operation in update triggers).  Recursion occurs when the trigger code called itself in a infinite loop until system throws error “maximum trigger depth exceeded”.

    Salesforce Recursive Trigger Simple Example:

    Trigger t1 on Contact(after  insert){
      Insert new Contact(Lastname=’Venu’, Phone=12345);
    }


    In above trigger, when we  inserts  new contact record , then the trigger t1 called, as per trigger logic new contact record should be created  and that new record calls again this trigger as it is after insert trigger  and again new record inserted it will be goes on in a loop until system stops. Finally  we will get error “maximum trigger depth exceeded” Like Below.





    How To Avoid Recursive Trigger in Salesforce?

    To avoid Recursive Trigger problem we have to create a public class with static Boolean variable as below.

     class:
    public class AvoidRecursive {
       public static boolean firstRun = true;
    }


    Trigger: 
    trigger TestTrigger on Contact (after insert) {
        if(AvoidRecursive.firstRun)
        {
            AvoidRecursive.firstRun = false;
            insert new Contact(Lastname=’Venu’, Phone=12345);
        }  
    }

    Here first time we set Boolean variable as “TRUE” in class .  In trigger variable is equals to true then it goes to inside loop, performs logic and then variable sets as “FALSE” so next  time it will not run(if variable=false then it will not goes to loop & will not perform logic). So if   Code will try to run second time in same request then it will not run.

  • scenario: Before Delete Trigger in Salesforce

    salesforcepoint
    Before Delete Triggers basically used for preventing the record deletion based on some condition.

    Scenario: Write a Trigger on Account to prevent the record delete, if Annual Revenueis grater than or equals to 50,000. If Annual Revenue is more than fifty thousand it should throw error.

    Trigger:

    trigger DeleteTrigger on Account (Before Delete) {
    If(trigger.isBefore){
       If(Trigger.isDelete){
           for(account a: trigger.old){
               if(a.AnnualRevenue>=50000){
                   a.adderror(' You cant delete if "Annual Revenue is more than 50000" ');
                     }
                 }

            }
       }
    }

    If I try to delete Account Record which has more than 50,000 then it shows Validation Errors While Saving Record(s) like below


  • Difference Between Trigger.new & Trigger.old in All Trigger Events with Example

    salesforcepoint Monday, 20 March 2017

    Trigger.new stores list of new records which are going to be inserted and updated into particular object.  Trigger.old stores list of old records which are updated with new values, which are going to be deleted from database.

    Example: I have created one custom object student and it has Name & Teacher custom fields. and if I try to insert new record what will happen..

    Trigger: I have written trigger to check what would be there in Trigger.new & Trigger.old when trigger event occurs. First of all we have to enable Debug Logs in our Organization, so that only we can check.

    trigger exampl26 on Student__c (Before Insert, After Insert, Before Update, After Update, Before Delete, After Delete, after undelete) {
     If(trigger.isBefore)
       {
           if(trigger.isInsert)
            {
            system.debug('Before Insert Trigger.new is---------- :'+trigger.new);
            system.debug('Before Insert trigger.old is------------ :' +trigger.old);
            }
           if(trigger.isupdate)
            {
            system.debug('Before Update Trigger.new is---------- :'+trigger.new);
            system.debug('Before Update trigger.old is------------ :' +trigger.old);
            }
          if(trigger.isDelete)
            {
            system.debug('Before Delete Trigger.new is---------- :'+trigger.new);
            system.debug('Before Delete trigger.old is------------ :' +trigger.old);
            }
       }
    If(trigger.isafter)
       {
           if(trigger.isInsert)
            {
            system.debug('after Insert Trigger.new is---------- :'+trigger.new);
            system.debug('after Insert trigger.old is------------ :' +trigger.old);
            }
           if(trigger.isupdate)
            {
            system.debug('after Update Trigger.new is---------- :'+trigger.new);
            system.debug('after Update trigger.old is------------ :' +trigger.old);
            }
          if(trigger.isDelete)
            {
            system.debug('after Delete Trigger.new is---------- :'+trigger.new);
            system.debug('after Delete trigger.old is------------ :' +trigger.old);
            }

            if(trigger.isundelete)
            {
            system.debug('after Undeletete Trigger.new is---------- :'+trigger.new);
            system.debug('after Undelete trigger.old is------------ :' +trigger.old);
            }
        }
    }

    Before Insert:

    Trigger.New:  (Student__c:{Id=null, Name=venu, Teacher__c=a0328000000nFUFAA2})
    Trigger.Old: NULL

    After Insert: After record inserted to Database

    Trigger.new: (Student__c:{Id=a0128000017bQrcAAE, Name=venu, Teacher__c=a0328000000nFUFAA2})
    Trigger.old:  NULL

    Before Update: i was trying to updated Student Name Venu to 'Venu Gutta' then

    Trigger.new: (Student__c:{Id=a0128000017bQrcAAE, Name=venu Gutta, Teacher__c=a0328000000nFUFAA2})
    Trigger.old: (Student__c:{Id=a0128000017bQrcAAE, Name=venu, Teacher__c=a0328000000nFUFAA2})

    After Update: 
    Trigger.new: (Student__c:{Id=a0128000017bQrcAAE, Name=venu Gutta, Teacher__c=a0328000000nFUFAA2})
    Trigger.old: (Student__c:{Id=a0128000017bQrcAAE, Name=venu, Teacher__c=a0328000000nFUFAA2})

     if I delete the That Record
    Before Delete: 
    Trigger.new: Null
    Trigger.old:  (Student__c:{Id=a0128000017bQrcAAE, Name=venu Gutta, Teacher__c=a0328000000nFUFAA2})

    After Delete:
    Trigger.new: Null
    Trigger.old:  (Student__c:{Id=a0128000017bQrcAAE, Name=venu Gutta, Teacher__c=a0328000000nFUFAA2})

    if I undelete that record from Recylic bin then:
    After Undelete:
    Trigger.new: (Student__c:{Id=a0128000017bQrcAAE, Name=venu Gutta, Teacher__c=a0328000000nFUFAA2})
    Trigger.old: NULL

    Click Here for Basic example trigger for Difference Between 
    Trigger.New and Trigger.old

    Difference Between Before and After Triggers In Salesforce





  • cognizant-CTS salesforce Interview Questions for Experienced & Freshers

    salesforcepoint Monday, 27 February 2017
    cognizant-CTS salesforce Interview Questions
    1.Tell me about What is crm life-cycle?
    2.What is lead conversion process and how its helpful in CRM?.
    3.What is SDLC? which methodology you are using?
    4.What is profile and explain profile components in salesforce?
    5. permission sets and explain its uses?
    6.difference between salesforce profile and permission sets
    7.What is workflow rules and briefly explain it? Difference between evaluation criteria created, and every time it’s edited and created & and any time it’s edited to subsequently meet the criteria?
    8.approval process in salesforce and give me one use case?
    9.What is report type?
    10 .Which reports support dashboards
    11 .What are sharing settings in salesforce? 
    12. Difference between summary and matrix report in salesforce?
    13. process builder& need of process builder?
    14.What are escalation rules and briefly explain
    15 .What is soap web service and briefly expalin how you know about that(It depends if you put in resume)
    16. How you can rate yourself in salesforce?
    17. What type of settings you can give in permission sets
    18.What are the technologies available in cloud computing other than salesforce
    19.Why salesforce is more popular?
    20. Difference Between Lookup & Master Detail Relationship in salesforce?
    21.what is web to Lead functionality in salesforce?
    22.What is email to case & web to case in salesforce?
  • When To Use Before Triggers & After Triggers in Salesforce

    salesforcepoint Wednesday, 22 February 2017
    Difference Between Before Trigger and After Trigger & When Should we use Before & After Triggers:

    Before Triggers: Before triggers are used to update or validate record values before they’re saved to the database.

    Uses:

    1. When we need to write validation on same object record.
    2. Insert and update operation same object.

    Sample Example: if opportunity amount is less then 10000 then through error.


    Trigger validateOppRecord on opportunity(Before Insert){
                             For(opportunity o: Trigger.new)
                               If(o.amount<10000){
                                   o.addError(‘please Enter opportunity amount more than 5000’);
                                  }

                            }

    After Triggers: 
    After Trigger:  After trigger is used when we perform DML operation on one object record and action will effect on another object record by accessing system fields such as record id and last mododifieddate field .

    USES: Insert/Update on related object, not the same object.
                 Notification email.


    Note: We cannot use After trigger if we want to update same record because after saving, record will be committed to database and record will be locked. The records, which fired with after trigger are read only. so  it causes read only error(System.FinalException: Record is read-only) if we perform operation on same object.

    Sample Example: Automatically create a Contact record when we create new Account Record.

    Trigger autoaccCon on Accout(After Insert){
        List<Contact> conlist = new List<Contact>();
        For(Account acc:Trigger.New){
           Contact con = New Contact();
           con.accountid=acc.id;
           con.lastname = acc.name;
           conlist.add(con);
        }
        insert conlist;
    }

  • Difference Between Trigger.New and Trigger.old with Example

    salesforcepoint Monday, 20 February 2017
    Trigger.new and Trigger.old both are context variables in Salesforce. 

    Trigger.New: Trigger.new returns List of new records which are trying to insert/update into Database. This is available in Before Insert, Before Update, After Insert,  After Update Triggers and undelete Triggers. This list of records can only modified in Before triggers.

    Trigger.Old: Trigger.old returns List of old records which are updated with new values. These List of records already there in Database. Trigger.old available in Before update, after update, Before Delete and After Delete triggers.


    Before Insert Trigger
    -----------------------
    Trigger.new- What are the records going to insert into Database [not commited yet, id=null]
    trigger.old- NULL
    Trigger.newmap-null
    Trigger.old-Null


    Afeter Insert
    -----------------------------
    Trigger.new- New List of Records which are  inserted
    Trigger.old- null
    Trigger.NewMap- New Map<ID, new Record>
    Trigger.oldMap- Null


    Before Update
    ------------------------------
    Trigger.new- New List of Records which are going to be updated
    Trigger.old- List of  Records with old values.
    Trigger.NewMap- New Map<ID, new Record>
    Trigger.oldMap- Old Map<ID, old record>


    After Update
    -------------------------------
    Trigger.new- New List of Records which are  updated
    Trigger.old- List of  Records with old values.
    Trigger.NewMap- New Map<ID, new Record>
    Trigger.oldMap- Old Map<ID, old record>

    Example: I have a scenario like when Account Phone number is updated then Account Description value should be updated with old phone number+new phone number.

    trigger NewVsOld on Account (before update) {
        for(integer i=0; i<trigger.new.size();i++){
    /*if Old Phone number and New phone number are not same then Description field will be updated with Old phone number+New phone number. if same no change will be in Description field*/
        if(trigger.old[i].phone!=trigger.new[i].phone){
            trigger.new[i].description='old phone number is  ' + trigger.old[i].phone + ' and New Phone number is ' +trigger.new[i].phone ;
       }
     }
    } 



    Here i have created one new Account record with phone number 7799703404
    I have updated phone number 7799703404 with new phone number 8897125248 and saved the record. Then description field automatically updated with "old phone number is  (779) 970-3404 and New Phone number is (889) 712-5248".


    In above Example Trigger.new record holds new phone number 887125248 and Trigger.old holds old phone number 7799703404.