Parent field update with all related childs in salesforce

Trigger :

trigger answerOptionManagement on Employees__c (before update) {
    Set<Id> setIDS = new Set<Id>();
    List<Employees__c> listIDS = new List<Employees__c>();
    for(Employees__c  emp : trigger.new){
        setIDS.add(emp.Id);
        listIDS.add(emp);
    }
    if(!listIDS.isEmpty() && listIDS.size()>0){
        cmdMainOperation(listIDS,setIDS);
    }
    public static void cmdMainOperation(List<Employees__c> listIDS,Set<Id> setIDS){
        AggregateResult [] aggr = [select count(id),First_Name__c fristName,Employees__c employeeId from Contact_Us__c where Employees__c IN :setIDS and First_Name__c != null group by First_Name__c,Employees__c  order by First_Name__c desc];
        system.debug(aggr);
        Map<Id,String> mapAggr = new Map<Id,String>();
        for(AggregateResult agr : aggr){           
            system.debug(mapAggr);
            string category=String.valueOf(agr.get('fristName'));
            category = category.subString(category.indexOf(':')+1,category.length());
            if(mapAggr.containsKey(String.valueOf(agr.get('employeeId')))){
                String strCategory = mapAggr.get(String.valueOf(agr.get('employeeId')))+ ','+category;
                mapAggr.put(String.valueOf(agr.get('employeeId')),strCategory );
                system.debug('mapAggr in if 21 line--->>'+mapAggr);
            }else{
                mapAggr.put(String.valueOf(agr.get('employeeId')),category);
                system.debug('mapAggr in if 24 line--->>'+mapAggr);
            }
        }
        for(Employees__c emp : listIDS){
            if(mapAggr.containsKey(emp.id)){
                emp.Answer_Options__c = mapAggr.get(emp.id);
                system.debug('emp.Answer_Options__c in if 30 line--->>'+emp.Answer_Options__c);
            }
           
        }
       
    }

}

Standard Report charts in Lightning component Salesforce

Create summary report using standard Report tab. For this example, I have created a simple report which groups ContactUS__c by City__c.

Apex code snippet :

public class ChartOnContactUS {
    @AuraEnabled
    public static List<Report> getDynamicReport(){
        return [SELECT Id,Name FROM Report];
    }
    @AuraEnabled
    public static String getreport(String reportId){
        Report reportRec = [SELECT Id FROM Report WHERE Id =:reportId];
        Reports.ReportResults reportResult = Reports.ReportManager.runReport(reportRec.Id, true);
        system.debug(JSON.serialize(reportResult));
        return JSON.serialize(reportResult);
    }
}

ChartComponent.cmp

<aura:component controller="ChartOnContactUS" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" >
    <ltng:require scripts="{!$Resource.ChartJs}"  afterScriptsLoaded="{!c.afterScriptsLoaded}"/>
    <aura:attribute name="ready" type="Boolean" default="false"/>
    <aura:attribute name="countryName" type="String" default="00O0Y000007eZRnUAM"/>
    <aura:attribute name="report" type="sobject"/>
    <div class="slds-grid slds-p-top_small">
                <div class="slds-size_4-of-12 slds-p-left_xx-small slds-p-horizontal_x-large ">
                    <lightning:select label="Report Name" value="{!v.countryName}"  onchange="{!c.cmdCountryEvt}">>
                        <aura:iteration items="{!v.report}" var="reportValue">
                            <option value="{!reportValue.Id}">{!reportValue.Name}</option>
                        </aura:iteration>
                    </lightning:select>
                </div>
            </div>
    <div class="slds-grid slds-wrap slds-grid--pull-padded ">
        <div class="slds-p-horizontal--small slds-size--1-of-3 slds-m-top--medium">
            <canvas aura:id="chart" height="200" width="200"></canvas>
        </div>
    </div>
</aura:component>

ChartComponentController.js

({
    afterScriptsLoaded : function(component, event, helper) {
        component.set("v.ready", true);
        helper.createChart(component);
        helper.cmdDynamicRepor(component);
    },
    cmdCountryEvt : function(component,event,helper){
        console.log(component.get("v.countryName"));
helper.createChart(component);     
    }
 
})

