Skip to main content TDX, the developer conference for the AI agent era is happening now. Watch live on Salesforce+ for exclusive digital content, a revolutionary keynote, and more.
오류

오류가 발생했습니다. 다시 시도하세요.

Radhe Shyam (Kloudrac Group) 님이 #Apex에 질문했습니다
Here is my apex batch:

global class EmailAlertToQuoteProposalApprovalUser implements Database.Batchable<sObject>, database.stateful{

    

    public String EVENT_TYPE_MEETING = 'Meeting';

    private Datetime EndTime=System.now();

    private String query;

    public String limitSize;

    private long recordcount;

    private string debuglog='';

    private integer batchcounter=0;

    private datetime processstarttime=system.now();

    private boolean haserror=false;

    private set<id> processedaccounts=new set<id>();

   

    global EmailAlertToQuoteProposalApprovalUser(datetime activitydatetime){

        if(activitydatetime==null){

            EndTime=System.now().adddays(-1);

        }

    }

   

   global Database.QueryLocator start(Database.BatchableContext BC){

       log('Batch process start time: ' + processstarttime);

       log('Batch process id: ' + bc.getJobID());

       log('Acvitity End Time Parameter: ' + EndTime);

       Datetime dtTimeNow=system.now();

       query='SELECT Id,Pending_With_Email__c,Submitted_Date_time__c FROM Apttus_Proposal__Proposal__c WHERE Submitted_Date_time__c!=null AND Submitted_Date_time__c>=: dtTimeNow' + ' ORDER BY Id';

       if(limitSize!=null)

       {

        query = query + ' LIMIT ' +  limitSize;

       }     

            

       log(query); 

       return Database.getQueryLocator(query);                                    

      

    }

   

    global void execute(Database.BatchableContext BC, List<sObject> scope){

        log('Batch number: ' + batchcounter);

        set<id> QuoteProposalId=new set<id>(); 

        list<Apttus_Proposal__Proposal__c>  lstQuoteProposal=new list<Apttus_Proposal__Proposal__c>();

        for(sobject so: scope){

            id quoteid=(Id)so.get('Id');

            Apttus_Proposal__Proposal__c objQuote= (Apttus_Proposal__Proposal__c)so;

            if(!processedaccounts.contains(quoteid)){

                QuoteProposalId.add(quoteid);

                lstQuoteProposal.add(objQuote);

            }

        }

        if(QuoteProposalId.size()>0){

            log('Number of accounts to be processed: ' + QuoteProposalId.size());

            log('Account Ids: '+ QuoteProposalId);

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

            CCAddress.add('abaranwal@kloudrac.com');

            string TemplateId=system.Label.quoteEmailTemplate;

            

            processedaccounts.addAll(QuoteProposalId);

            try{

                Messaging.SingleEmailMessage[] mails=new Messaging.SingleEmailMessage[0];

                 

                for(Apttus_Proposal__Proposal__c qt:lstQuoteProposal){

                    list<string> AdditionalRecipients=new list<string>();

                    AdditionalRecipients.add(qt.Pending_With_Email__c);

                    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

                    mail.setToAddresses(AdditionalRecipients);

                    mail.setCcAddresses(CCAddress);

                    //mail.setOrgWideEmailAddressId(OrgWideEmailId);

                    mail.setTemplateId(TemplateId);

                    mail.whatid=qt.id;

                    mail.setTargetObjectId('003n0000008FULE'); 

                    mails.add(mail);

                }

                

                log('Sending emails ... count: ' + mails);

                Messaging.sendEmail(mails); 

            

                        

            }catch(Exception e) {

                haserror=true;

                string body=e.getMessage();

                log(body);

    

            }

        }else{

            log('No Quote/Proposal is processed in this batch');

        }

        ++batchcounter;

    }

    global void finish(Database.BatchableContext BC){

        log('Entire batch process has ended');

        SaveDebugLog();

    } 

    

    public static void SendEmail(String Subject,String Body,String[] Recipeints){

        /*String Displayname=Lookup.getTarget('UpdateOpportunity', 'Config','FromAddress', true);

        //OneCRM.sandbox@ge.com

        Id OrgWideEmailId=[Select Id, DisplayName, Address from OrgWideEmailAddress where Address =:Displayname].Id;    

        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

        mail.setToAddresses(Recipeints);

        mail.setSubject(Subject);

        mail.setPlainTextBody(Body);

        mail.setOrgWideEmailAddressId(OrgWideEmailId);

        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail});*/

                

    }

    

    private void log(string msg){

        debuglog+=msg+'\n';

        system.debug(logginglevel.info,msg);

    }

    

    private Id SaveDebugLog(){

        String recStr =  'Transaction Log';

        

        Integration_Log__c log= new Integration_Log__c();

        log.Call_Method__c = 'BatchProcessQuoteProposalEscalationEmail';

        log.Object_Name__c = 'Quote/Proposal';

        log.Call_Time__c = processstarttime;            

        log.Status__c = haserror?'Failure':'Success';

        insert log;        

        

        recStr += '\nInterfaceId:' + log.Object_Name__c;

        recStr += '\nObjectId:' + log.Object_Id__c;

        recStr += '\nCallTime:' + log.Call_Time__c.format('yyyy.MM.dd  HH:mm:ss.SSS z');

        recStr += '\nStatus:' + log.Status__c;

        recStr += '\nLogId:'+ log.Id;

        recStr += '\n';            

        recStr += debuglog;

        

        Blob recBlob= Blob.valueOf(recStr);

        Attachment att= new attachment();

        att.Name = 'Log Details ' +system.now()+'.txt';

        att.ParentId = log.Id

        att.Body = Blob.valueof(recStr); 

        insert att;     

        

        return log.id;

    }    

    

    public static void startbatch(datetime activitytime){

        

        EmailAlertToQuoteProposalApprovalUser aula=new EmailAlertToQuoteProposalApprovalUser(activitytime);

        aula.log('activitytime: ' + activitytime);

        aula.EndTime=activitytime;

        if(activitytime==null){

            aula.EndTime=System.now().adddays(-1);

        }

        ID batchprocessid = Database.executeBatch(aula);

        System.debug('Apex Job id: ' + batchprocessid );

    }

}

And here is schedulable:  I want to run batch file after every 5 minutes... Please Help

===============================================

global class scheduledQuoteReminderBatchable implements Schedulable {

   global void execute(SchedulableContext sc) {

       EmailAlertToQuoteProposalApprovalUser aula=new EmailAlertToQuoteProposalApprovalUser(system.now());

       ID batchprocessid = Database.executeBatch(aula);

       

   }

}
답변 20개
  1. 2024년 3월 29일 오전 8:16

    Jatin,

     

    Although I wonder if that 100 limit still applies as I no longer see it listed on the governor limits page.

0/9000