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

AL Language extension 15.2

AL Language extension 15.2 for Business Central 2025 release wave 1 (BC26): released 2025-07-11; 7 changelog entries, 1 GitHub issue linked.

Changelog on the Visual Studio Marketplace · Business Central 2025 release wave 1 · BC26

Allow deprecating external business events

We have added support for deprecating ExternalBusinessEvent type events.

The process follows the standard obsoletion steps for procedures with one additional requirement:

Step 1: Mark the event as obsolete pending

  • Decorate the procedure with the [Obsolete('<Reason>','<Tag>')] attribute.
  • Prefix the DisplayName of the ExternalBusinessEvent attribute with an [OBSOLETE] marker.

Step 2: Remove the obsolete pending event in an upcoming version

Example code

codeunit 10 MyCodeunit
{
    [ExternalBusinessEvent('MyEvent', '[OBSOLETE] MyEventDisplayName', 'Description', EventCategory::MyValue, '1.0')]
    [Obsolete('The event will be replaced by version 2.0 of MyEvent', '27.0')]
    procedure MyEvent()
    begin
    end;

    [ExternalBusinessEvent('MyEvent', 'MyEventDisplayName', 'Description', EventCategory::MyValue, '2.0')]
    procedure MyEvent2()
    begin
    end;
}

Remarks

It is also possible to obsolete the containing object without deprecating the external business event itself. This is because external business events are identified by their (app ID - event name - event version) triplet from the external subscriber’s perspective, independent of their containing object or procedure within AL. In such scenarios, you must relocate the event within the same app while following the standard obsoletion process for the original containing object.

Implicit conversion between Record and RecordRef

We have introduced support for implicit conversion between Record and RecordRef instances, allowing direct assignment between these types.

codeunit 10 RecordAndRecordRefConversion
{

    procedure RecordToRecordRef()
    var
        Customer: Record Customer;
        RecRef: RecordRef;
    begin
        RecRef := Customer;      // Similar to RecRef.GetTable(Customer);
        ProcessRecord(Customer); // Argument conversion
    end;

    procedure RecordRefToRecord()
    var
        Customer: Record Customer;
        RecRef: RecordRef;
    begin
        Customer := RecRef;      // Similar to RecRef.SetTable(Customer); This will cause an error if the table is different
        ProcessCustomer(RecRef); // Argument conversion.
    end;

    procedure ProcessCustomer(r: record Customer)
    begin
        Message('Process Customer');
    end;

    procedure ProcessRecord(rr: RecordRef)
    var
        Customer: record Customer;
    begin
        case rr.Number of
            Database::Customer:
                Message('Process Customer');
            else
                Error('Unable to process record');
        end;
    end;
}

AppSourceCop

  • Updated rule AS0018 to allow removing or renaming events in extension objects when the event name conflicts with the name of the events defined in the target object.
  • Updated rules AS0034 and AS0039 to allow modifying the InherentEntitlments on tables.
  • Updated rule AS0106 to allow removing protected global variables conflicting with built-in members. For instance, variables named Language on reports which conflict with the built-in Language method.
  • Updated rule AS0034 to be more strict about the Compressed property, because changing it could lead to extensions not being able to update. Now it will be an error to change the property from true to false and vice versa. The default value is true, so adding the property with false will similarly be considered a breaking change.
  • Adding new AppSourceCop configuration settings enabling validation of breaking changes on objects which are Obsolete, marked with OnPrem, or marked with Internal accessibility. By default, these objects are not validated by AppSourceCop nor by the AppSource technical validation process. For more info, see AppSourceCop Configuration.
  • New rule AS0134 to detect breaking changes of the version attribute parameter of external business events. The rule will not fail AppSource submissions as the default severity is Warning.
  • New rule AS0135 to validate that external business events are correctly obsoleted prior to removal.

GitHub Issues

  • #7790 Support for multiple extensions to same target introduces the translations bug

Miscellaneous

  • Introduced a new Warning Error that is thrown when a field from a table extension is referenced from a key in another table extension, which extends the same base table. This will become an error from Business Central 2026 Wave 2. Learn more about the limitation described in our docs.
  • Fixed issues with .ToText formatting on Decimal, Boolean, Byte, and Guid data types. Added text methods to the TextConstant data type and removed static methods on the Label type.
  • When authenticating using Entra ID, interactive login is now the default. This uses MSAL (Microsoft Authentication Library) and opens authentication in the system’s default browser, which means it does not respect the AL extension settings for browser selection or incognito mode during the interactive authentication flow. You can go back to device authentication by setting "useInteractiveLogin" : false.
  • Updated the maximum allowed CSV length to 2048 to resolve import errors in the Bank Reconciliation Journal via Data Exchange Definition.

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