Deprecated: Optional parameter $list declared before required parameter $is_script is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/class.redux_cdn.php on line 21

Deprecated: Optional parameter $register declared before required parameter $footer_or_media is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/class.redux_cdn.php on line 45

Deprecated: Optional parameter $register declared before required parameter $footer_or_media is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/class.redux_cdn.php on line 104

Deprecated: Optional parameter $expire declared before required parameter $path is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/class.redux_functions.php on line 54

Deprecated: Optional parameter $depth declared before required parameter $output is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/themes/entaro/inc/classes/megamenu.php on line 155

Deprecated: Optional parameter $depth declared before required parameter $output is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/themes/entaro/inc/classes/mobilemenu.php on line 147

Deprecated: Optional parameter $args declared before required parameter $wp_customize is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/extensions/customizer/extension_customizer.php on line 583

Deprecated: Optional parameter $args declared before required parameter $wp_customize is implicitly treated as a required parameter in /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/extensions/customizer/extension_customizer.php on line 606

Warning: Cannot modify header information - headers already sent by (output started at /home1/oijoiv2f/public_html/wp-content/plugins/apus-framework/libs/redux/ReduxCore/inc/class.redux_cdn.php:21) in /home1/oijoiv2f/public_html/wp-includes/feed-rss2.php on line 8
How to integrete two orgs in Saelsforce Archives - Salesforce Next Gen https://salesforcenextgen.com/tag/how-to-integrete-two-orgs-in-saelsforce/ Trailhead and Beyond Mon, 28 Dec 2020 19:41:58 +0000 en-US hourly 1 https://wordpress.org/?v=6.4.4 https://salesforcenextgen.com/wp-content/uploads/2020/10/cropped-76dc0dd6-326a-4956-a412-bfdf20c7fb23_200x200-32x32.png How to integrete two orgs in Saelsforce Archives - Salesforce Next Gen https://salesforcenextgen.com/tag/how-to-integrete-two-orgs-in-saelsforce/ 32 32 HTTP callout to fetch query result from Salesforce https://salesforcenextgen.com/http-callout-to-fetch-query-result-from-salesforce/ https://salesforcenextgen.com/http-callout-to-fetch-query-result-from-salesforce/#respond Sun, 18 Mar 2018 06:56:14 +0000 http://www.salesforcenextgen.com/?p=1294 HTTP callout to fetch query result from Salesforce To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication. Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect …
Continue reading HTTP callout to fetch query result from Salesforce

The post HTTP callout to fetch query result from Salesforce appeared first on Salesforce Next Gen.

]]>
HTTP callout to fetch query result from Salesforce

To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication.

Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect one salesforce org with another salesforce org.

HTTP callout to fetch query result from Salesforce

To start our Integration we have to make some point & click configurations in both target and source org.

Configuration at Target Org.

  1. Create a Connected Org (How to make Connected Org click here).
  2. Generate the Consumer Secret and consumer Id from the configuration setting

Configuration at Source Org.

  1. Add two Remote site setting (This will whitelist the URLs at the source org).
    1. One for https://login.salesforce.com
    2. Second for https://<-Yourdomain->.salesforce.com.

After doing the above mentioned configurations we need to understand how the REST callout works in Salesforce.

To make a REST call we need to authenticate the user first, when a user is authorised salesforce returns instance URL and Access Token for the authenticated user. To authorise a user and generate an access token in return we first write a class as shown in this post.

CLick here to understand how to authenticate user before making a REST API Request

Use the class SF2SF_REST_Req created in the link shown above, it contains a method oauthLogin which returns a Static String, this string will contain the information related to the authenticated user.

In oauthLogin method, I take login URL, client Id, client secret, username and password as parameters and make an http request to the user-Password flow API i.e ‘/services/oauth2/token’. If this Http request is successful it returns access token, instance url and other information of the authenticated User and I return the response body as a string from this method.

We can use this method anywhere in our org to authenticate Users.

We create another class where we will make various REST Requests from one Salesforce org to other org.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();
public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,CLIENTID’,CLIENTSecret,USerName’,PassWord);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

}

In the class restRequestExample I have created few strings variable which will hold reponse, oAuthResponse, instance Url, Access Token and End point URL. In the method Web response I make use of the oauthLogin method of SF2SF_REST_Req class. And store its response in oAuthResponse. I next deserialise this response into a map of type <string, Object>. From this map I find the value of instance URL and access token and store them in the respective string variables.

After the above step we now have the instance URL and access token, the two parameter which makes a REST authenticated. To proceed further I again make a method which is used to generate various http Request as per the given requirement. Definition of the method is given below.

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

This method takes reqest method, endpoint URL, access token and request body as String parameters and will return httpRequest as a response. Access token is used to create the value of the authorization header of the http request and request method defines whether the request will be GET, POST, PUT etc. depending upon the Request method we will either have request body or not. Finally we set the endpoint URL from the passed parameter and then returns the created Http request.

Now we will make various REST Callouts from our source org to the target as below

How to fetch result of a query using Http Callout?