ChartComponentHelper.js

({
    createChart : function (component) {
        var chartCanvas = component.find("chart").getElement();
        var action = component.get("c.getreport");
        action.setParams({reportId : component.get("v.countryName")});
        action.setCallback(this, function(response) {
            console.log("faz response"+JSON.stringify(response.getReturnValue()));
            var state = response.getState();
            if (state === "SUCCESS") {
                var reportResultData = JSON.parse(response.getReturnValue());
                var chartData = [];
                var chartLabels = [];
                if( reportResultData.groupingsDown.groupings.length > 0  ) {
                    for(var i=0; i < (reportResultData.groupingsDown.groupings.length); i++){
                        chartLabels.push(reportResultData.groupingsDown.groupings[i].label);
                        var keyTemp = reportResultData.groupingsDown.groupings[i].key;
                        var valueTemp = reportResultData.factMap[keyTemp + '!T'].aggregates[0].value ;
                        chartData.push(valueTemp);
                    }
                    console.log(" chartLabels ::  " + JSON.stringify(chartLabels));
                    console.log( " chartData :: " + JSON.stringify(chartData));                 
                    var chartdata = {
                        labels: chartLabels,
                        datasets: [
                            {
                                label:'Country',
                                data: chartData,
                                borderColor:'rgba(62, 159, 222, 1)',
                                fill: false,
                                pointBackgroundColor: "#FFFFFF",
                                pointBorderWidth: 4,
                                pointHoverRadius: 5,
                                pointRadius: 3,
                                bezierCurve: true,
                                pointHitRadius: 10
                            }
                        ]
                    }
                    var ctx = component.find("chart").getElement();
                    var chart = new Chart(ctx ,{
                        type: 'line',
                        data: chartdata,
                        options: {
                            legend: {
                                position: 'bottom',
                                padding: 10,
                            },
                            responsive: true
                        }
                    });                 
                }
            } else if (state === "ERROR") {
                var errors = response.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        console.log("Error message on createReport: " +errors[0].message);
                    }
                } else {
                    console.log("Unknown error");
                }
            }
        });
        $A.enqueueAction(action);
    },
    cmdDynamicRepor : function(component,event,helper){
        var dynamicPicklist = component.get("c.getDynamicReport");
        dynamicPicklist.setCallback(this,function(response){
            console.log("getDynamicReport====>>"+JSON.stringify(response.getReturnValue()));
            if(response.getState() === "SUCCESS"){
                component.set("v.report",response.getReturnValue());
            }
        });
        $A.enqueueAction(dynamicPicklist);
    }
})

D3ComponentApp 

<aura:application extends="force:slds">
<c:ChartComponent ></c:ChartComponent>
</aura:application>

Screenshot



Salesforce Lightning Events with example

Passing values from child component to parent component using Lightning Events.

CeeeEvent:

<aura:event type="COMPONENT">
    <aura:attribute name="firstName" type="String"/>
    <aura:attribute name="lastName" type="String"/>
    <aura:attribute name="emailId" type="String"/>
    <aura:attribute name="mobileNumber" type="String"/>
    <aura:attribute name="contactDetails" type="Contact[]"/>

</aura:event>

Child component : CeeeCmponent1

<aura:component controller="contactHanler">
    <aura:attribute name="firstName" type="String"/>
    <aura:attribute name="lastName" type="String"/>
    <aura:attribute name="emailId" type="String"/>
    <aura:attribute name="mobileNumber" type="String"/>
    <aura:attribute name="contactDetails" type="Contact[]"/>
    <aura:registerEvent name="cmpEvent" type="c:CeeeEvent"/>
    <lightning:input type="text" label="First Name" value="{!v.firstName}"/>
    <lightning:input type="text" label="Last Name" value="{!v.lastName}"/>
    <lightning:input type="text" label="Email ID" value="{!v.emailId}"/>
    <lightning:input type="text" label="Phone" value="{!v.mobileNumber}"/>
    <lightning:button  label="Search" onclick="{!c.fireComponentEvent}" />

