Most of the time got the requirement to do callout from VF page button. We can do the same with the help of Continuation method. An asynchronous callout is a callout that's made from a Visualforce page for which the response is came back through a callback methodology. An asynchronous callout is additionally referred to as a continuation.
(This Image is from Salesforce documentation)
Apex Class:-
public class AnimalsCallouts {
// Unique label corresponding to the continuation
public String requestLabel;
public String result {get;set;}
public List<Object> animals {get;set;}
public AnimalsCallouts(){
animals =new List<Object>();
}
public Object makeGetCallout() {
Continuation con = new Continuation(40);
con.continuationMethod='processResponse';
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('GET');
// Add callout request to continuation
this.requestLabel = con.addHttpRequest(request);
// Return the continuation
return con;
}
public Object processResponse() {
HttpResponse response = Continuation.getResponse(this.requestLabel);
// Set the result variable that is displayed on the Visualforce page
if (response.getStatusCode() == 200) {
this.result = response.getBody();
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
animals = (List<Object>) results.get('animals');
}
return null;
}
}
NOTE:- Dnt forget to add Remote Site Setting for your URL.
Visual Force Page:-
<apex:page controller="AnimalsCallouts">
<apex:form >
<apex:pageBlock >
<apex:pageBlockButtons >
<apex:commandButton action="{!makeGetCallout}" value="GetCall" reRender="detail"/>
</apex:pageBlockButtons>
<apex:pageBlockSection id="detail" columns="1">
{!result }
<BR></BR>
<apex:pageBlockTable value="{!animals }" var="an">
<apex:column value="{!an}" headerValue="Response"/>
</apex:pageBlockTable>
</apex:PageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
<apex:form >
<apex:pageBlock >
<apex:pageBlockButtons >
<apex:commandButton action="{!makeGetCallout}" value="GetCall" reRender="detail"/>
</apex:pageBlockButtons>
<apex:pageBlockSection id="detail" columns="1">
{!result }
<BR></BR>
<apex:pageBlockTable value="{!animals }" var="an">
<apex:column value="{!an}" headerValue="Response"/>
</apex:pageBlockTable>
</apex:PageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Output
If you want to learn about REST API check below post
http://amitsalesforce.blogspot.in/2017/01/learn-rest-api-in-salesforce-how-to.html
Thanks
Amit Chaudhary
@amit_SFDC
Hi Amit, Can we make this Continuation callout from LWC ?
ReplyDelete