Step 1 : Create one connect app in target organization. Refer the below screenshot
Step 2 : Here we are going to integrate between two two account objects. Whenever we create any account record though Rest API. It would be created one account record in target org.
Trigger Code Snippet :
trigger Org_RestAPIEmployee_Trg on Account (after insert) {
for(Account acct : trigger.new){
Org_RestAPIEmployee_Cls.createAccount(acct.Id);
}
}
Helper Code Snippet :
global class Org_RestAPIEmployee_Cls {
@future(callout = true)
global static void createAccount(String acctID) {
String accessToken = Org_GlobalAccessToken_Cls.cmdAccessToken();
String queryString;
String JSONString;
List < Account > acctTemp = null;
system.debug('accessToken ********' + accessToken);
if (accessToken != null) {
queryString = 'select id';
//Created Org_EMployeeRules fieldset for future reference i.e no need to edit the class in future just we need to add the requered fields for mapping purpose
for (Schema.FieldSetMember fld: SObjectType.Account.FieldSets.Org_EMployeeRules.getFields()) {
queryString += ', ' + fld.getFieldPath();
}
queryString += ' from Account where Id=:acctID limit 1 ';
system.debug(accessToken);
String endPoint = 'https://eu9.salesforce.com/services/data/v32.0/sobjects/Account/';
if (String.isNotBlank(queryString)) {
acctTemp = database.query(queryString);
}
Map < String, object > mapEmpTemp = new Map < String, object > ();
//Store all the required fields in custom settings for accessing dynamically
for (Org_Employee_Constant__c strTemp: Org_Employee_Constant__c.getAll().values()) {
mapEmpTemp.put(strTemp.name, acctTemp[0].get(strTemp.name));
}
if (!mapEmpTemp.isEmpty()) {
JSONString = JSON.serialize(mapEmpTemp);
}
Http h2 = new Http();
HttpRequest req1 = new HttpRequest();
req1.setHeader('Authorization', 'Bearer ' + accessToken);
req1.setHeader('Content-Type', 'application/json');
req1.setHeader('accept', 'application/json');
req1.setBody(JSONString);
req1.setMethod('POST');
req1.setEndpoint(endPoint);
HttpResponse resp = h2.send(req1);
system.debug(resp.getbody());
if (resp.getStatusCode() == 200 || resp.getStatusCode() == 201) {
deserializeResponse deserializeResponseTemp = (deserializeResponse) JSON.deserialize(resp.getbody(), deserializeResponse.class);
List < Account > acctList = new List < Account > ();
Account a = [SELECT Id FROM Account WHERE Id =: acctID];
a.externalId__c = deserializeResponseTemp.id;
a.description = queryString;
a.Json_Response__c = JSONString;
acctList.add(a);
Database.SaveResult[] updateResults = Database.update(acctList, false);
String successErrorMessage;
for (Integer i = 0; i < updateResults.size(); i++) {
if (updateResults.get(i).isSuccess()) {
updateResults.get(i).getId();
successErrorMessage = 'Successfully inserted account. Account ID: ' + updateResults.get(i).getId() + '\n';
} else if (!updateResults.get(i).isSuccess()) {
Database.Error error = updateResults.get(i).getErrors().get(0);
String failedDML = error.getMessage();
acctList.get(i);
system.debug('Failed ID' + acctList.get(i).Id);
successErrorMessage = 'Error Messge : ' + error.getMessage() + '\n' + 'Failed ID' + acctList.get(i).Id;
}
}
system.debug(successErrorMessage);
}
}
}
public class deserializeResponse {
public String id;
public String access_token;
}
}
Access Token Code Snippet :
Step 2 : Here we are going to integrate between two two account objects. Whenever we create any account record though Rest API. It would be created one account record in target org.
Trigger Code Snippet :
trigger Org_RestAPIEmployee_Trg on Account (after insert) {
for(Account acct : trigger.new){
Org_RestAPIEmployee_Cls.createAccount(acct.Id);
}
}
Helper Code Snippet :
global class Org_RestAPIEmployee_Cls {
@future(callout = true)
global static void createAccount(String acctID) {
String accessToken = Org_GlobalAccessToken_Cls.cmdAccessToken();
String queryString;
String JSONString;
List < Account > acctTemp = null;
system.debug('accessToken ********' + accessToken);
if (accessToken != null) {
queryString = 'select id';
//Created Org_EMployeeRules fieldset for future reference i.e no need to edit the class in future just we need to add the requered fields for mapping purpose
for (Schema.FieldSetMember fld: SObjectType.Account.FieldSets.Org_EMployeeRules.getFields()) {
queryString += ', ' + fld.getFieldPath();
}
queryString += ' from Account where Id=:acctID limit 1 ';
system.debug(accessToken);
String endPoint = 'https://eu9.salesforce.com/services/data/v32.0/sobjects/Account/';
if (String.isNotBlank(queryString)) {
acctTemp = database.query(queryString);
}
Map < String, object > mapEmpTemp = new Map < String, object > ();
//Store all the required fields in custom settings for accessing dynamically
for (Org_Employee_Constant__c strTemp: Org_Employee_Constant__c.getAll().values()) {
mapEmpTemp.put(strTemp.name, acctTemp[0].get(strTemp.name));
}
if (!mapEmpTemp.isEmpty()) {
JSONString = JSON.serialize(mapEmpTemp);
}
Http h2 = new Http();
HttpRequest req1 = new HttpRequest();
req1.setHeader('Authorization', 'Bearer ' + accessToken);
req1.setHeader('Content-Type', 'application/json');
req1.setHeader('accept', 'application/json');
req1.setBody(JSONString);
req1.setMethod('POST');
req1.setEndpoint(endPoint);
HttpResponse resp = h2.send(req1);
system.debug(resp.getbody());
if (resp.getStatusCode() == 200 || resp.getStatusCode() == 201) {
deserializeResponse deserializeResponseTemp = (deserializeResponse) JSON.deserialize(resp.getbody(), deserializeResponse.class);
List < Account > acctList = new List < Account > ();
Account a = [SELECT Id FROM Account WHERE Id =: acctID];
a.externalId__c = deserializeResponseTemp.id;
a.description = queryString;
a.Json_Response__c = JSONString;
acctList.add(a);
Database.SaveResult[] updateResults = Database.update(acctList, false);
String successErrorMessage;
for (Integer i = 0; i < updateResults.size(); i++) {
if (updateResults.get(i).isSuccess()) {
updateResults.get(i).getId();
successErrorMessage = 'Successfully inserted account. Account ID: ' + updateResults.get(i).getId() + '\n';
} else if (!updateResults.get(i).isSuccess()) {
Database.Error error = updateResults.get(i).getErrors().get(0);
String failedDML = error.getMessage();
acctList.get(i);
system.debug('Failed ID' + acctList.get(i).Id);
successErrorMessage = 'Error Messge : ' + error.getMessage() + '\n' + 'Failed ID' + acctList.get(i).Id;
}
}
system.debug(successErrorMessage);
}
}
}
public class deserializeResponse {
public String id;
public String access_token;
}
}
Access Token Code Snippet :
Public class Org_GlobalAccessToken_Cls {
Public Static String clientId = EncodingUtil.urlEncode('3MVG9I5UQ_0k_hTm9p9qVC3ruJI49xkzjVd51JkCiNN7tPr.qUcphB8KZFvrQGm9XnO6r5PX6GJKyG_F9rRmK', 'UTF-8');
Public Static String clientSecret = EncodingUtil.urlEncode('387843950858359729', 'UTF-8');
Public Static String username = EncodingUtil.urlEncode('******User Name*****', 'UTF-8');
Public Static String password = EncodingUtil.urlEncode('******Password*****', 'UTF-8');
Public Static String reqbody = 'grant_type=password&client_id=' + clientId + '&client_secret=' + clientSecret + '&username=' + username + '&password=' + password;
public static string cmdAccessToken() {
Http h = new Http();
HttpRequest req = new HttpRequest();
req.setBody(reqbody);
req.setMethod('POST');
req.setEndpoint('https://eu9.salesforce.com/services/oauth2/token');
HttpResponse res = h.send(req);
if (res.getstatuscode() == 200) {
GrantAccessToken accessToken = (GrantAccessToken) JSON.deserialize(res.getbody(),GrantAccessToken.class);
system.debug('**********'+res.getbody());
if (accessToken.access_token != null) {
system.debug('**********'+accessToken.access_token);
return accessToken.access_token;
} else {
return null;
}
}
return null;
}
public class GrantAccessToken {
public String id {
get;
set;
}
public String issued_at {
get;
set;
}
public String instance_url {
get;
set;
}
public String signature {
get;
set;
}
public String access_token {
get;
set;
}
}
}
No comments:
Post a Comment