To fetch result of a query from salesforce, we need to make a GET request. This request will have the end point as /query/?q=’Your query’. There is no request body attached with this request and returns a response, for which we need to create a response wrapper so that we can deserialise the JSON Data returned by the executed query.

The endpoint to Execute a SOQL Query is as shown below:

https://<—yourInstance—>.salesforce.com/services/data/ vXX.X /query/?q=SELECT+name+from+Account

here vXX.X -> is the org version of the rest resource.

To make this Http callout I have made the below method in the restRequestExample class.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();

public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,’3MVG9ZL0ppGP5UrBAQBWYrUKa05u7fcH86snlLCU5mp4.DRt7PrhqrcgCoy2aPdGbFmgCTmZWgtExD__dS88o’,’1267455198314456981′,’datta.sumit.1987@gmail.com’,’pepsico@123′);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

// Method to generate Http Request

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

// Fetch Query result
public static void getQueryResult(String accessToken, string instanceURL ){
endPointURL = instanceURL + ‘/services/data/v41.0/query?q=SELECT+name+from+Account’;
Http http = new Http();
HttpRequest httpRequest = httpRequestGenerator(‘GET’, endPointURL, accessToken,null);
HTTPResponse httpResponse = http.send(httpRequest);
response = httpResponse.getBody();
system.debug(‘httpResponse.getBody() ->’+httpResponse.getBody());
QRRW = (queryReturnResponseWrapper)Json.deserialize(response, queryReturnResponseWrapper.class);
System.debug(‘QRRW.records[0].Name -> ‘+QRRW.records[0].Name);
System.debug(‘QRRW.totalSize -> ‘+QRRW.totalSize);
System.debug(‘QRRW.records[0].attributes.url -> ‘+QRRW.records[0].attributes.url);

}

Method webResponse and httpRequestGenerator has been previously explained here. To create an account record, I have used the method getQueryResult. It takes access token and instance url as the parameters. We create an Http request for this method using httpRequestGenerator method and provided the parameter as following, Request Method: GET, endpoint URL of creating a sObject record, access token and the requestBody which is null in this case.

After the successful execution of the Query, we receive the response in its raw JSON form as shown below.

{

“done” : true,

“totalSize” : 14,

“records” :

[

{

“attributes” :

{

“type” : “Account”,

“url” : “/services/data/v20.0/sobjects/Account/001D000000IRFmaIAH”

},

“Name” : “Test 1”

},

{

“attributes” :

{

“type” : “Account”,

“url” : “/services/data/v20.0/sobjects/Account/001D000000IomazIAB”

},

“Name” : “Test 2”

},

]

}

To de-serialize this response we need to create  a custom wrapper which will provide our class with a blueprint of the expected response and would be able to parse the response JSON String. The wrapper classes to De serialize the response is shown below.

public class attributesWrapper {
string type;
string url;
}

public class recordWrapper {
attributesWrapper attributes;
String Name;
String Id;
public recordWrapper (){
attributes = new attributesWrapper();
}
}

public class queryReturnResponseWrapper{
String done;
String totalSize;
list<recordWrapper> records ;
}

We use this line in the code to de-serialize the response

QRRW = (queryReturnResponseWrapper)Json.deserialize(response, queryReturnResponseWrapper.class);

And then we fetch any required value from this de-serialised response as shown below:

System.debug(‘QRRW.records[0].Name -> ‘+QRRW.records[0].Name);
System.debug(‘QRRW.totalSize -> ‘+QRRW.totalSize);
System.debug(‘QRRW.records[0].attributes.url -> ‘+QRRW.records[0].attributes.url);
So this how you fetch result of an executed SOQL Query at Salesforce using HTTP Callout.

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post HTTP callout to fetch query result from Salesforce appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/http-callout-to-fetch-query-result-from-salesforce/feed/ 0
HTTP callout to Delete a record in Salesforce https://salesforcenextgen.com/http-callout-to-delete-a-record-in-salesforce/ https://salesforcenextgen.com/http-callout-to-delete-a-record-in-salesforce/#respond Sun, 18 Mar 2018 06:36:20 +0000 http://www.salesforcenextgen.com/?p=1291 HTTP callout to Delete a record in Salesforce   To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication. Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to …
Continue reading HTTP callout to Delete a record in Salesforce

The post HTTP callout to Delete a record in Salesforce appeared first on Salesforce Next Gen.

]]>
HTTP callout to Delete a record in Salesforce

 

To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication.

Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect one salesforce org with another salesforce org.

HTTP callout to Delete a record in Salesforce

To start our Integration we have to make some point & click configurations in both target and source org.

Configuration at Target Org.

  1. Create a Connected Org (How to make Connected Org click here).
  2. Generate the Consumer Secret and consumer Id from the configuration setting

Configuration at Source Org.

  1. Add two Remote site setting (This will whitelist the URLs at the source org).
    1. One for https://login.salesforce.com
    2. Second for https://<-Yourdomain->.salesforce.com.

After doing the above mentioned configurations we need to understand how the REST callout works in Salesforce.

To make a REST call we need to authenticate the user first, when a user is authorised salesforce returns instance URL and Access Token for the authenticated user. To authorise a user and generate an access token in return we first write a class as shown in this post.

