<?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>Sugar 12.1 (Q3 2022) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/697/sugar-12-1-q3-2022-customization-guide</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Sugar 12.1 (Q3 2022) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/697/sugar-12-1-q3-2022-customization-guide</link><pubDate>Mon, 10 Jul 2023 12:54:29 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:d2a46e9a-152a-4eb1-beed-b23175fc55ee</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/697/sugar-12-1-q3-2022-customization-guide#comments</comments><description>Current Revision posted to Dev Tutorials by Rafael Fernandes on 7/10/2023 12:54:29 PM&lt;br /&gt;
&lt;p&gt;The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 12.1 (Q3&amp;nbsp;2022) release. This guide focuses on changes in Sugar 12.1 (Q3 2022) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.&lt;/p&gt;
&lt;p&gt;Please check out the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/m/event-recaps/2119"&gt;Q3 2022 Developer Webinar recording&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more developer highlights.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;For Admin and End User release notes, please visit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://support.sugarcrm.com/SmartLinks/Release_Notes/12.1.0_Release_Notes/"&gt;Sugar 12.1.0 Release Notes&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1ff80k9i20"&gt;User Experience Updates&lt;/h1&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Reports Viewer Facelift&lt;/h3&gt;
&lt;p&gt;This release brings a long waited facelift in Sugar&amp;#39;s Report Viewer. This is our first step on moving away from BWC to a much more modern UI&amp;nbsp;built with Sidecar by using commonly available components.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We created a new collapsable/minimizeable&amp;nbsp;layout that contains:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Datatable for Rows and columns&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Datatable&amp;nbsp;for&amp;nbsp;&amp;quot;Summation&amp;quot; with and without details&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Datatable for&amp;nbsp;Matrix reports&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Filter Container View&lt;/li&gt;
&lt;li&gt;Runtime filtering&lt;/li&gt;
&lt;li&gt;Report Chart Container&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order to improve speed, quality and compatibility,&amp;nbsp;a few updates were added to the SugarWidgetFields. All the changes are the backward compatible. We&amp;#39;ve also&amp;nbsp;r&lt;span&gt;eplaced all links that were previously pointing to&amp;nbsp;BWC Report record to a sidecar route.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Forecast Worksheet Improvements&lt;/h3&gt;
&lt;p&gt;This release brings our continued efforts improving our Forecast Worksheet. It contains lots of UX and usability enhancements as well as new features as described below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opps LV filtering&lt;/strong&gt;: ilters created and saved in regular Opps List View show up in the Forecast module Opps List View and vice versa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opp Review Tab- Show current Opps not old RLIs&lt;/strong&gt;:&amp;nbsp;The Forecasting worksheet now displays Opportunities instead of RLIs for both, managers and sellers.&lt;/li&gt;
&lt;li&gt;Moved &amp;quot;Settings&amp;quot; to Forecast Megamenu&lt;/li&gt;
&lt;li&gt;Removed Worksheet Columns from Forecast Settings in Studio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forecast Worksheet is sticky&lt;/strong&gt;:&amp;nbsp;&lt;span&gt;person/team picker, time picker, each of the tabs (Opps vs Commitment), Opp review filter, and metric boxes.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Quick filter boxes will display a loader until all data has been fetched&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;strong&gt;Separating Opps from Commitments&lt;/strong&gt;:Opportunities and Commitments into two tabs called &amp;quot;Opportunity Review&amp;quot; and &amp;quot;Commitment&amp;quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implement frontend forecast metrics boxes&lt;/strong&gt;:&amp;nbsp;&lt;span&gt;We added 7 metric boxes: Forecast, Included Pipeline, Upside Pipeline, Excluded Pipeline, Won, Lost, and All.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Display Commitment and Quota at the top of the Forecasting Worksheet&lt;/li&gt;
&lt;li&gt;Predicted Period-end Revenue (For Sell Premier only)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1g5m8lc4s0"&gt;Update how datapoint values are loaded for seller worksheets&lt;/h3&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The seller worksheet (ForecastWorksheets &lt;code class="code css-9z42f9"&gt;list&lt;/code&gt; layout) is no longer a component of the commitment tab&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each datapoint in the Commitment tab (Likely/Best/Worst) should have its Opportunity Forecast value loaded as:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The sum of the Opportunities &lt;code class="code css-9z42f9"&gt;Forecasted Likely&lt;/code&gt; , &lt;code class="code css-9z42f9"&gt;Best&lt;/code&gt;, or &lt;code class="code css-9z42f9"&gt;Worst&lt;/code&gt; field where:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Forecast Stage&lt;/code&gt; is classified as Include&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Expected Close Date&lt;/code&gt; is within the current Forecast time period being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Assigned User&lt;/code&gt; is the current Forecast user being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If Revenue Line Items are enabled, each datapoint in the Commitment tab (Likely/Best/Worst) should have its Revenue Line Item Forecast value loaded as:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The sum of the Revenue Line Items &lt;code class="code css-9z42f9"&gt;Likely&lt;/code&gt;, &lt;code class="code css-9z42f9"&gt;Best&lt;/code&gt;, or &lt;code class="code css-9z42f9"&gt;Worst&lt;/code&gt; field where:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Forecast Stage&lt;/code&gt; is classified as &lt;code class="code css-9z42f9"&gt;Include&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Expected Close Date&lt;/code&gt; is within the current Forecast time period being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Assigned User&lt;/code&gt; is the current Forecast user being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; value of the datapoint should be loaded in the following way:&lt;/p&gt;
&lt;ul class="ak-ul"&gt;
&lt;li&gt;
&lt;p&gt;If there is a previous commitment, initialize &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; to the previously committed value for the datapoint&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If there is no previous commitment, initialize &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; to the result for &lt;code class="code css-9z42f9"&gt;Opportunity Forecast&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;[UI] Replace &amp;#39;Hint&amp;#39; with &amp;#39;Sugar Hint&amp;#39; throughout the UI&lt;/h3&gt;
&lt;p&gt;We have also replaced all mentions of &amp;quot;Hint&amp;quot;&amp;nbsp;throughout the entire Sugar application with &amp;quot;Sugar Hint&amp;quot;. Previous &amp;quot;Hint&amp;quot; logos will also be replaced by the new string &amp;quot;Sugar Hint&amp;quot;.&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Improve view panel for long emails in sidecar interface&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;The emails Record View dashlet will now show the entire email content instead of truncating it and users having to manually expand the dashlet to view long emails.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span class="TextRun SCXW266723974 BCX0" lang="EN"&gt;&lt;span class="NormalTextRun SCXW266723974 BCX0"&gt;Prior to 12.1, when viewing a long Email Record from a Focus drawer, users had to either resize the Record View dashlet or scroll in order to see the entire content.&amp;nbsp; We have expanded the Record View dashlet so users are able to see the entire email as seen below.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP SCXW266723974 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Advanced Forecasting in Dark Mode (For Sell Premier only)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sell Premier users will now be able to see their &amp;ldquo;Discover&amp;rdquo; Dashlets in Dark Mode. .&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Sugar REST API updates&lt;/h3&gt;
&lt;p&gt;This Sugar release introduces REST v11_17.&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1ftl03hrg6"&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;Supported Platforms Update&lt;/h2&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;DocMerge Deployed on Supported Regions&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;DocMerge services have been deployed on EU, APAC and CAC regions for better performance and compliance.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;Configurability&amp;nbsp;updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Sugar Config Settings&lt;/h3&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Setting Name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Override Example&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;email_recipient_chunk_size&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;10&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code class=" language-php"&gt;&lt;code class=" language-php"&gt;&lt;span class="token variable"&gt;$sugar_config&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;&lt;span class="token single-quoted-string string"&gt;&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;code class=" language-php"&gt;&lt;span class="token single-quoted-string string"&gt;&lt;span&gt;email_recipient_chunk_size&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&amp;#39;&lt;span class="token punctuation"&gt;] =&amp;nbsp;10&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines maximum number of addresses in email&amp;#39;s To: field.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;true&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code class=" language-php"&gt;&lt;code class=" language-php"&gt;&lt;span class="token variable"&gt;$sugar_config&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;&lt;span class="token single-quoted-string string"&gt;&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;code class=" language-php"&gt;&lt;span class="token single-quoted-string string"&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class="token punctuation"&gt;] = false&lt;/span&gt;&lt;span class="token variable"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;​Disable MLP uninstall when an error happens.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cache.disable_gz&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;false&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span&gt;$sugar_config['cache']['disable_gz'] = true;&lt;/span&gt;&lt;span class="token variable"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;This will modify Sugar&amp;#39;s caching behavior to disable compression of the cached data.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;cache.gz_level&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;9&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span&gt;$sugar_config['cache']['gz_level'] = 2;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines the &lt;a href="https://www.php.net/manual/en/function.gzcompress.php"&gt;SugarCache compression level&lt;/a&gt;, which is not applicable without cache.multi_tenant.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;moduleInstaller.enableEnhancedModuleChecks&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span class="token punctuation"&gt;$sugar_config['moduleInstaller']['enableEnhancedModuleChecks'] = false&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines whether the curl_*, socket_*, and stream_* functions should be allowed in MLPs.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;security.private_ips&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;[ '10.0.0.0|10.255.255.255', '172.16.0.0|172.31.255.255', '192.168.0.0|192.168.255.255', '169.254.0.0|169.254.255.255', '127.0.0.0|127.255.255.255', ]&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span&gt;$sugar_config['security']['private_ips'] = [ '127.0.0.0|127.255.255.255', '8.8.8.0|8.8.8.8', ]; &lt;/span&gt;&lt;/code&gt;&lt;span class="token punctuation"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines a range of IPs considered to be private. Such IPs and corresponding domains are not reachable via ExternalResourceClient&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="mcetoc_1f77psegvb"&gt;Removed Features&lt;/h2&gt;
&lt;h3 id="mcetoc_1g4djj0su0"&gt;&lt;span&gt;Removed Roles module from Sugar&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We have removed Roles module from Sugar in this release. As per our research this is an old module and is no longer in use.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g4djj0su1"&gt;&lt;span&gt;Removed Assignment notification email template&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Before 10.1 users were able to use different templates for each module after changes from 10.1 went into effect, all modules started using a one-size-fits-all template, which made it hard to pull relevant information for each module. This works for most modules, but not for the Assignment template. In this ticket, we are undoing the work done in 10.1 for the Assignment template only. Users are going to be able to pull relevant info from Assignment template now.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g4djj0su2"&gt;&lt;span&gt;Removed&amp;nbsp;Inline Edit in reports&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We have removed inline edit in reports that has been deprecated in previous releases.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;&lt;span&gt;&lt;/span&gt;Data Changes&lt;/h3&gt;
&lt;h3 id="mcetoc_1g5m8lc4s1"&gt;Add new &amp;quot;Lost&amp;quot; calculated field to Opportunities&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Created a &amp;quot;Lost&amp;quot; read-only calculated field in Opps only (not RLIs) that adds the Likely amount of RLIs that have a Sales Stage = Closed Lost. Users will be able to filter and report on the new field. Field will be available on instances using Opps+ RLIs only.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Lost field was added by default in different sugar layouts. Worst and Best will no longer be displayed be default.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegvd"&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Platform Updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Introduce safe replacement for curl in MLPs&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;As part of our ongoing efforts to improve the reliability and security of Sugar, we are introducing a replacement for CURL in MLPs. Sugar now provides a safe way to communicate to external APIs, it should prevent SSRF (Server-side request forgery) attacks on local endpoints and be not vulnerable to DNS rebinding attacks.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;This new client has been design to be as secure&amp;nbsp;and&amp;nbsp;simple to use as possible, see below:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;pre class="ui-code" data-mode="php"&gt;&amp;lt;?php
require vendor/autoload.php;
use Sugarcrm\Sugarcrm\Security\HttpClient\ExternalResourceClient;