</aura:component>


ControllerJS :

({
    fireComponentEvent : function(cmp, event) {
        var cmpEvent = cmp.getEvent("cmpEvent");
        var action = cmp.get("c.getAFewContacts");
        action.setCallback(this,function(response){
            console.log("response.getState---"+response.getState());
            console.log("response.code---"+response.getReturnValue());
            cmp.set("v.contactDetails",response.getReturnValue());
            if(response.getState() === "SUCCESS"){
                cmpEvent.setParams({
                    "firstName"       :  cmp.get("v.firstName"),
                    "lastName"        :  cmp.get("v.lastName"),
                    "emailId"         :  cmp.get("v.emailId"),
                    "mobileNumber"    :  cmp.get("v.mobileNumber"),
                    "contactDetails"  :  cmp.get("v.contactDetails")
                });
                cmpEvent.fire();
                console.log("contact list---"+JSON.stringify(cmp.get("v.contactDetails")));
            }
        });
        $A.enqueueAction(action);
    }

})

Parent Handler : CeeeParentHandler

<aura:component>
    <aura:attribute name="firstName"     type="String"/>
    <aura:attribute name="lastName"      type="String"/>
    <aura:attribute name="emailId"       type="String"/>
    <aura:attribute name="mobileNumber"  type="String"/>
    <aura:attribute name="contactDetails" type="Contact[]"/>
    <aura:attribute name="numEvents"     type="Integer"       default="0"/>
    <aura:handler   name="cmpEvent"      event="c:CeeeEvent"  action="{!c.handleComponentEvent}"/>
    <c:CeeeCmponent1/>
    <p>{!v.firstName}</p>
    <p>{!v.lastName}</p>
    <p>{!v.emailId}</p>
    <p>{!v.mobileNumber}</p>
    <p>Number of events: {!v.numEvents}</p>
    <aura:iteration items="{!v.contactDetails}" var="item">
        {!item.Id}{!item.Email}<br/>
    </aura:iteration>
</aura:component>

ControllerJS:

({
    handleComponentEvent : function(cmp, event) {
        console.log(event.getParams().firstName);
        console.log(event.getParams().lastName);
        console.log(event.getParams().emailId);
        console.log(event.getParams().mobileNumber);
        cmp.set("v.firstName",        event.getParams().firstName);
        cmp.set("v.lastName",         event.getParams().lastName);
        cmp.set("v.emailId",          event.getParams().emailId);
        cmp.set("v.mobileNumber",     event.getParams().mobileNumber);
        cmp.set("v.contactDetails",   event.getParams().contactDetails);
        var numEventsHandled = parseInt(cmp.get("v.numEvents")) + 1;
        cmp.set("v.numEvents",      numEventsHandled);
    }
})

Apex Controller : contactHanler

public class contactHanler {
    @AuraEnabled public static List<Contact> getAFewContacts(){
        return [select Id,Name,Email from contact];
    }
}

CeeeHandlerApp :


<aura:application extends="force:slds">
<c:CeeeHandler></c:CeeeHandler>
</aura:application>









Salesforce Database.saveResult and Database.Error example

Code snippet :

List<Contact> con = [select id,lastname,AccountId from contact order by createddate desc Limit 20];
//Map<Id,Contact> conAcc = new Map<Id,Contact>();
Set<Id> conSet = new Set<Id>();
for(contact conn : con){
    if(String.isNotBlank(conn.AccountId)){
        conSet.add(conn.AccountId);
    }
}
Map<Id,Account> conAcc = new Map<Id,Account>([select Id,name from account where Id IN : conSet]);
for(contact connn :con){
    if(conAcc.containsKey(connn.AccountId)){
        connn.lastname = connn.lastname +'--'+ conAcc.get(connn.AccountId).name;
    }
}
Database.SaveResult[] res = database.update(con,false);
List<Database.Error> dError = new List<Database.Error>();
system.debug(res);
for(Database.SaveResult result :res){
    if(result.isSuccess()){
        system.debug('Pass--->>'+result.getId());
    }else{
        system.debug('faled--->>'+result.getErrors());
        dError.addAll(result.getErrors());       
    }
}
for(Database.Error r : dError){
    system.debug('Fields ---->>>'+r.getFields());
    system.debug('Messages ---->>>'+r.getMessage());
    system.debug('Status Code ---->>>'+r.getStatusCode());

}