CLick here to understand how to authenticate user before making a REST API Request

Use the class SF2SF_REST_Req created in the link shown above, it contains a method oauthLogin which returns a Static String, this string will contain the information related to the authenticated user.

In oauthLogin method, I take login URL, client Id, client secret, username and password as parameters and make an http request to the user-Password flow API i.e ‘/services/oauth2/token’. If this Http request is successful it returns access token, instance url and other information of the authenticated User and I return the response body as a string from this method.

We can use this method anywhere in our org to authenticate Users.

We create another class where we will make various REST Requests from one Salesforce org to other org.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();
public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,CLIENTID’,CLIENTSecret,USerName’,PassWord);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

}

In the class restRequestExample I have created few strings variable which will hold reponse, oAuthResponse, instance Url, Access Token and End point URL. In the method Web response I make use of the oauthLogin method of SF2SF_REST_Req class. And store its response in oAuthResponse. I next deserialise this response into a map of type <string, Object>. From this map I find the value of instance URL and access token and store them in the respective string variables.

After the above step we now have the instance URL and access token, the two parameter which makes a REST authenticated. To proceed further I again make a method which is used to generate various http Request as per the given requirement. Definition of the method is given below.

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

This method takes reqest method, endpoint URL, access token and request body as String parameters and will return httpRequest as a response. Access token is used to create the value of the authorization header of the http request and request method defines whether the request will be GET, POST, PUT etc. depending upon the Request method we will either have request body or not. Finally we set the endpoint URL from the passed parameter and then returns the created Http request.

Now we will make various REST Callouts from our source org to the target as below

How to Delete a record using Http Callout?

To Delete a record we first need to make a POST request, in this POST request we will supply the value of fields of a Sobject we need to update, in the request body of the http callout, in JSON format. There is no Response from the server when a record is updated at Salesforce.

The endpoint to delete  an account is as shown below:

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/Account/001D000000INjVe

More generalised syntax would be

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/sObjectName//<–Record ID à

here vXX.X -> is the org version of the rest resource.

To make this Http callout I have made the below method in the restRequestExample class.

 

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();

 

public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,’3MVG9ZL0ppGP5UrBAQBWYrUKa05u7fcH86snlLCU5mp4.DRt7PrhqrcgCoy2aPdGbFmgCTmZWgtExD__dS88o’,’1267455198314456981′,’datta.sumit.1987@gmail.com’,’pepsico@123′);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

// Method to generate Http Request

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

// Delete an Account record

public static void deleteAccount(String accessToken, string instanceURL ){
endPointURL = instanceURL + ‘/services/data/v20.0/sobjects/Account/0012800000nfnDXAAY’;
Http http = new Http();
HttpRequest httpRequest = httpRequestGenerator(‘POST’, endPointURL, accessToken, null);
HTTPResponse httpResponse = http.send(httpRequest);
system.debug(‘httpResponse -> ‘+ httpResponse);
system.debug(‘httpResponse.getHeaderKeys() -> ‘+ httpResponse.getHeaderKeys());
}

Method webResponse and httpRequestGenerator has been previously explained here. To create an account record, I have used the method createAccount. It takes access token and instance url as the parameters. We create a Http request for this method using httpRequestGenerator method and provided the parameter as following, Request Method: POST, endpoint URL of creating a sObject record, access token and the requestBody which provided the required fields necessary to update the sObject.

This is how you delete a record of Sobject using REST endpoint provided by Salesforce

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

 

 

The post HTTP callout to Delete a record in Salesforce appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/http-callout-to-delete-a-record-in-salesforce/feed/ 0
HTTP callout to Update a record in Salesforce https://salesforcenextgen.com/http-callout-to-update-a-record-in-salesforce/ https://salesforcenextgen.com/http-callout-to-update-a-record-in-salesforce/#respond Sun, 18 Mar 2018 06:26:03 +0000 http://www.salesforcenextgen.com/?p=1286 HTTP callout to Update a record in Salesforce To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication. Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect …
Continue reading HTTP callout to Update a record in Salesforce

The post HTTP callout to Update a record in Salesforce appeared first on Salesforce Next Gen.

]]>
HTTP callout to Update a record in Salesforce

To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication.

Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect one salesforce org with another salesforce org.

HTTP callout to create a new record in Salesforce

To start our Integration we have to make some point & click configurations in both target and source org.

Configuration at Target Org.

  1. Create a Connected Org (How to make Connected Org click here).
  2. Generate the Consumer Secret and consumer Id from the configuration setting

Configuration at Source Org.

  1. Add two Remote site setting (This will whitelist the URLs at the source org).
    1. One for https://login.salesforce.com
    2. Second for https://<-Yourdomain->.salesforce.com.

After doing the above mentioned configurations we need to understand how the REST callout works in Salesforce.

To make a REST call we need to authenticate the user first, when a user is authorised salesforce returns instance URL and Access Token for the authenticated user. To authorise a user and generate an access token in return we first write a class as shown in this post.

CLick here to understand how to authenticate user before making a REST API Request

