You need to sign in to do that
Don't have an account?
orph351
Question of Lists, Sets, and For loops
I have an Apex class that runs on a daily schedule. The goal is that it will kepp track of which users have recorded a votew for a specific opportunity. Other than the code not being optimized, I currently have two issues:
1.The For loop seems to only make it to the first ElseIf statement. It doesn't seem to matter what I change on the opportunity, the For loop exits at the first ElseIf.
2. The For loop does not seem to be looping through all opportunities from the list. It seems like it is only evaluating the first item in the list.
Any thoughts or suggestions?
1.The For loop seems to only make it to the first ElseIf statement. It doesn't seem to matter what I change on the opportunity, the For loop exits at the first ElseIf.
2. The For loop does not seem to be looping through all opportunities from the list. It seems like it is only evaluating the first item in the list.
global class DocketCronJ implements Schedulable{ global void execute(SchedulableContext SC) { datetime t = System.now(); date d = Date.newInstance(t.year(),t.month(),t.day()); List <Opportunity> opp = [Select GC_Online_Vote_Status__c, Id, Request_Name_Used_for_Workflow__c,CampaignId, StageName, Budget_Committee__c From Opportunity Where StageName = 'Committee Review' and GC_Online_Vote_Status__c != 'Complete' and Docket_Name__c LIKE'GC Online Docket_%']; for(Opportunity o: opp){ List<Campaign> camp = [Select GC_Vote_Overdue_End_Date__c from Campaign where Id = :o.CampaignId]; List<TrusteeVotes__c> vote = [Select Id, Vote_Response__c, Trustee_Name_del__c From TrusteeVotes__c Where Request_Name__c = :o.Id]; Integer Size = vote.size(); If (Size >= 4) { opp[0].GC_Online_Vote_Status__c = 'Complete'; update(opp); } else if (Size < 4 && camp[0].GC_Vote_Overdue_End_Date__c < d) { opp[0].GC_Online_Vote_Status__c = 'In Progress'; update(opp); } else if (Size < 4 && camp[0].GC_Vote_Overdue_End_Date__c >= d) { opp[0].GC_Online_Vote_Status__c = 'Complete'; update(opp); String voters = [Select Trustee_Name_del__c From TrusteeVotes__c Where Id in :vote].Trustee_Name_del__c; If (voters.contains('005A0000001lvws')) { System.debug ('User1 voted'); } Else {TrusteeVotes__c voteNew = new TrusteeVotes__c(Trustee_Name_del__c = '005A0000001lvws', Request_Name__c = o.Id, Vote_Response__c = 'Yes', Vote_Type__c = 'System'); insert voteNew; Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String emailAddr = 'user1@email.com'; String[] toAddresses = new String[] {emailAddr}; mail.setToAddresses(toAddresses); mail.setSubject('System Auto Vote on Request - ' + o.Id); mail.setPlainTextBody('Voting Close Date: ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n Request Id: ' + o.Id + '\n Request Name: ' + o.Request_Name_Used_for_Workflow__c + '\n Vote Cast for: User 1 (https://na11.salesforce.com/005A0000001lvws)'); mail.setHtmlBody('<b>Voting Close Date:</b> ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n <b>Request Id:</b> ' + o.Id + '\n <b>Request Name:</b> ' + o.Request_Name_Used_for_Workflow__c); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); } If (voters.contains('005G0000003uzCu')) { System.debug ('User 2 voted'); } Else {TrusteeVotes__c voteNew = new TrusteeVotes__c(Trustee_Name_del__c = '005G0000003uzCu', Request_Name__c = o.Id, Vote_Response__c = 'Yes', Vote_Type__c = 'System'); insert voteNew; Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String emailAddr = 'user2@email.com'; String[] toAddresses = new String[] {emailAddr}; mail.setToAddresses(toAddresses); mail.setSubject('System Auto Vote on Request - ' + o.Id); mail.setPlainTextBody('Voting Close Date: ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n Request Id: ' + o.Id + '\n Request Name: ' + o.Request_Name_Used_for_Workflow__c + '\n Vote Cast for: User 2 (https://na11.salesforce.com/005G0000003uzCu)'); mail.setHtmlBody('<b>Voting Close Date:</b> ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n <b>Request Id:</b> ' + o.Id + '\n <b>Request Name:</b> ' + o.Request_Name_Used_for_Workflow__c); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); } If (voters.contains('005G0000001pgd5')) { System.debug ('User3 voted'); } Else {TrusteeVotes__c voteNew = new TrusteeVotes__c(Trustee_Name_del__c = '005G0000001pgd5', Request_Name__c = o.Id, Vote_Response__c = 'Yes', Vote_Type__c = 'System'); insert voteNew; Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String emailAddr = 'user3@email.com'; String[] toAddresses = new String[] {emailAddr}; mail.setToAddresses(toAddresses); mail.setSubject('System Auto Vote on Request - ' + o.Id); mail.setPlainTextBody('Voting Close Date: ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n Request Id: ' + o.Id + '\n Request Name: ' + o.Request_Name_Used_for_Workflow__c + '\n Vote Cast for: User 3 (https://na11.salesforce.com/005G0000001pgd5)'); mail.setHtmlBody('<b>Voting Close Date:</b> ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n <b>Request Id:</b> ' + o.Id + '\n <b>Request Name:</b> ' + o.Request_Name_Used_for_Workflow__c); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); } If (voters.contains('005A0000000jRh1')) { System.debug ('User 4 voted'); } Else {TrusteeVotes__c voteNew = new TrusteeVotes__c(Trustee_Name_del__c = '005A0000000jRh1', Request_Name__c = o.Id, Vote_Response__c = 'Yes', Vote_Type__c = 'System'); insert voteNew; Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String emailAddr = 'user4@email.com'; String[] toAddresses = new String[] {emailAddr}; mail.setToAddresses(toAddresses); mail.setSubject('System Auto Vote on Request - ' + o.Id); mail.setPlainTextBody('Voting Close Date: ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n Request Id: ' + o.Id + '\n Request Name: ' + o.Request_Name_Used_for_Workflow__c + '\n Vote Cast for: User 4 (https://na11.salesforce.com/005A0000000jRh1)'); mail.setHtmlBody('<b>Voting Close Date:</b> ' + camp[0].GC_Vote_Overdue_End_Date__c + '\n <b>Request Id:</b> ' + o.Id + '\n <b>Request Name:</b> ' + o.Request_Name_Used_for_Workflow__c); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); } } } } }
Any thoughts or suggestions?
In my view i think that the mistake that you are doing is that you are quering the list in the for loop : Rather then using this you must query the list outside of the for loop.