From cb4e8e2194cc18350df01d92f48c0d30f3983331 Mon Sep 17 00:00:00 2001 From: JesperSchulz Date: Mon, 8 Nov 2021 15:53:12 +0000 Subject: [PATCH] deploy: 81ffc9da10f644bca6b46e5ddcd6a415f250da59 --- 404.html | 18 +- CNAME | 1 - bcbestpractices/index.html | 42 +- bcpatterns/index.html | 42 +- categories/index.html | 42 +- index.html | 44 +-- index.json | 2 +- .../1-patterns/activity-log/index.html | 42 +- .../1-patterns/argument-table/index.html | 80 ++-- .../data-driven-blocked-entity/index.html | 70 ++-- .../1-patterns/blocked-entity/index.html | 42 +- .../1-patterns/blocked-entity/index.xml | 6 +- .../cached-web-service-calls/index.html | 42 +- .../conditional-cascading-update/index.html | 62 +-- .../copy-document/clip_image002.gif-750x0.png | Bin 0 -> 36335 bytes .../copy-document/clip_image004.gif-750x0.png | Bin 0 -> 156528 bytes .../1-patterns/copy-document/index.html | 50 +-- .../create-data-from-templates/index.html | 114 +++--- .../create-urls-to-nav-clients/index.html | 362 +++++++++++------- .../creating-custom-charts/index.html | 77 ++-- .../cross-session-events/index.html | 236 ++++++------ .../currently-active-record/index.html | 137 +++---- .../data-migration-facade/index.html | 284 +++++++------- .../1-patterns/discovery-event/index.html | 42 +- navpatterns/1-patterns/document/index.html | 42 +- .../index.html | 42 +- .../error-message-processing/index.html | 42 +- .../index.html | 42 +- .../index.html | 42 +- navpatterns/1-patterns/hooks/index.html | 42 +- .../index.html | 42 +- navpatterns/1-patterns/index.html | 42 +- navpatterns/1-patterns/index.xml | 6 +- .../instructions-in-the-ui/index.html | 42 +- .../integration-of-addresses/index.html | 42 +- .../journal-error-processing/index.html | 42 +- .../journal-template-batch-line/index.html | 42 +- navpatterns/1-patterns/master-data/index.html | 42 +- .../1-patterns/multi-file-download/index.html | 42 +- .../1-patterns/multi-page-list/index.html | 42 +- .../multilanguage-application-data/index.html | 42 +- .../net-exception-handling-in-cal/index.html | 42 +- .../index.html | 42 +- navpatterns/1-patterns/no-series/index.html | 42 +- .../in-context-notifications/index.html | 42 +- .../1-patterns/notifications/index.html | 42 +- .../index.html | 42 +- navpatterns/1-patterns/observer/index.html | 42 +- .../index.html | 42 +- .../1-patterns/product-name/index.html | 42 +- navpatterns/1-patterns/queries/index.html | 42 +- .../select-distinct-with-queries/index.html | 42 +- .../index.html | 42 +- .../index.html | 42 +- .../index.html | 42 +- .../1-patterns/released-entity/index.html | 42 +- .../1-patterns/report-selection/index.html | 42 +- navpatterns/1-patterns/security/index.html | 42 +- .../setup-specificity-fallback/index.html | 42 +- .../index.html | 42 +- navpatterns/1-patterns/singleton/index.html | 42 +- .../singleton/singleton-codeunit/index.html | 42 +- .../singleton-table/cue-table/index.html | 42 +- .../singleton/singleton-table/index.html | 42 +- .../singleton-table/setup-table/index.html | 42 +- .../1-patterns/standard-journal/index.html | 42 +- .../temporary-dataset-report/index.html | 42 +- .../index.html | 42 +- .../transfer-custom-fields/index.html | 42 +- .../1-patterns/variant-facade/index.html | 44 +-- navpatterns/2-anti-patterns/index.html | 42 +- navpatterns/2-anti-patterns/index.xml | 2 +- .../2-anti-patterns/nav-upgrade/index.html | 42 +- .../2-anti-patterns/reusable-bugs/index.html | 52 ++- .../3-cal-coding-guidelines/design/index.html | 42 +- .../3-cal-coding-guidelines/index.html | 42 +- .../internally-used-dot-net-types/index.html | 42 +- .../internationalization/index.html | 42 +- .../using-calcdate/index.html | 42 +- .../captionml-for-system-tables/index.html | 42 +- .../fieldcaption-and-tablecaption/index.html | 42 +- .../global-text-constants/index.html | 42 +- .../localizability/index.html | 42 +- .../use-text-constants/index.html | 42 +- .../using-optioncaptionml/index.html | 42 +- .../begin-as-an-afterword/index.html | 42 +- .../readability/begin-end/index.html | 42 +- .../binary-operator-line-start/index.html | 42 +- .../readability/blank-lines/index.html | 42 +- .../readability/case-actions/index.html | 42 +- .../colon-usage-in-case/index.html | 42 +- .../comments-curly-brackets/index.html | 42 +- .../readability/comments-spacing/index.html | 42 +- .../readability/end-else-pair/index.html | 42 +- .../readability/indentation/index.html | 42 +- .../readability/index.html | 42 +- .../keyword-pairs-indentation/index.html | 42 +- .../line-start-keywords/index.html | 42 +- .../readability/lonely-repeat/index.html | 42 +- .../readability/named-invocations/index.html | 42 +- .../readability/nested-withs/index.html | 42 +- .../one-statement-per-line/index.html | 42 +- .../separate-if-and-else/index.html | 42 +- .../spacing-binary-operators/index.html | 42 +- .../spacing-brackets-and/index.html | 42 +- .../spacing-unary-operators/index.html | 42 +- .../suggested-abbreviations/index.html | 42 +- .../temporary-variable-naming/index.html | 42 +- .../readability/textconst-suffixes/index.html | 42 +- .../unary-operator-line-end/index.html | 42 +- .../index.html | 42 +- .../readability/unnecessary-else/index.html | 42 +- .../index.html | 42 +- .../unnecessary-separators/index.html | 42 +- .../unnecessary-truefalse/index.html | 42 +- .../variable-already-scoped/index.html | 42 +- .../readability/variable-naming/index.html | 42 +- .../variables-declarations-order/index.html | 42 +- .../ux/actions-images/index.html | 42 +- .../ux/confirm/index.html | 42 +- .../ux/fielderror/index.html | 42 +- .../3-cal-coding-guidelines/ux/index.html | 42 +- .../ux/message-and-error/index.html | 42 +- .../4-get-involved/code-of-conduct/index.html | 42 +- navpatterns/4-get-involved/index.html | 42 +- .../patterns-authors/index.html | 42 +- .../index.html | 42 +- navpatterns/index.html | 42 +- navpatterns/related-links/index.html | 42 +- tags/index.html | 42 +- welcome/index.html | 42 +- 131 files changed, 3191 insertions(+), 3076 deletions(-) delete mode 100644 CNAME create mode 100644 navpatterns/1-patterns/copy-document/clip_image002.gif-750x0.png create mode 100644 navpatterns/1-patterns/copy-document/clip_image004.gif-750x0.png diff --git a/404.html b/404.html index aab24519..d26e1168 100644 --- a/404.html +++ b/404.html @@ -2,17 +2,17 @@ - + 404 Page not found :: BC AL Help - - - - - - - - + + + + + + + + diff --git a/CNAME b/CNAME deleted file mode 100644 index b62ee1d5..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -bcalhelp.dev \ No newline at end of file diff --git a/bcbestpractices/index.html b/bcbestpractices/index.html index 76b4e0a3..a659bbf1 100644 --- a/bcbestpractices/index.html +++ b/bcbestpractices/index.html @@ -2,20 +2,20 @@ - + BC Dev. Best Practices :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev - - - + + +
- - - + + +
- - - + + +
- - - + + +
- - - + + +
- - - + + +
@@ -215,23 +219,23 @@ BC AL Help . dev

Argument Table

-

Argument table pattern

-

Originally By Nikola Kukrika and Waldo

-

Abstract

+

Argument table pattern

+

Originally By Nikola Kukrika and waldo

+

Abstract

The Argument Table pattern is used to provide an extension point for adding new arguments without changing the signature. By grouping multiple arguments into a table the code becomes more readable (function signature and the usage of the function).

-

Problem

+

Problem

In CAL overloading function signature is not supported. It is also not possible to provide default values for the function arguments.

When an argument needs to be added to the function, the existing function needs to be extracted to a new method with an additional argument and the original function will call new method. This will cause an upgrade problem in the future, since the entire body of the method is replaced.

Second commonly occurring problem is option duplication. In order to pass options often they are duplicated in the signature.

The last problem that can be solved is high number of arguments. Functions with a high number of arguments are hard to understand. Having arguments grouped within the table with a meaningful name will improve readability and make code easier to understanding.

Few examples of the bad implementations are as illustrated here:

-

Bad example 1

+

Bad example 1

PROCEDURE FillInVATReturnData@1200001(VAR DeclarationID@1200000 : Code [20];VAR LineID@1200001 : Code [20];VAR PeerID@1200002 : Code [20]; VAR DocumentNo@1200003: Code[20]; VAR NumberOfCopies@1200007: Integer; VAR Uploaded@1200004 : Boolean; VAR Correction@1200005 : Boolean; VAR HasValidationErr@1200006 : Boolean);
 

Call

FillInVATReturnData(NoSeries, NextLineID, CustomerID, DocumentNo, SingleCopy, ???, ??, ...., ...)
 

In this example the code is hard to read and understand. Adding an additional argument will require refactoring of the existing function. Each time a new argument is added a new function will be created.

-

Bad example 2

+

Bad example 2

LOCAL PROCEDURE GetTableSyncSetupW1@3(OldTableId@1002 : Integer; VAR UpgradeTableId@1001 : Integer; VAR TableUpgradeMode@1000 : 'Check, Copy, Move, Force') : Boolean;  
 BEGIN  
     CASE OldTableId OF  
@@ -247,13 +251,13 @@ BC AL Help . dev
     EXIT(TRUE);  
 END;
 

In this example each time a new argument is added all function calls will have to be updated. Option is duplicated in the signature, which will cause issues if a new option is defined or the existing options are renamed.

-

Solution

+

Solution

By grouping the arguments within the table it is possible to add additional argument and reuse it where it is needed without changing the signature.

Multiple parameters are grouped within the single object with a meaningful name so the code becomes more readable.

It is possible to assign default values and to have the code validation.

Argument table should preferably be a temporary table since the implementation is simpler.

The examples of usages addressing problems shown above are:

-

Good example 1

+

Good example 1

New table

TAB 50003 VAT Return Data  
 PROCEDURE FillInVATReturnData@1200001(VAR VATReturnData@1200000 : Record 50003);
@@ -264,7 +268,7 @@ VATReturnData.Uploaded (VATReturnData);
 

By introducing an argument table, code is much more readable since there is a single argument for a function. It is easy to see which arguments are passed in and which are modified in a function.

-

Good example 2

+

Good example 2

Good example

PROCEDURE GetTableSyncSetupW1@3(VAR TableSynchSetup@1000 : Record 2000000135); 
 BEGIN  
