{"id":3498,"date":"2022-07-13T10:18:18","date_gmt":"2022-07-13T10:18:18","guid":{"rendered":"https:\/\/poiseddevelopers.com\/reality-tech\/?post_type=case-study&#038;p=3498"},"modified":"2024-05-13T10:09:50","modified_gmt":"2024-05-13T10:09:50","slug":"integrate-salesforce-with-sharepoint-2","status":"publish","type":"case-study","link":"https:\/\/poiseddevelopers.com\/reality-tech\/case-study\/integrate-salesforce-with-sharepoint-2\/","title":{"rendered":"Integrate Salesforce with SharePoint"},"content":{"rendered":"<h3 class=\"elementor-heading-title elementor-size-medium\">Summary<\/h3>\n<p>We recently solved a problem for one of our clients who wanted to have Salesforce objects available in SharePoint as well as able to tag them; that is, to have master metadata from Salesforce available in SharePoint.<\/p>\n<h3>Problem<\/h3>\n<p>The Client had two Objects (Clients, Projects\/Investments) in Salesforce that they wanted to use as a Library and Document Set in SharePoint, respectively. They also wanted to have the metadata flow from Salesforce to SharePoint for tagging and search.<\/p>\n<h3>Resolution<\/h3>\n<p>As we well know, SharePoint is a remarkable document management tool. The Client wanted to use it as a Document Management System to store, manage, and auto-tag the documents when they were placed inside the Document Set and Library.<\/p>\n<p>There were two Objects that needed to be replicated from Salesforce, which were Clients and Projects to SharePoint as Library and Document Set, respectively.<\/p>\n<p>The Client had Projects defined with different metadata that they wanted to use to tag documents when uploaded in SharePoint.<\/p>\n<p>As part of the solution, we created a Power Automate\/Microsoft Flow where the trigger was from Salesforce, which is \u201cWhen a record is modified,\u201d which would capture any changes made in Salesforce.<\/p>\n<p>The Salesforce connector is a premium connector, which means we would have an account that would work and has permission in Salesforce and SharePoint as well.<\/p>\n<p>To implement this, one needs to sign in to create the connection,<\/p>\n<section class=\"elementor-section elementor-top-section elementor-element elementor-element-43044d8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"43044d8\" data-element_type=\"section\">\n<div class=\"elementor-container elementor-column-gap-default\">\n<div class=\"elementor-row\">\n<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-765c359\" data-id=\"765c359\" data-element_type=\"column\">\n<div class=\"elementor-column-wrap elementor-element-populated\">\n<div class=\"elementor-widget-wrap\">\n<div class=\"elementor-element elementor-element-bc00ab3 elementor-widget elementor-widget-image\" data-id=\"bc00ab3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n<div><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2383 size-full alignleft\" src=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture1-2-1.webp\" alt=\"img\" width=\"606\" height=\"335\" srcset=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture1-2-1.webp 606w, https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture1-2-1-300x166.webp 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>\n<p><span data-contrast=\"auto\">Also, you can create connections and share with other users in case you don\u2019t want to share the credentials. In our case, the connection was created and shared with us by the Client.\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Once the connection is established, we need to select the Object type.<\/span><\/p>\n<p><span data-contrast=\"auto\">We created two Flows, one for the Issuer (each being a partner company or \u201cClient,\u201d as we refer to it below) and another for Projects.\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">For a new Client<\/span><\/b><span data-contrast=\"auto\">, we are creating a Library in a SharePoint site. So, for each new Client created in Salesforce, a library is created in SharePoint.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-3499 size-full\" src=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/05\/Picture2-3.webp\" alt=\"When a Record is Modified Option\" width=\"762\" height=\"190\" srcset=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/05\/Picture2-3.webp 762w, https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/05\/Picture2-3-300x75.webp 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">After the trigger, we are processing the metadata related to clients in variables.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is how we created the library from Flow,\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2385 size-full\" src=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture3-3.webp\" alt=\"img\" width=\"610\" height=\"486\" srcset=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture3-3.webp 610w, https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture3-3-300x239.webp 300w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><\/p>\n<p><span class=\"TextRun SCXW249196794 BCX0\" lang=\"EN-IN\" xml:lang=\"EN-IN\" data-contrast=\"auto\" data-uw-rm-lang=\"false\"><span class=\"NormalTextRun SCXW249196794 BCX0\">After adding the\u00a0<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">library<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">, we are also adding the\u00a0<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">C<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">ontent-<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">T<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">ype<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">\u00a0(document set)<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">\u00a0and columns from\u00a0<\/span><span class=\"NormalTextRun SCXW249196794 BCX0\">the flow as well.\u00a0<\/span><\/span><span class=\"EOP SCXW249196794 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2386 size-full\" src=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture4-2-1.webp\" alt=\"img\" width=\"607\" height=\"362\" srcset=\"https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture4-2-1.webp 607w, https:\/\/poiseddevelopers.com\/reality-tech\/wp-content\/uploads\/2024\/03\/Picture4-2-1-300x179.webp 300w\" sizes=\"auto, (max-width: 607px) 100vw, 607px\" \/><\/p>\n<div class=\"elementor-text-editor elementor-clearfix\">\n<p><span data-contrast=\"auto\">Along with creating a library, we are also storing the client\u2019s unique ID from Salesforce and the library\u2019s GUID in a Central Client list. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">When an update is made on the Client<\/span><\/b><span data-contrast=\"auto\">, to manage the updates, we created a Central Client List in the same SharePoint site where we were storing the unique ID of the client from Salesforce and the Library\u2019s GUID, so when an update is made, we can easily get the mapping by filtering the ID from Salesforce and make changes. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">When an update is made on a client, we check the ID of the client from Salesforce against the IDs stored in List and, get the relevant Library\u2019s GUID, and make the changes.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">For a new Project<\/span><\/b><span data-contrast=\"auto\">, we are creating a Document Set in the relevant library (Client) in the SharePoint site. So, for each new project created in Salesforce, a document set is created in the relevant SharePoint library.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For a Document Set, we created a Content-Type and made sure the columns are shared so that when documents are uploaded in the document set, the properties are shared from their parent. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">After creating the Document Set, we made sure to update the properties of the same with corresponding metadata flowing from Salesforce, such as Status, Initiation Date, Country of the client, and other metadata.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">So as and when documents are uploaded in the Document Set, the properties get shared, and the users can search documents using the metadata we configured in a custom SharePoint search site.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">After the Document Set is created, we are storing the Salesforce derived metadata in a Central Project List along with client\u2019s unique Salesforce ID, project\u2019s unique Salesforce ID, Library\u2019s GUID from Central Client List and the document set\u2019s item ID.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">When an update is made in Project,<\/span><\/b><span data-contrast=\"auto\">\u00a0to manage the updates we created a Central Project List in the SharePoint site where we were storing the unique ID of Project from Salesforce and the Document set\u2019s item ID as well as the salesforce ID of client where project is created, so when an update is made, we can easily get the mapping by filtering the ID from Salesforce and make changes.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For updating the Document Set, we are also checking the metadata that flows with it, if the change is made in them, they are updated as well.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The overall goal was to sync Salesforce and SharePoint using a mechanism that would make it easy to check if there were any errors or issues. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:284,&quot;335559737&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<\/div>\n<h3>Summary<\/h3>\n<p>As we know SharePoint is a remarkable document management tool, they wanted to make the best use of the metadata being flowed from Salesforce to SharePoint to tag documents which can be easily used for the reporting purposes.<\/p>\n<p>In short, you can keep Salesforce as a source reference master data repository, knowing when you create objects and metadata, they can be replicated into SharePoint, with SharePoint as a document management system fully in sync in real-time from Salesforce.<\/p>\n<p>Please post your question if you will find it while implementing this process. Thank you.<\/p>\n","protected":false},"featured_media":3460,"comment_status":"open","ping_status":"closed","template":"","categories":[19,20,14],"class_list":["post-3498","case-study","type-case-study","status-publish","has-post-thumbnail","hentry","category-power-automate","category-power-bi","category-sharepoint-development-solutions"],"acf":[],"_links":{"self":[{"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/case-study\/3498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/case-study"}],"about":[{"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/types\/case-study"}],"replies":[{"embeddable":true,"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/comments?post=3498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/media\/3460"}],"wp:attachment":[{"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/media?parent=3498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/poiseddevelopers.com\/reality-tech\/wp-json\/wp\/v2\/categories?post=3498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}