AL Compiler 2022 Wave 2 Release Notes

Version 10.1

Report.PrintOnlyIfDetail

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.
  • #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>';
}

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.