Use the class SF2SF_REST_Req created in the link shown above, it contains a method oauthLogin which returns a Static String, this string will contain the information related to the authenticated user.

In oauthLogin method, I take login URL, client Id, client secret, username and password as parameters and make an http request to the user-Password flow API i.e ‘/services/oauth2/token’. If this Http request is successful it returns access token, instance url and other information of the authenticated User and I return the response body as a string from this method.

We can use this method anywhere in our org to authenticate Users.

We create another class where we will make various REST Requests from one Salesforce org to other org.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();
public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,CLIENTID’,CLIENTSecret,USerName’,PassWord);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

}

In the class restRequestExample I have created few strings variable which will hold reponse, oAuthResponse, instance Url, Access Token and End point URL. In the method Web response I make use of the oauthLogin method of SF2SF_REST_Req class. And store its response in oAuthResponse. I next deserialise this response into a map of type <string, Object>. From this map I find the value of instance URL and access token and store them in the respective string variables.

After the above step we now have the instance URL and access token, the two parameter which makes a REST authenticated. To proceed further I again make a method which is used to generate various http Request as per the given requirement. Definition of the method is given below.

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

This method takes reqest method, endpoint URL, access token and request body as String parameters and will return httpRequest as a response. Access token is used to create the value of the authorization header of the http request and request method defines whether the request will be GET, POST, PUT etc. depending upon the Request method we will either have request body or not. Finally we set the endpoint URL from the passed parameter and then returns the created Http request.

Now we will make various REST Callouts from our source org to the target as below

How to Update a record using Http Callout?

To Update a record we first need to make a POST request, in this POST request we will supply the value of fields of a Sobject we need to update, in the request body of the http callout, in JSON format. There is no Response from the server when a record is updated at Salesforce.

The endpoint to update  an account is as shown below:

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/Account/001D000000INjVe

More generalised syntax would be

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/sObjectName//<–Record ID à

here vXX.X -> is the org version of the rest resource.

To make this Http callout I have made the below method in the restRequestExample class.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();

public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,’3MVG9ZL0ppGP5UrBAQBWYrUKa05u7fcH86snlLCU5mp4.DRt7PrhqrcgCoy2aPdGbFmgCTmZWgtExD__dS88o’,’1267455198314456981′,’datta.sumit.1987@gmail.com’,’pepsico@123′);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

// Method to generate Http Request

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

// update Field on Account — PATCH Method is used
public static void updateFieldOnAccount(String accessToken, string instanceURL ){
endPointURL = instanceURL + ‘/services/data/v20.0/sobjects/Account/0012800000nfnDXAAY’;
Http http = new Http();
HttpRequest httpRequest = httpRequestGenerator(‘PUT’, endPointURL, accessToken, null);
HTTPResponse httpResponse = http.send(httpRequest);
system.debug(‘httpResponse -> ‘+ httpResponse);
system.debug(‘httpResponse.getHeaderKeys() -> ‘+ httpResponse.getHeaderKeys());
}

Method webResponse and httpRequestGenerator has been previously explained here. To create an account record, I have used the method createAccount. It takes access token and instance url as the parameters. We create a Http request for this method using httpRequestGenerator method and provided the parameter as following, Request Method: PUT, endpoint URL of creating a sObject record, access token and the requestBody which provided the required fields necessary to update the sObject.

This is how you update a field on a record of Sobject using REST endpoint provided by Salesforce

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post HTTP callout to Update a record in Salesforce appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/http-callout-to-update-a-record-in-salesforce/feed/ 0
HTTP callout to create a new record in Salesforce https://salesforcenextgen.com/http-callout-to-create-a-new-record-in-salesforce/ https://salesforcenextgen.com/http-callout-to-create-a-new-record-in-salesforce/#respond Sat, 17 Mar 2018 09:20:26 +0000 http://www.salesforcenextgen.com/?p=1281 HTTP callout to create a new record in Salesforce To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication. Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to …
Continue reading HTTP callout to create a new record in Salesforce

The post HTTP callout to create a new record in Salesforce appeared first on Salesforce Next Gen.

]]>
HTTP callout to create a new record in Salesforce

To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication.

Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect one salesforce org with another salesforce org.

HTTP callout to create a new record in Salesforce

To start our Integration we have to make some point & click configurations in both target and source org.

Configuration at Target Org.

  1. Create a Connected Org (How to make Connected Org click here).
  2. Generate the Consumer Secret and consumer Id from the configuration setting

Configuration at Source Org.

  1. Add two Remote site setting (This will whitelist the URLs at the source org).
    1. One for https://login.salesforce.com
    2. Second for https://<-Yourdomain->.salesforce.com.

After doing the above mentioned configurations we need to understand how the REST callout works in Salesforce.

To make a REST call we need to authenticate the user first, when a user is authorised salesforce returns instance URL and Access Token for the authenticated user. To authorise a user and generate an access token in return we first write a class as shown in this post.

CLick here to understand how to authenticate user before making a REST API Request

Use the class SF2SF_REST_Req created in the link shown above, it contains a method oauthLogin which returns a Static String, this string will contain the information related to the authenticated user.

