Salesforce integration Patterns & Best Practices

Join us to learn about different Salesforce integration Patterns and Integration Best Practices. In this session we will talk about different Integration patters like request and reply/response, Fire and forget, Batch Data Synchronization, Remote Call In, Data Virtualization.

Agenda

  • Why there is need of Integration
  • Security between System
  • Factors affecting Integration Patterns
  • Integration Patterns
    • Request and Reply / Response
    • Fire and Forget
    • Batch Data Synchronization
    • Remote Call In
    • Data Virtualization
  • When to use which integration
  • Differences between various integration mechanisms including Canvas, Outbound messages, REST , SOAP, Bulk APIs
  • When to use ESB vs ETL
  • Demo
  • Q&A

Here is Keynote of session

Why Integration

Salesforce can’t be source of everything. It can be CRM or any Custom application. However, SAP can own Order management or Inventory, External system for sending email, Other System for Payment, External Fleet Management And possibilities are high that Salesforce would need to exchange data with these systems. Please check Salesforce Integration with External System post to learn about Integration.

Factors Affecting Pattern

  • Maintain same transaction : Does Salesforce need to perform anything on response ?
  • Synchronous vs Asynchronous : Is it business critical & response needs to be processed in real time or near real time ?
  • Message size : Is it small or large ?
  • Guaranteed delivery needed : What if external system is down ?
  • Contract first integration possibility : Can remote system follow Salesforce Contract ?
  • Declarative preferred : Do we want to integrate without writing any code in Salesforce ?

Request & Reply

Salesforce invokes a process on a remote system, waits for completion of that process, and then tracks state based on the response from the remote system. Let see what all option we have for request & reply.

External Services : Point & click based integration from Lightning Flow. External system should provide OpenAPI or Interagent schema. Only supports primitive datatypes

LWC or Visualforce calling external system : Salesforce enables you to consume WSDL and generate proxy classes. It also provides HTTP services using which we can perform GET, POST, PUT or Delete operations. A user can initiate operation from custom UI.

Trigger : We can make callout to external system on data change via trigger. However callout made must be asynchronous. This solution is not recommended for request and reply but better suited for Fire and Forget.

Batch Apex invoking external services : We can make callout to external system using Batch Apex. Execute method in Batch apex gets refresh governor limit every time however there are governor limits on total callout or time of callout in single transaction

Fire & Forget

Salesforce invokes a process in a remote system but doesn’t wait for completion of the process. Instead, the remote process receives and acknowledges the request and then hands off control back to Salesforce. We can do the same with following ways:

  • Process-driven platform events
  • Customization-driven platform events
  • Workflow-driven outbound message
  • Apex based Callouts

Batch Data Synchronization

Data stored in Lightning Platform is created or refreshed to reflect updates from an external system, and when changes from Lightning Platform are sent to an external system. Updates in either direction are done in a batch manner.

Change Data Capture : Salesforce publishes change events, which represents changes on records
Using ETL Tool : This tool connects to systems, extract data, transform in require target format and uploads using Bulk API or SOAP API
Manual Remote Calls : Salesforce or external system can call each other every time data is changed. However, it would cause huge ongoing traffic and should be avoided if possible

Batch Integration
Batch Integration

Remote Call-In

Data stored in Lightning Platform is created, retrieved, updated, or deleted by a remote system.

  • SOAP & Rest API
  • Apex based APIs

Data Virtualization

Salesforce accesses external data in real time. This removes the need to persist data in Salesforce and then reconcile the data between Salesforce and the external system

Data Virtualization
Data Virtualization

Here is recording of session.

Topic    : Salesforce integration Pattern & Best Practices
Date     : Saturday, FEB 1, 2020 10:00 AM EST (8:30 PM IST )
Speaker : Jitendra Zaa

It was a mega session and we got the 380+RSVP across the world. In that session we covered few of the aspects of integration, starting from basic & going to advance.

Further Learning

Please note that we have limit of 300 attendees that can join the online sessions. However, recording will be posted on our YouTube channel. Make sure to subscribe our YouTube channel to get notification for video upload.

Bookmarks our “Session in 2020” page for all upcoming and old sessions of 2020. Let us know which topic you want learn next in ApexHours.

Don’t forget to check Jitendra Udemy course on Mastering Salesforce DX (Modular Application Development Using Unlocked Packages)

If you are new in Salesforce. Please check our free Salesforce Admin and Salesforce Developer training.

Thanks,
Salesforce Apex Hours

9,444 total views, 20 views today

5 thoughts on “Salesforce integration Patterns & Best Practices”

  1. Hello Experts,

    I need your advice on testing the integration of third party Rest API from apex like below

    public class Testing {
    public final String clientId = ‘xxxxxxxxxxxx’;
    public final String clientSecret = ‘xxxxxxxxxx’;

    public String getD365Customer(){
    String reqbody = ‘grant_type=client_credentials&client_id=’+clientId+’&client_secret=’+clientSecret;
    Http h = new Http();
    HttpRequest req = new HttpRequest();
    req.setBody(reqbody);
    req.setMethod(‘POST’);
    req.setEndpoint(‘https://login.microsoftonline.com/tenant/oauth2/token’);
    HttpResponse res = h.send(req);
    deserializeResponse resp1 = (deserializeResponse)JSON.deserialize(res.getbody(),deserializeResponse.class);
    String atoken = resp1.access_token;
    System.debug(‘Access Token=========’ + atoken);
    //return atoken;

    Http http1 = new Http();
    HttpRequest req1 = new HttpRequest();
    req1.setEndpoint(‘https://dev-mca/data/Customers’);
    req1.setMethod(‘GET’);
    req1.setHeader(‘Authorization’,’Bearer ‘+atoken);
    HttpResponse res1 = http1.send(req1);
    System.debug(‘Response Body=========’ + res1.getBody());
    return res1.getBody();
    }
    public class deserializeResponse
    {
    public String token_type;
    public String expires_in;
    public String ext_expires_in;
    public String expires_on;
    public String not_before;
    public String resource;
    public String access_token;
    }}
    But I am getting the error like
    Line: 23, Column: 1
    System.UnexpectedException: java.lang.IllegalArgumentException: invalid start or end

    Not sure if I am missing something.

    Reply
  2. Thank you for wonderful session.

    I am having multiple requirements and want to check feasibility of platform events.

    1. On Opportunity close I need to update multiple external applications Currently I am using multiple Batch APEX approach and running the batch in every 10 mins. While performing this API callouts need to generate JSON request with multiple fields on opportunity and opportunity child objects. In some of the cases external systems are updating my opportunity as callback using SF data API/composite API. Can I use platform event as Fire and forget to notify external systems and the call back will remains same as is?

    2. There are multiple future calls in opportunity process execution, Can I replace future calls with platform events?

    3. The current daily volume of cases is very huge around 75 K opportunities per day and I am using Enterprise edition org. Will platform event suitable for such high volume of cases per day.

    Reply

Leave a Comment