Skip to main content
Jagadeesh M (HCL Technologies) ha fatto una domanda in #Apex
private static void DuplicateAccountMerge(List<Account> triggerNew) {

        try{

        // Merges a new Account with an existing Account based on matching email addresses.

        // Old Account is the Master Account- New Account information will be added to the Master Account only where the Master Account information is blank

       

        // Set up variables

        List<Id> triggerId = new List<Id>();

        List<String> triggerEmail = new List<String>();

       

        // Read trigger into variable(s)

        for (Account acc : Triggernew)

            {

                triggerId.add(acc.Id);

                triggerEmail.add(acc.PersonEmail);            

            }

     

        // Get all Account fields formatted for use in a SOQL query

        Map<String, Schema.SObjectField> AllLeadFields = Schema.getGlobalDescribe().get('Account').getDescribe().SObjectType.getDescribe().fields.getMap();

     

         List<String> accessiblefields = new List<String>();

     

          for(Schema.SObjectField field : AllLeadFields.values()){

                if(field.getDescribe().isAccessible())

                    accessiblefields.add(field.getDescribe().getName());

            }

     

            String allfields='';

           

            for(String fieldname : accessiblefields)

                allfields += fieldname+',';

     

            allfields = allfields.subString(0,allfields.length()-1);

            

            

           //Query string to get all Accounts with the same email address

           

            String masterSOQLQuery = 'SELECT ' + allfields + ' FROM Account WHERE PersonEmail IN:  triggerEmail ORDER BY CreatedDate';

     

             

            // Query string to get all Accounts with the same email address excluding the Master Account

            String duplicatesSOQLQuery = 'SELECT ' + allfields + ' FROM Account WHERE PersonEmail IN: triggerEmail AND Id != :masterAccountID LIMIT 2';

     

            List<Account> matchingAccounts = database.query(masterSOQLQuery);

     

            Account masterAccount = matchingAccounts[0];

            Id masterAccountID = masterAccount.Id;

       

            List<Account> duplicateAccounts = database.query(duplicatesSOQLQuery);

           

            // Go through the master and duplicate record fields, and update the master record where its fields are blank, 

            //but the duplicate's is populated

            

            SObjectType AccountType = Schema.getGlobalDescribe().get('Account');

            Map<String, Schema.sObjectField> mapFields = AccountType.getDescribe().fields.getMap();

       

               for(String fieldName : mapFields.keySet())

                    {

                        if(masterAccount.get(fieldName) == null && duplicateAccounts[0].get(fieldName) != null)

                            {

                                masterAccount.put(fieldName, duplicateAccounts[0].get(fieldName));

                            }

                    } 

               

                    if(masterAccount != null) {

                        //merge masterAccount duplicateAccounts;  

                        Database.MergeResult[] results = Database.merge(masterAccount, duplicateAccounts, false);

                    }

               }

               Catch(Exception e){

                        system.debug('Exception ***'+e.getMessage());

                        System.debug('Exception_Line_No:' + e.getLineNumber());

                 } 

     }

Thanks in advance...!!

Jagadeesh M
2 risposte
0/9000