<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://sugarclub.sugarai.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension</link><pubDate>Tue, 18 Apr 2023 15:16:15 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Current Revision posted to Dev Tutorials by Rafael Fernandes on 4/18/2023 3:16:15 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;padding:5px;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now configure API platforms&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/10</link><pubDate>Fri, 05 Aug 2022 17:45:09 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Alex Nassi</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 10 posted to Dev Tutorials by Alex Nassi on 8/5/2022 5:45:09 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;padding:5px;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now configure API platforms&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/9</link><pubDate>Wed, 07 Jul 2021 20:00:19 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Matt Marum</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 9 posted to Dev Tutorials by Matt Marum on 7/7/2021 8:00:19 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;padding:5px;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/8</link><pubDate>Sun, 02 Aug 2020 06:50:17 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 8 posted to Dev Tutorials by Lauren Schaefer on 8/2/2020 6:50:17 AM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;padding:5px;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4454._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3250._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2311._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1106._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0336._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0675._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2476._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4186._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2425._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8863._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../1385._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/7</link><pubDate>Sat, 01 Aug 2020 13:54:21 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 7 posted to Dev Tutorials by Lauren Schaefer on 8/1/2020 1:54:21 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;padding:5px;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2705._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2705._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5684._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5684._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7838._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7838._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6445._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6445._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4606._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4606._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3757._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3757._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1374._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1374._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8713._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8713._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1778._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1778._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7673._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7673._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4477._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../4477._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/6</link><pubDate>Sat, 01 Aug 2020 13:48:36 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 6 posted to Dev Tutorials by Lauren Schaefer on 8/1/2020 1:48:36 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro" style="border:solid 1px;border-color:#cce1eb;color:#0f7198;"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2376._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2376._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5710._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5710._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8233._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8233._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8463._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8463._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8081._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8081._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7776._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7776._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1565._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1565._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8182._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8182._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2783._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2783._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3858._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3858._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0753._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../0753._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/5</link><pubDate>Sat, 01 Aug 2020 13:42:20 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 5 posted to Dev Tutorials by Lauren Schaefer on 8/1/2020 1:42:20 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3817._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3817._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1602._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1602._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6862._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6862._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0216._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0216._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2816._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2816._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4527._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4527._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1777._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1777._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6036._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6036._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8468._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8468._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8712._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8712._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1033._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../1033._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/4</link><pubDate>Sat, 01 Aug 2020 13:40:23 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 4 posted to Dev Tutorials by Lauren Schaefer on 8/1/2020 1:40:23 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5850._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5850._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4011._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4011._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6622._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6622._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5238._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5238._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8306._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8306._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7823._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/7823._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4251._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4251._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1680._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1680._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8037._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8037._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5722._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5722._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2072._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../2072._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/3</link><pubDate>Sat, 01 Aug 2020 13:37:21 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 3 posted to Dev Tutorials by Lauren Schaefer on 8/1/2020 1:37:21 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6242._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6242._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5047._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5047._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0640._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0640._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8345._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/8345._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3312._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3312._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2642._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2642._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1803._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/1803._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0508._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/0508._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2318._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2318._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5554._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5554._5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3750._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../3750._5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/2</link><pubDate>Fri, 31 Jul 2020 20:23:20 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 2 posted to Dev Tutorials by Lauren Schaefer on 7/31/2020 8:23:20 PM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://sugarclub.sugarcrm.com/dev-club/w/dev-tutorials/198/on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;&lt;img alt="Manage Environments" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;&lt;img alt="Custom Platform" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;&lt;img alt=" " src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;&lt;img alt="Request body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;&lt;img alt="Request tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;&lt;img alt="Response body" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;&lt;img alt="Response tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;&lt;img alt="platforms" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;&lt;img alt="Execute pack.php" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;&lt;img alt="Passing tests" src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../_5F00_Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item><item><title>Tutorial:  How to register custom platforms in Sugar instances via Platform extension</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension/revision/1</link><pubDate>Mon, 27 Jul 2020 10:25:52 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:8fe68fc6-a459-4ce9-9c19-1014395b3f7d</guid><dc:creator>Lauren Schaefer</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/196/tutorial-how-to-register-custom-platforms-in-sugar-instances-via-platform-extension#comments</comments><description>Revision 1 posted to Dev Tutorials by Lauren Schaefer on 7/27/2020 10:25:52 AM&lt;br /&gt;

