2340 lines
No EOL
284 KiB
XML
2340 lines
No EOL
284 KiB
XML
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>alguidelines.dev - Business Central Design Patterns – Best Practices</title><link>https://alguidelines.dev/docs/bestpractices/</link><description>Recent content in Best Practices on alguidelines.dev - Business Central Design Patterns</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://alguidelines.dev/docs/bestpractices/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: API Page / Query</title><link>https://alguidelines.dev/docs/bestpractices/api-page/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/api-page/</guid><description>
|
||
<p><em>Created by Arend-Jan Kauffmann, Described by Arend-Jan Kauffmann</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>API pages are different from UI pages. They require different properties and don&rsquo;t behave the same. Because API pages are used for integration with external applications, they should be treated as contracts. To achieve this, the following topics are important.</p>
|
||
<ul>
|
||
<li>Separate API app</li>
|
||
<li>Page properties</li>
|
||
<li>Versioning</li>
|
||
<li>Field properties</li>
|
||
<li>Default fields</li>
|
||
</ul>
|
||
<h2 id="separate-api-app">Separate API app</h2>
|
||
<p>It&rsquo;s a good practice to develop API pages in a separate app instead of combining them in a solution. By doing so, it provides better maintainability and is a good way of separation of concerns.</p>
|
||
<h2 id="page-properties">Page properties</h2>
|
||
<p>An API page must define a minimum set of properties. Some of these properties will be part of the URL of the API endpoint. It is recommended to define the properties in the same order as they appear in the URL.</p>
|
||
<p>The properties that must be defined are:</p>
|
||
<ul>
|
||
<li>PageType = API / QueryType = API</li>
|
||
<li>APIPublisher</li>
|
||
<li>APIGroup</li>
|
||
<li>APIVersion</li>
|
||
<li>EntitySetName</li>
|
||
<li>EntityName</li>
|
||
<li>DelayedInsert (only Page)</li>
|
||
<li>ODataKeyFields</li>
|
||
</ul>
|
||
<h3 id="apipublisher">APIPublisher</h3>
|
||
<p>The name of the API publisher is usually the company creating the API. It is the first custom part in the URL for a given endpoint. The value is case insensitive.</p>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>APIPublisher<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;contoso&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="apigroup">APIGroup</h3>
|
||
<p>Sets the group of the API endpoint that page or query is exposed in. In the URL the APIGroup comes after the APIPublisher. It can be used to distinguish different API apps or groups of APIs from each other. The value is case insensitive.</p>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>APIGroup<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;app1&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="apiversion">APIVersion</h3>
|
||
<p>Sets the version(s) of the API endpoint the page or query is exposed in. This property is not mandatory. If it is not specified, then APIs will be exposed as version &lsquo;beta&rsquo;.</p>
|
||
<p>The APIVersion can be set to &lsquo;beta&rsquo; or have the format &lsquo;vx.y&rsquo;.
|
||
Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>APIVersion<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;beta&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>APIVersion<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;v1.0&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h4 id="_multiple-api-versions_"><em>Multiple API versions</em></h4>
|
||
<p>You should <strong>never</strong> break existing versions. Any breaking change requires to create a new version.</p>
|
||
<p>It is possible to expose an API in multiple versions:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>APIVersion<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;beta&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;v1.0&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>This allows to publish a new version of an API app without copying all individual objects and updating the version numbers. Only those API objects that are changed in a new version need to be copied. The other objects only need an addition to the APIVersion property to become available in the new version endpoint.</p>
|
||
<h3 id="entitysetname">EntitySetName</h3>
|
||
<p>The EntitySetName is the plural entity name. Think of it as the name of the collection of entities. It is recommended to use camelCasing for this property. The value is case sensitive!</p>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>EntitySetName<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;itemCategories&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="entityname">EntityName</h3>
|
||
<p>The EntityName sets the singular entity name for the API page or query. This name is not used in the URL. Instead, the EntityName is used in the metadata information. It is recommended to use camelCasing for this property.</p>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>EntityName<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;itemCategory&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="delayedinsert">DelayedInsert</h3>
|
||
<p>This property is required on an editable API page. It does not apply to an API query object. If <code>Editable = false</code> is set on the API page, then DelayedInsert is not required.
|
||
All APIs pages apply the behavior to first specify all field values and then insert the record at once.</p>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>DelayedInsert<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="full-example">Full example</h3>
|
||
<p>Together, the page properties look like:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>PageType<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>API<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>APIPublisher<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;contoso&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>APIGroup<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;app1&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>APIVersion<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;v1.0&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>EntitySetName<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;itemCategories&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>EntityName<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;itemCategory&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>DelayedInsert<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>The full url will look like: <code>https://{url}/api/contoso/app1/v1.0/companies({id})/itemCategories</code></p>
|
||
<h3 id="odatakeyfields">ODataKeyFields</h3>
|
||
<p>The <code>EntitySetName</code> property in the URL can be extended with an identifier to indicate a single record.</p>
|
||
<p>Example:</p>
|
||
<pre tabindex="0"><code>.../itemCategories(768b6173-9b19-40ea-8e5d-ce181ec0d645)
|
||
</code></pre><p>The property <code>ODataKeyFields</code> defines which field(s) will be used for the identifier value. It is highly recommended to always use the SystemId field for this property. The SystemId field is immutable and will never change for a record.</p>
|
||
<p>The field that is defined in this property should be part of the API page.</p>
|
||
<h2 id="field-properties">Field properties</h2>
|
||
<p>The base structure of an API page is similar to a UI list page:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">layout</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">area</span><span style="color:#ce5c00;font-weight:bold">(</span>Content<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeater</span><span style="color:#ce5c00;font-weight:bold">(</span>records<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>When specifying the fields there are some considerations to keep in mind.</p>
|
||
<pre tabindex="0"><code>field(displayName; Rec.Name) { }
|
||
</code></pre><p>There are no mandatory properties. The property <code>ApplicationArea</code> does not play a role in API pages, so it can be skipped. The property <code>Caption</code> is also optional and should only be used in case the external application requires captions and the caption should be different from the standard caption as defined in the table.</p>
|
||
<p>The name of the field, in the example above <code>displayName</code>, should be defined in camelCasing. It may not contain spaces, dots, or other special characters.</p>
|
||
<p>It is common use to give certain fields a more describing name. Some examples are:</p>
|
||
<ul>
|
||
<li>id for field SystemId</li>
|
||
<li>number for field &ldquo;No.&rdquo;</li>
|
||
<li>displayName for field Name</li>
|
||
</ul>
|
||
<h2 id="mandatory-fields">Mandatory fields</h2>
|
||
<p>These fields should always be part of the API Page:</p>
|
||
<ul>
|
||
<li>SystemId
|
||
<ul>
|
||
<li>This field should be exposed with the name <code>id</code></li>
|
||
</ul>
|
||
</li>
|
||
<li>SystemModifiedAt
|
||
<ul>
|
||
<li>This field should be exposed with the name <code>lastModifiedDateTime</code>. If you choose a different name, then the webhook functionality will not work properly.</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>Example:</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">layout</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">area</span><span style="color:#ce5c00;font-weight:bold">(</span>Content<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeater</span><span style="color:#ce5c00;font-weight:bold">(</span>records<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">field</span><span style="color:#ce5c00;font-weight:bold">(</span>id<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#ce5c00;font-weight:bold">.</span>SystemId<span style="color:#ce5c00;font-weight:bold">) </span>{<span style="color:#f8f8f8;text-decoration:underline"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">field</span><span style="color:#ce5c00;font-weight:bold">(</span>lastModifiedDateTime<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#ce5c00;font-weight:bold">.</span>SystemModifiedAt<span style="color:#ce5c00;font-weight:bold">) </span>{<span style="color:#f8f8f8;text-decoration:underline"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: begin as an afterword</title><link>https://alguidelines.dev/docs/bestpractices/begin-as-an-afterword/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/begin-as-an-afterword/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>When <code>begin</code> follows <code>then</code>, <code>else</code>, <code>do</code>, it should be on the same line, preceded by one space character.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ICPartnerRefType<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>ICPartnerRefType<span style="color:#000;font-weight:bold">::</span>&#34;Common Item No.&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ICPartnerRefType<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>ICPartnerRefType<span style="color:#000;font-weight:bold">::</span>&#34;Common Item No.&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Begin-End - Compound Only</title><link>https://alguidelines.dev/docs/bestpractices/begin-end/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/begin-end/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<p>Only use begin..end to enclose <a href="https://docs.microsoft.com/en-us/cpp/c-language/compound-statement-c?view=msvc-170#:~:text=A%20compound%20statement%20%28also%20called%20a%20%22block%22%29%20typically,appear%20at%20the%20head%20of%20a%20compound%20statement.">compound statements</a>.</p>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsAssemblyOutputLine<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TestField</span><span style="color:#ce5c00;font-weight:bold">(</span>&#34;Order Line No.&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsAssemblyOutputLine<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TestField</span><span style="color:#ce5c00;font-weight:bold">(</span>&#34;Order Line No.&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="exception">Exception</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic">// Except for this case
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"></span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>X<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Y<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">//DO SOMETHING;
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>X<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span></code></pre></div><h2 id="tips">Tips</h2>
|
||
<p>The <a href="https://marketplace.visualstudio.com/items?itemName=andrzejzwierzchowski.al-code-outline">AZ AL Dev Tools/AL Code Outline</a> extension adds two new commands to Visual Studio Code to remove begin..end around single statements.</p>
|
||
<ul>
|
||
<li><code>Remove Begin..End around Single Statements from the Active Editor</code> : removes begin..end around single statement from the current editor</li>
|
||
<li><code>Remove Begin..End around Single Statements from the Active Project</code> : removes begin..end around single statement from the current project</li>
|
||
</ul></description></item><item><title>Docs: Binary Operator to Start Line</title><link>https://alguidelines.dev/docs/bestpractices/binary-operator-line-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/binary-operator-line-start/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Do not start a line with a binary operator.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span>&#34;Quantity to Ship&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Quantity<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Quantity Shipped&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span>&#34;Quantity to Ship&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Quantity<span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Quantity Shipped&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: CASE Action on next line</title><link>https://alguidelines.dev/docs/bestpractices/case-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/case-actions/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>A CASE action should start on a line after the possibility.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">case</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">of</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;A&#39;</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter2<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;10&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;B&#39;</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter2<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;11&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">case</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">of</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;A&#39;</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter2<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;10&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;B&#39;</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Letter2<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;11&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Comment Spacing</title><link>https://alguidelines.dev/docs/bestpractices/comments-spacing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/comments-spacing/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Always start comments with // followed by one space character.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>RowNo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">//Move way below the budget
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span>RowNo<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">// Move way below the budget
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Custom Telemetry</title><link>https://alguidelines.dev/docs/bestpractices/customtelemetry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/customtelemetry/</guid><description>
|
||
<p><em>Created by Microsoft, Described by Arend-Jan Kauffmann</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>With AL it is possible to emit custom telemetry signals to Azure Application Insights. There are a number of considerations that you should keep in mind when designing custom telemetry signals.</p>
|
||
<ul>
|
||
<li>Think about it as an API</li>
|
||
<li>Naming conventions and telemetry schema</li>
|
||
<li>Objects emitting telemetry signals</li>
|
||
<li>Candidate data for telemetry</li>
|
||
<li>How customers use telemetry</li>
|
||
<li>Privacy</li>
|
||
</ul>
|
||
<h2 id="think-about-it-as-an-api">Think about it as an API</h2>
|
||
<p>Customers will build analytics and monitoring solutions on top of their telemetry data.</p>
|
||
<p>Therefore, signal must be treated as any other API</p>
|
||
<ul>
|
||
<li>documented</li>
|
||
<li>versioned</li>
|
||
<li>discoverable</li>
|
||
<li>non-breaking</li>
|
||
</ul>
|
||
<h2 id="naming-conventions-and-telemetry-schema">Naming conventions and telemetry schema</h2>
|
||
<p>To make it easy for the consumer of telemetry to work with the data, please</p>
|
||
<ul>
|
||
<li>use <strong>PascalCasing</strong>. This makes all fields in Application Insights look the same (signal logged through the AL LogMessage method will have &ldquo;al&rdquo; prefixed to dimension names.</li>
|
||
<li><strong>Do not use special characters or spaces</strong> for fields/custom dimension keys. This makes the KQL queries so much easier to write</li>
|
||
<li>for custom dimensions, consider using prefixes that helps the telemetry consumer understand where the dimension is coming from (e.g. HttpStatusCode, SqlStatement, &hellip;)</li>
|
||
</ul>
|
||
<p>Consider always having a <strong>&ldquo;message&rdquo;</strong> field that expresses in human readable form what the telemetry event is about.
|
||
If you do, let message names follow the Object ActionInPastTense pattern
|
||
Some examples</p>
|
||
<ul>
|
||
<li>Web Service Called:</li>
|
||
<li>Email attempt failed</li>
|
||
<li>Authorization to environment succeeded</li>
|
||
</ul>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ProcessHttpResponse<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Request<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">HttpRequestMessage</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Response<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">HttpResponseMessage</span><span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>CustomTelemetryDimensions<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Dictionary</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">of</span><span style="color:#f8f8f8;text-decoration:underline"> </span>[<span style="color:#204a87;font-weight:bold">Text</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">Text</span>]<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Response<span style="color:#ce5c00;font-weight:bold">.</span>HttpStatusCode<span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;&gt;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">200</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>CustomTelemetryDimensions<span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#204a87;font-weight:bold">Add</span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;Url&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Request<span style="color:#ce5c00;font-weight:bold">.</span>GetRequestUri<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>CustomTelemetryDimensions<span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#204a87;font-weight:bold">Add</span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;HttpStatusCode&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Format<span style="color:#ce5c00;font-weight:bold">(</span>Response<span style="color:#ce5c00;font-weight:bold">.</span>HttpStatusCode<span style="color:#ce5c00;font-weight:bold">))</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>CustomTelemetryDimensions<span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#204a87;font-weight:bold">Add</span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;ReasonPhrase&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Response<span style="color:#ce5c00;font-weight:bold">.</span>ReasonPhrase<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Session<span style="color:#ce5c00;font-weight:bold">.</span>LogMessage<span style="color:#ce5c00;font-weight:bold">(
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#4e9a06">&#39;MyExt0001&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Web service call failed&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Verbosity</span><span style="color:#000;font-weight:bold">::</span>Error<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DataClassification</span><span style="color:#000;font-weight:bold">::</span>SystemMetadata<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>TelemetryScope<span style="color:#000;font-weight:bold">::</span>ExtensionPublisher<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>CustomTelemetryDimensions<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="objects-emitting-telemetry-signals">Objects emitting telemetry signals</h2>
|
||
<p>Telemetry data includes information about the object that emitted the telemetry signal. It&rsquo;s recommended to call Session.LogMessage() <strong>from within the object</strong> that causes a situation that you want to have telemetry for. That will make it easier to analyze where exactly in the code an issue occurred.</p>
|
||
<p>Of course it is possible to have a single object as a central place to emit telemetry signals. The telemetry data includes a callstack, so eventually it would be possible to trace back to the exact place where an issue occurred. But that requires a more complicated query, so it would be better to emit telemetry signals right from place in the code where an issue occurred.</p>
|
||
<h2 id="candidate-data-for-telemetry">Candidate data for telemetry</h2>
|
||
<p>Telemetry must be <strong>actionable</strong> for the customer. Do not emit signals that they cannot act on (knowing about CPU performance counters on the database is useless if the partner cannot scale the database).</p>
|
||
<p>Also, note that customers pay for data ingestion. So be mindful to not flood their telemetry resources. Consider to use TelemetryScope::ExtensionPublisher by default and only use TelemetryScope::All in case the customer can also act on the data.</p>
|
||
<p>If you do not know where to start, consider using telemetry for deflection. In Dynamics 365 Business Central, they started with signal about authorization (successful/failed) to deflect support cases that was due to disabled users/wrong licenses.</p>
|
||
<h2 id="how-customers-use-telemetry">How customers use telemetry</h2>
|
||
<p>The following are known scenarios for customer telemetry</p>
|
||
<ul>
|
||
<li>The tenant admin (typically an IT-pro) wants to troubleshoot a performance problem and they need more details than what is provided in the analytics reports in the admin center.</li>
|
||
<li>The customer wants to analyze (and correct) errors happening in the environment (typically an IT-pro)</li>
|
||
<li>The customer wants to analyze usage of features (typically an analytics user, maybe with BI experience)</li>
|
||
</ul>
|
||
<p>Customers typically start in the Application Insights portal and then move on to use more advanced tools for analytics (KQL, Power BI, Excel, &hellip;). Once they have seen the light, they will likely start alerting on telemetry using Azure Monitor Alerts or setting up Power Automate flows.</p>
|
||
<p>Business Central have developed a telemetry maturity model (based on the Gartner BI maturity model) for how organizations can evolve to use telemetry proactively in their business processes.</p>
|
||
<h2 id="privacy">Privacy</h2>
|
||
<p>Telemetry must be <strong>privacy compliant</strong>.</p>
|
||
<p>For privacy reasons, events that have a DataClassification other than SystemMetadata aren&rsquo;t sent to Application Insight resources set up on the tenant. During development of your extension, it&rsquo;s good practice to have a privacy review of the use of LOGMESSAGE calls to ensure that customer data isn&rsquo;t mistakenly leaked into Application Insights resources.</p></description></item><item><title>Docs: DeleteAll</title><link>https://alguidelines.dev/docs/bestpractices/deleteall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/deleteall/</guid><description>
|
||
<p><em>Created by waldo, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>When you perform a &ldquo;DeleteAll&rdquo; when there is nothing to delete, it will still perform a lock. When you for example perform a DeleteAll on an empty table, it will result in a table lock.
|
||
Therefore it&rsquo;s good practice to always check if the table is empty when performing a DeleteAll.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>EmptyTableWLD<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">Code</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;AJ&#39;</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>EmptyTableWLD<span style="color:#ce5c00;font-weight:bold">.</span>DeleteAll<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>EmptyTableWLD<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">Code</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;AJ&#39;</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>EmptyTableWLD<span style="color:#ce5c00;font-weight:bold">.</span>IsEmpty<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>EmptyTableWLD<span style="color:#ce5c00;font-weight:bold">.</span>DeleteAll<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: end else pair</title><link>https://alguidelines.dev/docs/bestpractices/end-else-pair/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/end-else-pair/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>The <code>end else</code> pair should always appear on the same line.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OppEntry<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesCycleStage<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OppEntry<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesCycleStage<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: if not then exit</title><link>https://alguidelines.dev/docs/bestpractices/if-not-find-then-exit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/if-not-find-then-exit/</guid><description>
|
||
<p><em>Created by sirhc101, Described by sirhc101</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>In general when we are working with tables we want to make sure, the filtered dataset includes records and does not result in a runtime error, so we use <code>if</code> to handle the result of <code>Find()</code>, <code>FindSet()</code>, <code>Get()</code>, etc.
|
||
This automatically causes on indent in source code and often the source code does not just contain one but two or more tables involved which leads to multi-level indentation.</p>
|
||
<p>Basically this is a result of bad coding structure but maybe sometimes necessary. On the other hand this causes multiple <code>end;</code> usages and leads to the usage of colorization and other helpers to see which <code>begin</code> belongs to which <code>end;</code>.</p>
|
||
<p>Instead of using <code>if (Record.FindSet()) then</code> to fetch records from a database it&rsquo;s good practice to use <code>if (not Record.FindSet()) then</code> following by an <code>exit();</code> to not further process the source code and make it clear for other developers where they can stop reading in certain cases.</p>
|
||
<p>Furthermore, this more or less automatically leads to smaller and better structured procedures and reduces the complexity of the source code.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>Status<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Status<span style="color:#000;font-weight:bold">::</span>Open<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document No.&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;No.&#34;<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomething<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingElse<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">case</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">of</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#000;font-weight:bold">::</span>Item<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingItem<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#000;font-weight:bold">::</span>Resource<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingResource<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingSalesOrder<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Sales Header&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>Status<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Status<span style="color:#000;font-weight:bold">::</span>Open<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingSalesLine<span style="color:#ce5c00;font-weight:bold">(</span>SalesHeader<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingElse<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingSalesLine<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Sales Header&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Sales Line&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document No.&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;No.&#34;<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomething<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Reset<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>SetRange<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesHeader<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Document Type&#34;<span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Order</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">case</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">of</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#000;font-weight:bold">::</span>Item<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingItem<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>&#34;Type&#34;<span style="color:#000;font-weight:bold">::</span>Resource<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingResource<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesLine<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">0</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: IsTemporary record safeguard</title><link>https://alguidelines.dev/docs/bestpractices/istemporary-table-safeguard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/istemporary-table-safeguard/</guid><description>
|
||
<p><em>Created by Kine, Described by Kine</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>When you are working with temporary tables or real tables, you can have code, where you assume that Record variable is or is not temporary. Best practice is to not assume, but test it to be sure. In history,
|
||
many developers went through painful period when they did unwanted &ldquo;DeleteAll&rdquo; over real table in production database, because they were only assuming something (mostly it happened only once to them).</p>
|
||
<p>Therefore it is good practice to use <a href="https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/record/record-istemporary-method">Record.IsTemporary()</a> method to test this predicate, mainly when you are doing destructive action.</p>
|
||
<p>Another case when it is good practice to use this test is when you are subscribing to triggers on table. In most cases, you do not want to run your code when the trigger is running over temporary record. And you cannot assume, that
|
||
this specific table will not be used as temporary by someone else. Reacting to the trigger as if it was triggered by real table change could lead to corrupted data or unpredictable errors and the reason could be hard to find.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ShouldBeTemporary<span style="color:#ce5c00;font-weight:bold">.</span>DeleteAll<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Table</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Database</span><span style="color:#000;font-weight:bold">::</span>&#34;Some Table&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnAfterInsertEvent&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingOnAfterInsertSomeTable<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Some Table&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomething<span style="color:#ce5c00;font-weight:bold">(</span>Rec<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ShouldBeTemporary<span style="color:#ce5c00;font-weight:bold">.</span>IsTemporary<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ShouldBeTemporary<span style="color:#ce5c00;font-weight:bold">.</span>DeleteAll<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ShouldBeTemporary<span style="color:#ce5c00;font-weight:bold">.</span>IsTemporary<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Error<span style="color:#ce5c00;font-weight:bold">(</span>RecNotTemporaryErr<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ShouldBeTemporary<span style="color:#ce5c00;font-weight:bold">.</span>DeleteAll<span style="color:#ce5c00;font-weight:bold">(</span>true<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><p>or</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Table</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Database</span><span style="color:#000;font-weight:bold">::</span>&#34;Some Table&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnAfterInsertEvent&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomethingOnAfterInsertSomeTable<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Some Table&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#ce5c00;font-weight:bold">.</span>IsTemporary<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DoSomething<span style="color:#ce5c00;font-weight:bold">(</span>Rec<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Keyboard Shortcuts</title><link>https://alguidelines.dev/docs/bestpractices/keyboard-shortcuts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/keyboard-shortcuts/</guid><description>
|
||
<p><em>Created by Christian Lenz, Described by Christian Lenz</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>To increase developer productivity while coding, use keyboard shortcuts that are available in the specific context to execute actions faster.</p>
|
||
<p>This is a selection of the community&rsquo;s favorites (more to come).</p>
|
||
<p><strong>Windows</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>What</th>
|
||
<th>Where</th>
|
||
<th>How</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Delete word</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + Backspace</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>VS Code</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>What</th>
|
||
<th>Where</th>
|
||
<th>How</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Switch Tab</td>
|
||
<td>Editor</td>
|
||
<td>ALT + &lt;Arrow Left/Right&gt;</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Move Line Up/Down</td>
|
||
<td>Editor</td>
|
||
<td>ALT + &lt;Arrow Up/Down&gt;</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Copy Line Below/Above</td>
|
||
<td>Editor</td>
|
||
<td>ALT + SHIFT + &lt;Arrow Up/Down&gt;</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Delete Line</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + X (without selection)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Add Selection To Next Match</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + D</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Select All Occurences Of Find Match</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + SHIFT + L</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Add Cursors To Line Ends</td>
|
||
<td>Editor</td>
|
||
<td>SHIFT + ALT + I (after selecting lines)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Add Cursor Above/Below</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + ALT + &lt;Arrow Up/Down&gt;</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Place Multiple Cursors Manually</td>
|
||
<td>Editor</td>
|
||
<td>ALT + Click</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Fast Scrolling</td>
|
||
<td>Editor</td>
|
||
<td>ALT + Mouse Wheel</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Go To Symbol In File</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + SHIFT + O</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Breadcrumbs - Open And Select</td>
|
||
<td>Editor</td>
|
||
<td>CTRL + SHIFT + .</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Go Back / Forward</td>
|
||
<td>Go To Definition</td>
|
||
<td>ALT + &lt;Arrow Left/Right&gt;</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></description></item><item><title>Docs: Keyword Pairs - Indentation</title><link>https://alguidelines.dev/docs/bestpractices/keyword-pairs-indentation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/keyword-pairs-indentation/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>The <code>if..then</code> pair, <code>while..do</code> pair, and <code>for..do</code> pair must appear on the same line or the same level of indentation. If possible, you can align the lines it is even much more readable.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>x<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>y<span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">and</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>a<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>b<span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>x<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>y<span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">and</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">(</span>a<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>b<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Line Start Keywords</title><link>https://alguidelines.dev/docs/bestpractices/line-start-keywords/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/line-start-keywords/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>The <code>end</code>, <code>if</code>, <code>repeat</code>, <code>for</code>, <code>while</code>, <code>else</code> and <code>case</code> statement should always start a line.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsContactName<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidateContactName<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsSalespersonCode<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidateSalespersonCode<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsSalesCycleCode<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidatSalesCycleCode<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsContactName<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidateContactName<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsSalespersonCode<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidateSalespersonCode<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsSalesCycleCode<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValidatSalesCycleCode<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Lonely Repeat</title><link>https://alguidelines.dev/docs/bestpractices/lonely-repeat/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/lonely-repeat/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>The <code>repeat</code> statement should always be alone on a line.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ReservEntry<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ReservEntry<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Named Invocations</title><link>https://alguidelines.dev/docs/bestpractices/named-invocations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/named-invocations/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>When calling an object statically use the Object Name, not the Object Id.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Page</span><span style="color:#ce5c00;font-weight:bold">.</span>RunModal<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#0000cf;font-weight:bold">525</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesShptLine<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Page</span><span style="color:#ce5c00;font-weight:bold">.</span>RunModal<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">Page</span><span style="color:#000;font-weight:bold">::</span>&#34;Posted Sales Shipment Lines&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SalesShptLine<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="tips">Tips</h2>
|
||
<p>The <a href="https://marketplace.visualstudio.com/items?itemName=StefanMaron.businesscentral-lintercop">BusinessCentral.LinterCop</a> extension adds a new rule to check your code for hardcoded object IDs.</p>
|
||
<ul>
|
||
<li><a href="https://github.com/StefanMaron/BusinessCentral.LinterCop/wiki/LC0012">LC0012</a>: Using hardcoded IDs in functions like Codeunit.Run() is not allowed.</li>
|
||
</ul></description></item><item><title>Docs: One Statement per Line</title><link>https://alguidelines.dev/docs/bestpractices/one-statement-per-line/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/one-statement-per-line/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>A line of code should not have more than one statement.</p>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OppEntry<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OppEntry<span style="color:#ce5c00;font-weight:bold">.</span>Find<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;-&#39;</span><span style="color:#ce5c00;font-weight:bold">) </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>TotalCost<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Cost<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>TotalAmt<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Amt<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>TotalCost<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Cost<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>TotalAmt<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">+=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Amt<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Seperate if and else</title><link>https://alguidelines.dev/docs/bestpractices/separate-if-and-else/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/separate-if-and-else/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p><code>if</code> and <code>else</code> statements should be on separate lines.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Atom<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&gt;&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline"> </span>HasLogicalOperator<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Atom<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&gt;&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>HasLogicalOperator<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Spacing Binary Operators</title><link>https://alguidelines.dev/docs/bestpractices/spacing-binary-operators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/spacing-binary-operators/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>There must be exactly one space character on each side of a binary operator such as = + - AND OR =. The parameter comma operator however, should have a space after the comma.</p>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Line Discount %&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Line Discount Amount&#34;/&#34;Line Value&#34;*<span style="color:#0000cf;font-weight:bold">100</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Line Discount %&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Line Discount Amount&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span>/<span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Line Value&#34;<span style="color:#f8f8f8;text-decoration:underline"> </span>*<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">100</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartDate<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>CalcDate<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;&lt;+&#39;</span>+Format<span style="color:#ce5c00;font-weight:bold">(</span>Days<span style="color:#ce5c00;font-weight:bold">+</span>i<span style="color:#ce5c00;font-weight:bold">)</span>+<span style="color:#4e9a06">&#39;D\&gt;&#39;</span><span style="color:#000;font-weight:bold">,</span>StartDate<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartDate<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>CalcDate<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;&lt;+&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>+<span style="color:#f8f8f8;text-decoration:underline"> </span>Format<span style="color:#ce5c00;font-weight:bold">(</span>Days<span style="color:#f8f8f8;text-decoration:underline"> </span>+<span style="color:#f8f8f8;text-decoration:underline"> </span>i<span style="color:#ce5c00;font-weight:bold">) </span>+<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;D\&gt;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartDate<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-3">Example 3</h2>
|
||
<h3 id="bad-code-2">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartDate<span style="color:#ce5c00;font-weight:bold">:=</span>0D<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">// Initialize
|
||
</span></span></span></code></pre></div><h3 id="good-code-2">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartDate<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>0D<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">// Initialize
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Subscriber Codeunits</title><link>https://alguidelines.dev/docs/bestpractices/subscribercodeunits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/subscribercodeunits/</guid><description>
|
||
<p><em>Created by waldo, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>In general, subscribers have to be put in codeunits. There are a few performance considerations that you should keep in the back of your minds, when designing such a codeunit.</p>
|
||
<ul>
|
||
<li>Keep the codeunit as small as possible</li>
|
||
<li>Work with a single instance codeunit</li>
|
||
<li>only subscribe when necessary</li>
|
||
<li>Avoid generic OnInsert/OnModify/OnDelete</li>
|
||
</ul>
|
||
<p>Let&rsquo;s discuss all points</p>
|
||
<h2 id="keep-the-codeunit-as-small-as-possible">Keep the codeunit as small as possible</h2>
|
||
<p>Every time a subscriber gets called, a new instance of the codeunit is being loaded in memory, which takes memory and processing power. The smaller the codeunit, the less memory, and the faster it is.</p>
|
||
<p>Therefore, it&rsquo;s suggested to split the subscribers by functionality and avoid putting business logic in the actual codeunit. Tip: put all business logic in an &ldquo;<a href="https://alguidelines.dev/bcpatterns/generic-method-pattern/">Method Codeunit</a>&rdquo;.</p>
|
||
<p>Examples:</p>
|
||
<ul>
|
||
<li>if you app does things on Sales and Purchase, create a Sales-subs codeunit, and a Purchase-subs.</li>
|
||
<li>if you have multiple functionalities in your app (let&rsquo;s call&rsquo;m modules), create a subs-codeunit per module, and only add the subscribers in there that are necessary for that module.</li>
|
||
</ul>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">2037325</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Setup Subs&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SingleInstance<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">ModuleInfo</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameListLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Linked Texts Framework - List&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionListLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Edit linked texts&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordListLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;LT,Distri,Technical,Functional,Reports&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameReportLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Linked Texts Framework - Reports&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionReportLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;View linked texts reports&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordReportLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;LT,Distri,Technical,Functional,Reports&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>navapp<span style="color:#ce5c00;font-weight:bold">.</span>GetCurrentModuleInfo<span style="color:#ce5c00;font-weight:bold">(</span>AppId<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameListLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionListLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordListLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;LTE Linked Text List&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameReportLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionReportLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordReportLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;LTE Linked Texts Reports&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">ModuleInfo</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameLayoutLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Report Helper - Layout&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionLayoutLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Set up or update report layout list&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordLayoutLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RH,Distri,Technical,Functional,Reports,Layout&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameCaptionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Report Helper - Captions&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionCaptionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Set up or update captions list&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordCaptionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RH,Distri,Technical,Functional,Reports,Captions&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameFunctionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Report Helper - Functions&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionFunctionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Set up or disable functions&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordFunctionsLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RH,Distri,Technical,Functional,Reports,Functions&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameDFCLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Report Helper - Default Footer&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionDFCLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Set up or update default footer&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordDFCLbl<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Label</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RH,Distri,Technical,Functional,Reports,Default,Footer&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Locked<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>navapp<span style="color:#ce5c00;font-weight:bold">.</span>GetCurrentModuleInfo<span style="color:#ce5c00;font-weight:bold">(</span>AppId<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameLayoutLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionLayoutLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordLayoutLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;RHE Report Layout List&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameCaptionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionCaptionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordCaptionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;RHE Captions&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameFunctionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionFunctionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordFunctionsLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;RHE Functions&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Sender<span style="color:#ce5c00;font-weight:bold">.</span>Insert<span style="color:#ce5c00;font-weight:bold">(</span>NameDFCLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>DescriptionDFCLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>KeyWordDFCLbl<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">page</span><span style="color:#000;font-weight:bold">::</span>&#34;RHE Default Footer Card&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>AppId<span style="color:#ce5c00;font-weight:bold">.</span>Id<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup Category&#34;<span style="color:#000;font-weight:bold">::</span>General<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<p>Split into 2 codeunits, and move the business logic out.</p>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">2037325</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;LTE Setup Subs&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SingleInstance<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterLTEManualSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Register LTE Manual Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterLTEManualSetup<span style="color:#ce5c00;font-weight:bold">.</span>RegisterLTEManualSetup<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">2037324</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;RHE Setup Subs&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SingleInstance<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Register RHE Manual Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">.</span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="work-with-a-single-instance-codeunit">Work with a single instance codeunit</h2>
|
||
<p>To avoid the extra &ldquo;loading of the content&rdquo; while a subscriber is being executed, use Single Instance codeunit for subscribers. Do take into account, of course, that it would share the state across the entire session.</p>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">2037324</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;RHE Setup Subs&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Register RHE Manual Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">.</span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">2037324</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;RHE Setup Subs&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>{<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SingleInstance<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#000;font-weight:bold">::</span>&#34;Manual Setup&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnRegisterManualSetup&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnRegisterManualSetup<span style="color:#ce5c00;font-weight:bold">(</span>sender<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Manual Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Register RHE Manual Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">.</span>RegisterRHEManualSetup<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>}<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="only-subscribe-when-necessary">only subscribe when necessary</h2>
|
||
<p>If possible, only execute the subscriber when really necessary by using Manual Binding.</p>
|
||
<h3 id="bad-code-2">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">//subscriber - code should actually only run when Color=Red.
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"></span><span style="color:#f8f8f8;text-decoration:underline"> </span>[EventSubscriber<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">ObjectType</span><span style="color:#000;font-weight:bold">::</span><span style="color:#204a87;font-weight:bold">Table</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Database</span><span style="color:#000;font-weight:bold">::</span>&#34;Just Some Table WLD&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;OnAfterValidateEvent&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Message 2&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustDoSomthing<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Just Some Table WLD&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>xRec<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Just Some Table WLD&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Rec<span style="color:#ce5c00;font-weight:bold">.</span>color<span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;&gt;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RED&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">exit</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">//only execute when necessary
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"></span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic">//business logic
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"></span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Validate<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Message 2&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>format<span style="color:#ce5c00;font-weight:bold">(</span>Random<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#ce5c00;font-weight:bold">)))</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>&lt;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-2">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-AL" data-lang="AL"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>FindSet<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">repeat</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Color<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RED&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>BindSubscription<span style="color:#ce5c00;font-weight:bold">(</span>DemoSubs<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Validate<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Message 2&#34;<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>format<span style="color:#ce5c00;font-weight:bold">(</span>Random<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#0000cf;font-weight:bold">1000</span><span style="color:#ce5c00;font-weight:bold">)))</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Color<span style="color:#f8f8f8;text-decoration:underline"> </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;RED&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>UnbindSubscription<span style="color:#ce5c00;font-weight:bold">(</span>DemoSubs<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">until</span><span style="color:#f8f8f8;text-decoration:underline"> </span>JustSomeTable<span style="color:#ce5c00;font-weight:bold">.</span>Next<span style="color:#ce5c00;font-weight:bold">() </span>&lt;<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="avoid-oninsertonmodifyondelete">Avoid OnInsert/OnModify/OnDelete</h2>
|
||
<p>The reason for this is, that it breaks the batch-calls:</p>
|
||
<ul>
|
||
<li>Any &ldquo;OnInsert&rdquo; subscriber breaks the bulk inserts, simply because it needs to perform an operation after every record that was inserted</li>
|
||
<li>Any &ldquo;OnModify&rdquo; subscriber slows down the &ldquo;ModifyAll&rdquo;, simply because it needs to perform an operation after every record that was modified. I fact: 1 SQL call is turned into a loop of SQL calls.</li>
|
||
<li>Any &ldquo;OnDelete&rdquo; subscriber slows down the &ldquo;DeleteAll&rdquo;, simply because it needs to perform an operation after every record that was deleted. I fact: 1 SQL call is turned into a loop of SQL calls.</li>
|
||
</ul>
|
||
<p>Avoid subscribers to these events.</p>
|
||
<h2 id="references">References</h2>
|
||
<p>The <a href="https://alguidelines.dev/bcpatterns/generic-method-pattern/">Generic Method Pattern</a></p></description></item><item><title>Docs: Suggested Abbreviations</title><link>https://alguidelines.dev/docs/bestpractices/suggested-abbreviations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/suggested-abbreviations/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Whenever possible, do <strong>not</strong> use abbreviations in variables, functions and objects names.</p>
|
||
<p>If there is no other choice, then use the suggestions below.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>word</th>
|
||
<th>Abbreviation</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>absence</td>
|
||
<td>Abs</td>
|
||
</tr>
|
||
<tr>
|
||
<td>account</td>
|
||
<td>Acc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>accounting</td>
|
||
<td>Acc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>accumulated</td>
|
||
<td>Accum</td>
|
||
</tr>
|
||
<tr>
|
||
<td>action</td>
|
||
<td>Act</td>
|
||
</tr>
|
||
<tr>
|
||
<td>activity</td>
|
||
<td>Activ</td>
|
||
</tr>
|
||
<tr>
|
||
<td>additional</td>
|
||
<td>Add</td>
|
||
</tr>
|
||
<tr>
|
||
<td>address</td>
|
||
<td>Addr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>adjust</td>
|
||
<td>Adj</td>
|
||
</tr>
|
||
<tr>
|
||
<td>adjusted</td>
|
||
<td>Adjd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>adjustment</td>
|
||
<td>Adjmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>agreement</td>
|
||
<td>Agrmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>allocation</td>
|
||
<td>Alloc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>allowance</td>
|
||
<td>Allow</td>
|
||
</tr>
|
||
<tr>
|
||
<td>alternative</td>
|
||
<td>Alt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>amount</td>
|
||
<td>Amt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>amounts</td>
|
||
<td>Amts</td>
|
||
</tr>
|
||
<tr>
|
||
<td>answer</td>
|
||
<td>Ans</td>
|
||
</tr>
|
||
<tr>
|
||
<td>applies</td>
|
||
<td>Appl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>application</td>
|
||
<td>Appln</td>
|
||
</tr>
|
||
<tr>
|
||
<td>arrival</td>
|
||
<td>Arriv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>assembly</td>
|
||
<td>Asm</td>
|
||
</tr>
|
||
<tr>
|
||
<td>assemble to order</td>
|
||
<td>ATO</td>
|
||
</tr>
|
||
<tr>
|
||
<td>assignment</td>
|
||
<td>Assgnt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>associated</td>
|
||
<td>Assoc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>attachment</td>
|
||
<td>Attmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>authorities</td>
|
||
<td>Auth</td>
|
||
</tr>
|
||
<tr>
|
||
<td>automatic</td>
|
||
<td>Auto</td>
|
||
</tr>
|
||
<tr>
|
||
<td>availability</td>
|
||
<td>Avail</td>
|
||
</tr>
|
||
<tr>
|
||
<td>average</td>
|
||
<td>Avg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ba db.</td>
|
||
<td>BA</td>
|
||
</tr>
|
||
<tr>
|
||
<td>balance</td>
|
||
<td>Bal</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bill of materials</td>
|
||
<td>BOM</td>
|
||
</tr>
|
||
<tr>
|
||
<td>blanket</td>
|
||
<td>Blnkt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>budget</td>
|
||
<td>Budg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>buffer</td>
|
||
<td>Buf</td>
|
||
</tr>
|
||
<tr>
|
||
<td>business</td>
|
||
<td>Bus</td>
|
||
</tr>
|
||
<tr>
|
||
<td>business interaction management</td>
|
||
<td>BIM</td>
|
||
</tr>
|
||
<tr>
|
||
<td>buying</td>
|
||
<td>Buy</td>
|
||
</tr>
|
||
<tr>
|
||
<td>calculate</td>
|
||
<td>Calc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>calculated</td>
|
||
<td>Calcd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>calculation</td>
|
||
<td>Calcu</td>
|
||
</tr>
|
||
<tr>
|
||
<td>calendar</td>
|
||
<td>Cal</td>
|
||
</tr>
|
||
<tr>
|
||
<td>capacity</td>
|
||
<td>Cap</td>
|
||
</tr>
|
||
<tr>
|
||
<td>capacity requirements planning</td>
|
||
<td>CRP</td>
|
||
</tr>
|
||
<tr>
|
||
<td>cash flow</td>
|
||
<td>CF</td>
|
||
</tr>
|
||
<tr>
|
||
<td>cashflow</td>
|
||
<td>CF</td>
|
||
</tr>
|
||
<tr>
|
||
<td>catalog</td>
|
||
<td>ctlg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>category</td>
|
||
<td>Cat</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Central Processing Unit</td>
|
||
<td>CPU</td>
|
||
</tr>
|
||
<tr>
|
||
<td>center</td>
|
||
<td>Ctr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>change</td>
|
||
<td>Chg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>changes</td>
|
||
<td>Chgs</td>
|
||
</tr>
|
||
<tr>
|
||
<td>character</td>
|
||
<td>Char</td>
|
||
</tr>
|
||
<tr>
|
||
<td>characters</td>
|
||
<td>Chars</td>
|
||
</tr>
|
||
<tr>
|
||
<td>charge</td>
|
||
<td>Chrg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>charges</td>
|
||
<td>Chrgs</td>
|
||
</tr>
|
||
<tr>
|
||
<td>check</td>
|
||
<td>Chk</td>
|
||
</tr>
|
||
<tr>
|
||
<td>classification</td>
|
||
<td>Class</td>
|
||
</tr>
|
||
<tr>
|
||
<td>collection</td>
|
||
<td>coll</td>
|
||
</tr>
|
||
<tr>
|
||
<td>column</td>
|
||
<td>col</td>
|
||
</tr>
|
||
<tr>
|
||
<td>comment</td>
|
||
<td>Cmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>company</td>
|
||
<td>Co</td>
|
||
</tr>
|
||
<tr>
|
||
<td>component</td>
|
||
<td>Comp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>completion</td>
|
||
<td>Cmpltn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>components</td>
|
||
<td>Comps</td>
|
||
</tr>
|
||
<tr>
|
||
<td>composition</td>
|
||
<td>Compn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>compression</td>
|
||
<td>Compr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>concurrent</td>
|
||
<td>Concrnt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>confidential</td>
|
||
<td>Conf</td>
|
||
</tr>
|
||
<tr>
|
||
<td>confirmation</td>
|
||
<td>Cnfrmn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>conflict</td>
|
||
<td>Confl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>consolidate</td>
|
||
<td>Consol</td>
|
||
</tr>
|
||
<tr>
|
||
<td>consolidation</td>
|
||
<td>Consolid</td>
|
||
</tr>
|
||
<tr>
|
||
<td>consumption</td>
|
||
<td>Consump</td>
|
||
</tr>
|
||
<tr>
|
||
<td>contact</td>
|
||
<td>Cont</td>
|
||
</tr>
|
||
<tr>
|
||
<td>container</td>
|
||
<td>Cntr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>contract</td>
|
||
<td>Contr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>contracted</td>
|
||
<td>Contrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>control</td>
|
||
<td>Ctrl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>controls</td>
|
||
<td>Ctrls</td>
|
||
</tr>
|
||
<tr>
|
||
<td>conversion</td>
|
||
<td>Conv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>correction</td>
|
||
<td>Cor</td>
|
||
</tr>
|
||
<tr>
|
||
<td>correspondence</td>
|
||
<td>Corres</td>
|
||
</tr>
|
||
<tr>
|
||
<td>corresponding</td>
|
||
<td>Corresp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>cost</td>
|
||
<td>Cst</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sold</td>
|
||
<td>COGS</td>
|
||
</tr>
|
||
<tr>
|
||
<td>credit</td>
|
||
<td>Cr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>cumulate</td>
|
||
<td>Cumul</td>
|
||
</tr>
|
||
<tr>
|
||
<td>currency</td>
|
||
<td>Curr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>current</td>
|
||
<td>Crnt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>customer</td>
|
||
<td>Cust</td>
|
||
</tr>
|
||
<tr>
|
||
<td>customer/vendor</td>
|
||
<td>CV</td>
|
||
</tr>
|
||
<tr>
|
||
<td>daily</td>
|
||
<td>Dly</td>
|
||
</tr>
|
||
<tr>
|
||
<td>dampener</td>
|
||
<td>Damp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>database management system</td>
|
||
<td>DBMS</td>
|
||
</tr>
|
||
<tr>
|
||
<td>date</td>
|
||
<td>D</td>
|
||
</tr>
|
||
<tr>
|
||
<td>definition</td>
|
||
<td>Def</td>
|
||
</tr>
|
||
<tr>
|
||
<td>demonstration</td>
|
||
<td>Demo</td>
|
||
</tr>
|
||
<tr>
|
||
<td>department</td>
|
||
<td>Dept</td>
|
||
</tr>
|
||
<tr>
|
||
<td>department/project</td>
|
||
<td>DP</td>
|
||
</tr>
|
||
<tr>
|
||
<td>depreciation</td>
|
||
<td>Depr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>description</td>
|
||
<td>Desc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>detail</td>
|
||
<td>Dtl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>detailed</td>
|
||
<td>Dtld</td>
|
||
</tr>
|
||
<tr>
|
||
<td>details</td>
|
||
<td>Dtls</td>
|
||
</tr>
|
||
<tr>
|
||
<td>deviation</td>
|
||
<td>Dev</td>
|
||
</tr>
|
||
<tr>
|
||
<td>difference</td>
|
||
<td>Diff</td>
|
||
</tr>
|
||
<tr>
|
||
<td>dimension</td>
|
||
<td>Dim</td>
|
||
</tr>
|
||
<tr>
|
||
<td>direct</td>
|
||
<td>Dir</td>
|
||
</tr>
|
||
<tr>
|
||
<td>discount</td>
|
||
<td>Disc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>discrete</td>
|
||
<td>Discr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>distribute</td>
|
||
<td>Distr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>distributed</td>
|
||
<td>Distrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>distributor</td>
|
||
<td>Distbtr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>distribution</td>
|
||
<td>Distrn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>document</td>
|
||
<td>Doc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>duplicate</td>
|
||
<td>Dupl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>entered</td>
|
||
<td>Entrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>engineering</td>
|
||
<td>Engin</td>
|
||
</tr>
|
||
<tr>
|
||
<td>exchange</td>
|
||
<td>Exch</td>
|
||
</tr>
|
||
<tr>
|
||
<td>excluding</td>
|
||
<td>Excl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>execute</td>
|
||
<td>Exec</td>
|
||
</tr>
|
||
<tr>
|
||
<td>expected</td>
|
||
<td>Expd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>expedited</td>
|
||
<td>Exped</td>
|
||
</tr>
|
||
<tr>
|
||
<td>expense</td>
|
||
<td>Exp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>expression</td>
|
||
<td>Expr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>expiration</td>
|
||
<td>Expir</td>
|
||
</tr>
|
||
<tr>
|
||
<td>extended</td>
|
||
<td>Ext</td>
|
||
</tr>
|
||
<tr>
|
||
<td>explode</td>
|
||
<td>Expl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>export</td>
|
||
<td>Expt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>final</td>
|
||
<td>Fnl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finance</td>
|
||
<td>Fin</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fiscal</td>
|
||
<td>Fisc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>finished</td>
|
||
<td>Fnshd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fixed asset</td>
|
||
<td>FA</td>
|
||
</tr>
|
||
<tr>
|
||
<td>forward</td>
|
||
<td>Fwd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>freight</td>
|
||
<td>Frt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>general</td>
|
||
<td>Gen</td>
|
||
</tr>
|
||
<tr>
|
||
<td>general ledger</td>
|
||
<td>GL</td>
|
||
</tr>
|
||
<tr>
|
||
<td>group</td>
|
||
<td>Gr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>header</td>
|
||
<td>Hdr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>history</td>
|
||
<td>Hist</td>
|
||
</tr>
|
||
<tr>
|
||
<td>holiday</td>
|
||
<td>Hol</td>
|
||
</tr>
|
||
<tr>
|
||
<td>human resource</td>
|
||
<td>HR</td>
|
||
</tr>
|
||
<tr>
|
||
<td>identification</td>
|
||
<td>ID</td>
|
||
</tr>
|
||
<tr>
|
||
<td>import</td>
|
||
<td>Imp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>inbound</td>
|
||
<td>Inbnd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>including</td>
|
||
<td>Incl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>included</td>
|
||
<td>Incld</td>
|
||
</tr>
|
||
<tr>
|
||
<td>incoming</td>
|
||
<td>Incmg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>independent software vendor</td>
|
||
<td>ISV</td>
|
||
</tr>
|
||
<tr>
|
||
<td>industry</td>
|
||
<td>Indust</td>
|
||
</tr>
|
||
<tr>
|
||
<td>information</td>
|
||
<td>Info</td>
|
||
</tr>
|
||
<tr>
|
||
<td>initial</td>
|
||
<td>Init</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Intrastat</td>
|
||
<td>Intra</td>
|
||
</tr>
|
||
<tr>
|
||
<td>interaction</td>
|
||
<td>Interact</td>
|
||
</tr>
|
||
<tr>
|
||
<td>integration</td>
|
||
<td>Integr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>interest</td>
|
||
<td>Int</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Interim</td>
|
||
<td>Intm</td>
|
||
</tr>
|
||
<tr>
|
||
<td>internal protocol</td>
|
||
<td>IP</td>
|
||
</tr>
|
||
<tr>
|
||
<td>inventory</td>
|
||
<td>Invt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>inventoriable</td>
|
||
<td>Invtbl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>invoice</td>
|
||
<td>Inv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>invoiced</td>
|
||
<td>Invd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>item tracking</td>
|
||
<td>IT</td>
|
||
</tr>
|
||
<tr>
|
||
<td>journal</td>
|
||
<td>Jnl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>language</td>
|
||
<td>Lang</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ledger</td>
|
||
<td>Ledg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>level</td>
|
||
<td>Lvl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>line</td>
|
||
<td>Ln</td>
|
||
</tr>
|
||
<tr>
|
||
<td>list</td>
|
||
<td>Lt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>local currency</td>
|
||
<td>LCY</td>
|
||
</tr>
|
||
<tr>
|
||
<td>location</td>
|
||
<td>Loc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>mailing</td>
|
||
<td>Mail</td>
|
||
</tr>
|
||
<tr>
|
||
<td>maintenance</td>
|
||
<td>Maint</td>
|
||
</tr>
|
||
<tr>
|
||
<td>management</td>
|
||
<td>Mgt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>manual</td>
|
||
<td>Man</td>
|
||
</tr>
|
||
<tr>
|
||
<td>manufacturing</td>
|
||
<td>Mfg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>manufacturer</td>
|
||
<td>Mfr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>material</td>
|
||
<td>Mat</td>
|
||
</tr>
|
||
<tr>
|
||
<td>marketing</td>
|
||
<td>Mktg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>maximum</td>
|
||
<td>Max</td>
|
||
</tr>
|
||
<tr>
|
||
<td>measure</td>
|
||
<td>Meas</td>
|
||
</tr>
|
||
<tr>
|
||
<td>message</td>
|
||
<td>Msg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>minimum</td>
|
||
<td>Min</td>
|
||
</tr>
|
||
<tr>
|
||
<td>miscellaneous</td>
|
||
<td>Misc</td>
|
||
</tr>
|
||
<tr>
|
||
<td>modify</td>
|
||
<td>Mod</td>
|
||
</tr>
|
||
<tr>
|
||
<td>month</td>
|
||
<td>Mth</td>
|
||
</tr>
|
||
<tr>
|
||
<td>negative</td>
|
||
<td>Neg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>non-inventoriable</td>
|
||
<td>NonInvtbl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>notification</td>
|
||
<td>Notif</td>
|
||
</tr>
|
||
<tr>
|
||
<td>number</td>
|
||
<td>No</td>
|
||
</tr>
|
||
<tr>
|
||
<td>numbers</td>
|
||
<td>Nos</td>
|
||
</tr>
|
||
<tr>
|
||
<td>object</td>
|
||
<td>Obj</td>
|
||
</tr>
|
||
<tr>
|
||
<td>operating</td>
|
||
<td>Oper</td>
|
||
</tr>
|
||
<tr>
|
||
<td>opportunity</td>
|
||
<td>Opp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>order</td>
|
||
<td>Ord</td>
|
||
</tr>
|
||
<tr>
|
||
<td>orders</td>
|
||
<td>Ords</td>
|
||
</tr>
|
||
<tr>
|
||
<td>original</td>
|
||
<td>Orig</td>
|
||
</tr>
|
||
<tr>
|
||
<td>organization</td>
|
||
<td>Org</td>
|
||
</tr>
|
||
<tr>
|
||
<td>outbound</td>
|
||
<td>Outbnd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Outgoing</td>
|
||
<td>Outg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>output</td>
|
||
<td>Out</td>
|
||
</tr>
|
||
<tr>
|
||
<td>outstanding</td>
|
||
<td>Outstd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>overhead</td>
|
||
<td>Ovhd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>payment</td>
|
||
<td>Pmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>percent</td>
|
||
<td>Pct</td>
|
||
</tr>
|
||
<tr>
|
||
<td>personnel</td>
|
||
<td>Persnl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>physical</td>
|
||
<td>Phys</td>
|
||
</tr>
|
||
<tr>
|
||
<td>picture</td>
|
||
<td>Pic</td>
|
||
</tr>
|
||
<tr>
|
||
<td>planning</td>
|
||
<td>Plng</td>
|
||
</tr>
|
||
<tr>
|
||
<td>posted</td>
|
||
<td>Pstd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>posting</td>
|
||
<td>Post</td>
|
||
</tr>
|
||
<tr>
|
||
<td>positive</td>
|
||
<td>Pos</td>
|
||
</tr>
|
||
<tr>
|
||
<td>precision</td>
|
||
<td>Prec</td>
|
||
</tr>
|
||
<tr>
|
||
<td>prepayment</td>
|
||
<td>Prepmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>product</td>
|
||
<td>Prod</td>
|
||
</tr>
|
||
<tr>
|
||
<td>production</td>
|
||
<td>Prod</td>
|
||
</tr>
|
||
<tr>
|
||
<td>production order</td>
|
||
<td>ProdOrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>project</td>
|
||
<td>Proj</td>
|
||
</tr>
|
||
<tr>
|
||
<td>property</td>
|
||
<td>Prop</td>
|
||
</tr>
|
||
<tr>
|
||
<td>prospect</td>
|
||
<td>Prspct</td>
|
||
</tr>
|
||
<tr>
|
||
<td>purchase</td>
|
||
<td>Purch</td>
|
||
</tr>
|
||
<tr>
|
||
<td>purchases</td>
|
||
<td>Purch</td>
|
||
</tr>
|
||
<tr>
|
||
<td>purchaser</td>
|
||
<td>Purchr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>purchase order</td>
|
||
<td>PurchOrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>quality</td>
|
||
<td>Qlty</td>
|
||
</tr>
|
||
<tr>
|
||
<td>quantity</td>
|
||
<td>Qty</td>
|
||
</tr>
|
||
<tr>
|
||
<td>questionnaire</td>
|
||
<td>Questn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>quote</td>
|
||
<td>Qte</td>
|
||
</tr>
|
||
<tr>
|
||
<td>radio frequency</td>
|
||
<td>RF</td>
|
||
</tr>
|
||
<tr>
|
||
<td>range</td>
|
||
<td>Rng</td>
|
||
</tr>
|
||
<tr>
|
||
<td>receipt</td>
|
||
<td>Rcpt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>received</td>
|
||
<td>Rcd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>record</td>
|
||
<td>Rec</td>
|
||
</tr>
|
||
<tr>
|
||
<td>records</td>
|
||
<td>Recs</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reconcile</td>
|
||
<td>Recncl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reconciliation</td>
|
||
<td>Recon</td>
|
||
</tr>
|
||
<tr>
|
||
<td>recurring</td>
|
||
<td>Recur</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reference</td>
|
||
<td>Ref</td>
|
||
</tr>
|
||
<tr>
|
||
<td>register</td>
|
||
<td>Reg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>registration</td>
|
||
<td>Regn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>registered</td>
|
||
<td>Regd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>relation</td>
|
||
<td>Rel</td>
|
||
</tr>
|
||
<tr>
|
||
<td>relations</td>
|
||
<td>Rels</td>
|
||
</tr>
|
||
<tr>
|
||
<td>relationship</td>
|
||
<td>Rlshp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>release</td>
|
||
<td>Rlse</td>
|
||
</tr>
|
||
<tr>
|
||
<td>released</td>
|
||
<td>Rlsd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>remaining</td>
|
||
<td>Rem</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reminder</td>
|
||
<td>Rmdr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>replacement</td>
|
||
<td>Repl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>replenish</td>
|
||
<td>Rplnsh</td>
|
||
</tr>
|
||
<tr>
|
||
<td>replenishment</td>
|
||
<td>Rplnsht</td>
|
||
</tr>
|
||
<tr>
|
||
<td>report</td>
|
||
<td>Rpt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>represent</td>
|
||
<td>Rep</td>
|
||
</tr>
|
||
<tr>
|
||
<td>represented</td>
|
||
<td>Repd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>request</td>
|
||
<td>Rqst</td>
|
||
</tr>
|
||
<tr>
|
||
<td>required</td>
|
||
<td>Reqd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>requirement</td>
|
||
<td>Reqt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>requirements</td>
|
||
<td>Reqts</td>
|
||
</tr>
|
||
<tr>
|
||
<td>requisition</td>
|
||
<td>Req</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reserve</td>
|
||
<td>Rsv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reserved</td>
|
||
<td>Rsvd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reservation</td>
|
||
<td>Reserv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>resolution</td>
|
||
<td>Resol</td>
|
||
</tr>
|
||
<tr>
|
||
<td>resource</td>
|
||
<td>Res</td>
|
||
</tr>
|
||
<tr>
|
||
<td>response</td>
|
||
<td>Rsp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>responsibility</td>
|
||
<td>Resp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>retain</td>
|
||
<td>Rtn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>retained</td>
|
||
<td>Rtnd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>return</td>
|
||
<td>Ret</td>
|
||
</tr>
|
||
<tr>
|
||
<td>returns</td>
|
||
<td>Rets</td>
|
||
</tr>
|
||
<tr>
|
||
<td>revaluation</td>
|
||
<td>Revaln</td>
|
||
</tr>
|
||
<tr>
|
||
<td>reverse</td>
|
||
<td>Rev</td>
|
||
</tr>
|
||
<tr>
|
||
<td>review</td>
|
||
<td>Rvw</td>
|
||
</tr>
|
||
<tr>
|
||
<td>round</td>
|
||
<td>Rnd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>rounded</td>
|
||
<td>Rndd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>rounding</td>
|
||
<td>Rndg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>route</td>
|
||
<td>Rte</td>
|
||
</tr>
|
||
<tr>
|
||
<td>routing</td>
|
||
<td>Rtng</td>
|
||
</tr>
|
||
<tr>
|
||
<td>routine</td>
|
||
<td>Rout</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sales &amp; receivables</td>
|
||
<td>Sales</td>
|
||
</tr>
|
||
<tr>
|
||
<td>safety</td>
|
||
<td>Saf</td>
|
||
</tr>
|
||
<tr>
|
||
<td>schedule</td>
|
||
<td>Sched</td>
|
||
</tr>
|
||
<tr>
|
||
<td>second</td>
|
||
<td>Sec</td>
|
||
</tr>
|
||
<tr>
|
||
<td>segment</td>
|
||
<td>Seg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>select</td>
|
||
<td>Sel</td>
|
||
</tr>
|
||
<tr>
|
||
<td>selection</td>
|
||
<td>Selctn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sequence</td>
|
||
<td>Seq</td>
|
||
</tr>
|
||
<tr>
|
||
<td>serial</td>
|
||
<td>Ser</td>
|
||
</tr>
|
||
<tr>
|
||
<td>serial number</td>
|
||
<td>SN</td>
|
||
</tr>
|
||
<tr>
|
||
<td>service</td>
|
||
<td>Serv</td>
|
||
</tr>
|
||
<tr>
|
||
<td>sheet</td>
|
||
<td>Sh</td>
|
||
</tr>
|
||
<tr>
|
||
<td>shipment</td>
|
||
<td>Shpt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>source</td>
|
||
<td>Src</td>
|
||
</tr>
|
||
<tr>
|
||
<td>special</td>
|
||
<td>Spcl</td>
|
||
</tr>
|
||
<tr>
|
||
<td>specification</td>
|
||
<td>Spec</td>
|
||
</tr>
|
||
<tr>
|
||
<td>specifications</td>
|
||
<td>Specs</td>
|
||
</tr>
|
||
<tr>
|
||
<td>standard</td>
|
||
<td>Std</td>
|
||
</tr>
|
||
<tr>
|
||
<td>frequency</td>
|
||
<td>SF</td>
|
||
</tr>
|
||
<tr>
|
||
<td>statement</td>
|
||
<td>Stmt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>statistical</td>
|
||
<td>Stat</td>
|
||
</tr>
|
||
<tr>
|
||
<td>statistics</td>
|
||
<td>Stats</td>
|
||
</tr>
|
||
<tr>
|
||
<td>stock</td>
|
||
<td>Stk</td>
|
||
</tr>
|
||
<tr>
|
||
<td>stockkeeping unit</td>
|
||
<td>SKU</td>
|
||
</tr>
|
||
<tr>
|
||
<td>stream</td>
|
||
<td>Stm</td>
|
||
</tr>
|
||
<tr>
|
||
<td>structured query language</td>
|
||
<td>SQL</td>
|
||
</tr>
|
||
<tr>
|
||
<td>subcontract</td>
|
||
<td>Subcontr</td>
|
||
</tr>
|
||
<tr>
|
||
<td>subcontracted</td>
|
||
<td>Subcontrd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>subcontracting</td>
|
||
<td>Subcontrg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>substitute</td>
|
||
<td>Sub</td>
|
||
</tr>
|
||
<tr>
|
||
<td>substitution</td>
|
||
<td>Subst</td>
|
||
</tr>
|
||
<tr>
|
||
<td>suggest</td>
|
||
<td>Sug</td>
|
||
</tr>
|
||
<tr>
|
||
<td>suggested</td>
|
||
<td>Sugd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>suggestion</td>
|
||
<td>Sugn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>summary</td>
|
||
<td>Sum</td>
|
||
</tr>
|
||
<tr>
|
||
<td>suspended</td>
|
||
<td>Suspd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>symptom</td>
|
||
<td>Sympt</td>
|
||
</tr>
|
||
<tr>
|
||
<td>synchronize</td>
|
||
<td>Synch</td>
|
||
</tr>
|
||
<tr>
|
||
<td>temporary</td>
|
||
<td>Temp</td>
|
||
</tr>
|
||
<tr>
|
||
<td>total</td>
|
||
<td>Tot</td>
|
||
</tr>
|
||
<tr>
|
||
<td>transaction</td>
|
||
<td>Transac</td>
|
||
</tr>
|
||
<tr>
|
||
<td>transfer</td>
|
||
<td>Trans</td>
|
||
</tr>
|
||
<tr>
|
||
<td>translation</td>
|
||
<td>Transln</td>
|
||
</tr>
|
||
<tr>
|
||
<td>tracking</td>
|
||
<td>Trkg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>troubleshoot</td>
|
||
<td>Tblsht</td>
|
||
</tr>
|
||
<tr>
|
||
<td>troubleshooting</td>
|
||
<td>Tblshtg</td>
|
||
</tr>
|
||
<tr>
|
||
<td>unit of measure</td>
|
||
<td>UOM</td>
|
||
</tr>
|
||
<tr>
|
||
<td>unit test</td>
|
||
<td>UT</td>
|
||
</tr>
|
||
<tr>
|
||
<td>unrealized</td>
|
||
<td>Unreal</td>
|
||
</tr>
|
||
<tr>
|
||
<td>unreserved</td>
|
||
<td>Unrsvd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>update</td>
|
||
<td>Upd</td>
|
||
</tr>
|
||
<tr>
|
||
<td>valuation</td>
|
||
<td>Valn</td>
|
||
</tr>
|
||
<tr>
|
||
<td>value</td>
|
||
<td>Val</td>
|
||
</tr>
|
||
<tr>
|
||
<td>value added tax</td>
|
||
<td>VAT</td>
|
||
</tr>
|
||
<tr>
|
||
<td>variance</td>
|
||
<td>Var</td>
|
||
</tr>
|
||
<tr>
|
||
<td>vendor</td>
|
||
<td>Vend</td>
|
||
</tr>
|
||
<tr>
|
||
<td>warehouse</td>
|
||
<td>Whse</td>
|
||
</tr>
|
||
<tr>
|
||
<td>web shop</td>
|
||
<td>WS</td>
|
||
</tr>
|
||
<tr>
|
||
<td>worksheet</td>
|
||
<td>Wksh</td>
|
||
</tr>
|
||
<tr>
|
||
<td>g/l</td>
|
||
<td>GL</td>
|
||
</tr>
|
||
<tr>
|
||
<td>%</td>
|
||
<td>Pct</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3-tier</td>
|
||
<td>Three-Tier</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Outlook Synch</td>
|
||
<td>Osynch</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></description></item><item><title>Docs: Unnecessary else</title><link>https://alguidelines.dev/docs/bestpractices/unnecessary-else/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/unnecessary-else/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p><code>else</code> should not be used when the last action in the <code>then</code> part is an <code>exit</code>, <code>break</code>, <code>skip</code>, <code>quit</code>, <code>error</code>.</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SomeProcedure<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsAdjmtBinCodeChanged<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Error<span style="color:#ce5c00;font-weight:bold">(</span>AdjmtBinCodeChangeNotAllowedErr<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Error<span style="color:#ce5c00;font-weight:bold">(</span>BinCodeChangeNotAllowedErr<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>SomeProcedure<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsAdjmtBinCodeChanged<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Error<span style="color:#ce5c00;font-weight:bold">(</span>AdjmtBinCodeChangeNotAllowedErr<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"> </span>Error<span style="color:#ce5c00;font-weight:bold">(</span>BinCodeChangeNotAllowedErr<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">...)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Unnecessary true/false</title><link>https://alguidelines.dev/docs/bestpractices/unnecessary-truefalse/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/unnecessary-truefalse/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Do not use <code>true</code> or <code>false</code> keywords unnecessarily if the expression is already an logical expression.</p>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsPositive<span style="color:#ce5c00;font-weight:bold">() </span>=<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>IsPositive<span style="color:#ce5c00;font-weight:bold">() </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Complete<span style="color:#f8f8f8;text-decoration:underline"> </span>&lt;&gt;<span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Complete<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div></description></item><item><title>Docs: Variable Naming</title><link>https://alguidelines.dev/docs/bestpractices/variable-naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/variable-naming/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Variables that refer to a AL object must contain the objects name, abbreviated where necessary.</p>
|
||
<p>A variable must begin with a capital letter.</p>
|
||
<p>Blanks, periods, and other characters (such as parentheses) that would make quotation marks around a variable necessary must be omitted.</p>
|
||
<p>If a variable is a compound of two or more words or abbreviations, each word or abbreviation should begin with a capital letter.</p>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>WIPBuffer<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Job WIP Buffer&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>JobWIPBuffer<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Job WIP Buffer&#34;<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Postline<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Gen. Jnl.-Post Line&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GenJnlPostLine<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Codeunit</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Gen. Jnl.-Post Line&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-3">Example 3</h2>
|
||
<h3 id="bad-code-2">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;Amount (LCY)&#34;<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Decimal</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-2">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>AmountLCY<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Decimal</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="tips">Tips</h2>
|
||
<p>The <a href="https://marketplace.visualstudio.com/items?itemName=rasmus.al-var-helper">AL Variable Helper</a> extension provides Intellisense support to assign correct variable names in AL.</p></description></item><item><title>Docs: Variables Declarations Order</title><link>https://alguidelines.dev/docs/bestpractices/variables-declarations-order/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/variables-declarations-order/</guid><description>
|
||
<p><em>Created by Microsoft, Described by waldo</em></p>
|
||
<h2 id="description">Description</h2>
|
||
<p>Variables declarations should be ordered by type. In general, object and complex variable types are listed first followed by simple variables. The order should be:</p>
|
||
<ul>
|
||
<li>Record</li>
|
||
<li>Report</li>
|
||
<li>Codeunit</li>
|
||
<li>XmlPort</li>
|
||
<li>Page</li>
|
||
<li>Query</li>
|
||
<li>Notification</li>
|
||
<li>BigText</li>
|
||
<li>DateFormula</li>
|
||
<li>RecordId</li>
|
||
<li>RecordRef</li>
|
||
<li>FieldRef</li>
|
||
<li>FilterPageBuilder</li>
|
||
</ul>
|
||
<p>(Ref: <a href="https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/analyzers/codecop-aa0021">Microsoft Docs</a>)</p>
|
||
<h2 id="bad-code">Bad code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartingDateFilter<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Text</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Vendor<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Vendor<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="good-code">Good code</h2>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Vendor<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Vendor<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>StartingDateFilter<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Text</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="tips">Tips</h2>
|
||
<p>The <a href="https://marketplace.visualstudio.com/items?itemName=andrzejzwierzchowski.al-code-outline">AZ AL Dev Tools/AL Code Outline</a> extension adds two new commands to Visual Studio Code to sorts variables.</p>
|
||
<ul>
|
||
<li><code>Sort Variables in the Active Editor</code> : sorts variables in the current editor</li>
|
||
<li><code>Sort Variables in the Active Project</code> : sorts variables in the current project</li>
|
||
</ul></description></item><item><title>Docs: When not to use Blank Lines</title><link>https://alguidelines.dev/docs/bestpractices/blank-lines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/bestpractices/blank-lines/</guid><description>
|
||
<h2 id="description">Description</h2>
|
||
<p>Do not use blank lines:</p>
|
||
<ul>
|
||
<li>at the beginning or end of any functions (after <code>begin</code> and before <code>end</code>)</li>
|
||
<li>inside multiline expression</li>
|
||
<li>after blank lines</li>
|
||
</ul>
|
||
<h2 id="example-1">Example 1</h2>
|
||
<h3 id="bad-code">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>MATRIX_OnDrillDown<span style="color:#ce5c00;font-weight:bold">(</span>MATRIX_ColumnOrdinal<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Integer</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SetupDrillDownCol<span style="color:#ce5c00;font-weight:bold">(</span>MATRIX_ColumnOrdinal<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DrillDown<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValueType<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>MATRIX_OnDrillDown<span style="color:#ce5c00;font-weight:bold">(</span>MATRIX_ColumnOrdinal<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Integer</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>SetupDrillDownCol<span style="color:#ce5c00;font-weight:bold">(</span>MATRIX_ColumnOrdinal<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>DrillDown<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>ValueType<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-2">Example 2</h2>
|
||
<h3 id="bad-code-1">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameIsValid<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">and</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Name2IsValid<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-1">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span>NameIsValid<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">and</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>Name2IsValid<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="example-3">Example 3</h2>
|
||
<h3 id="bad-code-2">Bad code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;General Ledger Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Boolean</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GetGLSetup<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#ce5c00;font-weight:bold">.</span>Get<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnAfterGetGLSetup<span style="color:#ce5c00;font-weight:bold">(</span>GLSetup<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>[IntegrationEvent<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnAfterGetGLSetup<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;General Ledger Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h3 id="good-code-2">Good code</h3>
|
||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-al" data-lang="al"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;General Ledger Setup&#34;<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Boolean</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GetGLSetup<span style="color:#ce5c00;font-weight:bold">()
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">if</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">then</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#ce5c00;font-weight:bold">.</span>Get<span style="color:#ce5c00;font-weight:bold">()</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetupRead<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8;text-decoration:underline"> </span>true<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnAfterGetGLSetup<span style="color:#ce5c00;font-weight:bold">(</span>GLSetup<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span>[IntegrationEvent<span style="color:#ce5c00;font-weight:bold">(</span>false<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>false<span style="color:#ce5c00;font-weight:bold">)</span>]<span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">local</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">procedure</span><span style="color:#f8f8f8;text-decoration:underline"> </span>OnAfterGetGLSetup<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">var</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GLSetup<span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">Record</span><span style="color:#f8f8f8;text-decoration:underline"> </span>&#34;General Ledger Setup&#34;<span style="color:#ce5c00;font-weight:bold">)
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">begin</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">end</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline">
|
||
</span></span></span></code></pre></div><h2 id="tips">Tips</h2>
|
||
<p>The <a href="https://marketplace.visualstudio.com/items?itemName=andrzejzwierzchowski.al-code-outline">AZ AL Dev Tools/AL Code Outline</a> extension adds two new commands to Visual Studio Code to remove empty duplicate lines.</p>
|
||
<ul>
|
||
<li><code>Remove Empty Lines from the Active Editor</code> : removes empty duplicate lines from the current editor</li>
|
||
<li><code>Remove Empty Lines from the Active Project</code> : removes empty duplicate lines from the current project</li>
|
||
</ul></description></item></channel></rss> |