In oauthLogin method, I take login URL, client Id, client secret, username and password as parameters and make an http request to the user-Password flow API i.e ‘/services/oauth2/token’. If this Http request is successful it returns access token, instance url and other information of the authenticated User and I return the response body as a string from this method.

We can use this method anywhere in our org to authenticate Users.

We create another class where we will make various REST Requests from one Salesforce org to other org.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();
public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,CLIENTID’,CLIENTSecret,USerName’,PassWord);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

}

In the class restRequestExample I have created few strings variable which will hold reponse, oAuthResponse, instance Url, Access Token and End point URL. In the method Web response I make use of the oauthLogin method of SF2SF_REST_Req class. And store its response in oAuthResponse. I next deserialise this response into a map of type <string, Object>. From this map I find the value of instance URL and access token and store them in the respective string variables.

After the above step we now have the instance URL and access token, the two parameter which makes a REST authenticated. To proceed further I again make a method which is used to generate various http Request as per the given requirement. Definition of the method is given below.

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

This method takes reqest method, endpoint URL, access token and request body as String parameters and will return httpRequest as a response. Access token is used to create the value of the authorization header of the http request and request method defines whether the request will be GET, POST, PUT etc. depending upon the Request method we will either have request body or not. Finally we set the endpoint URL from the passed parameter and then returns the created Http request.

Now we will make various REST Callouts from our source org to the target as below

How to create a record using Http Callout?

To create a record we first need to make a POST request, in this POST request we will supply the basic information/required fields of a Sobject in the request body in JSON format. Response of this POST request is a record ID of the newly created record.

The endpoint to create an account is as shown below:

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/Account/

More generalised syntax would be

https://<—yourInstance—>.salesforce.com/services/data/vXX.X/sobjects/sObjectName/

here vXX.X -> is the org version of the rest resource.

To make this Http callout I have made the below method in the restRequestExample class.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();

public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,’3MVG9ZL0ppGP5UrBAQBWYrUKa05u7fcH86snlLCU5mp4.DRt7PrhqrcgCoy2aPdGbFmgCTmZWgtExD__dS88o’,’1267455198314456981′,’datta.sumit.1987@gmail.com’,’pepsico@123′);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

// Method to generate Http Request

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

//Create an account Record
public static void createAccount(String accessToken, string instanceURL){
endPointURL = instanceURL + ‘/services/data/v20.0/sobjects/Account/’;
Http http = new Http();
//String RequestBody = JSON.serialize(‘{“Name”:”Account Created Using REST”}’);
String RequestBody = ‘{“Name”:”AccountCreated Using REST”}’;
system.debug(‘RequestBody -> ‘ + RequestBody);
HttpRequest httpRequest = httpRequestGenerator(‘POST’, endPointURL, accessToken,RequestBody);
HTTPResponse httpResponse = http.send(httpRequest);
system.debug(‘httpResponse -> ‘+ httpResponse);
}

}

Method webResponse and httpRequestGenerator has been previously explained here. To create an account record, I have used the method createAccount. It takes access token and instance url as the parameters. We create a Http request for this method using httpRequestGenerator method and provided the parameter as following, Request Method: POST, endpoint URL of creating a sObject record, access token and the requestBody which provided the required fields necessary for creation of the sObject.

Sample response received is as shown below:

{

“id” : “001D000000IqhSLIAZ”,

“errors” : [ ],

“success” : true

}

This is how you create a record of Sobject using REST endpoint provided by Salesforce

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post HTTP callout to create a new record in Salesforce appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/http-callout-to-create-a-new-record-in-salesforce/feed/ 0
How to use REST API Resources with HTTP callouts https://salesforcenextgen.com/http-callout-and-rest-resources-providedby-salesforce/ https://salesforcenextgen.com/http-callout-and-rest-resources-providedby-salesforce/#comments Sat, 17 Mar 2018 08:53:50 +0000 http://www.salesforcenextgen.com/?p=1275 HTTP callout and How to use REST Resources provided by Salesforce To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication. Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am …
Continue reading How to use REST API Resources with HTTP callouts

The post How to use REST API Resources with HTTP callouts appeared first on Salesforce Next Gen.

]]>
HTTP callout and How to use REST Resources provided by Salesforce

To make a HTTP Callout we need to first authorise a user and in this post I will use User-Password Flow of OAuth authentication.

Before we jump in to code, there are couple of prerequisite to start this integration. In this post I am going to connect one salesforce org with another salesforce org.

HTTP Callout and REST Resource

To start our Integration we have to make some point & click configurations in both target and source org.

Configuration at Target Org.

  1. Create a Connected Org (How to make Connected Org click here).
  2. Generate the Consumer Secret and consumer Id from the configuration setting

Configuration at Source Org.

  1. Add two Remote site setting (This will whitelist the URLs at the source org).
    1. One for https://login.salesforce.com
    2. Second for https://<-Yourdomain->.salesforce.com.

After doing the above mentioned configurations we need to understand how the REST callout works in Salesforce.

To make a REST call we need to authenticate the user first, when a user is authorised salesforce returns instance URL and Access Token for the authenticated user. To authorise a user and generate an access token in return we first write a class as shown below.

