0

I am making callout and getting the response. I am fetching the records in the batch of 200 so if there is 400 records there would be 2 callouts and getting data but the issue is second callout response overriding the first one.

And I can see only last 100 records. While in the debug logs I can see 100 and 100 records fetched in both the calls.

Here my class:

integer value = 0;
    do{
       HttpRequest req = new HttpRequest();
       HttpResponse res = new HttpResponse();
       req.setEndpoint( 'https://pi.pardot.com/api/prospect/version/3/do/query?user_key='+userKey+'&'+'api_key='+apiKey+'&'+'output=bulk&format=json&updated_after='+DayValue+'&'+'sort_by=updated_at&sort_order=ascending'+'&'+'offset='+value);                                  
       req.setMethod( 'GET' );
       req.setBody( 'user_key='+userKey+'&'+'api_key='+apiKey);
       req.setHeader('Accept', 'application/json ');
       req.setHeader('Content-Type','application/json');
       res = new Http().send( req );
       System.debug('***Response****'+res.getBody());
       wrapper = (PardotProspectWrapper)JSON.deserialize(res.getBody(), PardotProspectWrapper.class);

        //this I tried to add to store the data in Pardot_Prospect__c 
        ppobjlst = new List<Pardot_Prospect__c>();

       prospectIdlist = new List<String>();

       Pardot_Prospect__c ppobj = new Pardot_Prospect__c();
        for (PardotProspectWrapper.prospect p : wrapper.result.prospect) {
            ppobj = new Pardot_Prospect__c();
            ppobj.Prospect_Id__c = string.valueOf(p.id);
            ppobj.First_name__c = p.first_name;
            ppobj.Campaign_Name__c = p.campaign.name;
            prospectIdlist.add(string.valueOf(p.id));
            ppobjlst.add(ppobj);  
          } 
            value = value + 200;
       }while(value<=400);

        insertRecords(ppobjlst);      
    }

public static void insertRecords(List<Pardot_Prospect__c> ppobjlst){
    system.debug('**INSIDE the insertRecord method*****'+ppobjlst);
    upsert ppobjlst Prospect_Id__c;
}
2

Just move the list instantiation outside your loop structure:

List<MyObject__c> records = new List<MyObject__c>
do
{
    ...
}
while (...)

When you instantiate the list within your loop, you empty it out each time you iterate, clearing your results from the previous iteration.

  • ooooooohhhhhhhhhh gotchaaaa. Thanks Adrian. – SFDC Dev Oct 11 '18 at 15:10

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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