Toggle Side Panel
Forcetalks
  • Home
  • Articles
    • All Articles
    • Blogs
    • Videos
    • Infographics
  • Consultants
    • Salesforce Product Expertise
      • Top Salesforce ConsultantsTop Salesforce Consultants
    • Salesforce Industry Expertise
    • Salesforce Experts by Location
  • Webinars
  • Contact Us
More options
    Sign in Sign up
    • Home
    • Articles
      • All Articles
      • Blogs
      • Videos
      • Infographics
    • Consultants
      • Salesforce Product Expertise
        • Top Salesforce ConsultantsTop Salesforce Consultants
      • Salesforce Industry Expertise
      • Salesforce Experts by Location
    • Webinars
    • Contact Us
    Close search

    Apex Batch – Use of interface Database.AllowsCallouts in Batch Class

    avnishyadav2561995gmail-com
    Avnish Yadav September 18, 2018
    Use of interface Database.AllowsCallouts in Batch Class

    Hello guys,

    Today, I will talk about interface named as Database.AllowsCallout in Batch helps in integrate Salesforce with an external server. To use a callout in batch Apex, we must use an interface Database.AllowsCallouts in the class definition of batch class.

    Syntax-

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

    Let see a simple example on Database.AllowCallouts –

    global class BatchWithCallout implements Database.Batchable<sObject>,
    Database.AllowsCallouts, Database.Stateful {
        private final String clientId = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
        private final String clientSecret = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
        private final String username = ‘xxxxxxxxxxxxxxxxxxxxx’;
        private final String password = ‘xxxxxxx’;
        public  Integer count=0;
        public String q = ‘Select ID, Name from Account LIMIT 10’;
        global Database.QueryLocator start(Database.BatchableContext BC) {
            return Database.getQueryLocator(q);
        }
        global void execute(Database.BatchableContext BC, List<Account> records) {
            count = count+1;
            String endpoint = ‘https://login.salesforce.com/services/oauth2/token’;
            for ( integer i = 0; i< records.size(); i++ ){
                try {
                    String reqbody = ‘grant_type=password&client_id=’+
                    clientId+’&client_secret=’+
                    clientSecret+’&username=’+
                    username+’&password=’+password;
                    Http http = new Http();
                    HttpRequest request = new HttpRequest();
                    HttpResponse response = new HttpResponse();
                    request .setBody(reqbody);
                    request .setMethod(‘POST’);
                    request .setEndpoint(‘https://login.salesforce.com/services/oauth2/token’);
                    response = http.send(req);
                    request .setHeader(‘Authorization’, ‘header’);
                    request .setHeader(‘Content-Type’, ‘application/json’);
                    request .setEndpoint(endpoint);
                    request .setMethod(‘POST’);
                    request .setBody(‘Information you wanna send’);
                    request .setCompressed(true); // This is imp according to SF, but please check if
                    // the web service accepts the info. Mine did not ?
                    // Had to set it to false
                    if (!Test.isRunningTest()) {
                        response = http.send(request);
                        String sJson = response .getBody();
                        System.debug(‘@@@@Str:’ + response .getBody());
                    }
                    // now do what u want to with response
                    System.debug(‘@@@@execute’+count);
                }
                catch (Exception err) {
                    System.debug(‘@@@@Error:’ + err.getMessage() + ‘LN:’ + err.getLineNumber() );
                }
            }
        }
        global void finish(Database.BatchableContext BC){
            System.debug(‘@@@@finish’+count);
        } 
    }

    Note:- If you don’t know what is Database.Stateful, Kindly read this blog.

    Thanks.

    Happy Coding.

     

    Categories: Others
    Tags: Batch Class, Batch Class Code, Callouts, Database Batchable, Database Query Locator, Database.AllowsCallouts, database.stateful, Exception Handling in Apex, Get Method, Http Response, oAuth2, Salesforce Account, Salesforce Records, Salesforce sObject, Set Method, Tokens

    Get listed your company

    Have an innovative Salesforce solution that delivers faster, smarter results?
    Join the Marketplace

    [adinserter block=”16″]

    best salesforce consultants
    best salesforce consultants
    best salesforce consultants
    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants
    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants
    Footer Forcetalks logo

    support@forcetalks.com

    • twitterx

    Quick Links

    Advertise with Us

    Salesforce® Articles

    Dreamforce 2023

    Top Salesforce® Bloggers 2023

    Top Salesforce Consultants

    Get Listed

    Company

    Contact Us

    About Us

    Privacy Policy

    Terms & Conditions

    InsightHub

    Salesforce Blogs

    Salesforce Videos

    Salesforce Groups

    Salesforce Jobs

    Forcetalks

    © 2026 - Forcetalks ● All Rights Reserved

    Salesforce® is a trademark of Salesforce® Inc. No claim is made to the exclusive right to use “Salesforce”. Any services offered within the Forcetalks website/app are not sponsored or endorsed by Salesforce®.