global class SF2SF_REST_Req {
global Static String oauthLogin(String loginUri, String clientId,
String clientSecret, String username, String password) {
HttpRequest req = new HttpRequest();

req.setMethod(‘POST’);
req.setEndpoint(loginUri+’/services/oauth2/token?grant_type=password’+
‘&client_id=’ + clientId +
‘&client_secret=’ + clientSecret +
‘&username=’ + EncodingUtil.urlEncode(username, ‘UTF-8’) +
‘&password=’ + EncodingUtil.urlEncode(password, ‘UTF-8’)+ ‘SECURITYTOKEN’
);

system.debug(‘req.getBody ‘ + req);

Http http = new Http();

HTTPResponse res = http.send(req);

System.debug(‘BODY: ‘+res.getBody());
System.debug(‘STATUS:’+res.getStatus());
System.debug(‘STATUS_CODE:’+res.getStatusCode());

return res.getBody();
}
}

In the class SF2SF_REST_Req, I have created a method oauthLogin which returns a Static String, this string will contain the information related to the authenticated user.

In oauthLogin method, I take login URL, client Id, client secret, username and password as parameters and make an http request to the user-Password flow API i.e ‘/services/oauth2/token’. If this Http request is successful it returns access token, instance url and other information of the authenticated User and I return the response body as a string from this method.

Now we can use this method anywhere in our org to authenticate Users.

To begin with we create another class where we will make various REST Requests from one Salesforce org to other org.

public class restRequestExample {
public Static String response = ” ;
public Static String oAuthResponse ;
public Static String InstanceURL = ”;
public Static String accessToken = ”;
public static string endPointURL = ”;
public static Map<String, Object> m = new  Map<String, Object> ();
public static void webResponse(){
oAuthResponse = SF2SF_REST_Req.oauthLogin(‘https://login.salesforce.com’,CLIENTID’,CLIENTSecret,USerName’,PassWord);
m = (Map<String, Object>)JSON.deserializeUntyped(oAuthResponse);

InstanceURL = String.valueOf(m.get(‘instance_url’));
accessToken = String.valueOf(m.get(‘access_token’));

system.debug(‘InstanceURL ->’ + InstanceURL + ‘ accessToken -> ‘ + accessToken);
}

}

In the class restRequestExample I have created few strings variable which will hold reponse, oAuthResponse, instance Url, Access Token and End point URL. In the method Web response I make use of the oauthLogin method of SF2SF_REST_Req class. And store its response in oAuthResponse. I next deserialise this response into a map of type <string, Object>. From this map I find the value of instance URL and access token and store them in the respective string variables.

After the above step we now have the instance URL and access token, the two parameter which makes a REST authenticated. To proceed further I again make a method which is used to generate various http Request as per the given requirement. Definition of the method is given below.

public static HttpRequest httpRequestGenerator(String reqMethod, String endpoint, String accessToken, String reqBody){
String authorizationHeader = ‘Bearer ‘ +accessToken;
HttpRequest httpRequest = new HttpRequest();
httpRequest.setMethod(reqMethod);
httpRequest.setEndpoint(endpoint);
httpRequest.setHeader(‘Authorization’, authorizationHeader);
httpRequest.setHeader(‘Content-Type’, ‘application/json;charset=UTF-8’);
httpRequest.setBody(reqBody);
return httpRequest;
}

This method takes reqest method, endpoint URL, access token and request body as String parameters and will return httpRequest as a response. Access token is used to create the value of the authorization header of the http request and request method defines whether the request will be GET, POST, PUT etc. depending upon the Request method we will either have request body or not. Finally we set the endpoint URL from the passed parameter and then returns the created Http request.

Now we will make various REST Callouts from our source org to the target as below

How to get the Org version information Using REST callout.

For this purpose we make use of the below method.

public static void getOrgVersionInfo(String accessToken, string instanceURL ){

endPointURL = instanceURL + ‘/services/data/’;
Http http = new Http();
HttpRequest httpRequest = httpRequestGenerator(‘GET’, endPointURL, accessToken,null);
HTTPResponse httpResponse = http.send(httpRequest);
response = httpResponse.getBody();
system.debug(‘httpResponse.getBody() ->’+httpResponse.getBody());
OVIRW = (list<OrgVersionInfoResponseWrapper>)Json.deserialize(response, list<OrgVersionInfoResponseWrapper>.class);
for(OrgVersionInfoResponseWrapper objWraper : OVIRW){
system.debug(‘Label-> ‘ +objWraper.label);
system.debug(‘url-> ‘ +objWraper.url);
system.debug(‘version-> ‘ +objWraper.version);
}

}

Method getOrgVersionInfo takes two string parameters namely, access token and instance url. With help of the the provided parameter we generate the http request using the httpRequestGenerator method and make a callout.

Once we have made the callout we would get a JSON object as a response of the request. To fetch the desired values from the JSON string we first need to deserialise. To deserialise a String we are supposed to provide it with a blue print, i.e. we need to create a wrapper class. Example of a wrapper response class is given below.

public class OrgVersionInfoResponseWrapper{
String label;
String url;
String version;
}

Response of the http callout in the getOrgVersionInfoversion method is nothing but a list of the OrgVersionInfoResponseWrapper and therefore we deserilise it as a list of the OrgVersionInfoResponseWrapper class, then go through the list and print the desired information.

So this in nut shell how you make a REST callout from one SFDc org to Another SFDC org.

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post How to use REST API Resources with HTTP callouts appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/http-callout-and-rest-resources-providedby-salesforce/feed/ 3
How to Authenticate user using Username-Password Authentication Flow in Salesforce? https://salesforcenextgen.com/authenticate-user-using-username-password-authentication-flow/ https://salesforcenextgen.com/authenticate-user-using-username-password-authentication-flow/#respond Sat, 17 Mar 2018 08:40:50 +0000 http://www.salesforcenextgen.com/?p=1271 How to Authenticate user using Username-Password Authentication Flow in Salesforce? Salesforce uses oAuth protocol to allow application users to access the data in salesforce securely without exposing Username and password of a particular user. But before we could make a REST Api call, we need to authenticate our app with salesforce, by making it a …
Continue reading How to Authenticate user using Username-Password Authentication Flow in Salesforce?

The post How to Authenticate user using Username-Password Authentication Flow in Salesforce? appeared first on Salesforce Next Gen.

]]>
How to Authenticate user using Username-Password Authentication Flow in Salesforce?

