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.
- BC26Business Central
- 2025-07-11released
- 7entries
- 1issue
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
DisplayNameof theExternalBusinessEventattribute 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
Languageon reports which conflict with the built-in Language method. - Updated rule AS0034 to be more strict about the
Compressedproperty, because changing it could lead to extensions not being able to update. Now it will be an error to change the property fromtruetofalseand vice versa. The default value istrue, so adding the property withfalsewill 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, andGuiddata types. Added text methods to theTextConstantdata type and removed static methods on theLabeltype. - 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.