Callouts from lightining components salesforce

Class Code Snippet :

public class httpCallOutCtrl {
    @AuraEnabled public static List < String > getBaseValues() {
        List < String > options = new List < String > ();
        options.add('AUD');
        options.add('BGN');
        options.add('BRL');
        options.add('CAD');
        options.add('CHF');
        options.add('CNY');
        options.add('CZK');
        options.add('DKK');
        options.add('EUR');
        options.add('GBP');
        options.add('HKD');
        options.add('HRK');
        options.add('HUF');
        options.add('IDR');
        options.add('ILS');
        options.add('INR');
        options.add('JPY');
        options.add('KRW');
        options.add('MXN');
        options.add('MYR');
        options.add('NOK');
        options.add('NZD');
        options.add('PHP');
        options.add('PLN');
        options.add('RON');
        options.add('RUB');
        options.add('SEK');
        options.add('SGD');
        options.add('THB');
        options.add('TRY');
        options.add('ZAR');
        List<Account> acct = [select name from account where name != null order by name desc];
        for(Account a : acct){
            options.add(a.name);
        }
        return options;
    }
    @AuraEnabled public static Map < String,Object > getCalloutResponseContents(String url) {
            Http h = new Http();
            HttpRequest req = new HttpRequest();
            req.setEndpoint(url);
            req.setMethod('GET');
            HttpResponse res = h.send(req);
            System.debug('response:--> ' + res.getBody());
            Map < String, Object > resultsMap = (Map < String, Object > ) JSON.deserializeUntyped(res.getBody());
            system.debug('resultsMap-->' + resultsMap);
            return resultsMap;
        }
}


Aura App :

<aura:application extends="force:slds">
    <ltng:require styles="/resource/slds202/assets/styles/salesforce-lightning-design-system.css"/>
   <c:SampleComponent/>
</aura:application>

Component :

<aura:component controller="httpCallOutCtrl">
    <aura:attribute name="response" type="Map" />
    <aura:attribute name="ListOfCurrency" type="String[]" />
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
        
    <div class="slds-m-around--medium">
        <!--Header part-->
        <div class="slds-page-header" role="banner">
            <div class="slds-media__body">
                <p class="slds-page-header__title slds-truncate" title="foreign exchange rates">HTTP Callout Exchange Rates</p><br/><br/>
                <div class="slds-form-element">
        <div class="slds-form-element__control">
            <div class="slds-select_container">
            <ui:inputSelect label="Select Industry &nbsp;&nbsp;" class="dynamic" aura:id="InputAccountIndustry" change="{!c.onPicklistChange}" />
        </div>
            </div>
    </div>
            </div>
        </div>
        <!--Header part close-->
        <h3 class="slds-section-title--divider"> Base : {!v.response.base}</h3>
        <h3 class="slds-section-title--divider"> Date : {!v.response.date}</h3>
        <!--iterate the list of Currency-->
        <ul class="slds-list--dotted">
            <aura:iteration items="{!v.ListOfCurrency}" var="rateLst">
                <li>{!rateLst}</li>
            </aura:iteration>
        </ul>
    </div>
</aura:component>

ControllerJS :

