<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PlatformCop on ALCops</title><link>https://alcops.dev/docs/analyzers/platformcop/</link><description>Recent content in PlatformCop on ALCops</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://alcops.dev/docs/analyzers/platformcop/index.xml" rel="self" type="application/rss+xml"/><item><title>FlowFields should not be editable (PC0001)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0001/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0001/</guid><description>&lt;p&gt;FlowFields are calculated fields. Their values come from other data, and they are never stored directly on the record. In almost every case, a FlowField should not be editable, so set &lt;code&gt;Editable = false&lt;/code&gt;. If you leave the property out, the field becomes editable by default.&lt;/p&gt;
&lt;p&gt;When a FlowField is editable, the UI allows the user to type something into the field even though the value is calculated. The platform does not validate, store, or pass that input anywhere on its own. If your design requires users to enter a value in a calculated field, you must supply the logic that interprets and saves that input. Without that logic, whatever the user enters is ignored, which leads to confusion.&lt;/p&gt;</description></item><item><title>AutoIncrement in temporary table (PC0002)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0002/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0002/</guid><description>&lt;p&gt;The AutoIncrement property should not be used on fields in temporary tables. AutoIncrement is designed to generate unique values from the database sequence, which does not apply to temporary tables that only exist in memory.&lt;/p&gt;
&lt;p&gt;Using AutoIncrement on a temporary table field is misleading and may not behave as expected.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following temporary table incorrectly uses AutoIncrement:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyTempTable
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TableType = &lt;span style="color:#66d9ef"&gt;Temporary&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fields&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; EntryNo; &lt;span style="color:#66d9ef"&gt;Integer&lt;/span&gt;&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AutoIncrement = true; &lt;span style="color:#75715e"&gt;// AutoIncrement in temporary table [PC0002]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, manage the ID manually for temporary tables:&lt;/p&gt;</description></item><item><title>SetRange with filter operators (PC0003)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0003/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0003/</guid><description>&lt;p&gt;The SetRange method expects exact values, not filter expressions. If you pass a string containing filter operators (like &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;..&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;) to SetRange, they will be treated as literal characters, not as wildcards or operators.&lt;/p&gt;
&lt;p&gt;Use SetFilter instead when you need to apply filter expressions with operators.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly uses SetRange with a filter expression:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; FindCustomers&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetRange&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Name, &lt;span style="color:#e6db74"&gt;&amp;#39;A*&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// SetRange with filter operators [PC0003]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;FindSet&lt;span style="color:#f92672"&gt;()&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use SetFilter for filter expressions:&lt;/p&gt;</description></item><item><title>List objects are one-based (PC0004)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0004/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0004/</guid><description>&lt;p&gt;List and Dictionary collections in AL use one-based indexing, not zero-based. Attempting to access index 0 will result in a runtime error.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly uses zero-based indexing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ProcessList&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyList: &lt;span style="color:#66d9ef"&gt;List&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;of&lt;/span&gt; [&lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Value&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyList&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Add&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;First&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Value&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; MyList&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// List objects are one-based [PC0004]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use one-based indexing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ProcessList&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyList: &lt;span style="color:#66d9ef"&gt;List&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;of&lt;/span&gt; [&lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Value&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyList&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Add&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;First&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Value&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; MyList&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Extensible property explicitly set (PC0005)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0005/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0005/</guid><description>&lt;p&gt;Tables, enums, and other extensible objects should explicitly set the Extensible property to declare whether the object can be extended by other apps. Relying on the default value makes the design intent unclear.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following enum does not explicitly set Extensible:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;enum&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyEnum &lt;span style="color:#75715e"&gt;// Extensible property explicitly set [PC0005]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;; Value1&lt;span style="color:#f92672"&gt;) &lt;/span&gt;{ }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; Value2&lt;span style="color:#f92672"&gt;) &lt;/span&gt;{ }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, explicitly set the Extensible property:&lt;/p&gt;</description></item><item><title>Access property explicitly set (PC0006)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0006/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0006/</guid><description>&lt;p&gt;Objects that can be accessed from other apps should explicitly set the Access property to declare their visibility. This makes the API surface of your extension clear and intentional.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following codeunit does not explicitly set Access:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit &lt;span style="color:#75715e"&gt;// Access property explicitly set [PC0006]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, explicitly set the Access property:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Access = Public;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>AutoCalcFields only on FlowFields (PC0007)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0007/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0007/</guid><description>&lt;p&gt;The AutoCalcFields parameter in Get, Find, and other record methods should only specify FlowFields. Including normal fields in AutoCalcFields has no effect and indicates a misunderstanding of the API.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly includes a normal field in AutoCalcFields:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetCustomer&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;, Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Name&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// AutoCalcFields only on FlowFields [PC0007]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, only specify FlowFields:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetCustomer&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetAutoCalcFields&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Balance&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Operator and placeholder in filter expression (PC0008)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0008/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0008/</guid><description>&lt;p&gt;When using SetFilter with placeholders (%1, %2, etc.), be careful about combining operators in the format string with placeholder values. The operators should typically be in the format string, not in the placeholder values.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code has operators mixed with placeholders incorrectly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; FilterCustomers&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetFilter&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&amp;#34;No.&amp;#34;, &lt;span style="color:#e6db74"&gt;&amp;#39;%1|%2&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;20000&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Correct usage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetFilter&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&amp;#34;No.&amp;#34;, &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;gt;%1&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Correct usage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>EventSubscriber var keyword (PC0010)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0010/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0010/</guid><description>&lt;p&gt;Parameters in event subscriber procedures should use the var keyword when the event publisher declares them as var. Mismatching the var keyword can lead to unexpected behavior where modifications to parameters are not propagated correctly.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following event subscriber is missing the var keyword:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [EventSubscriber&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;ObjectType&lt;/span&gt;::&lt;span style="color:#66d9ef"&gt;Codeunit&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;Codeunit&lt;/span&gt;::&amp;#34;Sales-Post&amp;#34;, &lt;span style="color:#e6db74"&gt;&amp;#39;OnBeforePostSalesDoc&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, false, false&lt;span style="color:#f92672"&gt;)&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;local&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; OnBeforePostSalesDoc&lt;span style="color:#f92672"&gt;(&lt;/span&gt;SalesHeader: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Sales Header&amp;#34;&lt;span style="color:#f92672"&gt;) &lt;/span&gt;&lt;span style="color:#75715e"&gt;// EventSubscriber var keyword [PC0010]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, add the var keyword to match the publisher:&lt;/p&gt;</description></item><item><title>EventPublisher IsHandled by var (PC0011)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0011/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0011/</guid><description>&lt;p&gt;When publishing events with an IsHandled pattern, the IsHandled parameter must be declared as var so that subscribers can set it to true to indicate the event was handled.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following event publisher has IsHandled without var:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [IntegrationEvent&lt;span style="color:#f92672"&gt;(&lt;/span&gt;false, false&lt;span style="color:#f92672"&gt;)&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;local&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; OnBeforeProcess&lt;span style="color:#f92672"&gt;(&lt;/span&gt;IsHandled: &lt;span style="color:#66d9ef"&gt;Boolean&lt;/span&gt;&lt;span style="color:#f92672"&gt;) &lt;/span&gt;&lt;span style="color:#75715e"&gt;// EventPublisher IsHandled by var [PC0011]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, add the var keyword:&lt;/p&gt;</description></item><item><title>FlowFilter field assignment (PC0012)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0012/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0012/</guid><description>&lt;p&gt;FlowFilter fields should not be assigned values directly. They are meant to be set using SetFilter or SetRange to filter the calculated FlowField values. Direct assignment has no effect and indicates a misunderstanding of the FlowFilter concept.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly assigns a value to a FlowFilter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; SetDateFilter&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&amp;#34;Date Filter&amp;#34; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; WorkDate&lt;span style="color:#f92672"&gt;()&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// FlowFilter field assignment [PC0012]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use SetRange or SetFilter:&lt;/p&gt;</description></item><item><title>Record.Get procedure arguments (PC0013)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0013/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0013/</guid><description>&lt;p&gt;Validates that calls to the &lt;code&gt;Get&lt;/code&gt; procedure on &lt;code&gt;Record&lt;/code&gt; objects use the correct number, types, and order of arguments matching the table&amp;rsquo;s primary key. Providing insufficient arguments, too many arguments, or arguments of the wrong type can cause runtime errors or unexpected behavior.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-AL" data-lang="AL"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetItemVariant&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ItemVariant: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Item Variant&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Invalid arguments in .Get() method for record &amp;#34;Item Variant&amp;#34;: Insufficient arguments provided; expected 2 arguments.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ItemVariant&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;10000&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetSalesHeader&lt;span style="color:#f92672"&gt;(&lt;/span&gt;DocumentId: &lt;span style="color:#66d9ef"&gt;Integer&lt;/span&gt;&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SalesHeader: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Sales Header&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Invalid arguments in .Get() method for record &amp;#34;Sales Header&amp;#34;: Argument at position 2 has an invalid type; expected &amp;#39;Code[20]&amp;#39;, found &amp;#39;Integer&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SalesHeader&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&amp;#34;Sales Document Type&amp;#34;::&lt;span style="color:#66d9ef"&gt;Order&lt;/span&gt;, DocumentId&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetCompanyInformation&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CompanyInformation: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Company Information&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Invalid arguments in .Get() method for record &amp;#34;Company Information&amp;#34;: Too many arguments provided; expected 1 arguments.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CompanyInformation&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;12345&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="exceptions"&gt;Exceptions&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-AL" data-lang="AL"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetCompanyInformation&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CompanyInformation: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Company Information&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// If a table has one single Primary Key field of type Code, it&amp;#39;s probably a setup table with the Singleton pattern, where we allow a GET without parameters
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CompanyInformation&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;()&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; GetItemVariant&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyRecordId: &lt;span style="color:#66d9ef"&gt;RecordId&lt;/span&gt;&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ItemVariant: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &amp;#34;Item Variant&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// RecordId object is populated on runtime, no diagnostics executed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ItemVariant&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Get&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyRecordId&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="implicit-conversions"&gt;Implicit conversions&lt;/h3&gt;
&lt;p&gt;During analyzing the correct type of the argument, the following implicit conversions are allowed;&lt;/p&gt;</description></item><item><title>JsonToken JPath uses double quotes (PC0014)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0014/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0014/</guid><description>&lt;p&gt;When using JPath expressions to query JSON, string values within the path should use double quotes, not single quotes. Single quotes in JPath expressions may not work correctly.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code uses single quotes in JPath:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ReadJson&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;JsonObject&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;JsonObject&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;JsonToken&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;JsonToken&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;JsonObject&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SelectToken&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;$[?(@.name==&amp;#39;&amp;#39;John&amp;#39;&amp;#39;)]&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;JsonToken&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// JsonToken JPath uses double quotes [PC0014]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use double quotes:&lt;/p&gt;</description></item><item><title>Guid empty string comparison (PC0015)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0015/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0015/</guid><description>&lt;p&gt;When checking if a Guid is empty, do not compare it to an empty string. Use IsNullGuid() instead, or compare against a Guid variable initialized to the empty Guid value.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly compares a Guid to an empty string:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; CheckGuid&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyGuid: &lt;span style="color:#66d9ef"&gt;Guid&lt;/span&gt;&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; Format&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyGuid&lt;span style="color:#f92672"&gt;) &lt;/span&gt;= &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt; &lt;span style="color:#75715e"&gt;// Guid empty string comparison [PC0015]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Error&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Guid is empty&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use IsNullGuid:&lt;/p&gt;</description></item><item><title>Clear codeunit SingleInstance (PC0016)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0016/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0016/</guid><description>&lt;p&gt;Calling Clear on a SingleInstance codeunit clears the instance&amp;rsquo;s state, which affects all code using that singleton throughout the session. This is often unintentional and can cause subtle bugs.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code clears a SingleInstance codeunit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ResetCache&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CacheMgmt: &lt;span style="color:#66d9ef"&gt;Codeunit&lt;/span&gt; &amp;#34;Cache Management&amp;#34;; &lt;span style="color:#75715e"&gt;// SingleInstance codeunit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Clear&lt;span style="color:#f92672"&gt;(&lt;/span&gt;CacheMgmt&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Clear codeunit SingleInstance [PC0016]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consider whether clearing the singleton is truly the intended behavior. If you need to reset specific state, provide explicit reset methods instead.&lt;/p&gt;</description></item><item><title>Page record argument mismatch (PC0017)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0017/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0017/</guid><description>&lt;p&gt;When calling Page.Run or Page.RunModal with a record variable, the record type must match the page&amp;rsquo;s SourceTable. Passing a record of a different type will result in a runtime error.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code passes a mismatched record type:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ShowVendor&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Page&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Run&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Page&lt;/span&gt;::&amp;#34;Vendor Card&amp;#34;, Customer&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Page record argument mismatch [PC0017]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use the correct record type:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ShowVendor&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Vendor: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Vendor;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Page&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Run&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Page&lt;/span&gt;::&amp;#34;Vendor Card&amp;#34;, Vendor&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Page record method requires SourceTable (PC0018)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0018/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0018/</guid><description>&lt;p&gt;Methods like SetRecord, GetRecord, and SetTableView can only be called on pages that have a SourceTable defined. Calling these methods on pages without a SourceTable will result in a runtime error.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code calls SetRecord on a page without SourceTable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; ShowPage&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyPage: &lt;span style="color:#66d9ef"&gt;Page&lt;/span&gt; &amp;#34;My Dialog Page&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyPage&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetRecord&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Customer&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Page record method requires SourceTable [PC0018]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyPage&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Run&lt;span style="color:#f92672"&gt;()&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensure the target page has a SourceTable, or use a different approach for pages without one.&lt;/p&gt;</description></item><item><title>Filter string single quote escaping (PC0019)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0019/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0019/</guid><description>&lt;p&gt;When using filter strings that contain single quotes, the quotes must be properly escaped by doubling them. An unescaped single quote will cause the filter to fail or behave unexpectedly.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code has an unescaped single quote:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; FilterByName&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetFilter&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Name, &lt;span style="color:#e6db74"&gt;&amp;#39;O&amp;#39;&amp;#39;Brien&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Correct - escaped quote
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SetFilter&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Name, &lt;span style="color:#e6db74"&gt;&amp;#39;O&amp;#39;&lt;/span&gt;Brien&amp;#39;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Filter string single quote escaping [PC0019]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, escape single quotes by doubling them:&lt;/p&gt;</description></item><item><title>TransferFields type mismatch (PC0020)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0020/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0020/</guid><description>&lt;p&gt;When using TransferFields between two records, fields with matching names but different types will not be transferred and may cause unexpected data loss. This rule identifies potential type mismatches.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;If you have two tables with a field named &amp;ldquo;Amount&amp;rdquo; but one is Decimal and the other is Integer, TransferFields will not copy that field:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; CopyRecord&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SourceRec: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; SourceTable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TargetRec: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; TargetTable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TargetRec&lt;span style="color:#f92672"&gt;.&lt;/span&gt;TransferFields&lt;span style="color:#f92672"&gt;(&lt;/span&gt;SourceRec&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// TransferFields type mismatch [PC0020] - Amount field has different types
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Review the field definitions and consider manually assigning mismatched fields with appropriate conversion.&lt;/p&gt;</description></item><item><title>TransferFields name mismatch (PC0021)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0021/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0021/</guid><description>&lt;p&gt;TransferFields copies values between records based on field IDs, not field names. If fields have the same ID but different names, the values will be transferred even though the fields represent different concepts. This rule identifies potential name mismatches that may indicate unintended transfers.&lt;/p&gt;
&lt;h3 id="see-also"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../pc0020/"&gt;PC0020&lt;/a&gt;
 - TransferFields type mismatch&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Possible overflow assigning (PC0022)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0022/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0022/</guid><description>&lt;p&gt;When assigning a value from a longer text field to a shorter one, or from a larger numeric type to a smaller one, data may be truncated or overflow. This rule identifies potential overflow scenarios.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code may truncate data:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; CopyName&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LongName: &lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ShortName: &lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LongName &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;This is a very long name that exceeds twenty characters&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ShortName &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; LongName; &lt;span style="color:#75715e"&gt;// Possible overflow assigning [PC0022]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use CopyStr to explicitly handle truncation:&lt;/p&gt;</description></item><item><title>IsHandled parameter assignment (PC0023)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0023/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0023/</guid><description>&lt;p&gt;In event subscriber procedures that implement the IsHandled pattern, the IsHandled parameter should only be set to true, never to false. Setting it to false would override decisions made by earlier subscribers.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code incorrectly sets IsHandled to false:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [EventSubscriber&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;ObjectType&lt;/span&gt;::&lt;span style="color:#66d9ef"&gt;Codeunit&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;Codeunit&lt;/span&gt;::&amp;#34;Sales-Post&amp;#34;, &lt;span style="color:#e6db74"&gt;&amp;#39;OnBeforePostSalesDoc&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, false, false&lt;span style="color:#f92672"&gt;)&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;local&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; OnBeforePostSalesDoc&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; IsHandled: &lt;span style="color:#66d9ef"&gt;Boolean&lt;/span&gt;&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IsHandled &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; false; &lt;span style="color:#75715e"&gt;// IsHandled parameter assignment [PC0023]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, only set IsHandled to true when handling the event:&lt;/p&gt;</description></item><item><title>ApplicationArea on API page (PC0024)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0024/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0024/</guid><description>&lt;p&gt;API pages should not have ApplicationArea properties set, as they are not displayed in the UI and the ApplicationArea concept does not apply to API access.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following API page incorrectly sets ApplicationArea:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;page&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; &amp;#34;My API Page&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PageType = API;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ApplicationArea = All; &lt;span style="color:#75715e"&gt;// ApplicationArea on API page [PC0024]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;layout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;area&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Content&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;name; Rec&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Name&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ApplicationArea = All; &lt;span style="color:#75715e"&gt;// ApplicationArea on API page [PC0024]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, remove the ApplicationArea properties:&lt;/p&gt;</description></item><item><title>ODataKeyFields should use SystemId (PC0025)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0025/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0025/</guid><description>&lt;p&gt;API pages should use SystemId as the ODataKeyFields for consistent and reliable record identification. Using custom fields as keys can lead to issues when records are modified or when the key values contain special characters.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following API page uses a custom key:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;page&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; &amp;#34;My API Page&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PageType = API;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ODataKeyFields = &amp;#34;No.&amp;#34;; &lt;span style="color:#75715e"&gt;// ODataKeyFields should use SystemId [PC0025]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SourceTable = Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use SystemId:&lt;/p&gt;</description></item><item><title>Mandatory field missing on API page (PC0026)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0026/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0026/</guid><description>&lt;p&gt;API pages should expose certain mandatory fields like SystemId, SystemCreatedAt, SystemCreatedBy, SystemModifiedAt, and SystemModifiedBy. These fields are important for API consumers to track record metadata.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following API page is missing mandatory fields:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;page&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; &amp;#34;My API Page&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PageType = API;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SourceTable = Customer; &lt;span style="color:#75715e"&gt;// Mandatory field missing on API page [PC0026]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;layout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;area&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Content&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;name; Rec&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Name&lt;span style="color:#f92672"&gt;) &lt;/span&gt;{ }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, add the mandatory system fields:&lt;/p&gt;</description></item><item><title>Temporary record trigger invocation (PC0027)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0027/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0027/</guid><description>&lt;p&gt;Calling Insert, Modify, or Delete with RunTrigger = true on a temporary record will not execute database triggers because temporary records are not persisted. This is often unintentional and can lead to missing business logic execution.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code runs triggers on a temporary record:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; CreateTempRecord&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TempCustomer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer &lt;span style="color:#66d9ef"&gt;temporary&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TempCustomer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Init&lt;span style="color:#f92672"&gt;()&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TempCustomer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&amp;#34;No.&amp;#34; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;TEMP001&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TempCustomer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Insert&lt;span style="color:#f92672"&gt;(&lt;/span&gt;true&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Temporary record trigger invocation [PC0027]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consider whether triggers should be invoked. For temporary records, typically use:&lt;/p&gt;</description></item><item><title>TableRelation field length (PC0028)</title><link>https://alcops.dev/docs/analyzers/platformcop/pc0028/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/platformcop/pc0028/</guid><description>&lt;p&gt;When defining a TableRelation, the field lengths should be compatible. A relation from a longer field to a shorter one, or vice versa, may cause data integrity issues or runtime errors.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code has mismatched field lengths:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyTable
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fields&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; CustomerNo; &lt;span style="color:#66d9ef"&gt;Code&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;]&lt;span style="color:#f92672"&gt;) &lt;/span&gt;&lt;span style="color:#75715e"&gt;// TableRelation field length [PC0028]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TableRelation = Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&amp;#34;No.&amp;#34;; &lt;span style="color:#75715e"&gt;// Customer.No is Code[20]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, ensure field lengths match:&lt;/p&gt;</description></item></channel></rss>