Salesforce uses oAuth protocol to allow application users to access the data in salesforce securely without exposing Username and password of a particular user.

But before we could make a REST Api call, we need to authenticate our app with salesforce, by making it a connected app. To make an App as connected app follow the steps given in this post.

How to Authenticate user using Username-Password Authentication Flow in Salesforce?

There are several OAuth endpoints provided by Salesforce, depending upon our requirement and resources we need to choose an authentication flow from the below

  1. Web server Flow
  2. User-Agent Flow
  3. Username-Password Flow

Once we have successfully authenticated our connected app user, salesforce provide us with an access token, which are further utilised to make authenticated REST Api calls.

In this post we are going to discuss the Username-Password Authentication Flow.

This authentication flow make use of user’s credentials directly on the web server and should be used only if necessary, there is no refresh token is provided in this flow, see the flow diagram below.

Username-Password OAuth Flow

Step wise breakdown of the authentication flow:

  1. The application uses the credential of the user to generate the access token. To use this service, we make a POSt call to the endpoint for the Username-password authentication flow : https://login.salesforce.com/services/oauth2/token

Parameter          Description

grant_type         Must be password for this authentication flow.

client_id               The Consumer Key from the connected app definition.

client_secret      The Consumer Secret from the connected app definition. Required unless the Require Secret for Web Server Flow setting is not enabled in the connected app definition.

username           End-user’s username.

password            End-user’s password.

Example authorization url will look something like this:

grant_type=password&client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&client_secret=1955279925675241571&username=testuser%40salesforce.com&password=mypassword123456

  1. After confirmation from Salesforce the client application will get a response with the access token authorized and end-user’s Web browser would be redirected to the callback URL specified by the redirect_uri parameter. The authorization information is appended by Salesforce to the redirect URL with the following values:

Parameters        Description

access_token    Access token that acts as a session ID that the application uses for making requests. This token should be protected as though it were user credentials.

instance_url       Identifies the Salesforce instance to which API calls should be sent.

id                            Identity URL that can be used to both identify the user as well as query for more information about the user. Can be used in an HTTP request to get more information about the end user.

issued_at            When the signature was created, represented as the number of seconds since the Unix epoch (00:00:00 UTC on 1 January 1970).

signature             Base64-encoded HMAC-SHA256 signature signed with the consumer’s private key containing the concatenated ID and issued_at value. The signature can be used to verify that the identity URL wasn’t modified because it was sent by the server.

An example of the response is as shown below

{“id”:”https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P”,

“issued_at”:”1278448832702″,”instance_url”:”https://***yourInstance***.salesforce.com/”,

“signature”:”0CmxinZir53Yex7nE0TD+zMpvIWYGb/bdJh6XfOH6EQ=”,”access_token”:

“00Dx0000000BV7z!AR8AQAxo9UfVkh8AlV0Gomt9Czx9LjHnSSpwBMmbRcgKFmxOtvxjTrKW1

9ye6PE3Ds1eQz3z8jr3W7_VbWmEu4Q8TVGSTHxs”}

  1. The information received in the previous step is further used to make the authenticated REST Api calls.
  • Keep following point in mind when using username-password flow. User is not redirected to Salesforce Login screen and is therefore not able to authorize the external application and therefore no refresh token is granted to the end user. Need to Use other OAuth Flow if a refresh token is required.

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post How to Authenticate user using Username-Password Authentication Flow in Salesforce? appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/authenticate-user-using-username-password-authentication-flow/feed/ 0
How to Authenticate user in Salesforce? https://salesforcenextgen.com/how-to-authenticate-user-in-salesforce/ https://salesforcenextgen.com/how-to-authenticate-user-in-salesforce/#respond Sat, 17 Mar 2018 08:32:25 +0000 http://www.salesforcenextgen.com/?p=1266 How to Authenticate user using User-Agent Authentication Flow in Salesforce? Salesforce uses oAuth protocol to allow application users to access the data in salesforce securely without exposing Username and password of a particular user. But before we could make a REST Api call, we need to authenticate our app with salesforce, by making it a …
Continue reading How to Authenticate user in Salesforce?