({
    doInit: function(component, event, helper) {
        var action = component.get("c.getBaseValues");
        var inputIndustry = component.find("InputAccountIndustry");
        var opts = [];
        action.setCallback(this, function(a) {
            opts.push({
                class: "optionClass",
                label: "--- None ---",
                value: ""
            });
            for (var i = 0; i < a.getReturnValue().length; i++) {
                opts.push({
                    "class": "optionClass",
                    label: a.getReturnValue()[i],
                    value: a.getReturnValue()[i]
                });
            }
            inputIndustry.set("v.options", opts);

        });
        $A.enqueueAction(action);
    },
    calloutCtrl: function(component, event, helper) {
        var base = 'USD';
        console.log(base);
        helper.getResponse(component, base);
    },
    onSingleSelectChange: function(cmp) {
        var selectCmp = cmp.find("InputSelectSingle");
        var resultCmp = cmp.find("singleResult");
        resultCmp.set("v.value", selectCmp.get("v.value"));
    },
    onPicklistChange: function(component, event, helper) {
        var selectedIndustry = component.find("InputAccountIndustry");
        var base = selectedIndustry.get("v.value");
        console.log(base);
        if(base === "--- None ---"){
            alert("Please select valid option");
        }else{
            helper.getResponse(component, base);
        }
        
    },
});

HelperJs :
({
    getResponse: function(component, base) {
        var action = component.get("c.getCalloutResponseContents");
        action.setParams({
            "url": 'http://api.fixer.io/latest?base=' + base
        });
        action.setCallback(this, function(response) {
            var state = response.getState();
            console.log(state);
            console.log(response.getReturnValue());
            if (component.isValid() && state === "SUCCESS") {
                component.set("v.response", response.getReturnValue());
                var getAllRates = component.get("v.response")['rates'];
                var CurrencyList = [];
                for (var key in getAllRates) {
                    CurrencyList.push(key + ' = ' + getAllRates[key]);  
                }
                component.set("v.ListOfCurrency", CurrencyList);
            }
        });
        $A.enqueueAction(action);
    },
})

Output :

Salesforce Ajax Rest API