&lt;div class="jive_macro_alert jive_text_macro"&gt;&lt;p&gt;In Sugar 8 / Spring &amp;#39;18, Sugar administrators can now &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Versions/8.0/Ent/Administration_Guide/Developer_Tools/index.html#Configure_API_Platforms" rel="nofollow" target="_blank"&gt;configure API platforms&lt;/a&gt;&amp;nbsp;using the Administration panel. The Platform extension is still available if you want to register a custom API platform as part of a Module Loadable Package.&lt;/p&gt;&lt;/div&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Beginning in the Winter &amp;lsquo;18 release, Sugar is enforcing a rule that all custom platforms must be registered in each Sugar instance where the custom platform is used. &amp;nbsp;In this tutorial, we&amp;rsquo;ll work step-by-step through the process of checking to see if your integration uses custom platforms, creating the fix, installing the fix, and testing the fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Before you begin, you&amp;rsquo;ll need a copy of Sugar. Check out the &lt;a href="https://community.sugarcrm.com/docs/DOC-4842-on-boarding-new-sugar-developers"&gt;On-Boarding new Sugar Developers&lt;/a&gt; guide if you are not sure where to go to get access to Sugar code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Next, you&amp;rsquo;ll need to &lt;/span&gt;&lt;a href="http://php.net/manual/en/install.php" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;install PHP&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; on your local machine if you haven&amp;rsquo;t already.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You&amp;rsquo;ll also need a local environment that can run Sugar so that you can test your fix. &amp;nbsp;The fastest and easiest way to get your environment setup is to &lt;/span&gt;&lt;a href="http://support.sugarcrm.com/Resources/Environments/Development_Environments/Vagrant_Development_Environment/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;use one of the Vagrant boxes we provide&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, you&amp;rsquo;ll want to set up Sugar. &amp;nbsp;Navigate to your running copy of Sugar (&lt;/span&gt;&lt;span style="font-size:11.5pt;color:#41b7d1;background-color:#ffffff;font-weight:400;text-decoration:underline;"&gt;http://localhost:8080/sugar/&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you are using one of our Vagrant boxes) and work through the installation wizard. &amp;nbsp;Note the username and password you select for the administrator. &amp;nbsp;Also, &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;be sure to select the option to install the demo data&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; as we will use it when we test our fix.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Identify your custom platforms&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The first thing we need to do is identify the custom platform(s) your integration uses. &amp;nbsp;Some of you may already know what your custom platforms are. &amp;nbsp;If not, you&amp;rsquo;ll need to inspect your integration code and look for REST API calls that authenticate to Sugar. &amp;nbsp;They will look something like the following:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="language-none line-numbers"&gt;&lt;code&gt;POST /rest/v10/oauth2/token&lt;br /&gt;{&lt;br /&gt; &amp;nbsp;&amp;quot;grant_type&amp;quot;:&amp;quot;password&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_id&amp;quot;:&amp;quot;sugar&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;client_secret&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;username&amp;quot;:&amp;quot;{{username}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;password&amp;quot;:&amp;quot;{{password}}&amp;quot;,&lt;br /&gt; &amp;nbsp;&amp;quot;platform&amp;quot;:&amp;quot;&amp;lt;SOME VALUE&amp;gt;&amp;quot;&lt;br /&gt;}&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The value associated with &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; is what we need to identify. In the Winter &amp;lsquo;18 release, any value other than &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;base&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;mobile&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;portal&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;opi&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, or &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;lpi&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;is a custom platform. If &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;does not appear in your request, then the good news is that you are not using a custom platform and you do not need to create a fix. &amp;nbsp;It&amp;rsquo;s possible that your integration uses more than one custom platform, so be sure to check all of your authentication calls.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test your custom platform in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;One of my favorite ways to test REST API calls is to use Postman, so that&amp;rsquo;s what we&amp;rsquo;ll do here. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;A Postman Collection is a set of REST API calls and their associated headers, bodies, pre-request scripts, and tests. &amp;nbsp;I&amp;rsquo;ve created a Postman Collection you can use to test your fix. &amp;nbsp;The following steps will walk you through how to use this Postman Collection.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;a href="https://www.getpostman.com/" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;Download and install Postman&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; if you have not previously installed it on your machine.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Download the &lt;a href="https://community.sugarcrm.com/servlet/JiveServlet/download/5875-4-14294/Custom+platform+API+calls+original.postman_collection.json.zip"&gt;Custom Platform Postman Collection&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of Postman, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Import the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform Postman Collection&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you downloaded in step 2.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the left pane, ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab is selected instead of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Postman Environments allow you to store variables that can be used throughout your tests. &amp;nbsp;Create a new Postman Environment by clicking the gear icon toward the upper-right of the Postman app and then selecting &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/7b510f74_2D00_7e9b_2D00_49dc_2D00_83b6_2D00_106970b579c2-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_9.57.36_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+9.57.36+AM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Name your new environment &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;Custom Platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Add the following key-value pairs, substituting the appropriate values for your Sugar instance:&lt;/span&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;url&lt;/span&gt;: the url of your Sugar instance (for example, &lt;/span&gt;&lt;a href="/external-link.jspa?url=http://localhost:8080/sugar" rel="nofollow" target="_blank"&gt;http://localhost:8080/sugar&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;platform&lt;/span&gt;: the custom platform id you identified in the previous section&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;rest_endpoint&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;/rest/v11&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;username&lt;/span&gt;: the username associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;password&lt;/span&gt;: &amp;nbsp;the password associated with your Sugar administrator&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Add&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Close the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Manage Environments&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Ensure the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; environment is selected.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/9e277ae6_2D00_d7b0_2D00_4b63_2D00_ac95_2D00_5a61155fba8e-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.00.57_2B00_AM.png"&gt;Screen+Shot+2018-01-18+at+8.00.57+AM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Inside of the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; collection, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;1. Authenticate&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/cb08b57b_2D00_8a21_2D00_421a_2D00_9799_2D00_4a073a0300c6-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.03.29_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.03.29+AM.png&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can explore the API call in the right pane. &amp;nbsp;You can click on the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab to see that this API call authenticates to your Sugar instance using the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;username&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;password&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;, and &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; you stored in your Postman Environment. &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/b8eac33f_2D00_14a2_2D00_4954_2D00_bf5d_2D00_3703fe434591-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.06.05_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.06.05+AM.png&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;You can click on the Tests tab to see that the call runs two tests after it receives the response. &amp;nbsp;First, it checks that the response code is 200. &amp;nbsp;Second, it checks the access token is returned as part of the response. &amp;nbsp;The test code also stores the access token in the Postman Environment so that subsequent API calls will be able to use it.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/0605dea2_2D00_4310_2D00_4eb5_2D00_8c48_2D00_4d7ac0835be7-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.16.46_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.16.46+AM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Send&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to execute the request.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Scroll the right pane to see the results. &amp;nbsp;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; tab of the response, a message informing you an invalid platform was specified will be displayed.&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/f928096f_2D00_f00c_2D00_44fb_2D00_b370_2D00_c4a9293be7af-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.17.40_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.17.40+AM.png&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the Test Results tab, two tests will be listed as failing.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/f7ee4b76_2D00_6a49_2D00_4850_2D00_92bc_2D00_d5210d96612b-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.18.46_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.18.46+AM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;At this point, the API call is failing because we have specified a custom platform that is not registered in our local Sugar instance. &amp;nbsp;The API call did not return an access token since our custom platform was invalid. &amp;nbsp;The remaining API calls in the collection require the access token we would have gotten from a successful Authenticate API call, so we will not execute those at this time.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Let&amp;rsquo;s create the fix! &amp;nbsp;We will create a module loadable package that registers one or more custom platforms. &amp;nbsp;Users of your Sugar integration will be able to install this module loadable package in their Sugar instances.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;We will create the module loadable package from existing sample code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Clone or download the 2017 branch of the UnCon GitHub repository: &amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/sugarcrm/uncon/tree/2017" rel="nofollow" style="text-decoration:none;" target="_blank"&gt;&lt;span style="font-size:11pt;color:#1155cc;background-color:transparent;font-weight:400;text-decoration:underline;"&gt;https://github.com/sugarcrm/uncon/tree/2017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Modify the contents of the file to include a line like &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$platforms[] = &amp;#39;my-custom-platform&amp;#39;;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; for every custom platform your integration uses.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/1c73f6f5_2D00_a92c_2D00_489e_2D00_a608_2D00_bc008b02e554-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_10.33.47_2B00_AM.png"&gt;Screen+Shot+2018-01-17+at+10.33.47+AM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Rename &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/src/custom/Extension/application/Ext/Platforms/rename-this-file.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to something else like your integration&amp;rsquo;s name.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your local copy of the code, open &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/pack.php&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; in an editor.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 6, update the value of &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageID&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be part of the name of the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Around line 7, update &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to reflect your integration&amp;rsquo;s name. &amp;nbsp;The &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;$packageLabel&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; will be displayed in the Administrator&amp;rsquo;s UI when he or she installs the module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Save your changes.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In a shell, navigate to the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Create the module loadable package by executing the pack.php script with the version number. &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/30286613_2D00_1744_2D00_4e5e_2D00_afef_2D00_1dc273bc6fe3-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_18_2B00_at_2B00_8.05.58_2B00_AM.png"&gt;Screen+Shot+2018-01-18+at+8.05.58+AM.png&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;The module loadable package will be created.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Install the fix&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you&amp;rsquo;ve generated the module loadable package, it&amp;rsquo;s time to install it!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In your browser, navigate to your local Sugar instance.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Login as an administrator. &amp;nbsp;You may be prompted to create a user profile if this is the first time you&amp;rsquo;ve logged in with this account.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-right corner, click the down arrow beside your profile picture and select &lt;strong&gt;Administration&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; section, upload the module loadable package you created in the previous section. &amp;nbsp;The module will be located in the &lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier, monospace;"&gt;custom-platform/releases&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; directory.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; button on the &lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;row for your module loadable package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; to install the package.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;When the package has finished installing, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Back to Module Loader&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;Your package&lt;/span&gt; &lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;will be listed as installed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Test the fix in Postman&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Now that you have registered your custom platform(s) using the module loadable package you created, it&amp;rsquo;s time to run our tests again in Postman. &amp;nbsp;This time, however, they will pass!&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Open &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Postman&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the upper-left corner, click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;The &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Collection Runner&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; opens.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Choose a collection or folder&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In the &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; selection box, select &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Custom Platform&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Click &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;Run Custom Platform API calls&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;. &amp;nbsp;All six of the API calls and their associated tests will be executed. &amp;nbsp;The API calls authenticate using the custom platform you included as part of your Postman Environment and work through the CRUD (create, read, update, and delete) operations for the Contacts module.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If everything works, you will see 15 tests passed and 0 tests failed.&lt;br /&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/7adfc936_2D00_0e23_2D00_40a9_2D00_bc55_2D00_551ac6c9a821-3525-complete/Screen_2B00_Shot_2B00_2018_2D00_01_2D00_17_2B00_at_2B00_4.39.48_2B00_PM.png"&gt;Screen+Shot+2018-01-17+at+4.39.48+PM.png&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;If you have more than one custom platform, repeat steps 1-6 above for each, being sure to update the custom platform stored in your Postman Environment before kicking off the Collection Runner.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-top:18pt;margin-bottom:6pt;"&gt;&lt;span style="font-size:16pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Summary&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Congratulations! &amp;nbsp;You&amp;rsquo;ve successfully created a module loadable package that registers your custom platform(s) in Sugar instances. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;In this tutorial, you tested your custom platform using Postman. &amp;nbsp;We recommend taking a few minutes to test your custom platform using your Sugar integration as well. &amp;nbsp;You&amp;rsquo;ll want to feel confident that you have successfully identified every custom platform your integration uses and that you haven&amp;rsquo;t accidentally made a typo with the custom platform name in your module loadable package.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt;Finally, don&amp;rsquo;t forget to give your module loadable package to anyone who uses your integration! &amp;nbsp;The package needs to be installed on &lt;/span&gt;&lt;span style="background-color:transparent;color:#000000;text-decoration:none;font-size:11pt;"&gt;&lt;strong&gt;every&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:#000000;background-color:transparent;font-weight:400;text-decoration:none;"&gt; Sugar instance with which your integration interacts.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/Custom-platform-API-calls-original.postman_5F00_collection.json.zip"&gt;sugarclub.sugarai.com/.../Custom-platform-API-calls-original.postman_5F00_collection.json.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: api&lt;/div&gt;
</description></item></channel></rss>