// Set timeout to 3 seconds and 4 max redirects
$client = new ExternalResourceClient(3, 4);

// Send GET request
echo $client-&amp;gt;get(&amp;#39;https://httpbin.org/get&amp;#39;);

// Send POST
echo $client-&amp;gt;post(&amp;#39;https://httpbin.org/post&amp;#39;, http_build_query([&amp;#39;foo&amp;#39; =&amp;gt; &amp;#39;bar&amp;#39;]));&lt;/pre&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;When&amp;nbsp;creating a new instance of this client you can specify the timeout as well as the max redirects it show follow.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s highly recommended to use HTTPS for all requests when using this client, however, HTTP (non-secure) will be allowed, even though is not recommended.&lt;/p&gt;
&lt;p&gt;This client &lt;span style="font-size:inherit;"&gt; does not support requests to IP addresses. It only supports URL domains/hostnames.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To prevent SSRF in local networks, it reads IP ranges from the&amp;nbsp;Sugar Config (&lt;code&gt;&lt;span&gt;$sugar_config['security']['private_ips&amp;rsquo;]&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;If you have &lt;a href="https://support.sugarcrm.com/SmartLinks/Administration_Guide/System/#Proxy_Settings"&gt;proxy enabled&lt;/a&gt;, this client&amp;nbsp;recognizes it and will use it before making the call.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;It is important to notice that all CURL/Stream/Socket functions have been added to the &amp;quot;Blocked/Restricted&amp;quot; list and will prevent upgrades and/or installs of MLPs (Module Loadable Package) in future releases (see deprecation section).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;pre class="ui-code" data-mode="text"&gt;// curl
&amp;#39;curl_copy_handle&amp;#39;,
&amp;#39;curl_exec&amp;#39;,
&amp;#39;curl_file_create&amp;#39;,
&amp;#39;curl_init&amp;#39;,
&amp;#39;curl_multi_add_handle&amp;#39;,
&amp;#39;curl_multi_exec&amp;#39;,
&amp;#39;curl_multi_getcontent&amp;#39;,
&amp;#39;curl_multi_info_read&amp;#39;,
&amp;#39;curl_multi_init&amp;#39;,
&amp;#39;curl_multi_remove_handle&amp;#39;,
&amp;#39;curl_multi_select&amp;#39;,
&amp;#39;curl_multi_setopt&amp;#39;,
&amp;#39;curl_setopt_array&amp;#39;,
&amp;#39;curl_setopt&amp;#39;,
&amp;#39;curl_share_init&amp;#39;,
&amp;#39;curl_share_setopt&amp;#39;,
&amp;#39;curl_share_strerror&amp;#39;,

//sockets
&amp;#39;socket_accept&amp;#39;,
&amp;#39;socket_addrinfo_bind&amp;#39;,
&amp;#39;socket_addrinfo_connect&amp;#39;,
&amp;#39;socket_addrinfo_explain&amp;#39;,
&amp;#39;socket_addrinfo_lookup&amp;#39;,
&amp;#39;socket_bind&amp;#39;,
&amp;#39;socket_clear_error&amp;#39;,
&amp;#39;socket_close&amp;#39;,
&amp;#39;socket_cmsg_space&amp;#39;,
&amp;#39;socket_connect&amp;#39;,
&amp;#39;socket_create_listen&amp;#39;,
&amp;#39;socket_create_pair&amp;#39;,
&amp;#39;socket_create&amp;#39;,
&amp;#39;socket_export_stream&amp;#39;,
&amp;#39;socket_get_option&amp;#39;,
&amp;#39;socket_getopt&amp;#39;,
&amp;#39;socket_getpeername&amp;#39;,
&amp;#39;socket_getsockname&amp;#39;,
&amp;#39;socket_import_stream&amp;#39;,
&amp;#39;socket_last_error&amp;#39;,
&amp;#39;socket_listen&amp;#39;,
&amp;#39;socket_read&amp;#39;,
&amp;#39;socket_recv&amp;#39;,
&amp;#39;socket_recvfrom&amp;#39;,
&amp;#39;socket_recvmsg&amp;#39;,
&amp;#39;socket_select&amp;#39;,
&amp;#39;socket_send&amp;#39;,
&amp;#39;socket_sendmsg&amp;#39;,
&amp;#39;socket_sendto&amp;#39;,
&amp;#39;socket_set_block&amp;#39;,
&amp;#39;socket_set_nonblock&amp;#39;,
&amp;#39;socket_set_option&amp;#39;,
&amp;#39;socket_setopt&amp;#39;,
&amp;#39;socket_shutdown&amp;#39;,
&amp;#39;socket_write&amp;#39;,
&amp;#39;fsockopen&amp;#39;,

// streams
&amp;#39;stream_bucket_append&amp;#39;,
&amp;#39;stream_bucket_make_writeable&amp;#39;,
&amp;#39;stream_bucket_new&amp;#39;,
&amp;#39;stream_bucket_prepend&amp;#39;,
&amp;#39;stream_context_create&amp;#39;,
&amp;#39;stream_context_get_default&amp;#39;,
&amp;#39;stream_context_get_options&amp;#39;,
&amp;#39;stream_context_get_params&amp;#39;,
&amp;#39;stream_context_set_default&amp;#39;,
&amp;#39;stream_context_set_option&amp;#39;,
&amp;#39;stream_context_set_params&amp;#39;,
&amp;#39;stream_copy_to_stream&amp;#39;,
&amp;#39;stream_filter_append&amp;#39;,
&amp;#39;stream_filter_prepend&amp;#39;,
&amp;#39;stream_filter_register&amp;#39;,
&amp;#39;stream_filter_remove&amp;#39;,
&amp;#39;stream_get_contents&amp;#39;,
&amp;#39;stream_get_filters&amp;#39;,
&amp;#39;stream_get_line&amp;#39;,
&amp;#39;stream_get_meta_data&amp;#39;,
&amp;#39;stream_get_transports&amp;#39;,
&amp;#39;stream_get_wrappers&amp;#39;,
&amp;#39;stream_is_local&amp;#39;,
&amp;#39;stream_isatty&amp;#39;,
&amp;#39;stream_notification_callback&amp;#39;,
&amp;#39;stream_register_wrapper&amp;#39;,
&amp;#39;stream_resolve_include_path&amp;#39;,
&amp;#39;stream_select&amp;#39;,
&amp;#39;stream_set_blocking&amp;#39;,
&amp;#39;stream_set_chunk_size&amp;#39;,
&amp;#39;stream_set_read_buffer&amp;#39;,
&amp;#39;stream_set_timeout&amp;#39;,
&amp;#39;stream_set_write_buffer&amp;#39;,
&amp;#39;stream_socket_accept&amp;#39;,
&amp;#39;stream_socket_client&amp;#39;,
&amp;#39;stream_socket_enable_crypto&amp;#39;,
&amp;#39;stream_socket_get_name&amp;#39;,
&amp;#39;stream_socket_pair&amp;#39;,
&amp;#39;stream_socket_recvfrom&amp;#39;,
&amp;#39;stream_socket_sendto&amp;#39;,
&amp;#39;stream_socket_server&amp;#39;,
&amp;#39;stream_socket_shutdown&amp;#39;,
&amp;#39;stream_supports_lock&amp;#39;,
&amp;#39;stream_wrapper_register&amp;#39;,
&amp;#39;stream_wrapper_restore&amp;#39;,
&amp;#39;stream_wrapper_unregister&amp;#39;,&lt;/pre&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Any MLP/Customization that contains any of the blocked/restricted functions will continue to work unless it&amp;nbsp;requires updates. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;New installs, updates or upgrades that go through Package Scanner will be enforced.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Improved&amp;nbsp;SugarIcons&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;We have added few more icons&amp;nbsp; based on feedback we received from previous versions. New Icons are:&lt;/span&gt;&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Sign-in&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Social Media: Linkedin, Twitter, Facebook, Instagram, Snapchat, TickTock&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Travel&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Legal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laptop&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Cloud Drive now supports Dropbox&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We have created an external API and a dropbox client for handling requests to dropbox. The standard functionalities found on the other drive integrations were added as well and the sync options for dropbox were added on the subpanel.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;With the DropBox integration users are allowed to work directly with the files stored in their space:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Navigate through the file directory and easily find data related to their customers.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Avoid manual uploading of the files necessary in Sugar.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Upload files to the DropBox directly from the Dashlet.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Share files among other Sugar users.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Visualize Shared files from other users DropBox. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Web Logic Hooks no longer providing standard logic hook event arguments&lt;/h3&gt;
&lt;p&gt;We have fixed&amp;nbsp;the &lt;code&gt;after_save&lt;/code&gt; event in the&amp;nbsp;WebLogic Hook that wasn&amp;#39;t providing all of it&amp;#39;s arguments, so now you can expect:&amp;nbsp;&lt;span&gt;isUpdate,&amp;nbsp;dataChanges,&amp;nbsp;stateChanges.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Same is true for the&amp;nbsp;&lt;code&gt;after_relationship_add&lt;/code&gt; and&amp;nbsp;&lt;code&gt;after_relationship_delete&lt;/code&gt; that are now returning: &lt;code&gt;id, related_id, name, related_name, module, related_module, link, relationship&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Add sugar_config option to disable automatic rollback of MLP&lt;/h3&gt;
&lt;p&gt;If a Sugar developer is trying to debug a failure within a MLP then they may try to install it on a local development instance. If the install triggers an error as expected then Sugar will now promptly uninstall the package which complicates the debugging effort, as well as&amp;nbsp;if a developer is working on a local dev instance and makes a customization that causes a 500 error then it&amp;#39;s possible that a recently installed MLP unrelated to the actual error will be uninstalled.&lt;/p&gt;
&lt;p&gt;For that reason, we&amp;#39;ve added the following sugar_config [&lt;code&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/code&gt;] to disable rollback to make the Sugar developer life easier for debug (use with caution, it&amp;#39;s a development utility only)&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Compose Email for multiple recipients&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;If you try to send an email to multiple recipients that exceeds the &amp;quot;to&amp;quot; emailer capacity/limitation you&amp;#39;d receive an internal server error. We&amp;#39;ve implemented a new&amp;nbsp;setting [&lt;code&gt;email_recipient_chunk_size&lt;/code&gt;] that defines the maxium number of addresses in the email&amp;#39;s &amp;quot;To&amp;quot; field.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;If an email is to be sent to more than &lt;code&gt;email_recipient_chunk_size&lt;/code&gt; addresses, the list will be split and multiple identical emails will be sent, each one with at most email_recipient_chunk_size recipients in the To: field.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Redis is sometimes slowed down and even causes a failover under the high load&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We&amp;#39;ve improved performance on Redis cache server&amp;nbsp;that was caused by&amp;nbsp;very high traffic from Redis to PHP (outgoing traffic from the Redis perspective).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;As Sugar Admin I would like to have the ability to enable compression for Redis data to decrease the traffic. It should be enabled by default, and it should be able to disable it with a config option.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We&amp;#39;ve added the config&amp;nbsp;cache.disable_gz&amp;nbsp;(true or false) and&amp;nbsp;cache.gz_level (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) (see description in the config section).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g5m8lc4s2"&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;Impossible to authorize the default outgoing email account per user when &amp;quot;Allow users to use this account for outgoing email&amp;quot; is disabled&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;When the admin has configured the system email account to use OAuth2 by unchecking the &amp;ldquo;Allow users to use this account for outgoing email&amp;rdquo; checkbox, we&amp;#39;ll replace the existing username/password input in the user profile and email settings with an Authorize button and the authorized email account will be displayed under Email Provider upon authorization validation.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g5m8lc4s3"&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;Enable Modules by Default in Sugar Mobile&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release we are enabling modules like Document Templates, Documents, Escalations, Messages, and Purchases to be available by default in Sugar Mobile so users no longer have to go to studio to enable them.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4s4"&gt;Create new &amp;quot;External Users&amp;quot; object&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;As we are creating a new platform for Kiosk, we are also designing the user management for Kiosk users separately in the Kiosk platform and there is a need to link the users in Kiosk with different components/objects in CRM e.g. Contact, Lead, Cases etc. In order to achieve this we need to create a new external users object in CRM so that this CRM external user can be mapped to an external user in an external system like Kiosk. This external user in CRM can then be related to any of the objects in CRM.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4s5"&gt;CRM Endpoint for SugarLive for Kiosk&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release we have created an endpoint for SugarLive so that Amazon Connect chat can be integrated with Kiosk. We need an endpoint that exposes all of the configs associated with SugarLive and the Portal Chat. We need to be able to connect to the Amazon Connect instance from Kiosk and we need all the configurations for the customers chat window for Kiosk.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4t6"&gt;Update Forecasting calculations when the refresh button is clicked&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;The refresh button in the Opps review tab updates changes made to the metric boxes, and Commitment and Quota in the Commitment tab. When inline editing, this one refreshes the metric boxes calculations but not the list view.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4t7"&gt;Rest Service failures to be logged as fatal&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;In this release we&amp;#39;ve updated the RestService (&lt;code&gt;./include/api/RestService.php)&lt;/code&gt;&amp;nbsp;that handles exceptions, specifically for the handleException function, we output exceptions to &lt;strong&gt;sugarcrm.log&lt;/strong&gt; at error level. Failures at API level will now be logged at the fatal level to enable troubleshooting and capturing failures.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;$GLOBALS['log']-&amp;gt;fatal(&amp;#39;An exception happened: ( &amp;#39;.$httpError.&amp;#39;: &amp;#39;.$errorLabel.&amp;#39;)&amp;#39;.$message);&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Deprecated functions&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;&lt;span&gt;curl_*, socket_*, and stream_* functions should be allowed in MLPs.&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Those functions are now blocked/restricted as per release 12.1. The following plan has been put in place to ease the transition:&lt;/span&gt;&lt;/p&gt;
&lt;ul class="ak-ul"&gt;
&lt;li&gt;
&lt;p&gt;For the Sugar_12.1.0 release, the config parameter (&lt;code&gt;&lt;span&gt;enableEnhancedModuleChecks&lt;/span&gt;&lt;/code&gt;) will be disabled by &lt;strong&gt;default&lt;/strong&gt; allowing MLPs with HTTP clients like curl, socket, and streams to be updated/installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Sugar_12.2.0 and Sugar_12.3.0 we will &lt;strong&gt;enable&lt;/strong&gt; the config so that MLPs with the above functions will be blocked however Cloud Support has the ability to turn this off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Sugar_13.0.0 we will be removing the config, by this time we will have given everyone 4 releases time as per our deprecation policy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This client should be backported to all supported sugar versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="prismjs css-1xfvm4v"&gt;&lt;code class="language-php"&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Sugar 12.1, Sugar Q3 2022&lt;/div&gt;
</description></item><item><title>Sugar 12.1 (Q3 2022) Customization Guide</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/697/sugar-12-1-q3-2022-customization-guide/revision/1</link><pubDate>Tue, 05 Jul 2022 18:42:59 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:d2a46e9a-152a-4eb1-beed-b23175fc55ee</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/697/sugar-12-1-q3-2022-customization-guide#comments</comments><description>Revision 1 posted to Dev Tutorials by Rafael Fernandes on 7/5/2022 6:42:59 PM&lt;br /&gt;
&lt;p&gt;The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 12.1 (Q3&amp;nbsp;2022) release. This guide focuses on changes in Sugar 12.1 (Q3 2022) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.&lt;/p&gt;
&lt;p&gt;Please check out the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="/dev-club/m/event-recaps/2119"&gt;Q3 2022 Developer Webinar recording&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more developer highlights.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;For Admin and End User release notes, please visit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://support.sugarcrm.com/SmartLinks/Release_Notes/12.1.0_Release_Notes/"&gt;Sugar 12.1.0 Release Notes&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id="mcetoc_1ff80k9i20"&gt;Sugar 12.1.0 Release Preview Customization Guide&lt;/h1&gt;
&lt;p&gt;The purpose of this document is to provide insight to Sugar Developers for upgrading custom Sugar code, extensions, and integrations to the Sugar 12.1 (Q3 2022) release. This guide focuses on changes in Sugar 12.1 (Q3 2022) that could cause an immediate impact on Sugar customizations and integrations built for earlier Sugar versions.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;span class="emoticon" data-url="https://sugarclub.sugarai.com/cfs-file/__key/system/emoji/1f6e0.svg" title="Tools"&gt;&amp;#x1f6e0;&lt;/span&gt;&lt;strong&gt; Work in Progress - Still being updated. Check back often.&amp;nbsp;&lt;/strong&gt;&lt;span class="emoticon" data-url="https://sugarclub.sugarai.com/cfs-file/__key/system/emoji/1f6e0.svg" title="Tools"&gt;&amp;#x1f6e0;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i31"&gt;Sugar Instance Upgrade Path&lt;/h2&gt;
&lt;p&gt;The upgrade path for 12.1.0-preview.1 (this &amp;quot;Preview&amp;quot;) is from&amp;nbsp;12.0 (Q2 &amp;#39;22). There will be no upgrade path from 12.1.0-preview.2 to the GA version of the Sugar Q3 2022 releases.&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i32"&gt;User Experience Updates&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Reports Viewer Facelift&lt;/h3&gt;
&lt;p&gt;This release brings a long waited facelift in Sugar&amp;#39;s Report Viewer. This is our first step on moving away from BWC to a much more modern UI&amp;nbsp;built with Sidecar by using commonly available components.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We created a new collapsable/minimizeable&amp;nbsp;layout that contains:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Datatable for Rows and columns&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Datatable&amp;nbsp;for&amp;nbsp;&amp;quot;Summation&amp;quot; with and without details&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Datatable for&amp;nbsp;Matrix reports&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Filter Container View&lt;/li&gt;
&lt;li&gt;Runtime filtering&lt;/li&gt;
&lt;li&gt;Report Chart Container&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order to improve speed, quality and compatibility,&amp;nbsp;a few updates were added to the SugarWidgetFields. All the changes are the backward compatible. We&amp;#39;ve also&amp;nbsp;r&lt;span&gt;eplaced all links that were previously pointing to&amp;nbsp;BWC Report record to a sidecar route.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Forecast Worksheet Improvements&lt;/h3&gt;
&lt;p&gt;This release brings our continued efforts improving our Forecast Worksheet. It contains lots of UX and usability enhancements as well as new features as described below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opps LV filtering&lt;/strong&gt;: ilters created and saved in regular Opps List View show up in the Forecast module Opps List View and vice versa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opp Review Tab- Show current Opps not old RLIs&lt;/strong&gt;:&amp;nbsp;The Forecasting worksheet now displays Opportunities instead of RLIs for both, managers and sellers.&lt;/li&gt;
&lt;li&gt;Moved &amp;quot;Settings&amp;quot; to Forecast Megamenu&lt;/li&gt;
&lt;li&gt;Removed Worksheet Columns from Forecast Settings in Studio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forecast Worksheet is sticky&lt;/strong&gt;:&amp;nbsp;&lt;span&gt;person/team picker, time picker, each of the tabs (Opps vs Commitment), Opp review filter, and metric boxes.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Quick filter boxes will display a loader until all data has been fetched&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;strong&gt;Separating Opps from Commitments&lt;/strong&gt;:Opportunities and Commitments into two tabs called &amp;quot;Opportunity Review&amp;quot; and &amp;quot;Commitment&amp;quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implement frontend forecast metrics boxes&lt;/strong&gt;:&amp;nbsp;&lt;span&gt;We added 7 metric boxes: Forecast, Included Pipeline, Upside Pipeline, Excluded Pipeline, Won, Lost, and All.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Display Commitment and Quota at the top of the Forecasting Worksheet&lt;/li&gt;
&lt;li&gt;Predicted Period-end Revenue (For Sell Premier only)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1g5m8lc4s0"&gt;Update how datapoint values are loaded for seller worksheets&lt;/h3&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The seller worksheet (ForecastWorksheets &lt;code class="code css-9z42f9"&gt;list&lt;/code&gt; layout) is no longer a component of the commitment tab&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each datapoint in the Commitment tab (Likely/Best/Worst) should have its Opportunity Forecast value loaded as:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The sum of the Opportunities &lt;code class="code css-9z42f9"&gt;Forecasted Likely&lt;/code&gt; , &lt;code class="code css-9z42f9"&gt;Best&lt;/code&gt;, or &lt;code class="code css-9z42f9"&gt;Worst&lt;/code&gt; field where:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Forecast Stage&lt;/code&gt; is classified as Include&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Expected Close Date&lt;/code&gt; is within the current Forecast time period being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Opportunities &lt;code class="code css-9z42f9"&gt;Assigned User&lt;/code&gt; is the current Forecast user being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If Revenue Line Items are enabled, each datapoint in the Commitment tab (Likely/Best/Worst) should have its Revenue Line Item Forecast value loaded as:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;The sum of the Revenue Line Items &lt;code class="code css-9z42f9"&gt;Likely&lt;/code&gt;, &lt;code class="code css-9z42f9"&gt;Best&lt;/code&gt;, or &lt;code class="code css-9z42f9"&gt;Worst&lt;/code&gt; field where:&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Forecast Stage&lt;/code&gt; is classified as &lt;code class="code css-9z42f9"&gt;Include&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Expected Close Date&lt;/code&gt; is within the current Forecast time period being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Revenue Line Items &lt;code class="code css-9z42f9"&gt;Assigned User&lt;/code&gt; is the current Forecast user being viewed&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; value of the datapoint should be loaded in the following way:&lt;/p&gt;
&lt;ul class="ak-ul"&gt;
&lt;li&gt;
&lt;p&gt;If there is a previous commitment, initialize &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; to the previously committed value for the datapoint&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If there is no previous commitment, initialize &lt;code class="code css-9z42f9"&gt;Commitment&lt;/code&gt; to the result for &lt;code class="code css-9z42f9"&gt;Opportunity Forecast&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;[UI] Replace &amp;#39;Hint&amp;#39; with &amp;#39;Sugar Hint&amp;#39; throughout the UI&lt;/h3&gt;
&lt;p&gt;We have also replaced all mentions of &amp;quot;Hint&amp;quot;&amp;nbsp;throughout the entire Sugar application with &amp;quot;Sugar Hint&amp;quot;. Previous &amp;quot;Hint&amp;quot; logos will also be replaced by the new string &amp;quot;Sugar Hint&amp;quot;.&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Improve view panel for long emails in sidecar interface&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;The emails Record View dashlet will now show the entire email content instead of truncating it and users having to manually expand the dashlet to view long emails.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span class="TextRun SCXW266723974 BCX0" lang="EN"&gt;&lt;span class="NormalTextRun SCXW266723974 BCX0"&gt;Prior to 12.1, when viewing a long Email Record from a Focus drawer, users had to either resize the Record View dashlet or scroll in order to see the entire content.&amp;nbsp; We have expanded the Record View dashlet so users are able to see the entire email as seen below.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP SCXW266723974 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Advanced Forecasting in Dark Mode (For Sell Premier only)&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Sell Premier users will now be able to see their &amp;ldquo;Discover&amp;rdquo; Dashlets in Dark Mode. .&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;Sugar REST API updates&lt;/h3&gt;
&lt;p&gt;This Sugar release introduces REST v11_17.&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i33"&gt;&lt;code&gt;&lt;/code&gt;&lt;/h3&gt;
&lt;h2 id="mcetoc_1ftl03hrg6"&gt;&lt;span style="font-size:inherit;"&gt;PHP Library Upgrades&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;JS Library Upgrades&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;Supported Platforms Update&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;DocMerge Deployed on Supported Regions&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;DocMerge services have been deployed on EU, APAC and CAC regions for better performance and compliance.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ff80k9i33"&gt;Configurability&amp;nbsp;updates&lt;/h2&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;Sugar Logic&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f7c87abe2"&gt;Sugar Catalog Server&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1ff80k9i34"&gt;SugarBPM&lt;/h3&gt;
&lt;p&gt;Work in progress.&lt;/p&gt;
&lt;h3 id="mcetoc_1f7c8nhce4"&gt;&lt;strong&gt;Studio&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Work in progress&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Sugar Config Settings&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Setting Name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Override Example&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;email_recipient_chunk_size&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;10&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code class=" language-php"&gt;&lt;code class=" language-php"&gt;&lt;span class="token variable"&gt;$sugar_config&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;&lt;span class="token single-quoted-string string"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;code class=" language-php"&gt;&lt;span class="token single-quoted-string string"&gt;&lt;span&gt;email_recipient_chunk_size&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;'&lt;span class="token punctuation"&gt;] =&amp;nbsp;10&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines maximum number of addresses in email&amp;#39;s To: field.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;true&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code class=" language-php"&gt;&lt;code class=" language-php"&gt;&lt;span class="token variable"&gt;$sugar_config&lt;/span&gt;&lt;span class="token punctuation"&gt;[&lt;/span&gt;&lt;span class="token single-quoted-string string"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;code class=" language-php"&gt;&lt;span class="token single-quoted-string string"&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;'&lt;/span&gt;&lt;span class="token punctuation"&gt;] = false&lt;/span&gt;&lt;span class="token variable"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;​Disable MLP uninstall when an error happens.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cache.disable_gz&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;false&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span&gt;$sugar_config['cache']['disable_gz'] = true;&lt;/span&gt;&lt;span class="token variable"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;This will modify Sugar&amp;#39;s caching behavior to disable compression of the cached data.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;cache.gz_level&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;9&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span&gt;$sugar_config['cache']['gz_level'] = 2;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines the &lt;a href="https://www.php.net/manual/en/function.gzcompress.php"&gt;SugarCache compression level&lt;/a&gt;, which is not applicable without cache.multi_tenant.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;moduleInstaller.enableEnhancedModuleChecks&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span class="token punctuation"&gt;$sugar_config['moduleInstaller']['enableEnhancedModuleChecks'] = false&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines whether the curl_*, socket_*, and stream_* functions should be allowed in MLPs.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;security.private_ips&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;[ '10.0.0.0|10.255.255.255', '172.16.0.0|172.31.255.255', '192.168.0.0|192.168.255.255', '169.254.0.0|169.254.255.255', '127.0.0.0|127.255.255.255', ]&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&lt;span&gt;$sugar_config['security']['private_ips'] = [ '127.0.0.0|127.255.255.255', '8.8.8.0|8.8.8.8', ]; &lt;/span&gt;&lt;/code&gt;&lt;span class="token punctuation"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Defines a range of IPs considered to be private. Such IPs and corresponding domains are not reachable via ExternalResourceClient&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="mcetoc_1f77psegvb"&gt;Removed Features&lt;/h2&gt;
&lt;p&gt;work in progress.&lt;/p&gt;
&lt;h3 id="mcetoc_1g4djj0su0"&gt;&lt;span&gt;Removed Roles module from Sugar&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We have removed Roles module from Sugar in this release. As per our research this is an old module and is no longer in use.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g4djj0su1"&gt;&lt;span&gt;Removed Assignment notification email template&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Before 10.1 users were able to use different templates for each module after changes from 10.1 went into effect, all modules started using a one-size-fits-all template, which made it hard to pull relevant information for each module. This works for most modules, but not for the Assignment template. In this ticket, we are undoing the work done in 10.1 for the Assignment template only. Users are going to be able to pull relevant info from Assignment template now.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g4djj0su2"&gt;&lt;span&gt;Removed&amp;nbsp;Inline Edit in reports&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;We have removed inline edit in reports that has been deprecated in previous releases.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;&lt;span&gt;&lt;/span&gt;Data Changes&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g5m8lc4s1"&gt;Add new &amp;quot;Lost&amp;quot; calculated field to Opportunities&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Created a &amp;quot;Lost&amp;quot; read-only calculated field in Opps only (not RLIs) that adds the Likely amount of RLIs that have a Sales Stage = Closed Lost. Users will be able to filter and report on the new field. Field will be available on instances using Opps+ RLIs only.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Lost field was added by default in different sugar layouts. Worst and Best will no longer be displayed be default.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegvd"&gt;Filesystem Changes&lt;/h2&gt;
&lt;p&gt;Ex. Changes to Sugar filesystem structure.&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Platform Updates&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Work in progress.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Introduce safe replacement for curl in MLPs&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;As part of our ongoing efforts to improve the reliability and security of Sugar, we are introducing a replacement for CURL in MLPs. Sugar now provides a safe way to communicate to external APIs, it should prevent SSRF (Server-side request forgery) attacks on local endpoints and be not vulnerable to DNS rebinding attacks.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;This new client has been design to be as secure&amp;nbsp;and&amp;nbsp;simple to use as possible, see below:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;pre class="ui-code" data-mode="php"&gt;&amp;lt;?php
require vendor/autoload.php;
use Sugarcrm\Sugarcrm\Security\HttpClient\ExternalResourceClient;

// Set timeout to 3 seconds and 4 max redirects
$client = new ExternalResourceClient(3, 4);

// Send GET request
echo $client-&amp;gt;get(&amp;#39;https://httpbin.org/get&amp;#39;);

// Send POST
echo $client-&amp;gt;post(&amp;#39;https://httpbin.org/post&amp;#39;, http_build_query([&amp;#39;foo&amp;#39; =&amp;gt; &amp;#39;bar&amp;#39;]));&lt;/pre&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;When&amp;nbsp;creating a new instance of this client you can specify the timeout as well as the max redirects it show follow.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s highly recommended to use HTTPS for all requests when using this client, however, HTTP (non-secure) will be allowed, even though is not recommended.&lt;/p&gt;
&lt;p&gt;This client &lt;span style="font-size:inherit;"&gt; does not support requests to IP addresses. It only supports URL domains/hostnames.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To prevent SSRF in local networks, it reads IP ranges from the&amp;nbsp;Sugar Config (&lt;code&gt;&lt;span&gt;$sugar_config['security']['private_ips&amp;rsquo;]&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;If you have &lt;a href="https://support.sugarcrm.com/SmartLinks/Administration_Guide/System/#Proxy_Settings"&gt;proxy enabled&lt;/a&gt;, this client&amp;nbsp;recognizes it and will use it before making the call.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;It is important to notice that all CURL/Stream/Socket functions have been added to the &amp;quot;Blocked/Restricted&amp;quot; list and will prevent upgrades and/or installs of MLPs (Module Loadable Package) in future releases (see deprecation section).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;pre class="ui-code" data-mode="text"&gt;// curl
&amp;#39;curl_copy_handle&amp;#39;,
&amp;#39;curl_exec&amp;#39;,
&amp;#39;curl_file_create&amp;#39;,
&amp;#39;curl_init&amp;#39;,
&amp;#39;curl_multi_add_handle&amp;#39;,
&amp;#39;curl_multi_exec&amp;#39;,
&amp;#39;curl_multi_getcontent&amp;#39;,
&amp;#39;curl_multi_info_read&amp;#39;,
&amp;#39;curl_multi_init&amp;#39;,
&amp;#39;curl_multi_remove_handle&amp;#39;,
&amp;#39;curl_multi_select&amp;#39;,
&amp;#39;curl_multi_setopt&amp;#39;,
&amp;#39;curl_setopt_array&amp;#39;,
&amp;#39;curl_setopt&amp;#39;,
&amp;#39;curl_share_init&amp;#39;,
&amp;#39;curl_share_setopt&amp;#39;,
&amp;#39;curl_share_strerror&amp;#39;,

//sockets
&amp;#39;socket_accept&amp;#39;,
&amp;#39;socket_addrinfo_bind&amp;#39;,
&amp;#39;socket_addrinfo_connect&amp;#39;,
&amp;#39;socket_addrinfo_explain&amp;#39;,
&amp;#39;socket_addrinfo_lookup&amp;#39;,
&amp;#39;socket_bind&amp;#39;,
&amp;#39;socket_clear_error&amp;#39;,
&amp;#39;socket_close&amp;#39;,
&amp;#39;socket_cmsg_space&amp;#39;,
&amp;#39;socket_connect&amp;#39;,
&amp;#39;socket_create_listen&amp;#39;,
&amp;#39;socket_create_pair&amp;#39;,
&amp;#39;socket_create&amp;#39;,
&amp;#39;socket_export_stream&amp;#39;,
&amp;#39;socket_get_option&amp;#39;,
&amp;#39;socket_getopt&amp;#39;,
&amp;#39;socket_getpeername&amp;#39;,
&amp;#39;socket_getsockname&amp;#39;,
&amp;#39;socket_import_stream&amp;#39;,
&amp;#39;socket_last_error&amp;#39;,
&amp;#39;socket_listen&amp;#39;,
&amp;#39;socket_read&amp;#39;,
&amp;#39;socket_recv&amp;#39;,
&amp;#39;socket_recvfrom&amp;#39;,
&amp;#39;socket_recvmsg&amp;#39;,
&amp;#39;socket_select&amp;#39;,
&amp;#39;socket_send&amp;#39;,
&amp;#39;socket_sendmsg&amp;#39;,
&amp;#39;socket_sendto&amp;#39;,
&amp;#39;socket_set_block&amp;#39;,
&amp;#39;socket_set_nonblock&amp;#39;,
&amp;#39;socket_set_option&amp;#39;,
&amp;#39;socket_setopt&amp;#39;,
&amp;#39;socket_shutdown&amp;#39;,
&amp;#39;socket_write&amp;#39;,
&amp;#39;fsockopen&amp;#39;,

// streams
&amp;#39;stream_bucket_append&amp;#39;,
&amp;#39;stream_bucket_make_writeable&amp;#39;,
&amp;#39;stream_bucket_new&amp;#39;,
&amp;#39;stream_bucket_prepend&amp;#39;,
&amp;#39;stream_context_create&amp;#39;,
&amp;#39;stream_context_get_default&amp;#39;,
&amp;#39;stream_context_get_options&amp;#39;,
&amp;#39;stream_context_get_params&amp;#39;,
&amp;#39;stream_context_set_default&amp;#39;,
&amp;#39;stream_context_set_option&amp;#39;,
&amp;#39;stream_context_set_params&amp;#39;,
&amp;#39;stream_copy_to_stream&amp;#39;,
&amp;#39;stream_filter_append&amp;#39;,
&amp;#39;stream_filter_prepend&amp;#39;,
&amp;#39;stream_filter_register&amp;#39;,
&amp;#39;stream_filter_remove&amp;#39;,
&amp;#39;stream_get_contents&amp;#39;,
&amp;#39;stream_get_filters&amp;#39;,
&amp;#39;stream_get_line&amp;#39;,
&amp;#39;stream_get_meta_data&amp;#39;,
&amp;#39;stream_get_transports&amp;#39;,
&amp;#39;stream_get_wrappers&amp;#39;,
&amp;#39;stream_is_local&amp;#39;,
&amp;#39;stream_isatty&amp;#39;,
&amp;#39;stream_notification_callback&amp;#39;,
&amp;#39;stream_register_wrapper&amp;#39;,
&amp;#39;stream_resolve_include_path&amp;#39;,
&amp;#39;stream_select&amp;#39;,
&amp;#39;stream_set_blocking&amp;#39;,
&amp;#39;stream_set_chunk_size&amp;#39;,
&amp;#39;stream_set_read_buffer&amp;#39;,
&amp;#39;stream_set_timeout&amp;#39;,
&amp;#39;stream_set_write_buffer&amp;#39;,
&amp;#39;stream_socket_accept&amp;#39;,
&amp;#39;stream_socket_client&amp;#39;,
&amp;#39;stream_socket_enable_crypto&amp;#39;,
&amp;#39;stream_socket_get_name&amp;#39;,
&amp;#39;stream_socket_pair&amp;#39;,
&amp;#39;stream_socket_recvfrom&amp;#39;,
&amp;#39;stream_socket_sendto&amp;#39;,
&amp;#39;stream_socket_server&amp;#39;,
&amp;#39;stream_socket_shutdown&amp;#39;,
&amp;#39;stream_supports_lock&amp;#39;,
&amp;#39;stream_wrapper_register&amp;#39;,
&amp;#39;stream_wrapper_restore&amp;#39;,
&amp;#39;stream_wrapper_unregister&amp;#39;,&lt;/pre&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Any MLP/Customization that contains any of the blocked/restricted functions will continue to work unless it&amp;nbsp;requires updates. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;New installs, updates or upgrades that go through Package Scanner will be enforced.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Improved&amp;nbsp;SugarIcons&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;We have added few more icons&amp;nbsp; based on feedback we received from previous versions. New Icons are:&lt;/span&gt;&lt;/p&gt;
&lt;ol class="ak-ol"&gt;
&lt;li&gt;
&lt;p&gt;Sign-in&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Social Media: Linkedin, Twitter, Facebook, Instagram, Snapchat, TickTock&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Travel&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Legal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laptop&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Cloud Drive now supports Dropbox&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We have created an external API and a dropbox client for handling requests to dropbox. The standard functionalities found on the other drive integrations were added as well and the sync options for dropbox were added on the subpanel.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;With the DropBox integration users are allowed to work directly with the files stored in their space:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Navigate through the file directory and easily find data related to their customers.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Avoid manual uploading of the files necessary in Sugar.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Upload files to the DropBox directly from the Dashlet.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Share files among other Sugar users.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Visualize Shared files from other users DropBox. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Web Logic Hooks no longer providing standard logic hook event arguments&lt;/h3&gt;
&lt;p&gt;We have fixed&amp;nbsp;the &lt;code&gt;after_save&lt;/code&gt; event in the&amp;nbsp;WebLogic Hook that wasn&amp;#39;t providing all of it&amp;#39;s arguments, so now you can expect:&amp;nbsp;&lt;span&gt;isUpdate,&amp;nbsp;dataChanges,&amp;nbsp;stateChanges.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Same is true for the&amp;nbsp;&lt;code&gt;after_relationship_add&lt;/code&gt; and&amp;nbsp;&lt;code&gt;after_relationship_delete&lt;/code&gt; that are now returning: &lt;code&gt;id, related_id, name, related_name, module, related_module, link, relationship&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Add sugar_config option to disable automatic rollback of MLP&lt;/h3&gt;
&lt;p&gt;If a Sugar developer is trying to debug a failure within a MLP then they may try to install it on a local development instance. If the install triggers an error as expected then Sugar will now promptly uninstall the package which complicates the debugging effort, as well as&amp;nbsp;if a developer is working on a local dev instance and makes a customization that causes a 500 error then it&amp;#39;s possible that a recently installed MLP unrelated to the actual error will be uninstalled.&lt;/p&gt;
&lt;p&gt;For that reason, we&amp;#39;ve added the following sugar_config [&lt;code&gt;&lt;span&gt;uninstallOnError&lt;/span&gt;&lt;/code&gt;] to disable rollback to make the Sugar developer life easier for debug (use with caution, it&amp;#39;s a development utility only)&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Compose Email for multiple recipients&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;If you try to send an email to multiple recipients that exceeds the &amp;quot;to&amp;quot; emailer capacity/limitation you&amp;#39;d receive an internal server error. We&amp;#39;ve implemented a new&amp;nbsp;setting [&lt;code&gt;email_recipient_chunk_size&lt;/code&gt;] that defines the maxium number of addresses in the email&amp;#39;s &amp;quot;To&amp;quot; field.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;If an email is to be sent to more than &lt;code&gt;email_recipient_chunk_size&lt;/code&gt; addresses, the list will be split and multiple identical emails will be sent, each one with at most email_recipient_chunk_size recipients in the To: field.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;Redis is sometimes slowed down and even causes a failover under the high load&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We&amp;#39;ve improved performance on Redis cache server&amp;nbsp;that was caused by&amp;nbsp;very high traffic from Redis to PHP (outgoing traffic from the Redis perspective).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;As Sugar Admin I would like to have the ability to enable compression for Redis data to decrease the traffic. It should be enabled by default, and it should be able to disable it with a config option.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;We&amp;#39;ve added the config&amp;nbsp;cache.disable_gz&amp;nbsp;(true or false) and&amp;nbsp;cache.gz_level (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) (see description in the config section).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g5m8lc4s2"&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;Impossible to authorize the default outgoing email account per user when &amp;quot;Allow users to use this account for outgoing email&amp;quot; is disabled&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;When the admin has configured the system email account to use OAuth2 by unchecking the &amp;ldquo;Allow users to use this account for outgoing email&amp;rdquo; checkbox, we&amp;#39;ll replace the existing username/password input in the user profile and email settings with an Authorize button and the authorized email account will be displayed under Email Provider upon authorization validation.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1g5m8lc4s3"&gt;&lt;span style="font-size:inherit;"&gt;&lt;span&gt;Enable Modules by Default in Sugar Mobile&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release we are enabling modules like Document Templates, Documents, Escalations, Messages, and Purchases to be available by default in Sugar Mobile so users no longer have to go to studio to enable them.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4s4"&gt;Create new &amp;quot;External Users&amp;quot; object&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;As we are creating a new platform for Kiosk, we are also designing the user management for Kiosk users separately in the Kiosk platform and there is a need to link the users in Kiosk with different components/objects in CRM e.g. Contact, Lead, Cases etc. In order to achieve this we need to create a new external users object in CRM so that this CRM external user can be mapped to an external user in an external system like Kiosk. This external user in CRM can then be related to any of the objects in CRM.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4s5"&gt;CRM Endpoint for SugarLive for Kiosk&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;In this release we have created an endpoint for SugarLive so that Amazon Connect chat can be integrated with Kiosk. We need an endpoint that exposes all of the configs associated with SugarLive and the Portal Chat. We need to be able to connect to the Amazon Connect instance from Kiosk and we need all the configurations for the customers chat window for Kiosk.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4t6"&gt;Update Forecasting calculations when the refresh button is clicked&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;The refresh button in the Opps review tab updates changes made to the metric boxes, and Commitment and Quota in the Commitment tab. When inline editing, this one refreshes the metric boxes calculations but not the list view.&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="sc-1rgscgt-0 gjCDIs" id="mcetoc_1g5m8lc4t7"&gt;Rest Service failures to be logged as fatal&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;In this release we&amp;#39;ve updated the RestService (&lt;code&gt;./include/api/RestService.php)&lt;/code&gt;&amp;nbsp;that handles exceptions, specifically for the handleException function, we output exceptions to &lt;strong&gt;sugarcrm.log&lt;/strong&gt; at error level. Failures at API level will now be logged at the fatal level to enable troubleshooting and capturing failures.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;$GLOBALS['log']-&amp;gt;fatal(&amp;#39;An exception happened: ( &amp;#39;.$httpError.&amp;#39;: &amp;#39;.$errorLabel.&amp;#39;)&amp;#39;.$message);&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1f77psegvl"&gt;Deprecated functions&lt;/h2&gt;
&lt;div class="code-block sc-ezYOhE gBYPJJ"&gt;
&lt;p&gt;Work in progress&lt;/p&gt;
&lt;h3 id="mcetoc_1f77psegv7"&gt;&lt;span&gt;curl_*, socket_*, and stream_* functions should be allowed in MLPs.&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Those functions are now blocked/restricted as per release 12.1. The following plan has been put in place to ease the transition:&lt;/span&gt;&lt;/p&gt;
&lt;ul class="ak-ul"&gt;
&lt;li&gt;
&lt;p&gt;For the Sugar_12.1.0 release, the config parameter (&lt;code&gt;&lt;span&gt;enableEnhancedModuleChecks&lt;/span&gt;&lt;/code&gt;) will be disabled by &lt;strong&gt;default&lt;/strong&gt; allowing MLPs with HTTP clients like curl, socket, and streams to be updated/installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Sugar_12.2.0 and Sugar_12.3.0 we will &lt;strong&gt;enable&lt;/strong&gt; the config so that MLPs with the above functions will be blocked however Cloud Support has the ability to turn this off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For Sugar_13.0.0 we will be removing the config, by this time we will have given everyone 4 releases time as per our deprecation policy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This client should be backported to all supported sugar versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="prismjs css-1xfvm4v"&gt;&lt;code class="language-php"&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Sugar 12.1, Sugar Q3 2022&lt;/div&gt;
</description></item></channel></rss>