Rest API Response in XML format Salesforce

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 :


@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('&', '&amp;').Replace('>', '&gt;').Replace('<', '&lt;').Replace('\'', '&apos;').Replace('"', '&quot;');
        }
        return sVal;
    }

Output :

<?xml version="1.0" encoding="UTF-8"?>
<SearchestoProcess>
    <row>
        <Name>United Oil &amp; 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>

Search one salesforce organization records from another salesforce organization using Rest API callouts

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('sourceorganization@yopmail.com', 'UTF-8');
    Public Static String password = EncodingUtil.urlEncode('Mardal786*', '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;
        }
    }   
}

Main apex logic :

Public class GlobalAccessToken_Cls {
   
    Public String acctId {
        get;
        set;
    }
    public void cmdListContact() {
        callgetContact(acctId);
    }
    public List <Contact> lstContact {
        get;
        set;
    }
    public String jsonString {get;set;}
    public List < Contact > callgetContact(String accId) {
        lstContact = new List <Contact>();
        String accessToken = Org_GlobalAccessToken_Cls.cmdAccessToken();  
        system.debug('~~~~~~~~~~~~~~~'+accessToken);
        if (accessToken != null) {
            system.debug('~~~~~~~~~~~~~~~'+accessToken);
            String endPoint = 'https://eu9.salesforce.com/services/apexrest/v1/getContacts/' + accId;
            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.setMethod('GET');
            req1.setEndpoint(endPoint);
            HttpResponse res1 = h2.send(req1);
            system.debug('~~~~~~~~~~~~~~~'+res1.getBody());
            String trimmedResponse = res1.getBody().unescapeCsv().remove('\\');
            system.debug('@@@RESPONSE@@' + trimmedResponse);
            JSONParser parser = JSON.createParser(res1.getBody());
            set < Contact > contList = new set < Contact > ();
            while (parser.nextToken() != null) {
                if ((parser.getCurrentToken() == JSONToken.FIELD_NAME)) {
                    Contact cont;
                    if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'Id')) {
                        parser.nextToken();
                        string sId = parser.getText();
                        cont = new Contact();
                        cont.Id = sId;
                        parser.nextToken();
                        if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) &&(parser.getText() == 'Name')) {
                            parser.nextToken();
                            String sName = parser.getText();
                            cont.LastName = sName;
                        }
                        parser.nextToken();
                        if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) &&(parser.getText() == 'Email')) {
                            parser.nextToken();
                            string sEmail = parser.getText();
                            cont.Email = sEmail;
                        }
                    }
                    contList.add(cont);
                }
                contList.remove(null);
            }
            lstContact.AddAll(contList);
            system.debug('ContList@@@@' + Json.serialize(lstContact));
            jsonString = Json.serialize(lstContact);
        }
        return LstContact;
    }
}

Visualforce Page :

<apex:page controller="GlobalAccessToken_Cls">
    <apex:form >
        <apex:pageBlock >
            <apex:pageBlockSection >
                <apex:outputPanel >
                <apex:outputLabel value="Account ID"/>&nbsp;&nbsp;&nbsp;&nbsp;
                <apex:inputText value="{!acctId}" label="AccountID"/>&nbsp;&nbsp;&nbsp;&nbsp;
                <apex:commandButton value="Go" action="{!cmdListContact}"/>
                </apex:outputPanel>
            </apex:pageBlockSection>
            {!jsonString}
            <apex:pageBlockTable value="{!lstContact}" var="c">
               <apex:column value="{!c.Id}"/> 
               <apex:column value="{!c.LastName}"/>
               <apex:column value="{!c.Email}"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Screenshot For Reference :


Integration between two Salesforce organizations using Rest API

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 :


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;
        }
    }   
}

Featured

What is Cryptography in salesforce and what are all the algorithms provided by them ?

A). It is a security protocal between two systems. Lets say we are integration two systems without any encrytion mechanism then hackers wil...

Popular