{"id":31791,"date":"2021-07-12T21:36:32","date_gmt":"2021-07-13T01:36:32","guid":{"rendered":"https:\/\/centricconsulting.com\/?p=31791"},"modified":"2022-04-29T13:14:54","modified_gmt":"2022-04-29T17:14:54","slug":"how-to-choose-a-salesforce-crm-integration-tool-or-method","status":"publish","type":"post","link":"https:\/\/centricconsulting.com\/blog\/how-to-choose-a-salesforce-crm-integration-tool-or-method\/","title":{"rendered":"How to Choose a Salesforce CRM Integration Tool or Method"},"content":{"rendered":"<h2 style=\"text-align: center;\">Salesforce provides and accommodates options for integrating with other systems. Let&#8217;s review the options, including key considerations and limitations, when choosing how to move forward with Salesforce CRM integration.<\/h2>\n<hr \/>\n<p class=\"intro-text\"><span data-contrast=\"auto\">As the world\u2019s<\/span><span data-contrast=\"auto\">\u00a0leading\u00a0<\/span><span data-contrast=\"auto\">CR<\/span><span data-contrast=\"auto\">M platform<\/span><span data-contrast=\"auto\">, <a href=\"https:\/\/centricconsulting.com\/technology-solutions\/salesforce-implementation-services\/\">Salesforce<\/a><\/span><span data-contrast=\"auto\"> is used by <\/span><span data-contrast=\"auto\">numerous<\/span><span data-contrast=\"auto\">\u00a0organizations across the world<\/span><span data-contrast=\"auto\">. It offers various<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">\u201c<\/span><span data-contrast=\"auto\">Clouds<\/span><span data-contrast=\"auto\">\u201d<\/span><span data-contrast=\"auto\">\u00a0that<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">manage<\/span><span data-contrast=\"auto\">\u00a0key business<\/span><span data-contrast=\"auto\">\u00a0processes like\u00a0<\/span><span data-contrast=\"auto\">\u201c<\/span><span data-contrast=\"auto\">Sales<\/span><span data-contrast=\"auto\">\u201d<\/span><span data-contrast=\"auto\">\u00a0and\u00a0<\/span><span data-contrast=\"auto\">\u201c<\/span><span data-contrast=\"auto\">Service<\/span><span data-contrast=\"auto\">\u201d<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">&#8212; core\u00a0<\/span><span data-contrast=\"auto\">platforms for your business<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">However, in today\u2019s complex enterprise that\u00a0<\/span><span data-contrast=\"auto\">crosses<\/span><span data-contrast=\"auto\">\u00a0multiple software applications,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">a<\/span><span data-contrast=\"auto\">\u00a0data\u00a0<\/span><span data-contrast=\"auto\">input<\/span><span data-contrast=\"auto\">\u00a0or change<\/span><span data-contrast=\"auto\">\u00a0in Salesforce\u00a0<\/span><span data-contrast=\"auto\">requires updating<\/span><span data-contrast=\"auto\">\u00a0another system<\/span><span data-contrast=\"auto\">, whether\u00a0<\/span><span data-contrast=\"auto\">internal or external<\/span><span data-contrast=\"auto\">. T<\/span><span data-contrast=\"auto\">he reverse is true as well<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">&#8212; updates<\/span><span data-contrast=\"auto\">\u00a0to\u00a0<\/span><span data-contrast=\"auto\">data in<\/span><span data-contrast=\"auto\">\u00a0other systems\u00a0<\/span><span data-contrast=\"auto\">require data updates<\/span><span data-contrast=\"auto\">\u00a0in Salesforce<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">By automating these updates, you<\/span><span data-contrast=\"auto\">\u00a0don\u2019t have to worry about making manual updates as your<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">organization\u00a0<\/span><span data-contrast=\"auto\">grows<\/span><span data-contrast=\"auto\"> and these transactions can multiply themselves.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Enter the world of\u00a0<\/span><span data-contrast=\"auto\">i<\/span><span data-contrast=\"auto\">ntegration, which\u00a0<\/span><span data-contrast=\"auto\">enables<\/span><span data-contrast=\"auto\">\u00a0one system to connect to another system and\u00a0<\/span><span data-contrast=\"auto\">send,\u00a0<\/span><span data-contrast=\"auto\">receive and\/or update data.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><strong>In this blog, we will\u00a0cover the\u00a0various\u00a0Salesforce\u00a0integration\u00a0tools or methods\u00a0that are available to send and receive data from Salesforce.\u00a0\u00a0<\/strong><\/p>\n\n        <div class=\"inline-cta dark-blue\">\n            <div class=\"inline-cta--content\">\n                 Join Salesforce experts to learn about the Salesforce Center of Excellence construct and how it can drive results. \n            <\/div>\n            <div class=\"inline-cta--button\">\n                <a\n                    class=\"button\"\n                    href=\"https:\/\/go.centricconsulting.com\/EC-FY22-04-WBNR-SalesforceSuccessTheWhatWhyandHowofaCenterofExcellence_02LandingPage-OnDemand.html\"\n                    target=\"_blank\"\n                    >\n\n                    View Webinar\n                <\/a>\n            <\/div>\n        <\/div>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Salesforce\u00a0<\/span><span data-contrast=\"none\">CRM\u00a0<\/span><span data-contrast=\"none\">Integration\u00a0<\/span><span data-contrast=\"none\">Method<\/span><span data-contrast=\"none\">s<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Salesforce provides<\/span><span data-contrast=\"auto\">\u00a0and accommodates<\/span><span data-contrast=\"auto\">\u00a0various options for integrating with other systems. <a href=\"https:\/\/centricconsulting.com\/technology-solutions\/salesforce-consulting-services\/\">We will go over those<\/a><\/span><span data-contrast=\"auto\">\u00a0options<\/span><span data-contrast=\"auto\">\u00a0and talk about when\u00a0<\/span><span data-contrast=\"auto\">you should<\/span><span data-contrast=\"auto\">\u00a0use one<\/span><span data-contrast=\"auto\">\u00a0over\u00a0<\/span><span data-contrast=\"auto\">another, including<\/span><span data-contrast=\"auto\">\u00a0some of the key considerations<\/span><span data-contrast=\"auto\">. We\u2019ll also\u00a0<\/span><span data-contrast=\"auto\">briefly touch on some of the limitations<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><strong>The types of\u00a0<a href=\"https:\/\/centricconsulting.com\/blog\/how-to-choose-a-salesforce-crm-integration-tool-or-method\/\">CRM\u00a0integrations<\/a>\u00a0we will cover\u00a0are:\u00a0<\/strong><\/p>\n<ul>\n<li><span data-contrast=\"auto\">Publish-Subscribe Messaging Based<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Change Data Capture<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Virtual Integration<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Third-<\/span><span data-contrast=\"auto\">par<\/span><span data-contrast=\"auto\">t<\/span><span data-contrast=\"auto\">y<\/span><span data-contrast=\"auto\">\u00a0Integration Tools<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Data Load<\/span><span data-contrast=\"auto\">ing<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Salesforce Connect<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Inbound into Salesforce\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Outbound from Salesforce<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3><span data-contrast=\"none\">Data Load<\/span><span data-contrast=\"none\">ing<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p>In this type of integration,\u00a0data\u00a0is generally pushed into\u00a0Salesforce.\u00a0<strong>One example of data being pushed into Salesforce is\u00a0the\u00a0initial data load to\u00a0standard or custom objects within Salesforce,\u00a0especially\u00a0when moving from older\u00a0custom-built\u00a0software systems.<\/strong> This usually includes extracting and transforming large amounts of data and preparing load sheets to push data into Salesforce.<\/p>\n<p><span data-contrast=\"auto\">Out<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">of<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">b<\/span><span data-contrast=\"auto\">ox Salesforce provides two free tools\u00a0<\/span><span data-contrast=\"auto\">you can use<\/span><span data-contrast=\"auto\">\u00a0to accomplish the data\u00a0<\/span><span data-contrast=\"auto\">load<\/span><span data-contrast=\"auto\">:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<div id=\"attachment_33451\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-33451\" class=\"wp-image-33451 size-large\" src=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-1024x515.png\" alt=\"salesforce CRM integration\" width=\"800\" height=\"402\" srcset=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-1024x515.png 1024w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-300x151.png 300w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-768x386.png 768w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-1536x772.png 1536w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-600x302.png 600w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-992x499.png 992w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-1200x603.png 1200w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-850x427.png 850w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21-750x377.png 750w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/REVISED_SFIntegrationBlog_Graphic01_11.4.21.png 1738w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-33451\" class=\"wp-caption-text\">Figure 1: Data integration &#8211; Two-way sync and initial load from an external data store.<\/p><\/div>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/help.salesforce.com\/articleView?id=sf.data_import_wizard.htm&amp;type=5\" target=\"_blank\" rel=\"noopener noreferrer\"><b><span data-contrast=\"auto\">Data Import Wizard<\/span><\/b><\/a><b><span data-contrast=\"auto\">:<\/span><\/b><b><span data-contrast=\"auto\">\u00a0<\/span><\/b><span data-contrast=\"auto\">A more friendly<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0wizard-based tool<\/span><span data-contrast=\"auto\">\u00a0is very simple and\u00a0<\/span><span data-contrast=\"auto\">recommended for<\/span><span data-contrast=\"auto\">\u00a0non-technical users. It allows importing data into custom objects and supports data load into some standard objects<\/span><span data-contrast=\"auto\">, including<\/span><span data-contrast=\"auto\">\u00a0up to 50,000 records.\u00a0<\/span><span data-contrast=\"auto\">It can also be used to extract data from Salesforce.\u00a0<\/span><span data-contrast=\"auto\">While it is a good\u00a0<\/span><span data-contrast=\"auto\">tool<\/span><span data-contrast=\"auto\">, it has limits that quickly become a bottleneck for any large complex data load requirements. <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/help.salesforce.com\/articleView?id=sf.data_loader.htm&amp;type=5\" target=\"_blank\" rel=\"noopener noreferrer\"><b><span data-contrast=\"auto\">Data Loader<\/span><\/b><\/a><b><span data-contrast=\"auto\">:\u00a0<\/span><\/b><span data-contrast=\"auto\">A\u00a0<\/span><span data-contrast=\"auto\">downloadable tool,<\/span><span data-contrast=\"auto\"> Data Loader<\/span><span data-contrast=\"auto\"> can be used for large data loads into standard and custom objects. It also offers the user the option to select a batch size and run the batches in serial or parallel. <\/span><span data-contrast=\"auto\">Data Loader has many benefits, but is<\/span><span data-contrast=\"auto\"> not easy <\/span><span data-contrast=\"auto\">from an end-user perspective and has<\/span><span data-contrast=\"auto\">\u00a0limitations <\/span><span data-contrast=\"auto\">for large data migrations. However, Data Loader should still be the first choice for getting data in<\/span><span data-contrast=\"auto\">to\u00a0<\/span><span data-contrast=\"auto\">and out of Salesforce. Below is more detail about how the tool works<\/span><span data-contrast=\"auto\">:<\/span>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Data Loader can be automated and invoked through shell scripts, which makes it an excellent option if the data load is something that occurs on a regular basis. <\/span><span data-contrast=\"auto\">For example, if you use the windows task scheduler and call the script that invokes Data Loader, it picks up input files from a source location and uploads<\/span><span data-contrast=\"auto\">\u00a0the<\/span><span data-contrast=\"auto\">\u00a0data into Salesforce. <strong>It is\u00a0<\/strong><\/span><strong>configurable\u00a0to a certain degree<\/strong><span data-contrast=\"auto\"><strong>, and settings can be passed while invoking the tool. It does have some limitations; data must be prepared\u202fcorrectly\u202fbefore it can be inserted into Salesforce.\u202f<\/strong>Users must manage duplicates,\u202frow locking issues, and\u202fslow data\u202fwhen\u202floading large amounts of data with complex relationships.\u202f<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Data Loader<\/span><span data-contrast=\"auto\">\u00a0can also be used to extract data from Salesforce. It does have some limitations; data must be prepared\u00a0<\/span><span data-contrast=\"auto\">correctly<\/span><span data-contrast=\"auto\">\u00a0before it can be inserted into Salesforce.\u00a0<\/span><span data-contrast=\"auto\">Users must manage d<\/span><span data-contrast=\"auto\">uplicates<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">row locking issues<\/span><span data-contrast=\"auto\">, and\u00a0<\/span><span data-contrast=\"auto\">slow data\u00a0<\/span><span data-contrast=\"auto\">when<\/span><span data-contrast=\"auto\">\u00a0loading large amounts of data with complex relationships.\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Salesforce Connect<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h2>\n<p>Salesforce provides an out-of-box way of viewing external data called Salesforce Connect\u00a0which uses special entities called external objects. Think of this as a view to an external data store, but it is a special view that you can also use to update the external data source.<\/p>\n<p><span data-contrast=\"auto\">The best part: It does not take up Salesforce data storage space. <\/span><span data-contrast=\"auto\">This is an important consideration since while <\/span><span data-contrast=\"auto\">Salesforce can handle very large amounts of data, the storage does not come cheap. <strong>Before moving data to Salesforce, it&#8217;s a best practice to make sure the move is required (into either Standard or custom objects<\/strong><\/span><strong>).\u00a0<\/strong><\/p>\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.apexcode.meta\/apexcode\/platform_connect_about.htm#:~:text=Salesforce%20Connect%20provides%20seamless%20integration,resource%20planning%20(ERP)%20system.\" target=\"_blank\" rel=\"noopener noreferrer\">Salesforce Connect<\/a>\u00a0<\/span><span data-contrast=\"auto\">requires you to create an OData endpoint\u00a0<\/span><span data-contrast=\"auto\">to get data from\u00a0<\/span><span data-contrast=\"auto\">any\u00a0<\/span><span data-contrast=\"auto\">external system.\u00a0<\/span><span data-contrast=\"auto\">An OData endpoint exposes external data, such as data stored in your SQL Server as tables or view as JSON objects.<\/span><span data-contrast=\"auto\">\u00a0This endpoint should be hosted publicly so that is accessible by Salesforce application servers<\/span><span data-contrast=\"auto\">, and if desired, y<\/span><span data-contrast=\"auto\">ou can also configure authentication to your endpoint\u00a0<\/span><span data-contrast=\"auto\">(<\/span><span data-contrast=\"auto\">Salesforce allows you to pass these credentials per user or provide a generic account for all users<\/span><span data-contrast=\"auto\">)<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">You can use\u00a0<\/span><span data-contrast=\"auto\">a single<\/span><span data-contrast=\"auto\"> OData endpoint to expose multiple tables as multiple external objects inside Salesforce. You can also configure other settings on the OData endpoint to make these external objects writable, sortable (and more) from within Salesforce. The user viewing the data <\/span><span data-contrast=\"auto\">will<\/span><span data-contrast=\"auto\">\u00a0not know if the data is living outside Salesforce in an external system. External objects are searchable, and you can create reports<\/span><span data-contrast=\"auto\"> and dashboards<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">using them<\/span><span data-contrast=\"auto\">.\u00a0<\/span><span data-contrast=\"auto\">Additionally, they<\/span><span data-contrast=\"auto\">\u00a0can<\/span><span data-contrast=\"auto\">\u00a0also<\/span><span data-contrast=\"auto\">\u00a0be related to standard, custom or other external objects.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">External objects do have limitations and they should not be used as a replacement to standard or custom\u00a0<\/span><span data-contrast=\"auto\">Salesforce\u00a0<\/span><span data-contrast=\"auto\">objects. <strong>Salesforce Connect requires an additional license<\/strong><\/span><strong> per organization and data source, which means you must buy two licenses to connect two source systems. <\/strong><\/p>\n<p>Salesforce Connect offers an excellent way to get and write data to external systems while providing users with a familiar Salesforce User Interface. Also, Salesforce Connect takes into account the fact that your organization&#8217;s data storage is bound to grow over time, making it a\u00a0viable option that can\u00a0provide you with significant savings\u00a0in the long run.<\/p>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Inbound\u00a0<\/span><span data-contrast=\"none\">i<\/span><span data-contrast=\"none\">nto Salesforce<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h2>\n<p>For all standard and custom objects, Salesforce provides out-of-the-box REST\u00a0and\u00a0SOAP\u00a0API\u00a0Endpoints that can be used by external systems to perform CRUD operations on data residing inside Salesforce. To connect to these endpoints a connected app must be created inside Salesforce.<\/p>\n<p><span data-contrast=\"auto\">The calling system uses the credentials specified in this connected app and OAuth to perform various operations. Making this OAuth call typically requires a client key and secret code after which the client gets a refresh token that grants them access. The connected app can use different authentication mechanisms such as Password, JWT, etc. <\/span><span data-contrast=\"auto\">The information can be\u00a0<\/span><span data-contrast=\"auto\">exchanged<\/span><span data-contrast=\"auto\"> in various formats such as JSON, XML, etc.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><strong>A\u00a0developer can also\u00a0write\u00a0Custom APEX REST<\/strong><span data-contrast=\"auto\"><strong> endpoints that allow custom logic to execute before the REST Actions can be performed on the objects.<\/strong> For example, before making an account inactive, we want to make sure that all the associated contacts are deactivated as well. Custom objects with customized exception messages can be sent back as well, allowing the calling system to handle various scenarios. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">These Endpoints provide a great mechanism\u00a0<\/span><span data-contrast=\"auto\">for\u00a0<\/span><span data-contrast=\"auto\">a near real-time integration<\/span><span data-contrast=\"auto\">, or r<\/span><span data-contrast=\"auto\">equests can\u00a0<\/span><span data-contrast=\"auto\">also\u00a0<\/span><span data-contrast=\"auto\">be batched.\u00a0<\/span><span data-contrast=\"auto\">As with other solutions<\/span><span data-contrast=\"auto\">, t<\/span><span data-contrast=\"auto\">here are limitations<\/span><span data-contrast=\"auto\">\u00a0to consider, including\u00a0<\/span><span data-contrast=\"auto\">the total number of API\u00a0<\/span><span data-contrast=\"auto\">calls and the size of the request. <\/span><\/p>\n<p><span data-contrast=\"auto\">The limitations can quickly become an issue when the system\u00a0<\/span><span data-contrast=\"auto\">grows,<\/span><span data-contrast=\"auto\">\u00a0and more communication needs to happen based on growing operations<\/span><span data-contrast=\"auto\">.\u00a0<\/span><strong>It&#8217;s important to note\u00a0this type of integration is synchronous, which means that if for any reason (like loss of connectivity or<\/strong><span data-contrast=\"auto\"><strong> if the two systems cannot connect) there is a high probability of losing either the request or the response message.<\/strong> <\/span><span data-contrast=\"auto\">Therefore, you must perform extensive testing and exception handling<\/span><span data-contrast=\"auto\">, e<\/span><span data-contrast=\"auto\">specially for long-running scenarios, before deploying these <\/span><span data-contrast=\"auto\">solutions<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">in production<\/span><span data-contrast=\"auto\">.<\/span><\/p>\n<div id=\"attachment_33453\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-33453\" class=\"wp-image-33453 size-large\" src=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-1024x532.png\" alt=\"Salesforce CRM integration\" width=\"800\" height=\"416\" srcset=\"https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-1024x532.png 1024w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-300x156.png 300w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-768x399.png 768w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-1536x798.png 1536w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-600x312.png 600w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-992x516.png 992w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-1200x624.png 1200w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-850x442.png 850w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21-750x390.png 750w, https:\/\/centricconsulting.com\/wp-content\/uploads\/2021\/07\/SFIntegrationBlog_Graphic02_11.2.21.png 1764w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-33453\" class=\"wp-caption-text\">Figure 2: Process integration &#8211; External System calling into Salesforce and Remote callouts to external system.<\/p><\/div>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Outbound from Salesforce<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h2>\n<p>To retrieve data from Salesforce, external systems can use the REST Endpoints discussed above to make GET calls. Salesforce also provides &#8220;Outbound message,&#8221; which\u00a0is a no-code solution that can be used when a standard or custom object is\u00a0created or updated inside Salesforce.<\/p>\n<p><span data-contrast=\"auto\">Outbound messages offer admins or power user<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0the capability to post standard or custom fields on the object to a URL.\u00a0<\/span><span data-contrast=\"auto\">They are used as workflow actions in workflows within Salesforce<\/span><span data-contrast=\"auto\">. They can send the message in an XML format which is ideal for a SOAP endpoint.\u00a0<\/span><span data-contrast=\"auto\">It is worth noting that c<\/span><span data-contrast=\"auto\">urrently there is no support to send the message in JSON format, however one workaround is creating a formula field and formatting the message in JSON and sending that field as part of the payload.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><strong>Salesforce also provides\u00a0HTTP Callouts\u00a0which can be used<\/strong><span data-contrast=\"auto\"><strong>\u00a0within Salesforce Code to call an external REST or SOAP endpoint.<\/strong> An example would be to put the HTTP callout in an insert or an update trigger on an object to update an external system<\/span><span data-contrast=\"auto\">; for example,<\/span><span data-contrast=\"auto\">\u00a0when an order is updated in Salesforce<\/span><span data-contrast=\"auto\">\u00a0and<\/span><span data-contrast=\"auto\">\u00a0it needs to update inventory in SAP. <\/span><\/p>\n<p><span data-contrast=\"auto\">Salesforce also provides APEX Batch jobs which can be scheduled at certain time intervals. The reason\u00a0<\/span><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\"> mention them is they can be<\/span><span data-contrast=\"auto\">\u00a0beneficial when<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">process<\/span><span data-contrast=\"auto\">ing<\/span><span data-contrast=\"auto\"> multiple records as batches at the end of the day or week <\/span><span data-contrast=\"auto\">to then<\/span><span data-contrast=\"auto\"> POST to an external endpoint using HTTP Callou<\/span><span data-contrast=\"auto\">t.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Publish-Subscribe Messag<\/span><span data-contrast=\"none\">ing-B<\/span><span data-contrast=\"none\">ased<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p>The Publish-Subscribe integration pattern allows a subscriber system to be notified when a\u00a0publishing\u00a0system publishes content. This integration mechanism is message-based because if the subscriber system does not pick up the message right away, it can be picked up later, making it asynchronous. This eliminates issues associated\u00a0with\u00a0an external system\u00a0being unavailable or messages getting lost. Salesforce offers some interesting technologies in this paradigm.<\/p>\n<p><strong>Platform Events<\/strong><span data-contrast=\"auto\"><strong> can be created inside the Salesforce User Interface from the setup.<\/strong> A Platform Event is a special object that has custom fields and can have events \u2018raised\u2019 against it. When we create a platform event, Salesforce provides us a unique endpoint for each event which can be used by <\/span><span data-contrast=\"auto\">an<\/span><span data-contrast=\"auto\"> external system to subscribe to any events raised on the object.<\/span><\/p>\n<p><span data-contrast=\"auto\">External systems can subscribe to these events using a\u00a0<\/span><span data-contrast=\"auto\">CometD<\/span><span data-contrast=\"auto\"> client. There are various implementations available for .NET and Java frameworks. A client-server process can listen to any events that are raised from Salesforce when it subscribed to that endpoint. <\/span><\/p>\n<p><span data-contrast=\"auto\">The client receives data and all the fields that have been defined on the original platform event. Platform events can be granted permissions\u00a0<\/span><span data-contrast=\"auto\">since<\/span><span data-contrast=\"auto\">\u00a0these are\u00a0<\/span><span data-contrast=\"auto\">\u201c<\/span><span data-contrast=\"auto\">almost<\/span><span data-contrast=\"auto\">&#8220;<\/span><span data-contrast=\"auto\">\u00a0custom objects so that only certain users can\u00a0<\/span><span data-contrast=\"auto\">raise<\/span><span data-contrast=\"auto\"> them. <strong>They can be raised from within Salesforce using various mechanisms<\/strong><\/span><strong>;\u00a0for example,\u00a0an\u00a0after-insert<\/strong><span data-contrast=\"auto\"><strong>\u00a0trigger on a custom object that raises a platform event to inform the external clients when a new object is created.<\/strong>\u00a0<\/span><span data-contrast=\"auto\">Internally you can capture the raised event using a trigger on the Platform Event object. <\/span><\/p>\n<p><span data-contrast=\"auto\">This means that internally\u00a0<\/span><span data-contrast=\"auto\">in<\/span><span data-contrast=\"auto\">\u00a0Salesforce or externally from\u00a0<\/span><span data-contrast=\"auto\">another system<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\"> when a platform event is raised the trigger fires which can be used to perform a required action such as <\/span><span data-contrast=\"auto\">logging the event.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Change Data Capture<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p>Change Data Capture\u00a0(CDC)\u00a0allows external systems to\u00a0receive\u00a0changes that happen inside Salesforce.\u00a0<strong>When they are subscribed to the CDC\u00a0channel,\u00a0they\u00a0will receive\u00a0updates from within Salesforce in a JSON format\u00a0(and\u00a0Salesforce sends\u00a0<i>only<\/i>\u00a0the updated data).<\/strong><\/p>\n<p><span data-contrast=\"auto\">This provides an excellent mechanism for\u00a0<\/span><span data-contrast=\"auto\">an<\/span><span data-contrast=\"auto\">\u00a0external system to receive updates without doing any polling.\u00a0<\/span><span data-contrast=\"auto\">An additional benefit is<\/span><span data-contrast=\"auto\"> the payload is small, which\u00a0<\/span><span data-contrast=\"auto\">can\u00a0<\/span><span data-contrast=\"auto\">make it ideal for large organizations<\/span><span data-contrast=\"auto\">\u00a0with multiple connected systems<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Virtual Integration<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p>A virtual integration is popular when organizations want their employees to use only a single software platform or do minimal software switching while working on various tasks. Salesforce offers IFrames to connect to external systems and can act as a \u201cone-stop\u201d system for external software systems that are browser-based.<\/p>\n<p><span data-contrast=\"auto\">For other types of systems, Visualforce pages and lightning components can pull information and enable users to perform all<\/span><span data-contrast=\"auto\">\u00a0their<\/span><span data-contrast=\"auto\">\u00a0tasks within Salesforce.<\/span><span data-contrast=\"auto\">\u00a0<\/span><strong>Additionally,\u00a0Salesforce also provides\u00a0Canvas\u00a0which\u00a0is\u00a0a set of components that\u00a0enables users\u00a0to make a canvas app that can integrate with a third-party application. \u00a0<\/strong><\/p>\n<p><span data-contrast=\"auto\">Although Salesforce can act as a user interface to\u00a0<\/span><span data-contrast=\"auto\">external applications<\/span><span data-contrast=\"auto\">, systems with complex sharing and security<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">requirements are not ideal for bringing \u201cinto\u201d Salesforce and must be managed separately.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Third-Party\u00a0<\/span><span data-contrast=\"none\">Salesforce CRM\u00a0<\/span><span data-contrast=\"none\">Integration Tools<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:40,&quot;335559739&quot;:0,&quot;335559740&quot;:259}\">\u00a0<\/span><\/h3>\n<p>There are various third-party\u00a0<a href=\"https:\/\/centricconsulting.com\/blog\/how-to-choose-a-salesforce-crm-integration-tool-or-method\/\">Salesforce CRM\u00a0integration<\/a> tools that are available to connect external systems with Salesforce. One\u00a0such\u00a0tool is\u00a0<a href=\"https:\/\/centricconsulting.com\/mulesoft-anypoint-platform\/\">MuleSoft<\/a>, which is owned by Salesforce and offers various connectors and accelerators that provide a jumpstart into your integration with various other external systems.<\/p>\n<p><span data-contrast=\"auto\">MuleSoft allows you to quickly create APIs that can get data from various systems and allows developers to create process orchestrations which can be very time-consuming and error-prone if done using custom code. MuleSoft is not free and has a license cost.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\">Final Thoughts<\/h2>\n<p><span data-contrast=\"auto\">There are lot<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\"> of options available for communication to and from Salesforce. Complex Salesforce org<\/span><span data-contrast=\"auto\">anizations should expect to use a <\/span><span data-contrast=\"auto\">combination of <\/span><span data-contrast=\"auto\">CRM<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">integration\u00a0<\/span><span data-contrast=\"auto\">tools and method<\/span><span data-contrast=\"auto\">s discussed above for an efficient and scalable integration solution.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salesforce provides\u00a0and accommodates\u00a0various options for integrating with other systems. We review the options, key considerations and limitations.<\/p>\n","protected":false},"author":331,"featured_media":32536,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_oasis_is_in_workflow":0,"_oasis_original":0,"_oasis_task_priority":"","_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","footnotes":""},"categories":[1],"tags":[18637],"coauthors":[22391],"class_list":["post-31791","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-salesforce","resource-categories-blogs","orbitmedia_post_topic-salesforce"],"acf":[],"publishpress_future_action":{"enabled":false,"date":"2025-03-27 02:51:01","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"category"},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/posts\/31791"}],"collection":[{"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/users\/331"}],"replies":[{"embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/comments?post=31791"}],"version-history":[{"count":0,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/posts\/31791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/media\/32536"}],"wp:attachment":[{"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/media?parent=31791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/categories?post=31791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/tags?post=31791"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/centricconsulting.com\/wp-json\/wp\/v2\/coauthors?post=31791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}