AL extension release · 10.0AL Developmentofficial - Microsoftderived - from the source, no model text

AL Language extension 10.0

AL Language extension 10.0 for Business Central 2022 release wave 2: released 2022-10-03; 16 changelog entries, 7 GitHub issues linked.

Changelog on the Visual Studio Marketplace · Business Central 2022 release wave 2

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.
  • #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.

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));
}

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.

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.

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.

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.

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:

customaction(MyFlowAction)
{
    CustomActionType = Flow;
    FlowId = '<the-GUID-identifying-the-Power-Automate-Flow>';
    FlowEnvironmentId = '<the-GUID-identifying-the-Power-Automate-environment>';
}

Render a group as a split button

We have introduced the ability to render some groups as split buttons. This type of control gives you a fast one-click access to the first action visible and enabled in a menu by using the left button part and also provides access to other related actions by using the right dropdown part.

Split buttons can be defined using the new property ShowAs.

New Promoted Action Syntax

We have introduced a new area named Promoted and a new concept of action references, in replacement of the Promoted properties. This allows you to explicitly define the order of the actions in the promoted side of the action bar.

The syntax looks as follows:

    area(Promoted)
    {
        group(MyPromotedGroup)
        {
            actionref(MyActionRef; MyAction)
            {
            }
        }
    }

For more information about the new AL Syntax for the action bar, see:

In order to help you convert your extensions, we have added an AL code action to convert pages using the legacy action syntax to use the new actionref syntax. This code action allows you to convert, a single page, all pages in a document, all pages in your project, or even all pages in your workspace.

New UICop rule

Similarly to AW0013, we have introduced a new UICop rule AW0014 that reports a diagnostic when an action group with its visible set to false contains or one or many actions with action references.

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.

Miscellaneous

  • The SystemRowVersion (timestamp) field is now available for tables. Added LastUsedRowVersion() and MinimumActiveRowVersion() to use in combination with the SystemRowVersion field.
  • Added a new parameter to the launch.json file that allows opening a specific company when deploying from Visual Studio Code.- 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.
  • 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.
  • 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.
  • 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.
  • Deprecated the usage of ‘Extension’ and ‘Internal’ targets in the app.json manifest in favor of Cloud’ and ‘OnPrem’ from runtime version 11.0.

Source: Visual Studio Marketplace, ms-dynamics-smb.al changelog, Microsoft’s text unchanged. Dates from the gallery’s upload records.