Business Central 2022 wave 2 (BC21): AL Language Changelog version 10.0&10.1 (AL Release Notes)

Dynamics 365 Business Central

Hi, Readers.
Dynamics 365 Business Central 2022 wave 2 (BC21) is generally available yesterday. More details: Generally available: Dynamics 365 Business Central 2022 wave 2 (BC21)

The AL Language release notes 10.x have also been updated. More details: AL Language Changelog. I will update some of the contents I’ve tested, hoping to give you some help.

Business Central 2022 release wave 2

Version 10.1


GitHub Issues

  • 7146 Support sticky scroll with a more complete model, meaning for instance, the sticky scroll line is not the attribute of a procedure but the name of it.

Version 10.0

GitHub Issues

  • #7083 The AL:Go! project template now has “implicit with” switched off by default. This is visible in the app.json file where the project feature “NoImplicitWith” is present.

Enable NoImplicitWith feature by default (New feature setting in app.json file)

  • #7057 AS0098 should allow any character instead of space when validating report extensions columns affixes
  • #7072 AL0432 is shown in triggers of obsolete fields
  • #7073 The outline window now handles RDLCLayout, WordLayout and ExcelLayout properties.
  • #7107 ControlAddIn/UserControl in page loses its actual type when referenced in a pageextension, breaking passing to procedures
  • #7127 Compiling app using NextMajor version is failing with AL compiler error
  • #7141 Rule AS0098 is now enforced for report labels.

Data Transfer

The new AL object DataTransfer has been introduced, which enables bulk data transfer operations in upgrade code via set-based SQL operations instead of using row-by-row operations.

Developers can write faster upgrade code (New DataTransfer data type)

Use of Option Access syntax in formulas

The AL language now supports using option access syntax in formula properties. This removes the need for hard coded integer values and improves the readability and the maintainability of the code.

page 50100 MyCustomerReportSelectionPage
    SourceTable = "Custom Report Selection";
    SourceTableView = where("Source Type" = const(Database::Customer));

Use option access syntax in formulas (18 -> Database::Customer)

New UICop rule

  • AW0014 – A warning is reported when an action group with its visibility set to false contains the target actions of one or many actionrefs. This rule is similar to AW0013, but for pages using the new action bar syntax.

The snapshot debugger shows all the lines hit by a snapshot session

All the lines that were collected by a snapshot debugging session are marked with a vertical line in the left gutter of the editor. The appearance of the gutter is controlled by the al.snapshotDebuggerLinesHitDecoration configuration setting.

Visualize code lines executed in snapshot capture (Snapshot Debugger Lines Hit Decoration)

Debugger Enhancements

We have added new options to control when the debugger should break on errors or record writes.

BreakOnError: This takes now one of the following values: [true, false, “All”, “None”, “ExcludeTry”].

  • false/None: Does not break on any errors.
  • true/All: Breaks on all errors.
  • ExcludeTry: Breaks on errors only if they occur outside of the context of a Try function.

Exclude Try functions when debugging errors (“breakOnError”: “ExcludeTry”)

BreakOnRecordWrite: This takes one of the following values: [true, false, “None”, “All”, “ExcludeTemporary”]

  • false/None: Does not break on any record writes.
  • true/All: Breaks on all record writes.
  • ExcludeTemporary: Breaks on record writes only if they are not on a temporary table.

Exclude temporary records when debugging record writes (“breakOnRecordWrite”:”ExcludeTemporary”)

PermissionSet – New ExcludedPermissionSets Property

The new property ExcludedPermissionSets was added to permission set objects, allowing the definition of excluded permission sets in extensions. See more here: ExcludedPermissionSets

Inherent Permissions

The Inherent Permissions attribute allows now for elevating entitlements and/or permissions in the given method scope. This is achieved by specifying an optional argument called InherentPermissionsScope.

Apply a code action to document, project, or solution scope

We have added the ability to fix all occurrences of an issue in document, project or solution scope. If a code action supports ‘fix all occurrences’, then there will be more suggestions on the list, for each extra supported scopes, where user can choose to apply the fix to the current instace of an issue or to apply the fix to all the occurances in a chosen scope.

ResourceExposurePolicy – New ApplyToDevExtension Property

A new property ApplyToDevExtension has been added to the ResourceExposurePolicy in the app.json file. If this flag is set to true, all resource exposure policies specified for the extension will also apply to developer extensions.

Apply resource exposure policy to DEV extensions (“resourceExposurePolicy”:”applyToDevExtension”)

Run Power Automate flows from page actions

We have added the ability to define page actions triggering a Power Automate flow using custom actions. The syntax is as follows:

    CustomActionType = Flow;
    FlowId = '<the-GUID-identifying-the-Power-Automate-Flow>';
    FlowEnvironmentId = '<the-GUID-identifying-the-Power-Automate-environment>';

Personalize and design the Automate action group in the web client – The customaction keyword

Inherent Object Entitlements

The new property InherentObjectEntitlements was added to objects that can have assigned permissions. AL developers can mark an object with this property, to take it out of the permissions system.


  • The SystemRowVersion (timestamp) field is now available for tables. Added LastUsedRowVersion() and MinimumActiveRowVersion() to use in combination with the SystemRowVersion field.

Access database row version from AL code – (field) SystemRowVersion: BigInteger

  • Added a new parameter to the launch.json file that allows opening a specific company when deploying from Visual Studio Code.

Launch in a specific company from Visual Studio Code (startupCompany parameter)

  • The treport snippet now includes the DefaultRenderingLayout property.
  • The ‘al.enableCodeActions’ setting is now enabled by default.
  • Option types are now always considered equal since they are a wrapper of the Integer type.
  • Fixed a bug that prevented loading dotnet types, which were subject of type forwarding.
  • Fixed hover display for properties defined in action groups and action separators.
  • Intellisense now suggests keys for the SourceTableView property on XmlPort table elements and the DataItemTableView for Report DataItems.

  • Controls and Actions now inherit the ApplicationArea defined on the page/report level. The analyzer rules AS0062 and PTE0008 have been updated accordingly.

ApplicationArea on fields defaults to page value

  • Added command to generate permission set as an AL object, al.generatePermissionSetForExtensionObjects. The previous functionallity of creating a permissionset xml file, is moved into the command al.generatePermissionSetForExtensionObjectsAsXml.

New command to generate or update AL permission set

  • The AL:Go! project template now has allowDebugging, allowDownloadingSource, and includeSourceInSymbolFile switched on by default. This is visible in the app.json file where the project resourceExposurePolicy is set.

Resource exposure policies for apps are on by default (“allowDebugging”: true, “allowDownloadingSource”: true, “includeSourceInSymbolFile”: true)

  • AppSourceCop Error AS0093 has been discontinued. AppSource submissions can now contain entitlement objects.
  • Improved performance when background code analysis and code actions were both enabled.
  • New warning AL0732 regarding the use of non-public procedures in interfaces. This will become an error AL0733 in a later release.
  • Fixed issue that case conditions could generate invalid code for the server.
  • Fixed a bug that prevented running CodeCop rule AA0241.
  • Added more validation for key vault urls; Validation of key vault URLs at compilation time are now aligned with runtime validation.
  • New feature ‘AllTranslationItems’ in the app.json manifest. It creates all possible translation units. This should also be used when another app want to translation this app, in order to give them all translation labels.
  • Fixed intellisense crashing for enums UnknownValueImplementation property.
  • ‘Go To Definition’ now works for Rec, xRec, CurrReport, CurrPage, CurrQuery and CurrXMLport.


Hope this will help.

Thanks for reading.



Copied title and URL