alguidelines.dev - Business Central Design Patterns – Localizabilityhttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/Recent content in Localizability on alguidelines.dev - Business Central Design PatternsHugo -- gohugo.ioen-usDocs: CaptionML on System Pageshttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/Mon, 01 Jan 0001 00:00:00 +0000https://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ <p>CaptionML should always be specified on a page field for a system table. By default, system tables do not have captions, so if you need to use them in the UI then captions need to be added.</p> <p>Bad code</p> <pre><code>... { 2 ;2 ;Field ; SourceExpr=Name } ... OBJECT Table 2000000000 User ... { 2 ; ;Name ;Text50 } </code></pre> <p>Good code</p> <pre><code>... { 2 ;2 ;Field ; CaptionML=ENU=Name; SourceExpr=Name } ... OBJECT Table 2000000000 User ... { 2 ; ;Name ;Text50 } </code></pre>Docs: FIELDCAPTION and TABLECAPTIONhttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/Mon, 01 Jan 0001 00:00:00 +0000https://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ <p>For user messages, errors etc., use FIELDCAPTION not FIELDNAME and TABLECAPTION not TABLENAME.</p> <p>Reason:</p> <ol> <li>The correct translation will be automatically used.</li> <li>If the caption/name changes, then there will be a single point of change needed.</li> </ol> <p>Bad code</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="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>CONFIRM<span style="color:#ce5c00;font-weight:bold">(</span>UpdateLocationQst<span style="color:#000;font-weight:bold">,</span>TRUE<span style="color:#000;font-weight:bold">,</span>FIELDNAME<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Location Code&#34;<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">,</span><span style="color:#ce5c00;font-weight:bold">...) </span></code></pre></div><p>Good code</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="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>CONFIRM<span style="color:#ce5c00;font-weight:bold">(</span>UpdateLocationQst<span style="color:#000;font-weight:bold">,</span>TRUE<span style="color:#000;font-weight:bold">,</span>FIELDCAPTION<span style="color:#ce5c00;font-weight:bold">(</span>&#34;Location Code&#34;<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">,</span><span style="color:#ce5c00;font-weight:bold">...) </span></code></pre></div>Docs: Global Text Constantshttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/Mon, 01 Jan 0001 00:00:00 +0000https://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ <p>Declare Text Constant as global variables.</p> <p>Bad code</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="color:#204a87;font-weight:bold">PROCEDURE</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GetRequirementText@<span style="color:#0000cf;font-weight:bold">6</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 style="color:#204a87;font-weight:bold">Text</span>[<span style="color:#0000cf;font-weight:bold">50</span>]<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </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><span style="color:#f8f8f8;text-decoration:underline"> </span>RequirementOptionsTxt@<span style="color:#0000cf;font-weight:bold">1002</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=Shipment,Receive,Pick,Put-Away&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </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></code></pre></div><p>Good code</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="color:#204a87;font-weight:bold">VAR</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span>RequirementOptionsTxt@<span style="color:#0000cf;font-weight:bold">1002</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=Shipment,Receive,Pick,Put-Away&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#ce5c00;font-weight:bold">... </span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">PROCEDURE</span><span style="color:#f8f8f8;text-decoration:underline"> </span>GetRequirementText@<span style="color:#0000cf;font-weight:bold">6</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 style="color:#204a87;font-weight:bold">Text</span>[<span style="color:#0000cf;font-weight:bold">50</span>]<span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </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></code></pre></div>Docs: Use Text Constantshttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/Mon, 01 Jan 0001 00:00:00 +0000https://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ <p>Pass user messages using Text Constants. It makes translation easy.</p> <p>Bad code</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">ImportAttachmentQst@<span style="color:#0000cf;font-weight:bold">1021</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=&#34;Import attachment &#34;&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#ce5c00;font-weight:bold">... </span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">IF</span><span style="color:#f8f8f8;text-decoration:underline"> </span>CONFIRM<span style="color:#ce5c00;font-weight:bold">(</span>ImportAttachmentQst<span style="color:#f8f8f8;text-decoration:underline"> </span>+<span style="color:#f8f8f8;text-decoration:underline"> </span>Caption<span style="color:#f8f8f8;text-decoration:underline"> </span>+<span style="color:#4e9a06">&#39;?&#39;</span><span style="color:#000;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></code></pre></div><p>Good code</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">ImportAttachmentQst@<span style="color:#0000cf;font-weight:bold">1021</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=&#34;Import attachment %1?&#34;&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#ce5c00;font-weight:bold">... </span><span style="color:#ce5c00;font-weight:bold"></span><span style="color:#204a87;font-weight:bold">IF</span><span style="color:#f8f8f8;text-decoration:underline"> </span>CONFIRM<span style="color:#ce5c00;font-weight:bold">(</span>STRSUBSTNO<span style="color:#ce5c00;font-weight:bold">(</span>ImportAttachmentQst<span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span>Caption<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;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></code></pre></div><p>Bad code</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="color:#ce5c00;font-weight:bold">... </span><span style="color:#ce5c00;font-weight:bold"> </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><span style="color:#f8f8f8;text-decoration:underline"> </span>CONFIRM<span style="color:#ce5c00;font-weight:bold">( </span><span style="color:#ce5c00;font-weight:bold"> </span>STRSUBSTNO<span style="color:#ce5c00;font-weight:bold">( </span><span style="color:#ce5c00;font-weight:bold"> </span><span style="color:#4e9a06">&#39;Difference on Periodic entries: %1 on %2&#39;</span><span style="color:#f8f8f8;text-decoration:underline"> </span>+<span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;Do you want to continue?&#39;</span><span style="color:#000;font-weight:bold">,</span>Balance<span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">Date</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 style="color:#f8f8f8;text-decoration:underline"> </span>TRUE<span style="color:#ce5c00;font-weight:bold">) </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:#f8f8f8;text-decoration:underline"> </span>ERROR<span style="color:#ce5c00;font-weight:bold">(</span><span style="color:#4e9a06">&#39;Program terminated by the user&#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></code></pre></div><p>Good code</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">DiffOnPeriodEntiesQst@<span style="color:#0000cf;font-weight:bold">100</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=&#34;Difference on Periodic entries: %1 on %2\\ Do you want to continue?&#34;&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span>ProgramTerminatedErr@<span style="color:#0000cf;font-weight:bold">200</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">TextConst</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;ENU=&#34;Program terminated by the user&#34;&#39;</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#ce5c00;font-weight:bold">... </span><span style="color:#ce5c00;font-weight:bold"> </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>CONFIRM<span style="color:#ce5c00;font-weight:bold">(</span>STRSUBSTNO<span style="color:#ce5c00;font-weight:bold">(</span>DiffOnPeriodEntiesQst<span style="color:#000;font-weight:bold">,</span>Balance<span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">Date</span><span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;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:#f8f8f8;text-decoration:underline"> </span>ERROR<span style="color:#ce5c00;font-weight:bold">(</span>ProgramTerminatedErr<span style="color:#ce5c00;font-weight:bold">)</span><span style="color:#000;font-weight:bold">;</span><span style="color:#f8f8f8;text-decoration:underline"> </span></code></pre></div>Docs: Using OptionCaptionMLhttps://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/Mon, 01 Jan 0001 00:00:00 +0000https://alguidelines.dev/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ <p>The OptionCaptionML should be filled in for sourceexpression using option data types.</p> <p>Bad code</p> <pre><code>{ 30 ;TextBox ;17850;0 ;150 ;423 ;Name=Selection; SourceExpr=Selection; DataSetFieldName=Selection } ... Selection@1008 : 'Open,Closed,Open and Closed'; ... </code></pre> <p>Good code</p> <pre><code>{ 30 ;TextBox ;17850;0 ;150 ;423 ;Name=Selection; OptionCaptionML=ENU=Open,Closed,Open and Closed; SourceExpr=Selection; DataSetFieldName=Selection } ... Selection@1008 : 'Open,Closed,Open and Closed'; </code></pre>