The post How to Authenticate user in Salesforce? appeared first on Salesforce Next Gen.

]]>
How to Authenticate user using User-Agent Authentication Flow in Salesforce?

Salesforce uses oAuth protocol to allow application users to access the data in salesforce securely without exposing Username and password of a particular user.

But before we could make a REST Api call, we need to authenticate our app with salesforce, by making it a connected app. To make an App as connected app follow the steps given in this post.

How to Authenticate user using User-Agent Authentication Flow in Salesforce?

There are several OAuth endpoints provided by Salesforce, depending upon our requirement and resources we need to choose an authentication flow from the below

  1. Web server Flow
  2. User-Agent Flow
  3. Username-Password Flow

Once we have successfully authenticated our connected app user, salesforce provide us with an access token, which are further utilised to make authenticated REST Api calls.

In this post we are going to discuss the User-Agent Authentication Flow.

This authentication flow is used by the application which are hosted over a secure server. In this flow client application redirects the user to another web server i.e. an authorization server where the user get generates an authorize code, now this authorise code is used to fetch the access token from the Salesforce, see the flow diagram below.

Authenticate User using User-Agent Flow

Step wise breakdown of the authentication flow:

  1. The endpoint for the web server authentication flow is : https://login.salesforce.com/services/oauth2/authorize

Parameter          Description

response_type Must be token  for this authentication flow.

client_id               The Consumer Key from the connected app definition.

redirect_uri        The Callback URL from the connected app definition.

Example authorization url will look something like this:

https://login.salesforce.com/services/oauth2/authorize?response_type=token

&client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3X

HrXDiCQjK1mdgAvhCscA9GE&redirect_uri=https%3A%2F%2Fwww.mysite.com%2F

code_callback.jsp&state=mystate

  1. User login on this url with their credentials and will interact with the endpoint directly and therefore application never sees user’s credentials. After successful log in, user would be asked to authorise the app and this step is skipped if already authorised before.
  2. After confirmation from Salesforce the client application will get authorized and end-user’s Web browser would be redirected to the callback URL specified by the redirect_uri parameter. The authorization information is appended by Salesforce to the redirect URL with the following values:

Parameters        Description

access_token    Access token that acts as a session ID that the application uses for making requests. This token should be protected as though it were user credentials.

expires_in           Amount of time the access token is valid, in seconds.

refresh_token  Token that can be used in the future to obtain new access tokens.

Warning

The refresh token is only returned if the redirect URI is https://login.salesforce.com/services/oauth2/success or used with a custom protocol that is not HTTPS.

state                      The state value that was passed in as part of the initial request, if applicable.

instance_url       Identifies the Salesforce instance to which API calls should be sent.

id                            Identity URL that can be used to both identify the user as well as query for more information about the user. Can be used in an HTTP request to get more information about the end user.

issued_at            When the signature was created, represented as the number of seconds since the Unix epoch (00:00:00 UTC on 1 January 1970).

signature             Base64-encoded HMAC-SHA256 signature signed with the consumer’s private key containing the concatenated ID and issued_at value. The signature can be used to verify that the identity URL wasn’t modified because it was sent by the server.

E.g.

https://www.mysite.com/user_callback.jsp#access_token=00Dx0000000BV7z%21AR8

AQBM8J_xr9kLqmZIRyQxZgLcM4HVi41aGtW0qW3JCzf5xdTGGGSoVim8FfJkZEqxbjaFbberKGk8v8AnYrvChG4qJbQo8&refresh_token=5Aep8614iLM.Dq661ePDmPEgaAW9Oh_L3JKkDpB4xReb54_pZfVti1dPEk8aimw4Hr9ne7VXXVSIQ%3D%3D&expires_in=7200&state=mystate

  1. The information received in the previous step is further used to make the authenticated REST Api calls.

Keep following point in mind when using User Agent flow. The encoded access token resides in redirect URL and is therefore exposed to the applications installed at end-user system. If javascript was used to retrieve the access token, then use window.location.replace() to remove callback from the browser’s history.

Further we will discuss about the other two authentication flow.

Also, Have a look at the below resources:

  1. Best Salesforce Interview Questions book with Apex and Visualforce concept explained

Also, Have a look at the below learning resources:

  1. SOQL (Salesforce Object Query Language)

  2. Apex Trigger Best Practices and the Trigger Framework

  3. Salesforce Interview Question and Answers Part 2

  4. Salesforce Interview Questions on Test Class

  5. Salesforce-lightning-interview-questions-2018

     6. Salesforce Interview Questions Batch Class 

The post How to Authenticate user in Salesforce? appeared first on Salesforce Next Gen.

]]>
https://salesforcenextgen.com/how-to-authenticate-user-in-salesforce/feed/ 0