You need to sign in to do that
Don't have an account?
Marc Friedman
Ways To Optimize This Code?
Hi All,
The following code works fine, but I was wondering if anyone had any suggestions about ways it can be optimized.
Relevant objects / relationships:
- Employer_Subgroup__c is a child object of Accounts
- Reward_Activity__c is a standalone object
- Employer_Group_Reward_Activity__c is a child of Accounts with a Lookup to Reward_Activity__c
- Employer_Subgroup_Reward_Activity__c is a standalone object with Lookups to Employer_Subgroup__c and Reward_Activity__c
Thanks,
Marc
Code:
global class PopulateSubgroups { WebService static Integer populateSubgroups(List<String> args, String groupId) { // Set the return variable to -1 in case the functional fails Integer result = -1; //Get a list of all Subgroups for the Group Employer_Subgroup__c[] subgroups = [select id from Employer_Subgroup__c where Group_Name__c = :groupId]; // Return 0 if there are no Subgroups for the Group if (subgroups.size() == 0) { result = 0; } else { result = 1; // Create the array of Employer Subgroup Reward Activities to upsert Employer_Subgroup_Reward_Activity__c[] esras = new Employer_Subgroup_Reward_Activity__c[]{}; // Get the Reward Amount and Reward Activity IDs for the selected Employer Group Reward Activities Employer_Group_Reward_Activity__c[] egras = [select Amount__c, Reward_Activity__c from Employer_Group_Reward_Activity__c where id in :args]; // Loop through each Employer Group Reward Activity to see if it is already associated with any of the Subgroups for (Integer i = 0; i < egras.size(); i++) { // Loop through each Subgroup for (Integer j = 0; j < subgroups.size(); j++) { Integer k = [select count() from Employer_Subgroup_Reward_Activity__c where Reward_Activity__c = :egras[i].Reward_Activity__c and Employer_Subgroup__c = :subgroups[j].id]; // If the same association exists more than once, ask User to notify the administrator (there is code to prevent this from happening, but is a good check just in case) if (k > 1) { result = -2; // If the association exists, populate the Employer Subgroup Reward Activity record and update the Amount } else if (k == 1) { Employer_Subgroup_Reward_Activity__c esra = [select id from Employer_Subgroup_Reward_Activity__c where Reward_Activity__c = :egras[i].Reward_Activity__c and Employer_Subgroup__c = :subgroups[j].id]; esra.Amount__c = egras[i].Amount__c; esras.add(esra); // If the association doesn't exist, create it } else if (k == 0) { Employer_Subgroup_Reward_Activity__c esra = new Employer_Subgroup_Reward_Activity__c(); esra.Reward_Activity__c = egras[i].Reward_Activity__c; esra.Employer_Subgroup__c = subgroups[j].id; esra.Amount__c = egras[i].Amount__c; esras.add(esra); } // End If...else if... } } // Upsert the Employer Subgroup Reward Activities try { upsert esras; } catch (System.DmlException e) { System.debug(e.getMessage()); result = -1; } } return(result); } }