Destination Org Access Token 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('**your org name**', 'UTF-8');
Public Static String password = EncodingUtil.urlEncode('**Password+Security Token**', 'UTF-8');
Public Static String reqbody = 'grant_type=password&client_id=' + clientId + '&client_secret=' + clientSecret + '&username=' + username + '&password=' + password;
public static string cmdAccessToken() {
system.debug('clientSecret ----'+clientSecret);
system.debug('password--'+password+' ----username ---'+username );
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;
}
}
}
Destination ORG Main Logic in XML format :
public class XMLparse{
public String XMLString;
public String accessToken ;
public String endPoint;
public list<Account> pro;
public Account temppro;
public XMLparse(){
pro = new list<Account>();
accessToken = Org_GlobalAccessToken_Cls.cmdAccessToken();
endPoint = 'https://eu9.salesforce.com/services/apexrest/GETSaamTestSearches';
Http h2 = new Http();
HttpRequest req1 = new HttpRequest();
req1.setHeader('Authorization', 'Bearer ' + accessToken);
req1.setHeader('Content-Type', 'application/xml');
req1.setHeader('accept', 'application/xml');
req1.setMethod('GET');
req1.setEndpoint(endPoint);
HttpResponse resp = h2.send(req1);
system.debug('XMLString---->>'+resp.getBody());
XMLString = resp.getBody();
//XMLString = '<?xml version="1.0" encoding="UTF-8"?><SearchestoProcess><row><Name>University of Arizona</Name><AccountNumber>0010O00001qotCnQAI</AccountNumber></row></SearchestoProcess>';
DOM.Document doc=new DOM.Document();
try{
doc.load(XMLString);
DOM.XmlNode rootNode=doc.getRootElement();
parseXML(rootNode);
pro.add(temppro);
insert pro;
system.debug('pro inserted successfully-----------'+pro);
for(Account a : pro){
a.XML_Response__c = XMLString;
}
upsert pro;
}catch(exception e){
system.debug(e.getMessage()+ ' Line Number :'+e.getLineNumber()+' Field Name :'+e.getStackTraceString());
}
}
public void parseXML(DOM.XMLNode node) {
Map<String,Org_Account_Mapping__c> orgMapping = Org_Account_Mapping__c.getAll();
if (node.getNodeType() == DOM.XMLNodeType.ELEMENT) {
if(node.getName()=='row'){
if(temppro!=null)
pro.add(temppro);
temppro = new Account();
}
for(String sMapping : orgMapping.keySet()){
if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Text_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,String.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Text Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Decimal_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,Decimal.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Decimal Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Date_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,Date.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Date Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Integer__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,node.getText().trim());
system.debug(orgMapping.get(sMapping).Target_Field__c+' Integer Mapping values ---------->>>>>'+temppro);
}
}
}
}
for (Dom.XMLNode child: node.getChildElements()) {
parseXML(child);
}
}
}
Source Org code snippet for exposing XML :
Output :
<?xml version="1.0" encoding="UTF-8"?>
<SearchestoProcess>
<row>
<Name>United Oil & Gas, UK</Name>
<Source__c>SFDC</Source__c>
<Type>Customer - Direct</Type>
<Rating>Warm</Rating>
<Phone>+44 191 4956203</Phone>
<Fax>+44 191 4956620</Fax>
<Site>www.site.com</Site>
<Source_Description__c>To make historical trend reports available to your users, start by using filters to configure the amount of data that’s captured for historical trend reporting. Then select the fields needed for historical reports.</Source_Description__c>
<Website>http://www.uos.com</Website>
<Sic>4437</Sic>
<Industry>Energy</Industry>
<AnnualRevenue>100000</AnnualRevenue>
<Ownership>Public</Ownership>
<TickerSymbol>UOS</TickerSymbol>
<CustomerPriority__c>High</CustomerPriority__c>
<SLA__c>Platinum</SLA__c>
<Active__c>Yes</Active__c>
<NumberofLocations__c>34</NumberofLocations__c>
<UpsellOpportunity__c>No</UpsellOpportunity__c>
<SLASerialNumber__c>3479</SLASerialNumber__c>
<SLAExpirationDate__c>2017-12-05</SLAExpirationDate__c>
<AccountNumber>CD355119-A</AccountNumber>
</row>
</SearchestoProcess>
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('**your org name**', 'UTF-8');
Public Static String password = EncodingUtil.urlEncode('**Password+Security Token**', 'UTF-8');
Public Static String reqbody = 'grant_type=password&client_id=' + clientId + '&client_secret=' + clientSecret + '&username=' + username + '&password=' + password;
public static string cmdAccessToken() {
system.debug('clientSecret ----'+clientSecret);
system.debug('password--'+password+' ----username ---'+username );
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;
}
}
}
Destination ORG Main Logic in XML format :
public class XMLparse{
public String XMLString;
public String accessToken ;
public String endPoint;
public list<Account> pro;
public Account temppro;
public XMLparse(){
pro = new list<Account>();
accessToken = Org_GlobalAccessToken_Cls.cmdAccessToken();
endPoint = 'https://eu9.salesforce.com/services/apexrest/GETSaamTestSearches';
Http h2 = new Http();
HttpRequest req1 = new HttpRequest();
req1.setHeader('Authorization', 'Bearer ' + accessToken);
req1.setHeader('Content-Type', 'application/xml');
req1.setHeader('accept', 'application/xml');
req1.setMethod('GET');
req1.setEndpoint(endPoint);
HttpResponse resp = h2.send(req1);
system.debug('XMLString---->>'+resp.getBody());
XMLString = resp.getBody();
//XMLString = '<?xml version="1.0" encoding="UTF-8"?><SearchestoProcess><row><Name>University of Arizona</Name><AccountNumber>0010O00001qotCnQAI</AccountNumber></row></SearchestoProcess>';
DOM.Document doc=new DOM.Document();
try{
doc.load(XMLString);
DOM.XmlNode rootNode=doc.getRootElement();
parseXML(rootNode);
pro.add(temppro);
insert pro;
system.debug('pro inserted successfully-----------'+pro);
for(Account a : pro){
a.XML_Response__c = XMLString;
}
upsert pro;
}catch(exception e){
system.debug(e.getMessage()+ ' Line Number :'+e.getLineNumber()+' Field Name :'+e.getStackTraceString());
}
}
public void parseXML(DOM.XMLNode node) {
Map<String,Org_Account_Mapping__c> orgMapping = Org_Account_Mapping__c.getAll();
if (node.getNodeType() == DOM.XMLNodeType.ELEMENT) {
if(node.getName()=='row'){
if(temppro!=null)
pro.add(temppro);
temppro = new Account();
}
for(String sMapping : orgMapping.keySet()){
if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Text_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,String.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Text Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Decimal_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,Decimal.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Decimal Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Date_Field__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,Date.valueof(node.getText().trim()));
system.debug(orgMapping.get(sMapping).Target_Field__c+' Date Mapping values ---------->>>>>'+temppro);
}
}else if(node.getName()== sMapping && orgMapping.get(sMapping).Is_Integer__c){
if(node.getText().trim() !=Null){
temppro.put(orgMapping.get(sMapping).Target_Field__c,node.getText().trim());
system.debug(orgMapping.get(sMapping).Target_Field__c+' Integer Mapping values ---------->>>>>'+temppro);
}
}
}
}
for (Dom.XMLNode child: node.getChildElements()) {
parseXML(child);
}
}
}
Source Org code snippet for exposing XML :
@RestResource(urlMapping = '/GETSaamTestSearches/*')
global with sharing class GETSaamTestSearches {
@HttpGet
global static void doGet() {
string sResOutPut = '';
try {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
res.addHeader('Content-Type', 'application/xml');
SVendorId = req.requestURI.substring(req.requestURI.lastIndexOf('/') + 1);
sResOutPut = '<?xml version="1.0" encoding="UTF-8"?>';
sResOutPut += '<SearchestoProcess>';
date dCurrentDate = System.today();
for (Account oBGS: [SELECT Id, name, AccountNumber, Website, Site, Type, Phone, Rating, Fax, Sic, Industry, Source__c, Source_Description__c, AnnualRevenue, Ownership, TickerSymbol, CustomerPriority__c, SLA__c, Active__c, NumberofLocations__c, UpsellOpportunity__c, SLASerialNumber__c, SLAExpirationDate__c FROM Account where Annualrevenue != null and Industry != null and Source__c != null ORDER BY name desc]) {
sResOutPut += '<row>';
//************************************
sResOutPut += '<Name>' + ChecknullString(oBGS.name) + '</Name>';
sResOutPut += '<Source__c>' + ChecknullString(oBGS.Source__c) + '</Source__c>';
sResOutPut += '<Type>' + ChecknullString(oBGS.Type) + '</Type>';
sResOutPut += '<Rating>' + ChecknullString(oBGS.Rating) + '</Rating>';
sResOutPut += '<Phone>' + ChecknullString(oBGS.Phone) + '</Phone>';
sResOutPut += '<Fax>' + ChecknullString(oBGS.Fax) + '</Fax>';
sResOutPut += '<Site>' + ChecknullString(oBGS.Site) + '</Site>';
sResOutPut += '<Source_Description__c>' + ChecknullString(oBGS.Source_Description__c) + '</Source_Description__c>';
sResOutPut += '<Website>' + ChecknullString(oBGS.Website) + '</Website>';
sResOutPut += '<Sic>' + ChecknullString(oBGS.Sic) + '</Sic>';
sResOutPut += '<Industry>' + ChecknullString(oBGS.Industry) + '</Industry>';
sResOutPut += '<AnnualRevenue>' + ChecknullString(String.valueof(oBGS.AnnualRevenue)) + '</AnnualRevenue>';
sResOutPut += '<Ownership>' + ChecknullString(oBGS.Ownership) + '</Ownership>';
sResOutPut += '<TickerSymbol>' + ChecknullString(oBGS.TickerSymbol) + '</TickerSymbol>';
sResOutPut += '<CustomerPriority__c>' + ChecknullString(oBGS.CustomerPriority__c) + '</CustomerPriority__c>';
sResOutPut += '<SLA__c>' + ChecknullString(oBGS.SLA__c) + '</SLA__c>';
sResOutPut += '<Active__c>' + ChecknullString(oBGS.Active__c) + '</Active__c>';
sResOutPut += '<NumberofLocations__c>' + ChecknullString(String.valueof(oBGS.NumberofLocations__c)) + '</NumberofLocations__c>';
sResOutPut += '<UpsellOpportunity__c>' + ChecknullString(oBGS.UpsellOpportunity__c) + '</UpsellOpportunity__c>';
sResOutPut += '<SLASerialNumber__c>' + ChecknullString(oBGS.SLASerialNumber__c) + '</SLASerialNumber__c>';
sResOutPut += '<SLAExpirationDate__c>' + ChecknullString(String.valueof(oBGS.SLAExpirationDate__c)) + '</SLAExpirationDate__c>';
sResOutPut += '<AccountNumber>' + ChecknullString(oBGS.AccountNumber) + '</AccountNumber>';
//************************************
sResOutPut += '</row>';
}
//sResOutPut += '<message>Success</message>';
sResOutPut += '</SearchestoProcess>';
Dom.Document domDoc = new Dom.Document();
domDoc.load(sResOutPut);
} catch (exception ex) {
sResOutPut = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><SearchestoProcess><message>';
sResOutPut += 'Error while processing the records +' + ex.getmessage() + '</message></SearchestoProcess>';
}
RestContext.response.responseBody = Blob.valueOf(sResOutPut);
}
public static string SVendorId {
get;
private set;
}
public static string ChecknullString(string sVal) {
if (sVal == null) {
sVal = '';
} else {
//*****XML scape charactor
sVal = sVal.Replace('&', '&').Replace('>', '>').Replace('<', '<').Replace('\'', ''').Replace('"', '"');
}
return sVal;
}
Output :
<?xml version="1.0" encoding="UTF-8"?>
<SearchestoProcess>
<row>
<Name>United Oil & Gas, UK</Name>
<Source__c>SFDC</Source__c>
<Type>Customer - Direct</Type>
<Rating>Warm</Rating>
<Phone>+44 191 4956203</Phone>
<Fax>+44 191 4956620</Fax>
<Site>www.site.com</Site>
<Source_Description__c>To make historical trend reports available to your users, start by using filters to configure the amount of data that’s captured for historical trend reporting. Then select the fields needed for historical reports.</Source_Description__c>
<Website>http://www.uos.com</Website>
<Sic>4437</Sic>
<Industry>Energy</Industry>
<AnnualRevenue>100000</AnnualRevenue>
<Ownership>Public</Ownership>
<TickerSymbol>UOS</TickerSymbol>
<CustomerPriority__c>High</CustomerPriority__c>
<SLA__c>Platinum</SLA__c>
<Active__c>Yes</Active__c>
<NumberofLocations__c>34</NumberofLocations__c>
<UpsellOpportunity__c>No</UpsellOpportunity__c>
<SLASerialNumber__c>3479</SLASerialNumber__c>
<SLAExpirationDate__c>2017-12-05</SLAExpirationDate__c>
<AccountNumber>CD355119-A</AccountNumber>
</row>
</SearchestoProcess>