0

How can I call this Batch Class from Lightning component?

 global class BatchSync implements Database.Batchable<sObject>,   Database.AllowsCallouts {


 public String query = 'Select ID, Name from Account';
 global Database.QueryLocator start(Database.BatchableContext BC) {
    return Database.getQueryLocator(query);
 }

     global void execute(Database.BatchableContext BC, List<Account> records) {         
        String endpoint;        

        for ( integer i = 0; i< records.size(); i++ ){
         try {                  
          HttpRequest req = new HttpRequest();
          HttpResponse res = new HttpResponse();
          Http http = new Http();
          // Set values to Params

          endpoint = 'Your endpoint';

          req.setHeader('Authorization', header);
          req.setHeader('Content-Type', 'application/json');
          req.setEndpoint(endpoint);
          req.setMethod('POST');
          req.setBody('Information you wanna send');
          req.setCompressed(true); // This is imp according to SF, but please check if
                                 // the webservice accepts the info. Mine did not :P
                                 // Had to set it to false

          if (!Test.isRunningTest()) {      
            res = http.send(req);
            String sJson = res.getBody();
            System.debug('Str:' + res.getBody());
          }             
          // now do what u want to with response.               
          }
          catch (Exception e) {         
            System.debug('Error:' + e.getMessage() + 'LN:' + e.getLineNumber() );           
          }
       }
    }   

    global void finish(Database.BatchableContext BC){    
    }
}

closed as off-topic by Martin Lezer, glls, Pranay Jaiswal, Vijay Ganji, Brian Mansfield Jul 3 at 16:51

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions on problems in code you've written must describe the specific problem and include valid code to reproduce it. For help writing short, self-contained syntactically-valid examples, see: SSCCE.org" – Martin Lezer, glls, Pranay Jaiswal, Vijay Ganji, Brian Mansfield
If this question can be reworded to fit the rules in the help center, please edit the question.

1

You cannot execute batch directly from Lightning component. For this, you need to use a @AuraEnabled method, from that method you can execute the batch.

@AuraEnabled
public static Account getAccount(Id accountId) {
    // do some preprocessing.
    // execute the batch here
    Id jobId = Database.executeBatch(new BatchSync()); // optional batch size can be provides as well.
}

You can also monitor the batch status querying AsyncApexJob

Aura Enabled Methods

Batch Apex

AsyncApexJob

  • 2
    Do we need (cacheable=true) ? My theory is cacheable is for retriveing data and it does not allow dml – Pranay Jaiswal Jul 2 at 10:17
  • It seems to me you really don't want this cacheable - you want to ensure that each invocation of the method is actually made against the serve. – Phil W Jul 2 at 10:33
  • Yes, we don't need it, It was added by mistake. Thanks for the correction – rahul gawale Jul 2 at 10:49

Not the answer you're looking for? Browse other questions tagged or ask your own question.