@@ -273,12 +277,12 @@ FillInVATReturnData(VATReturnData(DATABASE::"Payment Export Data",0,TableSynchSetup.Mode::Force);  
 END;
 

Option definition is not encapsulated within the table. Arguments are grouped and we can add additional arguments without the need to change the signature.

-

Downsides

+

Downsides

You need to create one more table

Complex types can’t be embedded as fields in tables (cannot have a record field type etc).

-

NAV Usages

+

Upgrade Codeunits

-

Related Patterns

+

Posting Routine, Select behavior: Setting fields on existing records in order not to change the signatures.

@@ -292,12 +296,12 @@ FillInVATReturnData(VATReturnData
- - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/index.html b/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/index.html index 359d0b4b..49a2c70a 100644 --- a/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/index.html +++ b/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/index.html @@ -2,19 +2,19 @@ - + Data Driven Blocked Entity :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev - - - + + +
    @@ -199,7 +199,17 @@ BC AL Help . dev
@@ -208,9 +218,9 @@ BC AL Help . dev

Data Driven Blocked Entity

Written by Bogdan Andrei Sturzoiu, at Microsoft Development Center Copenhagen

-

Abstract

+

Abstract

This pattern implements a generic mechanism for dynamically restricting and allowing usage of a record by the business process administrator.

-

Problem

+

Problem

A NAV record can be used in a number of functionalities across the app. There are situations, however, when the administrator wants to restrict the consumption of such a record, as well as lift the restriction when it is no longer relevant.

For example, a new customer record should not be used for posting documents until it is approved by the relevant approver.

We could solve this by using the Blocked Entity pattern, but it requires database schema changes, which have an upgrade impact.

@@ -220,7 +230,7 @@ BC AL Help . dev
  • Adding specific code for the record in every place where the restriction needs to be enforced.
  • In contrast, the Data-driven Blocked Entity pattern involves adding a new record (data change) to mark the restriction, instead of adding a new field (metadata change).

    -

    Solution

    +

    Solution

    This pattern describes a generic mechanism of adding and lifting restrictions for any type of record.

    The restriction mechanism has the following elements:

      @@ -234,8 +244,7 @@ BC AL Help . dev
    1. A purpose (e.g. the record cannot be posted).
    2. You must make sure to differentiate between the reason and the purpose. That is because the restriction can only be added once per record, but consumed in multiple places.

      -
      -

      Example

      +

      Example

      For example, we want to restrict posting Gen. Journal Lines if a customer has not been added in Account No. field.

      For this, the following components are needed:

        @@ -243,7 +252,7 @@ BC AL Help . dev
      1. When you validate a Customer No. as Account no. and Customer as Account Type, lift the restrictions by calling AllowRecordUsage in COD1550.
      2. The consumption of the restriction at posting is already implemented as an event in TAB81, OnCheckGenJournalLinePostRestrictions. No further action necessary.
      -

      NAV Usage

      +

      All the approval workflows include a response that restricts usage of a record, and then, at the end of an approval loop, a response that allows the usage again by lifting the restriction. See responses “Add record restriction” and “Remove record restriction” implemented in COD1521.

      The code behind the “Add record restriction” workflow response:

      @@ -270,11 +279,10 @@ RecordRestrictionMgt.RestrictRecordUsage(RecRef.RECORDID,STRSUBSTNO(RestrictUsag RecordRestrictionMgt.AllowRecordUsage(RecRef.RECORDID); END;

      Notice how lifting a restriction for a Gen. Journal Batch involves lifting all the restrictions for the individual journal lines in the batch (hence the special branching of the code).

      -
      -

      Consequences

      +

      Consequences

      Currently, there can only be one restriction per record. There are no restriction types.

      In the future, a type field should be added to the restriction table, to allow adding restrictions for different purposes, and to refine their consumption. For example, a posting restriction might only be enforced for restrictions originating from approvals.

      -

      NAV Versions

      +

      This pattern has been introduced in Dynamics NAV 2016.

      @@ -288,12 +296,12 @@ RecordRestrictionMgt.RestrictRecordUsage(RecRef.RECORDID,STRSUBSTNO(RestrictUsag
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/blocked-entity/index.html b/navpatterns/1-patterns/blocked-entity/index.html index 2d143e21..c6c9a006 100644 --- a/navpatterns/1-patterns/blocked-entity/index.html +++ b/navpatterns/1-patterns/blocked-entity/index.html @@ -2,20 +2,20 @@ - + Blocked Entity :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev - - - + + +
        @@ -286,12 +286,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/blocked-entity/index.xml b/navpatterns/1-patterns/blocked-entity/index.xml index ea8fe699..4550b67e 100644 --- a/navpatterns/1-patterns/blocked-entity/index.xml +++ b/navpatterns/1-patterns/blocked-entity/index.xml @@ -1,5 +1,3 @@ Blocked Entity on BC AL Helphttps://bcalhelp.dev/navpatterns/1-patterns/blocked-entity/Recent content in Blocked Entity on BC AL HelpHugo -- gohugo.ioen-usData Driven Blocked Entityhttps://bcalhelp.dev/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/Written by Bogdan Andrei Sturzoiu, at Microsoft Development Center Copenhagen -Abstract -This pattern implements a generic mechanism for dynamically restricting and allowing usage of a record by the business process administrator. -Problem -A NAV record can be used in a number of functionalities across the app. There are situations, however, when the administrator wants to restrict the consumption of such a record, as well as lift the restriction when it is no longer relevant. \ No newline at end of file +Abstract This pattern implements a generic mechanism for dynamically restricting and allowing usage of a record by the business process administrator. +Problem A NAV record can be used in a number of functionalities across the app. There are situations, however, when the administrator wants to restrict the consumption of such a record, as well as lift the restriction when it is no longer relevant. \ No newline at end of file diff --git a/navpatterns/1-patterns/cached-web-service-calls/index.html b/navpatterns/1-patterns/cached-web-service-calls/index.html index 3280bee7..3f83768c 100644 --- a/navpatterns/1-patterns/cached-web-service-calls/index.html +++ b/navpatterns/1-patterns/cached-web-service-calls/index.html @@ -2,19 +2,19 @@ - + Cached Web Server Calls :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -330,12 +330,12 @@ OnAction=VAR
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/conditional-cascading-update/index.html b/navpatterns/1-patterns/conditional-cascading-update/index.html index ebd7dac3..d9eec37c 100644 --- a/navpatterns/1-patterns/conditional-cascading-update/index.html +++ b/navpatterns/1-patterns/conditional-cascading-update/index.html @@ -2,19 +2,19 @@ - + Conditional Cascading Update :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -200,11 +200,11 @@ BC AL Help . dev @@ -215,18 +215,18 @@ BC AL Help . dev

        Conditional Cascading Update

        _Originally by Jan Hoek at IDYN _

        -

        Abstract

        +

        Abstract

        The Conditional Cascading Update pattern is used to intelligently populate fields whose values depend on other field values. In this pattern description, the field triggering the update will be called “source field”, and the depending field will be called “target field”.

        -

        Description

        +

        Description

        The value of one table field sometimes depends on the value of another field, typically following an application-defined transformation (note that we’re talking about transformations of field values here. This has nothing to do with e.g. form transformation), such as conversion to uppercase, removal of certain characters etc.

        If the target field is non-editable, said transformation is usually the only way for the target field to receive new values, so no irreproducible information can be lost. However, if the target field is editable, the user may have cared enough to override the default (transformed) value, in which case revalidating the source field should not blindly replace the target field’s value.

        -

        Usage

        +

        Usage

        In the OnValidate trigger of the source field, test if the target field value is either blank, or equal to the transformed value of the source field’s previous contents. If it is, populate the target field’s value with the transformed source field value. If it is not, do nothing (effectively preserving the value set by the user).

        - +

        In the base application, this pattern can be found in Search Name/Search Description fields, which are updated with the uppercase value from the corresponding Name/Description field when the latter is validated, only if the Search Name/Description in question is currently blank, or equal to the (uppercase equivalent) of the previous contents of the Name/Description field.

        In this particular case, the transformation between source and target fields is implicit and due to the different data types of the fields (text vs. code). Note how the field triggers of the Search Name field itself do not contain any logic linked to this pattern.

        -

        Consequences

        +

        Consequences

        There is a case when this pattern should not be used. If the target field is non-editable, this pattern will not add any value, since there won’t be any user-overridden values to protect.

        @@ -240,12 +240,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/copy-document/clip_image002.gif-750x0.png b/navpatterns/1-patterns/copy-document/clip_image002.gif-750x0.png new file mode 100644 index 0000000000000000000000000000000000000000..a447a4bf46117092d9dc4e8d0263b37423939174 GIT binary patch literal 36335 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
        O^!q0ic?SQQ)OjF~Mw031 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 literal 0 HcmV?d00001 diff --git a/navpatterns/1-patterns/copy-document/clip_image004.gif-750x0.png b/navpatterns/1-patterns/copy-document/clip_image004.gif-750x0.png new file mode 100644 index 0000000000000000000000000000000000000000..35ebe2220c732b5b600a6c109a8ca2fe28f9cc05 GIT binary patch literal 156528 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 literal 0 HcmV?d00001 diff --git a/navpatterns/1-patterns/copy-document/index.html b/navpatterns/1-patterns/copy-document/index.html index 61691346..445c5b41 100644 --- a/navpatterns/1-patterns/copy-document/index.html +++ b/navpatterns/1-patterns/copy-document/index.html @@ -2,19 +2,19 @@ - + Copy Document :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -253,10 +253,10 @@ BC AL Help . dev
      • Source Document Type
      • Source Document No.
      • Include Header (optional)
      • -
      • Recalculate Lines (optional) -Example: REP901, Copy Assembly Document
      • +
      • Recalculate Lines (optional)
      -

      +

      Example: REP901, Copy Assembly Document

      +

      Usage Sequence

      Precondition: The user creates a new destination document Header, filling up the required information.

      Step 1: The user runs the Copy Document report (element no. 4), filling up the parameters:

      @@ -268,7 +268,7 @@ Example: REP901, Copy Assembly Document

      Step 2: The report copies the information in the source tables (Header and Line) into the destination tables (Header and Line).

      Post processing: The user performs additional editing of the destination document.

      The sequence flow of the pattern is described in the following diagram.

      -

      +

      Example: Copy Sales Document for Credit Memos.

      In the standard version of Microsoft Dynamics NAV, the Copy Document functionality is implemented in the Sales Credit Memo window as shown in the following section.

      ***

      @@ -299,12 +299,12 @@ Example: REP901, Copy Assembly Document
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/create-data-from-templates/index.html b/navpatterns/1-patterns/create-data-from-templates/index.html index c097ff05..1943c4b1 100644 --- a/navpatterns/1-patterns/create-data-from-templates/index.html +++ b/navpatterns/1-patterns/create-data-from-templates/index.html @@ -2,19 +2,19 @@ - + Create Data from Templates :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -250,44 +250,41 @@ BC AL Help . dev

        Code example (Insert a record, apply a template, and insert the related templates):

        // First insert a record Customer.INSERT(TRUE);

        // Apply a template RecRef.GETTABLE(Customer);

        -

        ConfigTemplateMgt.UpdateRecord(ConfigTemplateHeader,RecRef);

        -

        RecRef.SETTABLE(Customer);

        -

        // Insert Dimensions – related templates

        -

        MiniDimensionsTemplate.InsertDimensionsFromTemplates(ConfigTemplateHeader,Customer.“No.",DATABASE::Customer);

        -

        Code to insert related templates (dimensions):

        -

        FUNCTION InsertDimensionsFromTemplates(ConfigTemplateHeader : Record “Config. Template Header”;MasterRecordNo : Code[20];TableID : Integer)

        -

        // There are multiple records (multiple dimensions per master record)

        -

        // We have to set filter****

        -

        ConfigTemplateLine.SETRANGE(Type,ConfigTemplateLine.Type::“Related Template”);****

        -

        ConfigTemplateLine.SETRANGE(“Data Template Code”,ConfigTemplateHeader.Code);****

        -
        -

        IF ConfigTemplateLine.FINDSET THEN****

        -

        REPEAT****

        -

        ConfigTemplateHeader.GET(ConfigTemplateLine.“Template Code”);

        -

        // Ensure that the table where the template belongs to is Dimensions

        -

        // We could have other related templates****

        -

        IF ConfigTemplateHeader.“Table ID” = DATABASE::“Default Dimension” THEN****

        -

        InsertDimensionFromTemplate(ConfigTemplateHeader,MasterRecordNo,TableID);****

        -

        UNTIL ConfigTemplateLine.NEXT = 0;****

        -
        -

        // Create a new Dimensions Record and link it to the Master Record****

        -

        FUNCTION InsertDimensionFromTemplate(ConfigTemplateHeader : Record “Config. Template Header”;MasterRecordNo : Code[20];TableID : Integer)

        -

        DefaultDimension.INIT;

        -

        DefaultDimension.“No.” := MasterRecordNo;****

        -

        DefaultDimension.“Table ID” := TableID;****

        -

        DefaultDimension.“Dimension Code” := GetDefaultDimensionCode(ConfigTemplateHeader);****

        -

        DefaultDimension.INSERT;****

        -
        -

        RecRef.GETTABLE(DefaultDimension);****

        -

        ConfigTemplateMgt.UpdateRecord(ConfigTemplateHeader,RecRef);****

        -

        RecRef.SETTABLE(DefaultDimension);

        -

        To surface the action in the product, you have three options:

        +
        ConfigTemplateMgt.UpdateRecord(ConfigTemplateHeader,RecRef);
        +RecRef.SETTABLE(Customer);
        +

        // Insert Dimensions – related templates

        +
        MiniDimensionsTemplate.InsertDimensionsFromTemplates(ConfigTemplateHeader,Customer."No.",DATABASE::Customer); 
        +

        Code to insert related templates (dimensions):

        +
        FUNCTION InsertDimensionsFromTemplates(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code\[20\];TableID : Integer)
        +  // There are multiple records (multiple dimensions per master record)
        +  // We have to set filter
        +  ConfigTemplateLine.SETRANGE(Type,ConfigTemplateLine.Type::"Related Template");
        +  ConfigTemplateLine.SETRANGE("Data Template Code",ConfigTemplateHeader.Code
        +  IF ConfigTemplateLine.FINDSET THEN
        +  REPEAT
        +    ConfigTemplateHeader.GET(ConfigTemplateLine."Template Code");
        +    // Ensure that the table where the template belongs to is Dimensions
        +    // We could have other related templates
        +    IF ConfigTemplateHeader."Table ID" = DATABASE::"Default Dimension" THEN
        +    InsertDimensionFromTemplate(ConfigTemplateHeader,MasterRecordNo,TableID);
        +  UNTIL ConfigTemplateLine.NEXT = 0;
        +

        // Create a new Dimensions Record and link it to the Master Record****

        +
        FUNCTION InsertDimensionFromTemplate(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code\[20\];TableID : Integer)
        +  DefaultDimension.INIT;
        +  DefaultDimension."No." := MasterRecordNo;
        +  DefaultDimension."Table ID" := TableID;
        +  DefaultDimension."Dimension Code" := GetDefaultDimensionCode(ConfigTemplateHeader);
        +  DefaultDimension.INSERT;
        +  RecRef.GETTABLE(DefaultDimension);
        +  ConfigTemplateMgt.UpdateRecord(ConfigTemplateHeader,RecRef);
        +  RecRef.SETTABLE(DefaultDimension); 
        +

        To surface the action in the product, you have three options:

        1. Recommended - Implement a separate action called New from Template.
        2. Optional - Implement the apply template function on the document itself. This is especially good in scenarios where users are allowed to change the template.
        3. Alternative - Remove the new action by configuration or set Insert Allowed to FALSE on the list (this will block the creation of new records from the lookup). Implement an application action named New and tie it to your code.
        -

        **Note: ** In Microsoft Dynamics C5 2014, we chose to remove the New action with configuration since we wanted to promote the functionality and avoid the confusion in having too many options. However this might be difficult to maintain with a larger set of pages.

        +

        Note: In Microsoft Dynamics C5 2014, we chose to remove the New action with configuration since we wanted to promote the functionality and avoid the confusion in having too many options. However this might be difficult to maintain with a larger set of pages.

        To view or edit templates, you have two options:

        1. Use the Config. Template List table (8620) and the **Config. Template Header Card **table (8618).
        2. @@ -322,7 +319,8 @@ BC AL Help . dev

          In C5 2014, this is the workflow:

          The user opens the Customers List window and selects New

          ** **

          -

          ****From this page, the user can view the template, edit it, or create a new one. Selecting a template will populate the customer card and open a new record. From the existing record, the user has options to save as a template or opening a list of templates to maintain available templates. Selecting a template will populate the customer card and open a new record. From the existing record, the user has options to save as a template or opening a list of templates to maintain available templates.

          +

          +

          From this page, the user can view the template, edit it, or create a new one. Selecting a template will populate the customer card and open a new record. From the existing record, the user has options to save as a template or opening a list of templates to maintain available templates. Selecting a template will populate the customer card and open a new record. From the existing record, the user has options to save as a template or opening a list of templates to maintain available templates.

          From the **Customer Card Template **window, we can invoke the Dimensions action, through which we can define the dimensions that will be inserted together with the template:

          @@ -332,8 +330,8 @@ BC AL Help . dev
        3. Temporary template tables:

            -
          • **Mini Customer Template **table (1300)
          • -
          • **Mini Item Template **table (1301)
          • +
          • Mini Customer Template table (1300)
          • +
          • Mini Item Template table (1301)
          • Mini Dimensions Template table(1302)
          • Mini Vendor Template table (1303)
          @@ -342,7 +340,7 @@ BC AL Help . dev

          Pages to define templates:

          • Mini Customer Template Card page (1341)
          • -
          • **Mini Item Template Card **page (,1342)
          • +
          • Mini Item Template Card page (,1342)
          • Mini Dimensions Template List page (1343)
          • Mini Vendor Template Card page (1344)
          @@ -380,12 +378,12 @@ BC AL Help . dev
          - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/create-urls-to-nav-clients/index.html b/navpatterns/1-patterns/create-urls-to-nav-clients/index.html index c98ce902..89e91ad6 100644 --- a/navpatterns/1-patterns/create-urls-to-nav-clients/index.html +++ b/navpatterns/1-patterns/create-urls-to-nav-clients/index.html @@ -2,19 +2,19 @@ - + Create URLs to NAV Clients :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -239,9 +239,10 @@ BC AL Help . dev
      • Object Type and Object ID define the type of the application object to run (Table, Page, Report, Codeunit, Query, or XMLport) and its ID.
      • Record specifies the actual data to run the URL on, such as:
      -

      Vendor.GET(“Account No.");

      -

      GETURL(CLIENTTYPE:WEB,COMPANYNAME, OBJECTTYPE::Page,27,Vendor)

      -

      Note: It is currently not possible to set filters on the record that you sent as a last parameter to the GETURL function. However, it is possible to write your own code to compute and append the filter string to the URL that is created by the GETURL function.

      +
      Vendor.GET("Account No.");
      +
      +GETURL(CLIENTTYPE:WEB,COMPANYNAME, OBJECTTYPE::Page,27,Vendor)
      +

      Note: It is currently not possible to set filters on the record that you sent as a last parameter to the GETURL function. However, it is possible to write your own code to compute and append the filter string to the URL that is created by the GETURL function.

      The server name and instance are extracted automatically by GETURL and do not need to be specified by the C/AL developer. Furthermore, the multitenancy setup is transparent to the C/AL developer. No multitenancy parameters are specified when you call GETURL, because the function knows from the server setup if it is running in a multitenant environment and if so, it will add a string like “&tenant=MyTenant” to the URL.

      When to Use

      The GETURL function can generally be used every time a URL must be created. The following are some scenarios where the function is particularly useful.

      @@ -254,113 +255,216 @@ BC AL Help . dev

      The following are examples of calls to GETURL and their corresponding return value:

      Command

      URL

      -

      GETURL(CLIENTTYPE::Win)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71//

      -

      GETURL(CLIENTTYPE::Web)

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient

      -

      GETURL(CLIENTTYPE::OData)

      -

      http://MyServer:7048/DynamicsNAV71/OData

      -

      GETURL(CLIENTTYPE::SOAP)

      -

      http://MyServer:7047/DynamicsNAV71/WS/Services

      -

      GETURL(CLIENTTYPE::Current) ie. When running this code on a Win client session

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71//

      -

      GETURL(CLIENTTYPE::Default) ie. When the Server config key DefaultClient is set to Windows

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71//

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/

      -

      GETURL(CLIENTTYPE::Windows,'')

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71//

      -

      GETURL(CLIENTTYPE::Windows,‘NONEXISTING Corp’)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/NONEXISTING Corp/

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME)

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=CRONUS

      -

      GETURL(CLIENTTYPE::Web,'')

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient

      -

      GETURL(CLIENTTYPE::Web,‘NONEXISTING Corp’)

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=NONEXISTING Corp

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME)

      -

      http://MyServer:7048/DynamicsNAV71/OData/Company(‘CRONUS’)

      -

      GETURL(CLIENTTYPE::OData,'')

      -

      http://MyServer:7048/DynamicsNAV71/OData

      -

      GETURL(CLIENTTYPE::OData,‘NONEXISTING Corp’)

      -

      http://MyServer:7048/DynamicsNAV71/OData/Company(‘NONEXISTING Corp’)

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME)

      -

      http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Services

      -

      GETURL(CLIENTTYPE::SOAP,'')

      -

      http://MyServer:7047/DynamicsNAV71/WS/Services

      -

      GETURL(CLIENTTYPE::SOAP,‘NONEXISTING Corp’)

      -

      http://MyServer:7047/DynamicsNAV71/WS/NONEXISTING Corp/Services

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Table,27)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runtable?table=27

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,27)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=27

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Report,6)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runreport?report=6

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Codeunit,5065)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runcodeunit?codeunit=5065

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Query,9150)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runquery?query=9150

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::XmlPort,5150)

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runxmlport?xmlport=5150

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27) ie. When the Web Service is published

      -

      http://MyServer:7048/DynamicsNAV71/OData/Company(‘CRONUS’)/PAG27Vendors

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Query,9150) ie. When the Web Service is published

      -

      http://MyServer:7048/DynamicsNAV71/OData/Company(‘CRONUS’)/QUE9150MyCustomers

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27)Â ie. When the Web Service is published

      -

      http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Page/PAG27Vendors

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Codeunit,5065) ie. When the Web Service is published

      -

      http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Codeunit/COD5065EmailLogging

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,27,record) List Page

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=27&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw

      -

      GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,26,record) Card Page

      -

      dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=26&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,27,record) List Page

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=CRONUS&page=27&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,26,record) Card Page

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=CRONUS&page=26&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27,record)

      -

      http://MyServer:7048/DynamicsNAV71/OData/Company(‘CRONUS’)/PAG27Vendors(‘IC1030’)

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,27)

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=CRONUS&page=27

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Report,6)

      -

      https://navwebsrvr:443/DynamicsNAV71_Instance1/Webclient?company=CRONUS&report=6

      -

      If the GETURL function is called with invalid parameters, it will return an empty string. In that case, you can find the related error text by calling the GETLASTERRORTEXT function.

      +
      GETURL(CLIENTTYPE::Win)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71//
      +
      +GETURL(CLIENTTYPE::Web)
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient
      +
      +GETURL(CLIENTTYPE::OData)
      +
      +http://MyServer:7048/DynamicsNAV71/OData
      +
      +GETURL(CLIENTTYPE::SOAP)
      +
      +http://MyServer:7047/DynamicsNAV71/WS/Services
      +
      +GETURL(CLIENTTYPE::Current) ie. When running this code on a Win client session
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71//
      +
      +GETURL(CLIENTTYPE::Default) ie. When the Server config key DefaultClient is set to Windows
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71//
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/
      +
      +GETURL(CLIENTTYPE::Windows,'')
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71//
      +
      +GETURL(CLIENTTYPE::Windows,'NONEXISTING Corp')
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/NONEXISTING Corp/
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME)
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=CRONUS
      +
      +GETURL(CLIENTTYPE::Web,'')
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient
      +
      +GETURL(CLIENTTYPE::Web,'NONEXISTING Corp')
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=NONEXISTING Corp
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME)
      +
      +http://MyServer:7048/DynamicsNAV71/OData/Company('CRONUS')
      +
      +GETURL(CLIENTTYPE::OData,'')
      +
      +http://MyServer:7048/DynamicsNAV71/OData
      +
      +GETURL(CLIENTTYPE::OData,'NONEXISTING Corp')
      +
      +http://MyServer:7048/DynamicsNAV71/OData/Company('NONEXISTING Corp')
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME)
      +
      +http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Services
      +
      +GETURL(CLIENTTYPE::SOAP,'')
      +
      +http://MyServer:7047/DynamicsNAV71/WS/Services
      +
      +GETURL(CLIENTTYPE::SOAP,'NONEXISTING Corp')
      +
      +http://MyServer:7047/DynamicsNAV71/WS/NONEXISTING Corp/Services
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Table,27)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runtable?table=27
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,27)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=27
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Report,6)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runreport?report=6
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Codeunit,5065)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runcodeunit?codeunit=5065
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Query,9150)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runquery?query=9150
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::XmlPort,5150)
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runxmlport?xmlport=5150
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27) ie. When the Web Service is published
      +
      +http://MyServer:7048/DynamicsNAV71/OData/Company('CRONUS')/PAG27Vendors
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Query,9150) ie. When the Web Service is published
      +
      +http://MyServer:7048/DynamicsNAV71/OData/Company('CRONUS')/QUE9150MyCustomers
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27)Â ie. When the Web Service is published
      +
      +http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Page/PAG27Vendors
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Codeunit,5065) ie. When the Web Service is published
      +
      +http://MyServer:7047/DynamicsNAV71/WS/CRONUS/Codeunit/COD5065EmailLogging
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,27,record) List Page
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=27&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw
      +
      +GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,26,record) Card Page
      +
      +dynamicsnav://MyServer:7046/DynamicsNAV71/CRONUS/runpage?page=26&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,27,record) List Page
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=CRONUS&page=27&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,26,record) Card Page
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=CRONUS&page=26&bookmark=23;FwAAAAJ7/0kAQwAxADAAMwAw
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27,record)
      +
      +http://MyServer:7048/DynamicsNAV71/OData/Company('CRONUS')/PAG27Vendors('IC1030')
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Page,27)
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=CRONUS&page=27
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Report,6)
      +
      +https://navwebsrvr:443/DynamicsNAV71\_Instance1/Webclient?company=CRONUS&report=6
      +
      +

      If the GETURL function is called with invalid parameters, it will return an empty string. In that case, you can find the related error text by calling the GETLASTERRORTEXT function.

      Function Call

      Error Message

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Table,27)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Codeunit,5065)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Query,9150)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::XmlPort,5150)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Table,27)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27)

      -

      The Page object, 27, that is specified for the GetUrl function has not been published in the Web Services table.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Report,6)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Codeunit,5065)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Query,9150)

      -

      The Query object, 9150, that is specified for the GetUrl function has not been published in the Web Services table.

      -

      GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::XmlPort,5150)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Table,27)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27)

      -

      The Page object, 27, that is specified for the GetUrl function has not been published in the Web Services table.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Report,6)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Codeunit,5065)

      -

      The Codeunit object, 5065, that is specified for the GetUrl function has not been published in the Web Services table.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Query,9150)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::XmlPort,5150)

      -

      The specified object type parameter for the GetUrl function is not valid.

      -

      GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27,record)

      -

      You cannot specify a record parameter for the GetUrl function when the object type is SOAP

      +
      GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Table,27)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Codeunit,5065)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::Query,9150)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::Web,COMPANYNAME,OBJECTTYPE::XmlPort,5150)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Table,27)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Page,27)
      +
      +The Page object, 27, that is specified for the GetUrl function has not been published in the Web Services table.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Report,6)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Codeunit,5065)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::Query,9150)
      +
      +The Query object, 9150, that is specified for the GetUrl function has not been published in the Web Services table.
      +
      +GETURL(CLIENTTYPE::OData,COMPANYNAME,OBJECTTYPE::XmlPort,5150)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Table,27)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27)
      +
      +The Page object, 27, that is specified for the GetUrl function has not been published in the Web Services table.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Report,6)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Codeunit,5065)
      +
      +The Codeunit object, 5065, that is specified for the GetUrl function has not been published in the Web Services table.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Query,9150)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::XmlPort,5150)
      +
      +The specified object type parameter for the GetUrl function is not valid.
      +
      +GETURL(CLIENTTYPE::SOAP,COMPANYNAME,OBJECTTYPE::Page,27,record)
      +
      +

      You cannot specify a record parameter for the GetUrl function when the object type is SOAP

      The following example shows how to use the GETURL function in codeunit 440 to ensure that the notification mail in Document Approvals can link to both the Microsoft Dynamics NAV Windows client and the Microsoft Dynamics NAV web client:

      @@ -379,12 +483,12 @@ BC AL Help . dev
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/creating-custom-charts/index.html b/navpatterns/1-patterns/creating-custom-charts/index.html index 66db758a..8166a071 100644 --- a/navpatterns/1-patterns/creating-custom-charts/index.html +++ b/navpatterns/1-patterns/creating-custom-charts/index.html @@ -2,19 +2,19 @@ - + Creating Custom Charts :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -267,7 +267,7 @@ BC AL Help . dev
      • Set Period, Work Date
      • Actions to filter the data set
      • Refresh
      • -
      • **Chart Information **– a tooltip with a description of the chart and how data is calculated.
      • +
      • Chart Information – a tooltip with a description of the chart and how data is calculated.

      Optional: Preserving User Personalization

      One of the most common functionalities is personalization. If the chart can be customized by the user, you should store the settings that the user has entered and apply them the next time the chart is loaded.

      @@ -290,21 +290,26 @@ BC AL Help . dev

      If you need a setup record and codeunit, then it is a good idea to encapsulate this logic within a method.

      Implementation of the Finance Performance Chart page (762)

      -

      BusinessChart::AddInReady()

      -

      UpdateChart(Period::" “);

      -

      LOCAL UpdateChart(Period : ‘,Next,Previous’)

      -

      MoveAndUpdateChart(Period,0);

      -

      LOCAL MoveAndUpdateChart(Period : ‘,Next,Previous’;Move : Integer)

      -

      AccSchedChartManagement.GetSetupRecordset(AccountSchedulesChartSetup,AccountSchedulesChartSetup.Name,Move);

      -

      AccSchedChartManagement.UpdateData(Rec,Period,AccountSchedulesChartSetup);

      -

      Update(CurrPage.BusinessChart);

      -

      StatusText := GetCurrentSelectionText(“Period Filter Start Date”,“Period Filter End Date”);

      -

      In the MoveAndUpdateChart method, the AccSchedChartManagement codeunit gets a setup record and updates it if necessary. Then, it initializes the chart with setup data and sets the StatusText to show the period for which data is displayed. The same method is used by the actions to move and update the chart so that there is no code duplication.

      +
      BusinessChart::AddInReady()
      +    UpdateChart(Period::" ");
      +
      +LOCAL UpdateChart(Period : ',Next,Previous')
      +    MoveAndUpdateChart(Period,0);
      +
      +LOCAL MoveAndUpdateChart(Period : ',Next,Previous';Move : Integer)
      +    AccSchedChartManagement.GetSetupRecordset(AccountSchedulesChartSetup,AccountSchedulesChartSetup.Name,Move);
      +
      +    AccSchedChartManagement.UpdateData(Rec,Period,AccountSchedulesChartSetup);
      +
      +    Update(CurrPage.BusinessChart);
      +
      +    StatusText := GetCurrentSelectionText("Period Filter Start Date","Period Filter End Date");
      +

      In the MoveAndUpdateChart method, the AccSchedChartManagement codeunit gets a setup record and updates it if necessary. Then, it initializes the chart with setup data and sets the StatusText to show the period for which data is displayed. The same method is used by the actions to move and update the chart so that there is no code duplication.

      The following code is used to implement DataPointClicked

      -

      ****BusinessChart::DataPointClicked(point : DotNet “Microsoft.Dynamics.Nav.Client.BusinessChart.BusinessChartDataPoint”)

      -

      SetDrillDownIndexes(point);

      -

      AccSchedChartManagement.DrillDown(Rec,AccountSchedulesChartSetup);

      -

      SetDrillDownindexes is a method from the Business Chart Buffer table that maps the DotNet point variable to C/AL data, so it must be used. The next method that you must implement is the action to be performed on Drilldown.

      +
      BusinessChart::DataPointClicked(point : DotNet "Microsoft.Dynamics.Nav.Client.BusinessChart.BusinessChartDataPoint")
      +    SetDrillDownIndexes(point);
      +    AccSchedChartManagement.DrillDown(Rec,AccountSchedulesChartSetup);
      +

      SetDrillDownindexes is a method from the Business Chart Buffer table that maps the DotNet point variable to C/AL data, so it must be used. The next method that you must implement is the action to be performed on Drilldown.

      The **DataPointDoubleClicked **trigger has the same implementation logic as the DataPointClicked trigger.

      Implementation of chart part 1390 on the Small Business Role Center page (9022)

      @@ -355,12 +360,12 @@ BC AL Help . dev
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/cross-session-events/index.html b/navpatterns/1-patterns/cross-session-events/index.html index 59dde7d3..be0dd5dd 100644 --- a/navpatterns/1-patterns/cross-session-events/index.html +++ b/navpatterns/1-patterns/cross-session-events/index.html @@ -2,19 +2,19 @@ - + Cross Session Events :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
      @@ -220,15 +215,14 @@ BC AL Help . dev

      Cross Session Events

      -

      By Nikolai L’Estrange, from TVision Technology Ltd. in the UK_

      -

      _

      -

      Abstract

      +

      By Nikolai L’Estrange, from TVision Technology Ltd. in the UK

      +

      Abstract

      Track things that happen in other NAV Sessions.

      -

      Problem

      +

      Problem

      In Microsoft Dynamics NAV you can fire a function whenever something changes within your session (and from NAV 2016 this is even easier with the new Event model), however there is not an easy way to know what is happening in other sessions. Sometimes you would like to know what has happened since your last read, without reading everything again, e.g. when you need to pass a large dataset to a Control Add-in.

      A common way of handling this with Ledger Tables is to make note of the last record you read, and continuously poll to see if there are any new records. However this is restricted to strictly sequentially entered tables.

      -

      Solution

      +

      Solution

      There is a common pattern in many other languages called Publish-Subscribe (or PubSub) that solves the same issue. We can implement the same pattern in NAV using a Table as a message queue platform and polling this table. We have named this pattern “Cross Session Events” in order to avoid confusion with the standard NAV Events which use the terms Publisher and Subscriber, and to try and describe more accurately when you would need this pattern.

      The pattern has four components:

        @@ -237,100 +231,104 @@ BC AL Help . dev
      • Message Broker: This distributes all messages sent in to all Subscribers that have expressed an interest (i.e. the message is within their filters).
      • Message Queue: To hold the messages for each Subscriber. Generally once these messages are read, they are deleted.
      -

      Example

      +

      Example

      An example of this would be when we have multiple users looking at the same set of data and we want their screens to update in “real time” whenever one of them makes a change, without doing a full refresh. We will use the Observer pattern to capture the change (act as the Publisher) and then create a Table to hold Subscribers and Filters (Change Observer), a Table to be the Message Queue (Change Notification), and a Codeunit to be the Message Broker and help with the polling (ObserverMgt).

      Below are the table definitions:

      -
      **Change Observer:   
      -**"Table ID" Integer "Observable Table"  
      -"Server ID" Integer  
      -"Session ID" Integer   
      -  
      -**Change Notification:  
      -**"Table ID" Integer "Observable Table"  
      -"Server ID" Integer  
      -"Session ID" Integer   
      -"Entry No." Integer AutoIncrement  
      -"Type of Change" Option Insert,Modify,Delete,Rename  
      -"Record ID" RecordID  
      -... (other fields to indicate what has changed)  
      -
      -

      The Change Observer table identifies the Subscriber using Server ID and Session ID, and then in this example there is only one filter, which is the Table ID we want to listen to any changes. In this case all three fields are in the Primary Key.

      +
          //Change Observer:   
      +    //"Table ID" Integer "Observable Table"  
      +    "Server ID" Integer  
      +    "Session ID" Integer   
      +      
      +    //Change Notification:  
      +    //"Table ID" Integer "Observable Table"  
      +    "Server ID" Integer  
      +    "Session ID" Integer   
      +    "Entry No." Integer AutoIncrement  
      +    "Type of Change" Option Insert,Modify,Delete,Rename  
      +    "Record ID" RecordID  
      +    ... (other fields to indicate what has changed)  
      +

      The Change Observer table identifies the Subscriber using Server ID and Session ID, and then in this example there is only one filter, which is the Table ID we want to listen to any changes. In this case all three fields are in the Primary Key.

      The Change Notification table then has the same three fields plus an Entry No. as its Primary Key, and in this example borrows heavily from the Change Log code to fill in the rest of the message.

      _Note: _Other examples of the pattern could have very different fields to identify the Subscriber, Filters and then whatever fields needed for content of the Message.

      Our Message Broker Codeunit will also serve as a central place to create Subscribers (Listen and StopListening functions) and a place to Poll for Messages. Note that the Poll function deletes the Messages as it reads them.

      -
      **Listen(TableID : Integer)**
      -WITH Observer DO BEGIN
      -"Table ID" := TableID;
      -"Server ID" := SERVICEINSTANCEID;
      -"Session ID" := SESSIONID;
      -INSERT(TRUE);
      -COMMIT;
      -END;
      -**StopListening(TableID : Integer)
      -**WITH Observer DO BEGIN
      -RESET;
      -SETRANGE("Server ID",SERVICEINSTANCEID);
      -SETRANGE("Session ID",SESSIONID);
      -SETRANGE("Table ID",TableID);
      -DELETEALL(TRUE);
      -COMMIT;
      -END;
      -**NotifyAll(ChangeNotification : Record "Change Notification")**
      -WITH Observer DO BEGIN
      -RESET;
      -SETRANGE("Table ID",ChangeNotification."Table ID");
      -IF FINDSET THEN REPEAT
      -Notify(Observer,ChangeNotification);
      -UNTIL NEXT = 0; 
      -END;
      -**Notify(Observer : Record "Change Observer";ChangeNotification : Record "Change Notification")**
      -WITH ChangeNotification DO BEGIN
      -"Server ID" := Observer."Server ID";
      -"Session ID" := Observer."Session ID";
      -"Entry No." := 0;
      -INSERT;
      -END;
      -**Poll(TableID : Integer;VAR TempChangeNotification : TEMPORARY Record "Change Notification")**
      -WITH ChangeNotification DO BEGIN
      -TempChangeNotification.RESET;
      -TempChangeNotification.DELETEALL;
      -RESET;
      -SETRANGE("Table ID",TableID);
      -SETRANGE("Server ID",SERVICEINSTANCEID);
      -SETRANGE("Session ID",SESSIONID);
      -IF FINDSET THEN REPEAT
      -TempChangeNotification := ChangeNotification;
      -TempChangeNotification.INSERT;
      -MARK(TRUE);
      -UNTIL NEXT = 0;
      -MARKEDONLY(TRUE);
      -DELETEALL;
      -END;
      -
      -

      **__**The final part of this example is an object that calls the functions above. In this example we will use a Page with a PingPong Timer Control to do the polling in (almost) real time. These are the functions on the page:

      -
      **OnQueryClosePage(CloseAction : Action None) : Boolean**
      -ObserverMgt.StopListening(DATABASE::"NAV Whiteboard Booking");
      -**Timer::AddInReady()**
      -IF ObserverMgt.Listen(DATABASE::"NAV Whiteboard Booking") THEN
      -CurrPage.Timer.Ping(1000);
      -**Timer::Pong()**
      -CallUpdate;
      -CurrPage.Timer.Ping(1000);
      -**LOCAL CallUpdate()**
      -ObserverMgt.Poll(DATABASE::"NAV Whiteboard Booking",TempChangeNotification);
      -WITH TempChangeNotification DO BEGIN
      -IF FINDSET THEN REPEAT
      -IF "Type of Change" = "Type of Change"::Delete THEN BEGIN
      -...
      -END ELSE IF RecRef.GET("Record ID") THEN BEGIN
      -...
      -END;
      -UNTIL NEXT = 0;
      -END;
      -
      -

      Consequences

      +
          //Listen(TableID : Integer)**
      +    WITH Observer DO BEGIN
      +        "Table ID" := TableID;
      +        "Server ID" := SERVICEINSTANCEID;
      +        "Session ID" := SESSIONID;
      +        INSERT(TRUE);
      +        COMMIT;
      +    END;
      +
      +    //StopListening(TableID : Integer)
      +    WITH Observer DO BEGIN
      +        RESET;
      +        SETRANGE("Server ID",SERVICEINSTANCEID);
      +        SETRANGE("Session ID",SESSIONID);
      +        SETRANGE("Table ID",TableID);
      +        DELETEALL(TRUE);
      +        COMMIT;
      +    END;
      +
      +    //NotifyAll(ChangeNotification : Record "Change Notification")**
      +    WITH Observer DO BEGIN
      +        RESET;
      +        SETRANGE("Table ID",ChangeNotification."Table ID");
      +        IF FINDSET THEN REPEAT
      +        Notify(Observer,ChangeNotification);
      +        UNTIL NEXT = 0; 
      +    END;
      +
      +    //Notify(Observer : Record "Change Observer";ChangeNotification : Record "Change Notification")**
      +    WITH ChangeNotification DO BEGIN
      +        "Server ID" := Observer."Server ID";
      +        "Session ID" := Observer."Session ID";
      +        "Entry No." := 0;
      +        INSERT;
      +    END;
      +
      +    //Poll(TableID : Integer;VAR TempChangeNotification : TEMPORARY Record "Change Notification")**
      +    WITH ChangeNotification DO BEGIN
      +        TempChangeNotification.RESET;
      +        TempChangeNotification.DELETEALL;
      +        RESET;
      +        SETRANGE("Table ID",TableID);
      +        SETRANGE("Server ID",SERVICEINSTANCEID);
      +        SETRANGE("Session ID",SESSIONID);
      +        IF FINDSET THEN REPEAT
      +            TempChangeNotification := ChangeNotification;
      +            TempChangeNotification.INSERT;
      +            MARK(TRUE);
      +            UNTIL NEXT = 0;
      +        MARKEDONLY(TRUE);
      +        DELETEALL;
      +    END;
      +

      **__**The final part of this example is an object that calls the functions above. In this example we will use a Page with a PingPong Timer Control to do the polling in (almost) real time. These are the functions on the page:

      +
          //OnQueryClosePage(CloseAction : Action None) : Boolean**
      +    ObserverMgt.StopListening(DATABASE::"NAV Whiteboard Booking");
      +    
      +    //Timer::AddInReady()**
      +    IF ObserverMgt.Listen(DATABASE::"NAV Whiteboard Booking") THEN
      +    CurrPage.Timer.Ping(1000);
      +    
      +    //Timer::Pong()**
      +    CallUpdate;
      +    CurrPage.Timer.Ping(1000);
      +    
      +    //LOCAL CallUpdate()**
      +    ObserverMgt.Poll(DATABASE::"NAV Whiteboard Booking",TempChangeNotification);
      +    WITH TempChangeNotification DO BEGIN
      +        IF FINDSET THEN REPEAT
      +        IF "Type of Change" = "Type of Change"::Delete THEN BEGIN
      +        ...
      +        END ELSE IF RecRef.GET("Record ID") THEN BEGIN
      +        ...
      +        END;
      +        UNTIL NEXT = 0;
      +    END;
      +

      Consequences

      The PingPong control is only available on the Windows Client, so if you want to use another client you will need to use another solution to Poll for Messages. Therefore this pattern is not always going to be “real time”.

      - +

      This pattern was originally described in the following blog:

      https://geeknikolai.wordpress.com/2015/10/30/pubsub-pattern-in-dynamics-nav-2016/

      Below is the Wikipedia link to the PubSub pattern

      @@ -347,12 +345,12 @@ END;
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/currently-active-record/index.html b/navpatterns/1-patterns/currently-active-record/index.html index 573f2c60..35f88eb4 100644 --- a/navpatterns/1-patterns/currently-active-record/index.html +++ b/navpatterns/1-patterns/currently-active-record/index.html @@ -2,19 +2,19 @@ - + Currently Active Record :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev - - - + + +
        @@ -236,10 +236,18 @@ BC AL Help . dev A side effect is reduced and simplified code, increased performance and a more scalable solution that is almost independent of the amount of records in the table.

        Description

        There is no way in NAV to get a set of records from the database, which all have the newest starting date, that is less than or equal to today’s date. Having an ending date on the record will help, but it introduces some other problems. In Dynamics NAV this is normally done by reading too many records, either at the SQL Server level or in the middle tier and throw away the ones you do not need. That is a waste of resources:

        -

        < –[if supportLists]–>* < –[endif]–>The SQL Server is reading too many records

        -

        < –[if supportLists]–>* < –[endif]–>There would be too much data sent over the network.
        +

          +
        • +

          The SQL Server is reading too many records

          +
        • +
        • +

          There would be too much data sent over the network.
          (If the SQL Server and the NAV Service tier are on different machines.)

          -

          < –[if supportLists]–>* < –[endif]–>The NAV Service Tier receives and throws away data.

          +
        • +
        • +

          The NAV Service Tier receives and throws away data.

          +
        • +

        Ending Date Problem

        Ending Date may introduce some problems of its own.

        If your design requires to have one and only one active record per key in a dataset, then Ending Date introduces the possibility for overlapping or holes in the timeline.
        @@ -250,21 +258,20 @@ If you add a record in between you will have to update both the before and the a

        Use the pattern whenever you read a set of data containing a Starting Date and you need to implement a loop to throw away unwanted records. An example could be Codeunit 7000 “Sales Price Calc. Mgt.”. In this codeunit there are many loop constructs to find prices and discounts.

        Usage

        In the following example, we have a fictive table containing: Code, Starting Date and Price. The Primary Key consist of Code, Starting Date. The Database is the Demo Database, and the Company is Cronus.

        -

        < –[if supportLineBreakNewLine]–>
        -< –[endif]–>

        +

        1. Create the view

        You will need to create the view before you define the Table Object.
        You will need to create a view for every company in the database.

        -

        CREATE VIEW [dbo].[CRONUS$PriceView]
        -AS
        -SELECT [Code], [Starting Date], [Price]
        -FROM dbo.[CRONUS$Price] AS A
        -WHERE [Starting Date] =
        -(SELECT MAX([Starting Date])
        -FROM dbo.[CRONUS$Price] AS B
        -WHERE B.[Code] = A.[Code] AND
        -B.[Starting Date] <= GETDATE())

        -

        Test the view to ensure that you get the correct result. It is much easier to test now than later.

        +
            CREATE VIEW [dbo].[CRONUS$PriceView]  
        +    AS  
        +    SELECT [Code], [Starting Date], [Price]  
        +    FROM dbo.[CRONUS$Price] AS A  
        +    WHERE [Starting Date] =  
        +    (SELECT MAX([Starting Date])  
        +    FROM dbo.[CRONUS$Price] AS B  
        +    WHERE B.[Code] = A.[Code] AND  
        +    B.[Starting Date] <= GETDATE())
        +

        Test the view to ensure that you get the correct result. It is much easier to test now than later.

        2. Create the Table object

        Remember to set the link table property before you save it.

        3. Implement the code

        @@ -272,42 +279,44 @@ B.[Starting Date] <= GETDATE())

        4. Create a deployment codeunit

        Create a SQL Deployment codeunit to manage your views.
        The codeunit needs to Create or Alter the views for all companies.
        -To see an example of how to talk to SQL Server using .NET see Waldo’s blog here:
        -http://dynamicsuser.net/blogs/waldo/archive/2011/07/19/net-interop-calling-stored-procedures-on-sql-server-example-1.aspx
        -< –[if supportLineBreakNewLine]–>
        -< –[endif]–>

        +To see an example of how to talk to SQL Server using .NET see waldo’s blog here:
        +http://dynamicsuser.net/blogs/waldo/archive/2011/07/19/net-interop-calling-stored-procedures-on-sql-server-example-1.aspx

        5. Deployment

        You need to deploy in three steps:

        -

        < –[if supportLists]–>1. < –[endif]–>Delete the table objects referencing the views

        -

        < –[if supportLists]–>2. < –[endif]–>Deploy and run the deployment codeunit

        -

        < –[if supportLists]–>3. < –[endif]–>Deploy the new table objects that reference the views

        +
          +
        1. Delete the table objects referencing the views
        2. +
        3. Deploy and run the deployment codeunit
        4. +
        5. Deploy the new table objects that reference the views
        6. +

        General precaution

        If you later want to change the view, you need to follow these rules:

        -

        < –[if supportLists]–>* < –[endif]–>If you add columns, you need to add them to the view first and then add them to the Table Object.

        -

        < –[if supportLists]–>* < –[endif]–>If you want to remove columns from the view, you need to delete the Table Object, then change the view and last recreate the Table Object without the new columns.

        +

        * If you add columns, you need to add them to the view first and then add them to the Table Object. +* If you want to remove columns from the view, you need to delete the Table Object, then change the view and last recreate the Table Object without the new columns.

        Code example that accomplish the same but without using the pattern

        This following example will give you the same result but the performance will deteriorate as time goes by and you get more and more old data.

        -

        Price.SETCURRENTKEY(Code,“Starting Date”);

        -

        Price.SETFILTER(“Starting Date”,'..%1', TODAY

        -

        IF Price.FINDSET THEN BEGIN
        -REPEAT

        -

        Price.SETRANGE(Code, Price.Code);

        -

        Price.FINDLAST;

        -

        Price.SETRANGE(Code);

        -

        PriceTemp := Price;

        -

        PriceTemp.INSERT;

        -

        UNTIL Price.NEXT = 0;

        -

        END;
        -// PriceTemp will contain the Prices

        -

        Comparison

        +
        Price.SETCURRENTKEY(Code,"Starting Date"); 
        +Price.SETFILTER("Starting Date",'..%1', TODAY  
        +IF Price.FINDSET THEN BEGIN  
        +    REPEAT
        +        Price.SETRANGE(Code, Price.Code);
        +        Price.FINDLAST;
        +        Price.SETRANGE(Code);
        +        PriceTemp := Price;
        +        PriceTemp.INSERT;
        +    UNTIL Price.NEXT = 0;
        +END;   
        +// PriceTemp will contain the Prices
        +

        Comparison

        The above NAV example is for a very simple date controlled solution and is provided to give an idea of what the pattern changes seen from a NAV development point of view. But consider the following:

        -

        < –[if supportLists]–>* < –[endif]–>The table has a more complex key.
        -This will require setting and clearing more filters

        -

        < –[if supportLists]–>* < –[endif]–>You need to read from more than one table.
        +

          +
        • The table has a more complex key.
          +This will require setting and clearing more filters
        • +
        • You need to read from more than one table.
          Say you need to apply discount from a separate table.
          -This may give several lines in PriceTemp.

          -

          < –[if supportLists]–>* < –[endif]–>If the Code field is controlled by a Type field.
          -The Code field reference keys in different tables

          +This may give several lines in PriceTemp.
        • +
        • If the Code field is controlled by a Type field.
          +The Code field reference keys in different tables
        • +

        All three examples above can be implemented directly in the view. By using the pattern, it will still only require a single line of NAV code.

        Using the pattern will only issue one SQL call and thereby one trip to the server.
        The NAV Example will require an unknown number of SQL calls and thereby an unknown number of trips to the server. The number of SQL calls is dependent on the number of distinct Code values.
        @@ -333,12 +342,12 @@ The Pattern makes a scalable solution with a predictable performance. The perfor

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/data-migration-facade/index.html b/navpatterns/1-patterns/data-migration-facade/index.html index ee87cf02..07428419 100644 --- a/navpatterns/1-patterns/data-migration-facade/index.html +++ b/navpatterns/1-patterns/data-migration-facade/index.html @@ -2,19 +2,19 @@ - + Data Migration Facade :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
      -

      Usage:

      +

      Usage:

      There are the following use cases:

      • @@ -278,7 +278,7 @@ This deletes existing status lines for migrating Items for ‘My Migration T

      **“Data Migration Façade”.StartMigration(‘My Migration Type’,false) **
      This starts the migration. False means this is not a retry. A re-try is when you migrate one or more records from the Show Errors page, which is described later in this document. Retry = true is only used by the Show Errors page and should not be used from extensions.

      -

      Usage without staging tables:

      +

      Usage without staging tables:

      The overall workflow is:

      1. Integrate your extension in the Data Migration Wizard by subscribing to the events exposed by the Data Migration Façade.
      2. @@ -295,55 +295,54 @@ This starts the migration. False means this is not a retry. A re-try is when you

        _Figure 1: sequence diagram of the data migration without staging tables _

        The following example shows how to migrate items without staging tables:

        -
        trigger OnRun(); 
        -var 
        -ItemDataMigrationFacade: Codeunit "Item Data Migration Facade"; 
        -ItemNumber: Integer; 
        -ItemJson: Text; 
        -begin 
        -// loop on items retrieved through a web service for example 
        -for ItemNumber := 1 to ExternalWebService.GetItemCount do begin 
        -ExternalWebService.GetItem(ItemNumber,ItemJson); 
        -// create item using the facade 
        -if not ItemDataMigrationFacade.CreateItemIfNeeded(ItemJson.ItemNumber,ItemJson.ItemName1,
        -ItemJson.ItemName2,ConvertItemType(ItemJson.ItemType)) then 
        -exit; // item already exists 
        -// set some fields using the facade 
        -ItemDataMigrationFacade.SetVendorItemNo(ItemJson.VendItemNumber); 
        -ItemDataMigrationFacade.SetUnitVolume(ItemJson.Volume); 
        -ItemDataMigrationFacade.SetAlternativeItemNo(ItemJson.AltItemNumber); 
        -if ItemJson.PrimaryVendor <\> '' then 
        -ItemDataMigrationFacade.SetVendorNo(ItemJson.PrimaryVendor); 
        -// migrate dependencies 
        -MigrateItemUnitOfMeasure(ItemDataMigrationFacade,ItemJson); 
        -// modify the item (+run trigger) to save the changes made by setters 
        -ItemDataMigrationFacade.ModifyItem(true); 
        -// update the status in the migration dashboard 
        -DataMigrationStatusFacade.IncrementMigratedRecordCount('My Migration Type',
        -Database::Item,1); 
        -end; 
        -end;
        -procedure MigrateItemUnitOfMeasure(ItemDataMigrationFacade : Codeunit "Item Data Migration Facade";
        -ItemJson : Text); 
        -var 
        -MyUnitCodeStagingTable: Record "My Unit Code Staging Table"; 
        -DataMigrationStatusFacade: Codeunit "Data Migration Status Facade"; 
        -DescriptionToSet: Text\[10\]; 
        -UnitCodeJson: Text; 
        -begin 
        -if ItemJson.UnitCode = '' then 
        -// log an error using the Data migration façade 
        -DataMigrationStatusFacade.RegisterErrorNoStagingTablesCase(
        -'My Migration Type',Database::Item,'Unit of measure is empty.'); 
        -if ExternalWebService.GetUnitCode(ItemJson.UnitCode,UnitCodeJson) then 
        -DescriptionToSet := UnitCodeJson.Description; 
        -ItemDataMigrationFacade.CreateUnitOfMeasureIfNeeded(ItemJson.UnitCode, DescriptionToSet); 
        -// set the unit of measure on the item 
        -ItemDataMigrationFacade.SetBaseUnitOfMeasure(ItemJson.UnitCode); 
        -end;
        -
        -

        _Figure 2: Example of Item and Item Unit of Measure migration without staging tables _

        -

        Usage with staging tables:

        +
            trigger OnRun(); 
        +    var 
        +      ItemDataMigrationFacade: Codeunit "Item Data Migration Facade"; 
        +      ItemNumber: Integer; 
        +      ItemJson: Text; 
        +    begin 
        +      // loop on items retrieved through a web service for example 
        +      for ItemNumber := 1 to ExternalWebService.GetItemCount do begin 
        +      ExternalWebService.GetItem(ItemNumber,ItemJson); 
        +      // create item using the facade 
        +      if not ItemDataMigrationFacade.CreateItemIfNeeded(ItemJson.ItemNumber,ItemJson.ItemName1,
        +      ItemJson.ItemName2,ConvertItemType(ItemJson.ItemType)) then 
        +      exit; // item already exists 
        +      // set some fields using the facade 
        +      ItemDataMigrationFacade.SetVendorItemNo(ItemJson.VendItemNumber); 
        +      ItemDataMigrationFacade.SetUnitVolume(ItemJson.Volume); 
        +      ItemDataMigrationFacade.SetAlternativeItemNo(ItemJson.AltItemNumber); 
        +      if ItemJson.PrimaryVendor <\> '' then 
        +      ItemDataMigrationFacade.SetVendorNo(ItemJson.PrimaryVendor); 
        +      // migrate dependencies 
        +      MigrateItemUnitOfMeasure(ItemDataMigrationFacade,ItemJson); 
        +      // modify the item (+run trigger) to save the changes made by setters 
        +      ItemDataMigrationFacade.ModifyItem(true); 
        +      // update the status in the migration dashboard 
        +      DataMigrationStatusFacade.IncrementMigratedRecordCount('My Migration Type',
        +      Database::Item,1); 
        +      end; 
        +      end;
        +      procedure MigrateItemUnitOfMeasure(ItemDataMigrationFacade : Codeunit "Item Data Migration Facade";
        +      ItemJson : Text); 
        +      var 
        +      MyUnitCodeStagingTable: Record "My Unit Code Staging Table"; 
        +      DataMigrationStatusFacade: Codeunit "Data Migration Status Facade"; 
        +      DescriptionToSet: Text\[10\]; 
        +      UnitCodeJson: Text; 
        +      begin 
        +      if ItemJson.UnitCode = '' then 
        +      // log an error using the Data migration façade 
        +      DataMigrationStatusFacade.RegisterErrorNoStagingTablesCase(
        +      'My Migration Type',Database::Item,'Unit of measure is empty.'); 
        +      if ExternalWebService.GetUnitCode(ItemJson.UnitCode,UnitCodeJson) then 
        +      DescriptionToSet := UnitCodeJson.Description; 
        +      ItemDataMigrationFacade.CreateUnitOfMeasureIfNeeded(ItemJson.UnitCode, DescriptionToSet); 
        +      // set the unit of measure on the item 
        +      ItemDataMigrationFacade.SetBaseUnitOfMeasure(ItemJson.UnitCode); 
        +    end;
        +

        _Figure 2: Example of Item and Item Unit of Measure migration without staging tables _

        +

        Usage with staging tables:

        The overall workflow is:

        • @@ -373,76 +372,73 @@ end;

        -

        _Figure 3: Simplified sequence diagram of the data migration with staging tables _

        +

        Figure 3: Simplified sequence diagram of the data migration with staging tables

        Below is a simplified example showing how to create an item:

        -
        \[EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItem', '', true, true)\] 
        -procedure OnMigrateItem(VAR Sender : Codeunit "Item Data Migration Facade";RecordIdToMigrate : RecordId); 
        -var 
        -MyItemStagingTable : Record "My Item Staging Table"; 
        -begin 
        -// handle the event if it targets this extension's staging table 
        -if RecordIdToMigrate.TableNo <\> Database::"My Item Staging Table" then 
        -exit; 
        -MyItemStagingTable.Get(RecordIdToMigrate); 
        -// create item using the facade 
        -if not Sender.CreateItemIfNeeded(MyItemStagingTable.ItemNumber,MyItemStagingTable.ItemName1,
        -MyItemStagingTable.ItemName2,ConvertItemType(MyItemStagingTable.ItemType)) then 
        -exit; // item already exists 
        -// set some fields using the facade 
        -Sender.SetVendorItemNo(MyItemStagingTable.VendItemNumber); 
        -Sender.SetUnitVolume(MyItemStagingTable.Volume); 
        -Sender.SetAlternativeItemNo(MyItemStagingTable.AltItemNumber); 
        -if MyItemStagingTable.PrimaryVendor <\> '' then 
        -Sender.SetVendorNo(MyItemStagingTable.PrimaryVendor); 
        -// modify the item (+run trigger) to save the changes made by setters 
        -Sender.ModifyItem(true); 
        -end;
        -
        -

        _Figure 4: Example of event subscriber for Item migration _

        -

        __

        +
            [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItem', '', true, true)] 
        +    procedure OnMigrateItem(VAR Sender : Codeunit "Item Data Migration Facade";RecordIdToMigrate : RecordId); 
        +    var 
        +      MyItemStagingTable : Record "My Item Staging Table"; 
        +    begin 
        +      // handle the event if it targets this extension's staging table 
        +      if RecordIdToMigrate.TableNo <\> Database::"My Item Staging Table" then 
        +      exit; 
        +      MyItemStagingTable.Get(RecordIdToMigrate); 
        +      // create item using the facade 
        +      if not Sender.CreateItemIfNeeded(MyItemStagingTable.ItemNumber,MyItemStagingTable.ItemName1,
        +      MyItemStagingTable.ItemName2,ConvertItemType(MyItemStagingTable.ItemType)) then 
        +      exit; // item already exists 
        +      // set some fields using the facade 
        +      Sender.SetVendorItemNo(MyItemStagingTable.VendItemNumber); 
        +      Sender.SetUnitVolume(MyItemStagingTable.Volume); 
        +      Sender.SetAlternativeItemNo(MyItemStagingTable.AltItemNumber); 
        +      if MyItemStagingTable.PrimaryVendor <\> '' then 
        +      Sender.SetVendorNo(MyItemStagingTable.PrimaryVendor); 
        +      // modify the item (+run trigger) to save the changes made by setters 
        +      Sender.ModifyItem(true); 
        +    end;
        +

        Figure 4: Example of event subscriber for Item migration

        Below is another example showing how to use additional events to set fields that reference other tables, here the unit of measure:

        -
        \[EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItemUnitOfMeasure', '', true, true)\] 
        -procedure OnMigrateItemUnitOfMeasure(VAR Sender : Codeunit "Item Data Migration Facade";RecordIdToMigrate : RecordId); 
        -var 
        -MyItemStagingTable : Record "My Item Staging Table"; 
        -MyUnitCodeStagingTable : Record "My Unit Code Staging Table"; 
        -DescriptionToSet: Text\[10\]; 
        -begin 
        -// handle the event if it targets this extension's staging table 
        -if RecordIdToMigrate.TableNo <\> Database::"My Item Staging Table" then 
        -exit; 
        -MyItemStagingTable.Get(RecordIdToMigrate); 
        -if MyItemStagingTable.UnitCode = '' then 
        -error('Unit of measure is empty.'); 
        -MyUnitCodeStagingTable.SetRange(UnitCode,MyItemStagingTable.UnitCode); 
        -if MyUnitCodeStagingTable.FindFirst then 
        -DescriptionToSet := MyUnitCodeStagingTable.Description; 
        -// create the unit of measure through the facade 
        -Sender.CreateUnitOfMeasureIfNeeded(MyItemStagingTable.UnitCode, DescriptionToSet); 
        -// set the unit of measure on the item 
        -Sender.SetBaseUnitOfMeasure(MyItemStagingTable.UnitCode); 
        -// modify the item to save the changes made by setter 
        -Sender.ModifyItem(false); 
        -end; 
        -
        -

        _Figure 5: Example of event subscriber for Item Unit of Measure migration _

        -

        Combining both approaches:

        +
            [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItemUnitOfMeasure', '', true, true)] 
        +    procedure OnMigrateItemUnitOfMeasure(VAR Sender : Codeunit "Item Data Migration Facade";RecordIdToMigrate : RecordId); 
        +    var 
        +      MyItemStagingTable : Record "My Item Staging Table"; 
        +      MyUnitCodeStagingTable : Record "My Unit Code Staging Table"; 
        +      DescriptionToSet: Text[10]; 
        +    begin 
        +      // handle the event if it targets this extension's staging table 
        +      if RecordIdToMigrate.TableNo <\> Database::"My Item Staging Table" then 
        +      exit; 
        +      MyItemStagingTable.Get(RecordIdToMigrate); 
        +      if MyItemStagingTable.UnitCode = '' then 
        +      error('Unit of measure is empty.'); 
        +      MyUnitCodeStagingTable.SetRange(UnitCode,MyItemStagingTable.UnitCode); 
        +      if MyUnitCodeStagingTable.FindFirst then 
        +      DescriptionToSet := MyUnitCodeStagingTable.Description; 
        +      // create the unit of measure through the facade 
        +      Sender.CreateUnitOfMeasureIfNeeded(MyItemStagingTable.UnitCode, DescriptionToSet); 
        +      // set the unit of measure on the item 
        +      Sender.SetBaseUnitOfMeasure(MyItemStagingTable.UnitCode); 
        +      // modify the item to save the changes made by setter 
        +      Sender.ModifyItem(false); 
        +    end; 
        +

        Figure 5: Example of event subscriber for Item Unit of Measure migration

        +

        Combining both approaches:

        If you want to migrate additional entities, the **Data Migration **framework lets you initialize the migration with entities other than master data. In this case, the Data Migration Overview page will show additional lines. Item, vendor, customer, an general ledger accounts are migrated with an event driven approach, and the additional entities are migrated by calling an extension codeunit OnRun method.

        -

        Error handling with staging tables:

        +

        Error handling with staging tables:

        The migration starts by calling RUN on the façade codeunit. Errors thrown during the call are captured by GETLASTERRORTEXT and displayed when you choose the Show Errors action on the Data Migration Overview page.

        -

        _Figure 6: List of errors shown when clicking Show Errors on the Data Migration Overview page _

        +

        Figure 6: List of errors shown when clicking Show Errors on the Data Migration Overview page

        __

        The Edit Record action opens a view of the staging table, where you can edit fields to fix errors. Figure 4 shows an example of a page for the vendor staging table in a migration from C5.

        -

        _Figure 7: Edit a staging table record _

        +

        Figure 7: Edit a staging table record

        __

        The Staging Table ID determines the page to open, so it is important that the page ID is equal to the Staging Table ID, at least for the master data staging tables, for example, forG/L Accounts, Items, Customers and Vendor. You should ensure that pages to edit related entities are linked on this page by means of new actions. For example, Figure 4 uses the C5 Purchaser action.

        After you fix the staging table record, you can choose the Migrate action to mark the selected records as records to retry, and then run StartMigration with the Retry flag set to true. This is the only place where the retry flag should be set to true in the StartMigration procedure.

        Error handling without staging tables

        When migrating data without staging tables, errors can be registered manually by the extension using DataMigrationStatusFacade.RegisterErrorNoStagingTablesCase. Otherwise they can be registered automatically if the codeunits fail when called on their OnRun procedure.

        Errors will be displayed in the error list, but you cannot open and edit records because there is no staging table. The Edit action will not be available.

        -

        Limitations:

        +

        Limitations:

        • Data migration will fail if there are customers, vendors, items in the database and if these entities are selected for migration. For example, if you choose to migrate items and your company already contains items, you will get an error. This should not be an issue if you migrate your data from another tool to NAV, in which case you will most likely start on a fresh empty company. However, if you just want to import additional items to a company with existing items, then it is not supported by the framework. however, you can still use the different functions provided by the different codeunits (such as Item Data Migration Facade) to create the entities without strong coupling on the NAV data model.

          @@ -454,7 +450,7 @@ end;

          There is no automated rollback in case of failure: data that is successfully migrated will be commited, and data that is not successfully migrated with be shown in the errors list. The retry feature (in case of staging tables) then makes it possible for you to retry individual entities or ignore them.

        -

        Usages in NAV:

        +

        Usages in NAV:

        The Data Migration Façade is available starting from version 2018.

        The following Façade codeunits for data migration management are available:

          @@ -483,7 +479,7 @@ end;

          COD6114 (Ex. Rate Data Migration Facade)

        -

        References:

        +

        References:

        Façade pattern on Wikipedia: https://en.wikipedia.org/wiki/Facade_pattern

        @@ -497,12 +493,12 @@ end;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/discovery-event/index.html b/navpatterns/1-patterns/discovery-event/index.html index 666c9972..7802f0d2 100644 --- a/navpatterns/1-patterns/discovery-event/index.html +++ b/navpatterns/1-patterns/discovery-event/index.html @@ -2,19 +2,19 @@ - + Discovery Event :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -263,12 +263,12 @@ You see I can use the “sender” as a normal Record-variable. I access
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/document/index.html b/navpatterns/1-patterns/document/index.html index 67b8477e..2546be38 100644 --- a/navpatterns/1-patterns/document/index.html +++ b/navpatterns/1-patterns/document/index.html @@ -2,19 +2,19 @@ - + Document :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -297,12 +297,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/index.html b/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/index.html index 881d27f1..4761c1fa 100644 --- a/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/index.html +++ b/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/index.html @@ -2,19 +2,19 @@ - + Easy Update Of Setup Or Supplementary Information :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -275,12 +275,12 @@ Error(Field X is missing a value. Please correct it.)

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/error-message-processing/index.html b/navpatterns/1-patterns/error-message-processing/index.html index faa5e62c..5fdc1f55 100644 --- a/navpatterns/1-patterns/error-message-processing/index.html +++ b/navpatterns/1-patterns/error-message-processing/index.html @@ -2,19 +2,19 @@ - + Error Message Processing :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -296,12 +296,12 @@ END ELSE
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/extending-the-role-center-headlines/index.html b/navpatterns/1-patterns/extending-the-role-center-headlines/index.html index 49397edc..78bc4e0c 100644 --- a/navpatterns/1-patterns/extending-the-role-center-headlines/index.html +++ b/navpatterns/1-patterns/extending-the-role-center-headlines/index.html @@ -2,19 +2,19 @@ - + Extending the Role Center Headlines :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -355,12 +355,12 @@ _
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/feature-localization-for-data-structures/index.html b/navpatterns/1-patterns/feature-localization-for-data-structures/index.html index 8cccdd6f..98ec0026 100644 --- a/navpatterns/1-patterns/feature-localization-for-data-structures/index.html +++ b/navpatterns/1-patterns/feature-localization-for-data-structures/index.html @@ -2,19 +2,19 @@ - + Feature Localization For Data Structures :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -380,12 +380,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/hooks/index.html b/navpatterns/1-patterns/hooks/index.html index 5645efda..61cac5ff 100644 --- a/navpatterns/1-patterns/hooks/index.html +++ b/navpatterns/1-patterns/hooks/index.html @@ -2,19 +2,19 @@ - + Hooks :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -297,12 +297,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/index.html b/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/index.html index c97ed47c..f6425eb8 100644 --- a/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/index.html +++ b/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/index.html @@ -2,19 +2,19 @@ - + Surrogate keys using Autoincrement Pattern :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -309,12 +309,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/index.html b/navpatterns/1-patterns/index.html index 74fc2964..7aed585c 100644 --- a/navpatterns/1-patterns/index.html +++ b/navpatterns/1-patterns/index.html @@ -2,20 +2,20 @@ - + 1. Patterns :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -215,12 +215,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/index.xml b/navpatterns/1-patterns/index.xml index e570aa43..c214bf86 100644 --- a/navpatterns/1-patterns/index.xml +++ b/navpatterns/1-patterns/index.xml @@ -11,7 +11,7 @@ Lost reference to centralizer: An instance of a relevant object could attempt to Activity Log Abstract The Activity Log pattern tracks execution of activities. This is a Dynamics NAV specific implementation of the Audit Log pattern. Problem -In general, integrating with external systems can be very challenging, due to the complexity of the situation &ndash; connectivity issues, asynchronous operations, user errors, etc. These challenges require sometimes re-trying several times, polling the external system, re-send/re-get data as all these activities can succeed but can very well fail.Argument Tablehttps://bcalhelp.dev/navpatterns/1-patterns/argument-table/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/argument-table/Argument table pattern Originally By Nikola Kukrika and Waldo +In general, integrating with external systems can be very challenging, due to the complexity of the situation &ndash; connectivity issues, asynchronous operations, user errors, etc. These challenges require sometimes re-trying several times, polling the external system, re-send/re-get data as all these activities can succeed but can very well fail.Argument Tablehttps://bcalhelp.dev/navpatterns/1-patterns/argument-table/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/argument-table/Argument table pattern Originally By Nikola Kukrika and waldo Abstract The Argument Table pattern is used to provide an extension point for adding new arguments without changing the signature. By grouping multiple arguments into a table the code becomes more readable (function signature and the usage of the function). Problem In CAL overloading function signature is not supported. It is also not possible to provide default values for the function arguments.Cached Web Server Callshttps://bcalhelp.dev/navpatterns/1-patterns/cached-web-service-calls/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/cached-web-service-calls/Originally by Mostafa Balat, Microsoft Development Center Copenhagen Abstract In a service-oriented deployment, web services are used to extend NAV&rsquo;s functionality and reach. Depending on how volatile this data is and the corresponding usage scheme, it is expected to be up-to-date within a pre-defined period of time (e.g. once a day). @@ -25,7 +25,7 @@ We can group sets of data as templates to speed up and simplify the process of e Abstract This article illustrates NAV platform functionality to be used by C/AL developers. The URL builder function, GETURL, is released in Microsoft Dynamics NAV 2013 R2 to reduce coding time for developers who need to create various URL strings to run application objects in either the win client, the web client, or on web services. In addition, the GETURL function makes multitenancy features more transparent to C/AL developers.Creating Custom Chartshttps://bcalhelp.dev/navpatterns/1-patterns/creating-custom-charts/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/creating-custom-charts/Originally by Nikola Kukrika at Microsoft Development Center Copenhagen Abstract The goal of this solution is to enable you to: -Use charts in the web client. Create charts with custom functionality. Description This pattern enables you to implement a business chart (Specific Chart type) in a way that is maintainable and reusable on other pages. This also enables you to provide specific functionality that is not possible with the Generic Chart type and it enables you to show charts in the web client.Cross Session Eventshttps://bcalhelp.dev/navpatterns/1-patterns/cross-session-events/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/cross-session-events/By Nikolai L&rsquo;Estrange, from TVision Technology Ltd. in the UK_ _ +Use charts in the web client. Create charts with custom functionality. Description This pattern enables you to implement a business chart (Specific Chart type) in a way that is maintainable and reusable on other pages. This also enables you to provide specific functionality that is not possible with the Generic Chart type and it enables you to show charts in the web client.Cross Session Eventshttps://bcalhelp.dev/navpatterns/1-patterns/cross-session-events/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/cross-session-events/By Nikolai L&rsquo;Estrange, from TVision Technology Ltd. in the UK Abstract Track things that happen in other NAV Sessions. Problem In Microsoft Dynamics NAV you can fire a function whenever something changes within your session (and from NAV 2016 this is even easier with the new Event model), however there is not an easy way to know what is happening in other sessions. Sometimes you would like to know what has happened since your last read, without reading everything again, e.Currently Active Recordhttps://bcalhelp.dev/navpatterns/1-patterns/currently-active-record/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/currently-active-record/Authors: Henrik Langbak and Kim Ginnerup, Bording Data Abstract Date controlled data is expensive to find in the database. This pattern describes how using a view with a sub-select and a linked table object will minimize the returned dataset. @@ -105,6 +105,6 @@ Description While writing reports in NAV, we have the luxury of using a built-in iterator. So, once we define the dataitem and the ordering, the runtime takes care of the iteration. The iterator has one shortcoming: It can only run through records written into the database.Totals and Discounts on Subpages Sales and Purchaseshttps://bcalhelp.dev/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/By Nikola Kukrika at Microsoft Development Center Copenhagen Abstract To increase discoverability and productivity, critical information, such as statistics, can be moved from separate pages onto the document where it is needed. -For example, documents should clearly display totals and discounts information to provide quick overview, make it easy to relate the amounts to the document currency, and to allow the user to see and apply discounts directly on the document.Transfer Custom Fieldshttps://bcalhelp.dev/navpatterns/1-patterns/transfer-custom-fields/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/transfer-custom-fields/watch?v=cGaBqwfGCws&amp;list=PLhZ3P LY7CqmVszuvtJLujFyHpsVN0Uw&amp;index=9Variant Facadehttps://bcalhelp.dev/navpatterns/1-patterns/variant-facade/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/variant-facade/Variant Façade By Nikola Kukrika, Waldo and Gary Winter +For example, documents should clearly display totals and discounts information to provide quick overview, make it easy to relate the amounts to the document currency, and to allow the user to see and apply discounts directly on the document.Transfer Custom Fieldshttps://bcalhelp.dev/navpatterns/1-patterns/transfer-custom-fields/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/transfer-custom-fields/watch?v=cGaBqwfGCws&amp;list=PLhZ3P LY7CqmVszuvtJLujFyHpsVN0Uw&amp;index=9Variant Facadehttps://bcalhelp.dev/navpatterns/1-patterns/variant-facade/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/1-patterns/variant-facade/Variant Façade By Nikola Kukrika, waldo and Gary Winter Abstract The Variant façade provides a single interface that can take any Record, RecordRef or RecordID as an argument. With this pattern the code is encapsulated within the single object, with clear separation between common and table specific code. Problem Since NAV is strongly typed, developers often need to duplicate functionality in order to add support for a new table. \ No newline at end of file diff --git a/navpatterns/1-patterns/instructions-in-the-ui/index.html b/navpatterns/1-patterns/instructions-in-the-ui/index.html index e368a91d..4b8ed24c 100644 --- a/navpatterns/1-patterns/instructions-in-the-ui/index.html +++ b/navpatterns/1-patterns/instructions-in-the-ui/index.html @@ -2,19 +2,19 @@ - + Instructions in the UI :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -310,12 +310,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/integration-of-addresses/index.html b/navpatterns/1-patterns/integration-of-addresses/index.html index e7193ff3..9ef5d22f 100644 --- a/navpatterns/1-patterns/integration-of-addresses/index.html +++ b/navpatterns/1-patterns/integration-of-addresses/index.html @@ -2,19 +2,19 @@ - + Integration of Addresses :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -219,12 +219,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/journal-error-processing/index.html b/navpatterns/1-patterns/journal-error-processing/index.html index f1bc8bdf..6df0a972 100644 --- a/navpatterns/1-patterns/journal-error-processing/index.html +++ b/navpatterns/1-patterns/journal-error-processing/index.html @@ -2,19 +2,19 @@ - + Journal Error Processing :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -343,12 +343,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/journal-template-batch-line/index.html b/navpatterns/1-patterns/journal-template-batch-line/index.html index b445f0ce..1bd3bf1a 100644 --- a/navpatterns/1-patterns/journal-template-batch-line/index.html +++ b/navpatterns/1-patterns/journal-template-batch-line/index.html @@ -2,19 +2,19 @@ - + Journal Template Batch Line :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -359,12 +359,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/master-data/index.html b/navpatterns/1-patterns/master-data/index.html index 08267a48..a9dbc852 100644 --- a/navpatterns/1-patterns/master-data/index.html +++ b/navpatterns/1-patterns/master-data/index.html @@ -2,19 +2,19 @@ - + Master Data :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -306,12 +306,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/multi-file-download/index.html b/navpatterns/1-patterns/multi-file-download/index.html index fe87f6db..107d94af 100644 --- a/navpatterns/1-patterns/multi-file-download/index.html +++ b/navpatterns/1-patterns/multi-file-download/index.html @@ -2,19 +2,19 @@ - + Multi-file Download :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -297,12 +297,12 @@ FileMgt.GetExtension(FileName));
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/multi-page-list/index.html b/navpatterns/1-patterns/multi-page-list/index.html index b2c056f8..57e3721d 100644 --- a/navpatterns/1-patterns/multi-page-list/index.html +++ b/navpatterns/1-patterns/multi-page-list/index.html @@ -2,19 +2,19 @@ - + Multi-Page List :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -293,12 +293,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/multilanguage-application-data/index.html b/navpatterns/1-patterns/multilanguage-application-data/index.html index 7c556d72..5408a893 100644 --- a/navpatterns/1-patterns/multilanguage-application-data/index.html +++ b/navpatterns/1-patterns/multilanguage-application-data/index.html @@ -2,19 +2,19 @@ - + Multilanguage Application Data :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -288,12 +288,12 @@ All document types are affected.

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/net-exception-handling-in-cal/index.html b/navpatterns/1-patterns/net-exception-handling-in-cal/index.html index 8e733e40..2a641952 100644 --- a/navpatterns/1-patterns/net-exception-handling-in-cal/index.html +++ b/navpatterns/1-patterns/net-exception-handling-in-cal/index.html @@ -2,20 +2,20 @@ - + NET Exception Handling in CAL :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -381,12 +381,12 @@ END.
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/index.html b/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/index.html index d5d079d8..308425f7 100644 --- a/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/index.html +++ b/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/index.html @@ -2,19 +2,19 @@ - + TryFunction NET Exception Handling in CAL :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -393,12 +393,12 @@ END.
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/no-series/index.html b/navpatterns/1-patterns/no-series/index.html index f7f4fd05..4bba78c9 100644 --- a/navpatterns/1-patterns/no-series/index.html +++ b/navpatterns/1-patterns/no-series/index.html @@ -2,19 +2,19 @@ - + No Series :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -375,12 +375,12 @@ BEGIN

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/notifications/in-context-notifications/index.html b/navpatterns/1-patterns/notifications/in-context-notifications/index.html index b43abef6..f0ad74fa 100644 --- a/navpatterns/1-patterns/notifications/in-context-notifications/index.html +++ b/navpatterns/1-patterns/notifications/in-context-notifications/index.html @@ -2,19 +2,19 @@ - + In-context Notifications :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -366,12 +366,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/notifications/index.html b/navpatterns/1-patterns/notifications/index.html index 3dd51d32..18de040b 100644 --- a/navpatterns/1-patterns/notifications/index.html +++ b/navpatterns/1-patterns/notifications/index.html @@ -2,20 +2,20 @@ - + Notifications :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -220,12 +220,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/index.html b/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/index.html index 424cb4e7..2ed03d4f 100644 --- a/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/index.html +++ b/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/index.html @@ -2,19 +2,19 @@ - + Notification Lifecycle Management Pattern :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -369,12 +369,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/observer/index.html b/navpatterns/1-patterns/observer/index.html index bcf7e2fb..b00d3270 100644 --- a/navpatterns/1-patterns/observer/index.html +++ b/navpatterns/1-patterns/observer/index.html @@ -2,19 +2,19 @@ - + Observer :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -292,12 +292,12 @@ IF Observable.Get(RecRef.NUMBER) AND Observable.TrackRename THEN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/posting-routine-select-behavior/index.html b/navpatterns/1-patterns/posting-routine-select-behavior/index.html index 4963a98c..28e19129 100644 --- a/navpatterns/1-patterns/posting-routine-select-behavior/index.html +++ b/navpatterns/1-patterns/posting-routine-select-behavior/index.html @@ -2,19 +2,19 @@ - + Posting Routine - Select Behavior :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -267,12 +267,12 @@ Invoice := Selection IN [2,3];

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/product-name/index.html b/navpatterns/1-patterns/product-name/index.html index bc7726c8..c2b1392a 100644 --- a/navpatterns/1-patterns/product-name/index.html +++ b/navpatterns/1-patterns/product-name/index.html @@ -2,19 +2,19 @@ - + Product Name :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -249,12 +249,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/queries/index.html b/navpatterns/1-patterns/queries/index.html index 635a830b..fef074dc 100644 --- a/navpatterns/1-patterns/queries/index.html +++ b/navpatterns/1-patterns/queries/index.html @@ -2,20 +2,20 @@ - + Queries :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -220,12 +220,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/queries/select-distinct-with-queries/index.html b/navpatterns/1-patterns/queries/select-distinct-with-queries/index.html index effbcc85..69ad35c6 100644 --- a/navpatterns/1-patterns/queries/select-distinct-with-queries/index.html +++ b/navpatterns/1-patterns/queries/select-distinct-with-queries/index.html @@ -2,19 +2,19 @@ - + SELECT DISTINCT with Queries :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -267,12 +267,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/index.html b/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/index.html index cf31159a..57e301fb 100644 --- a/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/index.html +++ b/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/index.html @@ -2,19 +2,19 @@ - + use Queries to Detect Duplicate Records :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -304,12 +304,12 @@ methods CheckDuplicateAnalysisLineDescription and CheckDuplicateAnalysisColumnHe
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/index.html b/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/index.html index ef06776c..4079f602 100644 --- a/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/index.html +++ b/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/index.html @@ -2,19 +2,19 @@ - + Use Queries to Replace Nested Loops :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -403,12 +403,12 @@ END.
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/read-once-initialization-and-validation/index.html b/navpatterns/1-patterns/read-once-initialization-and-validation/index.html index 8cc3bac2..fa2fc82f 100644 --- a/navpatterns/1-patterns/read-once-initialization-and-validation/index.html +++ b/navpatterns/1-patterns/read-once-initialization-and-validation/index.html @@ -2,19 +2,19 @@ - + Read-once Initialization and Validation :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -261,12 +261,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/released-entity/index.html b/navpatterns/1-patterns/released-entity/index.html index 32255180..f35ed5bf 100644 --- a/navpatterns/1-patterns/released-entity/index.html +++ b/navpatterns/1-patterns/released-entity/index.html @@ -2,19 +2,19 @@ - + Released Entity :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -287,12 +287,12 @@ When talking about hierarchical data structures and the Release State is held on
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/report-selection/index.html b/navpatterns/1-patterns/report-selection/index.html index 64b77c65..698d061f 100644 --- a/navpatterns/1-patterns/report-selection/index.html +++ b/navpatterns/1-patterns/report-selection/index.html @@ -2,19 +2,19 @@ - + Report Selection :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -328,12 +328,12 @@ END;

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/security/index.html b/navpatterns/1-patterns/security/index.html index 8476593b..a412364b 100644 --- a/navpatterns/1-patterns/security/index.html +++ b/navpatterns/1-patterns/security/index.html @@ -2,19 +2,19 @@ - + Security :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -241,12 +241,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/setup-specificity-fallback/index.html b/navpatterns/1-patterns/setup-specificity-fallback/index.html index fde257e6..e1be97f4 100644 --- a/navpatterns/1-patterns/setup-specificity-fallback/index.html +++ b/navpatterns/1-patterns/setup-specificity-fallback/index.html @@ -2,19 +2,19 @@ - + Setup Specificity Fallback :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -265,12 +265,12 @@ If found, return record; if not, optionally return hard-coded value

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/silent-file-upload-and-download/index.html b/navpatterns/1-patterns/silent-file-upload-and-download/index.html index f19d8f9f..9994085f 100644 --- a/navpatterns/1-patterns/silent-file-upload-and-download/index.html +++ b/navpatterns/1-patterns/silent-file-upload-and-download/index.html @@ -2,19 +2,19 @@ - + Silent File Upload and Download :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -274,12 +274,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/singleton/index.html b/navpatterns/1-patterns/singleton/index.html index feebffa1..8fb6ff20 100644 --- a/navpatterns/1-patterns/singleton/index.html +++ b/navpatterns/1-patterns/singleton/index.html @@ -2,20 +2,20 @@ - + Singleton :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -242,12 +242,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/singleton/singleton-codeunit/index.html b/navpatterns/1-patterns/singleton/singleton-codeunit/index.html index 7df90863..21c08ca9 100644 --- a/navpatterns/1-patterns/singleton/singleton-codeunit/index.html +++ b/navpatterns/1-patterns/singleton/singleton-codeunit/index.html @@ -2,19 +2,19 @@ - + Singleton Codeunit :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -290,12 +290,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/singleton/singleton-table/cue-table/index.html b/navpatterns/1-patterns/singleton/singleton-table/cue-table/index.html index 71f0bb47..35fe2e87 100644 --- a/navpatterns/1-patterns/singleton/singleton-table/cue-table/index.html +++ b/navpatterns/1-patterns/singleton/singleton-table/cue-table/index.html @@ -2,19 +2,19 @@ - + Cue Table :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -298,12 +298,12 @@ _

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/singleton/singleton-table/index.html b/navpatterns/1-patterns/singleton/singleton-table/index.html index 2b2a714c..5c46f313 100644 --- a/navpatterns/1-patterns/singleton/singleton-table/index.html +++ b/navpatterns/1-patterns/singleton/singleton-table/index.html @@ -2,20 +2,20 @@ - + Singleton Table :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -287,12 +287,12 @@ GLSetupRead := TRUE;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/singleton/singleton-table/setup-table/index.html b/navpatterns/1-patterns/singleton/singleton-table/setup-table/index.html index 5d472ed1..a2763f2f 100644 --- a/navpatterns/1-patterns/singleton/singleton-table/setup-table/index.html +++ b/navpatterns/1-patterns/singleton/singleton-table/setup-table/index.html @@ -2,19 +2,19 @@ - + Setup Table :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -266,12 +266,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/standard-journal/index.html b/navpatterns/1-patterns/standard-journal/index.html index 6dc60c28..fb4d7003 100644 --- a/navpatterns/1-patterns/standard-journal/index.html +++ b/navpatterns/1-patterns/standard-journal/index.html @@ -2,19 +2,19 @@ - + Standard Journal :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -264,12 +264,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/temporary-dataset-report/index.html b/navpatterns/1-patterns/temporary-dataset-report/index.html index a2480510..c8a47f2e 100644 --- a/navpatterns/1-patterns/temporary-dataset-report/index.html +++ b/navpatterns/1-patterns/temporary-dataset-report/index.html @@ -2,19 +2,19 @@ - + Temporary Dataset Report :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -329,12 +329,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/index.html b/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/index.html index 1cee23a7..925c1754 100644 --- a/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/index.html +++ b/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/index.html @@ -2,19 +2,19 @@ - + Totals and Discounts on Subpages Sales and Purchases :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -341,12 +341,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/transfer-custom-fields/index.html b/navpatterns/1-patterns/transfer-custom-fields/index.html index f458dd5c..d509d71f 100644 --- a/navpatterns/1-patterns/transfer-custom-fields/index.html +++ b/navpatterns/1-patterns/transfer-custom-fields/index.html @@ -2,19 +2,19 @@ - + Transfer Custom Fields :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -219,12 +219,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/1-patterns/variant-facade/index.html b/navpatterns/1-patterns/variant-facade/index.html index eec63692..e9eb3c02 100644 --- a/navpatterns/1-patterns/variant-facade/index.html +++ b/navpatterns/1-patterns/variant-facade/index.html @@ -2,19 +2,19 @@ - + Variant Facade :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -214,7 +214,7 @@ BC AL Help . dev

        Variant Facade

        Variant Façade

        -

        By Nikola Kukrika, Waldo and Gary Winter

        +

        By Nikola Kukrika, waldo and Gary Winter

        Abstract

        The Variant façade provides a single interface that can take any Record, RecordRef or RecordID as an argument. With this pattern the code is encapsulated within the single object, with clear separation between common and table specific code.

        @@ -388,12 +388,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/2-anti-patterns/index.html b/navpatterns/2-anti-patterns/index.html index 976d8967..5b1ea02d 100644 --- a/navpatterns/2-anti-patterns/index.html +++ b/navpatterns/2-anti-patterns/index.html @@ -2,20 +2,20 @@ - + 2. Anti-Patterns :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -218,12 +218,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/2-anti-patterns/index.xml b/navpatterns/2-anti-patterns/index.xml index 77c7040a..44addf97 100644 --- a/navpatterns/2-anti-patterns/index.xml +++ b/navpatterns/2-anti-patterns/index.xml @@ -2,6 +2,6 @@ __ Context: when NAV is upgraded, whether on-premises or in the cloud, developers have the chance to write upgrade code to move data across changing data structures. Writing good quality code will help successful upgrades. General on upgrade **Problem: **assuming that the upgrade table contains data. -If the table is empty, it means that either the upgrade has run, or there was no data in the original tenant; in both cases, the upgrade code should exit immediately.Reusable Bugshttps://bcalhelp.dev/navpatterns/2-anti-patterns/reusable-bugs/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/2-anti-patterns/reusable-bugs/Reusable Bugs By Bogdana Botez, Andreas Moth, Eric Wauters (waldo), Elly Nkya, Nikola Kukrika +If the table is empty, it means that either the upgrade has run, or there was no data in the original tenant; in both cases, the upgrade code should exit immediately.Reusable Bugshttps://bcalhelp.dev/navpatterns/2-anti-patterns/reusable-bugs/Mon, 01 Jan 0001 00:00:00 +0000https://bcalhelp.dev/navpatterns/2-anti-patterns/reusable-bugs/By Bogdana Botez, Andreas Moth, Eric Wauters (waldo), Elly Nkya, Nikola Kukrika April 1st, 2015 Abstract It is difficult to come up with new and different bugs in each release, and it is a waste of resources to not use the ones which already had proven successful in the past. To avoid reinventing the wheel, we propose to come up with new innovative ways to create bugs that are reusable and generic enough to be used in various places of the application. \ No newline at end of file diff --git a/navpatterns/2-anti-patterns/nav-upgrade/index.html b/navpatterns/2-anti-patterns/nav-upgrade/index.html index 751abc31..8d939bfc 100644 --- a/navpatterns/2-anti-patterns/nav-upgrade/index.html +++ b/navpatterns/2-anti-patterns/nav-upgrade/index.html @@ -2,19 +2,19 @@ - + Nav Upgrade :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -269,12 +269,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/2-anti-patterns/reusable-bugs/index.html b/navpatterns/2-anti-patterns/reusable-bugs/index.html index eda2f701..fed769c7 100644 --- a/navpatterns/2-anti-patterns/reusable-bugs/index.html +++ b/navpatterns/2-anti-patterns/reusable-bugs/index.html @@ -2,19 +2,19 @@ - + Reusable Bugs :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -213,7 +213,6 @@ BC AL Help . dev

      Reusable Bugs

      -

      Reusable Bugs

      By Bogdana Botez, Andreas Moth, Eric Wauters (waldo), Elly Nkya, Nikola Kukrika

      April 1st, 2015

      Abstract

      @@ -222,14 +221,11 @@ BC AL Help . dev

      Option Strings

      One example of a reusable bug is to find a heavily used table, like table 36 Sales Header, and observe one of the more important fields of type Option, for example Document Type. The OptionString property has the following value: Quote,Order,Invoice,Credit Memo,Blanket Order,Return Order, which you should update to add one option, for example Transport Order in the beginning.

      The main benefit of this reusable bug is that code changed in one place, has impact in multiple sides on the application: document creation and handling, posting etc.

      -

      **Application Management
      -**

      +

      Application Management

      Codeunit 1, ApplicationManagement is a good place for creating reusable bugs. A simple INSERT on the RecRef on the first line of OnDatabaseInsert will create a sure and versatile bug that is reusable all over the application. Redundancy on database insertion ensures that data is surely conveyed to the data storage layer, twice.

      -

      **God objects
      -**

      +

      God objects

      We are considering to no longer make localization builds for countries. It consumes lab resources to keep running multiple country builds. Instead, we will merge everything into one single build. This is a bigger scale implementation of the “God object”. Inside this unique build, we will use IF statements and sporadically CASE statements to select each country’s behavior. For more help on how to use IFs, see also the IF .. THEN|ELSE C/AL Coding Guideline.

      -

      **Field length economy
      -**

      +

      Field length economy

      When you post a document, make sure to transfer data to a field that is smaller than the field you are assigning from. This will not immediately be caught and will only hurt a subset of the customers who uses Microsoft Dynamics NAV to its fullest.

      Guidelines

      When bug addition is not entirely obvious, there is a second way to approach the problem. By following some general coding best practices like the ones described below, reliable bug innovation is facilitated and can come naturally as a collateral effect.

      @@ -272,12 +268,12 @@ BC AL Help . dev
      - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/design/index.html b/navpatterns/3-cal-coding-guidelines/design/index.html index 0c0d50d1..763cf677 100644 --- a/navpatterns/3-cal-coding-guidelines/design/index.html +++ b/navpatterns/3-cal-coding-guidelines/design/index.html @@ -2,19 +2,19 @@ - + Design :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev - - - + + +
        @@ -231,12 +231,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/index.html b/navpatterns/3-cal-coding-guidelines/index.html index 4ccd4b6b..173c3a04 100644 --- a/navpatterns/3-cal-coding-guidelines/index.html +++ b/navpatterns/3-cal-coding-guidelines/index.html @@ -2,20 +2,20 @@ - + 3. CAL Coding Guidelines :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -221,12 +221,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/index.html b/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/index.html index 417b5ae0..051c9a65 100644 --- a/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/index.html +++ b/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/index.html @@ -2,19 +2,19 @@ - + Internally-used DotNet Types :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -324,12 +324,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/internationalization/index.html b/navpatterns/3-cal-coding-guidelines/internationalization/index.html index 6677a402..2e30d4c6 100644 --- a/navpatterns/3-cal-coding-guidelines/internationalization/index.html +++ b/navpatterns/3-cal-coding-guidelines/internationalization/index.html @@ -2,20 +2,20 @@ - + Internationalization :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -232,12 +232,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/index.html b/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/index.html index dde79d54..1126d3d2 100644 --- a/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/index.html +++ b/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/index.html @@ -2,19 +2,19 @@ - + Using Calcdate :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ THEN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/index.html b/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/index.html index 44c3cfd6..7130ad1a 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/index.html @@ -2,19 +2,19 @@ - + CaptionML on System Pages :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -239,12 +239,12 @@ OBJECT Table 2000000000 User
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/index.html b/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/index.html index 2c75c570..9fb0eafa 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/index.html @@ -2,19 +2,19 @@ - + FIELDCAPTION and TABLECAPTION :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -231,12 +231,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/index.html b/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/index.html index a30b5768..58c31557 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/index.html @@ -2,19 +2,19 @@ - + Global Text Constants :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -233,12 +233,12 @@ BEGIN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/index.html b/navpatterns/3-cal-coding-guidelines/localizability/index.html index c16562b4..d065f36c 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/index.html @@ -2,20 +2,20 @@ - + Localizability :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -227,12 +227,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/index.html b/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/index.html index 47007a5b..14a6475f 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/index.html @@ -2,19 +2,19 @@ - + Use Text Constants :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -248,12 +248,12 @@ ERROR(ProgramTerminatedErr);
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/index.html b/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/index.html index 655d531f..e4dca21a 100644 --- a/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/index.html +++ b/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/index.html @@ -2,19 +2,19 @@ - + Using OptionCaptionML :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -236,12 +236,12 @@ Selection@1008 : 'Open,Closed,Open and Closed';
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/index.html b/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/index.html index 2ff948d3..7bbf427f 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/index.html @@ -2,19 +2,19 @@ - + Begin as an 'After Word' :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/begin-end/index.html b/navpatterns/3-cal-coding-guidelines/readability/begin-end/index.html index 61a2b07e..958b4995 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/begin-end/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/begin-end/index.html @@ -2,19 +2,19 @@ - + Begin-End - Compound Only :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -263,12 +263,12 @@ END ELSE (not X)
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/index.html b/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/index.html index 38b00c0f..c7e4b7fc 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/index.html @@ -2,19 +2,19 @@ - + Binary Operator to Start Line :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -229,12 +229,12 @@ Quantity -
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/blank-lines/index.html b/navpatterns/3-cal-coding-guidelines/readability/blank-lines/index.html index 06ad1658..0fcc9e17 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/blank-lines/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/blank-lines/index.html @@ -2,19 +2,19 @@ - + Blank Lines.md :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -243,12 +243,12 @@ THEN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/case-actions/index.html b/navpatterns/3-cal-coding-guidelines/readability/case-actions/index.html index c94a46a9..62f7b2ec 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/case-actions/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/case-actions/index.html @@ -2,19 +2,19 @@ - + CASE Action :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -231,12 +231,12 @@ Letter2 := '11';
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/index.html b/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/index.html index 7ac055ac..87f8525e 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/index.html @@ -2,19 +2,19 @@ - + Colon usage in CASE :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -229,12 +229,12 @@ DimValue."Dimension Code" := GLSetup."Global Dimension 1 Code&quo
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/index.html b/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/index.html index 0a17df7c..22ee982e 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/index.html @@ -2,19 +2,19 @@ - + Comments inside Curly Brackets :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -247,12 +247,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/index.html b/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/index.html index 11515db8..80059aa3 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/index.html @@ -2,19 +2,19 @@ - + Comment Spacing :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -226,12 +226,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/index.html b/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/index.html index eaac4439..7b3723ba 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/index.html @@ -2,19 +2,19 @@ - + END ELSE Pair :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -235,12 +235,12 @@ END ELSE
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/indentation/index.html b/navpatterns/3-cal-coding-guidelines/readability/indentation/index.html index d39523c7..2f8c1536 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/indentation/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/indentation/index.html @@ -2,19 +2,19 @@ - + Indentation :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -285,12 +285,12 @@ DO
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/index.html b/navpatterns/3-cal-coding-guidelines/readability/index.html index a7074446..439f75c7 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/index.html @@ -2,20 +2,20 @@ - + Readability :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -228,12 +228,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/index.html b/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/index.html index 1ea9b619..ba327a29 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/index.html @@ -2,19 +2,19 @@ - + Keyword Pairs - Indentation :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -228,12 +228,12 @@ THEN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/index.html b/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/index.html index 0243b853..a0b560a6 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/index.html @@ -2,19 +2,19 @@ - + Line Start Keywords :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -234,12 +234,12 @@ ValidatSalesCycleCode;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/index.html b/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/index.html index 92bd6756..c29b0314 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/index.html @@ -2,19 +2,19 @@ - + Lonely Repeat :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -227,12 +227,12 @@ REPEAT
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/named-invocations/index.html b/navpatterns/3-cal-coding-guidelines/readability/named-invocations/index.html index c0694b21..a0b819ed 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/named-invocations/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/named-invocations/index.html @@ -2,19 +2,19 @@ - + Named Invocations :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -226,12 +226,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/nested-withs/index.html b/navpatterns/3-cal-coding-guidelines/readability/nested-withs/index.html index b5b5efd5..05697b74 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/nested-withs/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/nested-withs/index.html @@ -2,19 +2,19 @@ - + Nested WITHs :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -235,12 +235,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/index.html b/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/index.html index 7cb7dba6..1a75ef67 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/index.html @@ -2,19 +2,19 @@ - + One Statement Per Line :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -234,12 +234,12 @@ TotalAmt += Amt;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/index.html b/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/index.html index 7881c78b..01918c40 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/index.html @@ -2,19 +2,19 @@ - + Separate IF and ELSE :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -231,12 +231,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/index.html b/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/index.html index 44cd9169..f229c4cd 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/index.html @@ -2,19 +2,19 @@ - + Spacing Binary Operators :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -238,12 +238,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/index.html b/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/index.html index 0cef30fb..72bb5f5c 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/index.html @@ -2,19 +2,19 @@ - + Spacing Brackets and :: :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -238,12 +238,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/index.html b/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/index.html index de9d4346..997ebba5 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/index.html @@ -2,19 +2,19 @@ - + Spacing Unary Operators :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -232,12 +232,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/index.html b/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/index.html index fabbc847..7982369e 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/index.html @@ -2,19 +2,19 @@ - + Suggested Abbreviations :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -924,12 +924,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/index.html b/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/index.html index daf795fb..7d4c5ea5 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/index.html @@ -2,19 +2,19 @@ - + Temporary Variable Naming :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -231,12 +231,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/index.html b/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/index.html index bf7ce062..6ac6ed02 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/index.html @@ -2,19 +2,19 @@ - + TextConst Suffixes :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -294,12 +294,12 @@ ChartOfAccountsLbl@9647 : TextConst 'ENU=Chart of Accounts';
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/index.html b/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/index.html index 15fff4f5..5f36b80b 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/index.html @@ -2,19 +2,19 @@ - + Unary Operator Line End :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -228,12 +228,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/index.html b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/index.html index 150afdeb..2098106d 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/index.html @@ -2,19 +2,19 @@ - + Unnecessary Compound Parenthesis :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -241,12 +241,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/index.html b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/index.html index c38b9419..06a9937a 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/index.html @@ -2,19 +2,19 @@ - + Unnecessary ELSE :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ ERROR(BinCodeChangeNotAllowedErr,...);
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/index.html b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/index.html index 3b037a02..3a1c1434 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/index.html @@ -2,19 +2,19 @@ - + Unnecessary Function Parenthesis :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -232,12 +232,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/index.html b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/index.html index 286e7004..c4afd954 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/index.html @@ -2,19 +2,19 @@ - + Unnecessary Separators :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -225,12 +225,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/index.html b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/index.html index 68cb1812..0753035d 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/index.html @@ -2,19 +2,19 @@ - + Unnecessary TRUE/FALSE :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -232,12 +232,12 @@ Bad code

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/index.html b/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/index.html index e33eac85..2a76e579 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/index.html @@ -2,19 +2,19 @@ - + Variable Already Scoped :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -240,12 +240,12 @@ END;
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/variable-naming/index.html b/navpatterns/3-cal-coding-guidelines/readability/variable-naming/index.html index 0388a03b..872ccefb 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/variable-naming/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/variable-naming/index.html @@ -2,19 +2,19 @@ - + Variable Naming :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -263,12 +263,12 @@ THEN BEGIN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/index.html b/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/index.html index ca1379ea..f796617c 100644 --- a/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/index.html +++ b/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/index.html @@ -2,19 +2,19 @@ - + Variables Declarations Order :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -227,12 +227,12 @@ StartingDateFilter@1002 : Text\[30\];
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/ux/actions-images/index.html b/navpatterns/3-cal-coding-guidelines/ux/actions-images/index.html index f6c8fda3..0be6c634 100644 --- a/navpatterns/3-cal-coding-guidelines/ux/actions-images/index.html +++ b/navpatterns/3-cal-coding-guidelines/ux/actions-images/index.html @@ -2,19 +2,19 @@ - + Actions - Images :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -231,12 +231,12 @@ Image=Report }
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/ux/confirm/index.html b/navpatterns/3-cal-coding-guidelines/ux/confirm/index.html index 64c0a24d..a15ba60e 100644 --- a/navpatterns/3-cal-coding-guidelines/ux/confirm/index.html +++ b/navpatterns/3-cal-coding-guidelines/ux/confirm/index.html @@ -2,19 +2,19 @@ - + CONFIRM :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ IF CONFIRM(ChangeAllOpenedEntriesQst,TRUE) THEN
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/ux/fielderror/index.html b/navpatterns/3-cal-coding-guidelines/ux/fielderror/index.html index 57fb3037..e6709712 100644 --- a/navpatterns/3-cal-coding-guidelines/ux/fielderror/index.html +++ b/navpatterns/3-cal-coding-guidelines/ux/fielderror/index.html @@ -2,19 +2,19 @@ - + FIELDERROR :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ Cust.FIELDERROR("No.",InvalidValue);
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/ux/index.html b/navpatterns/3-cal-coding-guidelines/ux/index.html index eb7f5699..ed857fa3 100644 --- a/navpatterns/3-cal-coding-guidelines/ux/index.html +++ b/navpatterns/3-cal-coding-guidelines/ux/index.html @@ -2,20 +2,20 @@ - + UX :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -227,12 +227,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/3-cal-coding-guidelines/ux/message-and-error/index.html b/navpatterns/3-cal-coding-guidelines/ux/message-and-error/index.html index 50609031..2e8f4b1f 100644 --- a/navpatterns/3-cal-coding-guidelines/ux/message-and-error/index.html +++ b/navpatterns/3-cal-coding-guidelines/ux/message-and-error/index.html @@ -2,19 +2,19 @@ - + MESSAGE and ERROR :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -230,12 +230,12 @@ ERROR(CustIsBlockedErr,...);
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/4-get-involved/code-of-conduct/index.html b/navpatterns/4-get-involved/code-of-conduct/index.html index 98323d1b..ebfcd983 100644 --- a/navpatterns/4-get-involved/code-of-conduct/index.html +++ b/navpatterns/4-get-involved/code-of-conduct/index.html @@ -2,19 +2,19 @@ - + Code of Conduct :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -227,12 +227,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/4-get-involved/index.html b/navpatterns/4-get-involved/index.html index 9ff17982..586a6b42 100644 --- a/navpatterns/4-get-involved/index.html +++ b/navpatterns/4-get-involved/index.html @@ -2,20 +2,20 @@ - + (OLD) Get Involved :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -224,12 +224,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/4-get-involved/patterns-authors/index.html b/navpatterns/4-get-involved/patterns-authors/index.html index 4399c6ff..fa9ac5c1 100644 --- a/navpatterns/4-get-involved/patterns-authors/index.html +++ b/navpatterns/4-get-involved/patterns-authors/index.html @@ -2,19 +2,19 @@ - + Patterns Authors :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -512,12 +512,12 @@ _ (2 patterns)

        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/index.html b/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/index.html index 16c59d93..6bd35f6c 100644 --- a/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/index.html +++ b/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/index.html @@ -2,19 +2,19 @@ - + Template for writing Nav Design Patterns :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -256,12 +256,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/index.html b/navpatterns/index.html index 1ef85706..8bc6831b 100644 --- a/navpatterns/index.html +++ b/navpatterns/index.html @@ -2,20 +2,20 @@ - + NAV Patterns Archive :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -222,12 +222,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/navpatterns/related-links/index.html b/navpatterns/related-links/index.html index 6a626f69..4ae3edd5 100644 --- a/navpatterns/related-links/index.html +++ b/navpatterns/related-links/index.html @@ -2,19 +2,19 @@ - + Related Links :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -32,9 +32,9 @@ BC AL Help . dev
      - - - + + +
        @@ -221,12 +221,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 71730aea..082c6918 100644 --- a/tags/index.html +++ b/tags/index.html @@ -2,20 +2,20 @@ - + Tags :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -211,12 +211,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file diff --git a/welcome/index.html b/welcome/index.html index ecb7b507..327726f3 100644 --- a/welcome/index.html +++ b/welcome/index.html @@ -2,20 +2,20 @@ - + Welcome :: BC AL Help - - - - - - - - - - + + + + + + + + + + @@ -33,9 +33,9 @@ BC AL Help . dev
      - - - + + +
        @@ -215,12 +215,12 @@ BC AL Help . dev
        - - - - - - - + + + + + + + \ No newline at end of file