<apex:page showHeader="false" sidebar="false" standardStylesheets="false" id="page" docType="html-5.0">
    <script language="JavaScript1.2" src="/js/functions.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="//code.jquery.com/jquery-1.12.4.js"></script>
    <script src="/soap/ajax/19.0/connection.js" type="text/javascript"></script>
    <script type="text/javascript">
        var $j = jQuery.noConflict();
        var sessionId = '{!$Api.Session_ID}';
        $j(document).ready(function() {
            var leadDetails = {"LeadId": "00Q1k000000tqKJEAY"};
            //var leadDetails = {!$CurrentPage.parameters.attachedRecords};
            console.log('--->>>' + leadDetails.LeadId);
            var leadIdFromJS = leadDetails.LeadId;
            $('input[name=Lead_ID]').val(leadIdFromJS);
            console.log("sessionId :: " + sessionId);
            sessionId = '00D1k0000008bxO!AR0AQIdM77bzQ6JFPShWmVSGOAPad.WfIY_gt7pDjQYCJ7ozjJRIng1qfYn._HUnSQlQT4yRv1A5GTbvSgdI3uxJ8vsjBwgT';
            console.log("Formed Query is :: " + encodeURIComponent("SELECT Id,Name, Lead__c, createddate from CC_Response__c where Lead__c = " + "'"+$j.trim(leadIdFromJS)+"'" + " limit 1"));
            var respID;
            $j.ajax({
                type: "GET",
                url: '/services/data/v35.0/query?q=' + encodeURIComponent("SELECT Id,Name, Lead__c, createddate from CC_Response__c where Lead__c = " + "'"+ $j.trim(leadIdFromJS)+"'" + " limit 1"),
                headers: {
                    "Authorization": "OAuth " + sessionId
                },
                crossDomain: true,
                dataType: 'json',
                success: function(responseData) {
                    var jsonTemp = JSON.stringify(responseData.records);
                    console.log("jsonTemp :: "+jsonTemp);
                    console.log(" Success - 1 :: " + responseData.records[0].Id);
                    $('input[name=Response_ID]').val(responseData.records[0].Id);
                    //cmdSFDCForm();
                   cmdAjax2SFDC();
                },
                error: function(request, status, error) {
                    console.log(" error - 1 :: " + request.responseText);
                }
            });           
             
        });
        function cmdAjax2SFDC(){
            var jsonString = '{"prechatDetails":[{"label":"CompanyName","value":"ciscsc","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"OriginatingURLInput","value":"","entityMaps":[],"transcriptFields":["Originating_URL__c"],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"recordType","value":"01280000000GEtXAAW","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"FirstName","value":"cisco","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"Phone","value":"5985698658","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"LastName","value":"ciscos","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"countryName","value":"","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"sessionId","value":"89a9a262-0731-4830-ab26-789643e2eefb","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"Interested","value":"Accepted1","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"EmailAddress","value":"ciscsco@ciscsoc.com","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false},{"label":"status","value":"New Prospect","entityMaps":[],"transcriptFields":[],"displayToAgent":"true","doKnowledgeSearch":false}],"geoLocation":{"organization":"Cisco Systems","region":"CA","city":"San Jose","countryName":"United States","latitude":37.3394,"countryCode":"US","longitude":-121.895},"visitorId":"89a9a262-0731-4830-ab26-789643e2eefb","customDetails":[{"value":"Demo First name","entityMaps":[],"displayToAgent":false,"label":"FirstNameInput","transcriptFields":[]},{"value":"Demo Last name","entityMaps":[],"displayToAgent":false,"label":"LastNameInput","transcriptFields":[]},{"value":"+1(800)231-8323","entityMaps":[],"displayToAgent":false,"label":"PhoneInput","transcriptFields":[]},{"value":"Test@cisco.com","entityMaps":[],"displayToAgent":false,"label":"EmailAddressInput","transcriptFields":[]},{"value":"123123412341","entityMaps":[],"displayToAgent":false,"label":"data-c2c-ecid","transcriptFields":[]},{"value":"000775282","entityMaps":[],"displayToAgent":false,"label":"Keycode","transcriptFields":[]},{"value":"US","entityMaps":[],"displayToAgent":false,"label":"CountryInput","transcriptFields":[]},{"value":"Cisco Systems, INC.","entityMaps":[],"displayToAgent":false,"label":"CompanyInput","transcriptFields":[]},{"value":"abcd-abcd-abcd-abcd","entityMaps":[],"displayToAgent":true,"label":"CookieInput","transcriptFields":[]},{"value":"http://int-ciscosalescrm.cs78.force.com/chat","entityMaps":[],"displayToAgent":true,"label":"OriginatingURL","transcriptFields":[]}],"agent":{"userId":"00580000007Hbuc","agentName":"Fazurulla G","transfer":0}}';   
            //var jsonString = '{!$CurrentPage.parameters.chatDetails}';
            console.log(jsonString);                 
            obj = JSON.parse(jsonString);
            var uid = obj.agent['userId'];
            console.log(uid);
            $('input[name=User_ID]').val(uid);
           $j.ajax({
                type: "GET",
                url: '/services/data/v35.0/query?q=' + encodeURIComponent("select id, username, alias, name, Marketing_Call_Center__c from User where Id = " + "'" + uid + "'" + " limit 1"),
                headers: {
                    "Authorization": "OAuth " + sessionId
                },
                crossDomain: true,
                dataType: 'json',
                success: function(responseData) {
                    var jsonTemp = JSON.stringify(responseData.records);
                    console.log(jsonTemp);
                    console.log(responseData.records[0].Id);
                    $('input[name=Agent_Name]').val(responseData.records[0].Name);
                    cmdSFDCForm();
                },
                error: function(request, status, error) {
                    console.log("faz error***" + request.responseText);
                }
            }); 
        }
        function cmdSFDCForm() {
            var f = document.getElementById('TheForm');
            window.open('', '_top');
            f.submit();
        }
    </script>
    <form id="TheForm" method="GET" action="https://google.com/LP=7907" target="_top">
        <input type="hidden" name="Lead_ID" value="" />
        <input type="hidden" name="User_ID" value="" />
        <input type="hidden" name="Response_ID" id="Response_ID" value="" />
        <input type="hidden" name="Agent_Name" value="" />
    </form>
</apex:page>

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>

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