[ESP] En el siguiente enlace puedes ver leer los cambios relacionados a la versión vigente:
[ENG] En el siguiente link, you can read the changes related to the current version:

16.2
Miscellaneous
Relaxed compiler error AL1032 to allow duplicate translation files targeting the same language, as long as they are targeting different original apps.
Fixed crashes in aldoc for projects without namespaces or with external business events (methods marked with the ´ExternalBusinessEvent` attribute).
16.1
Reporting
Fixed an issue where the compiler updated the Microsoft Word layouts with the namespace for the extended custom xml document and not the standard custom xml. This caused document rendering to fail for repeaters.
16.0
Support for new ExtendedDataType value: Document
The ExtendedDataType property for Media and MediaSet fields now also supports the Document value. On pages, these fields can only be used on ListPart and CardPart page types, allowing the client to correctly render elements in FactBoxes, such as displaying a PDF as a portrait image.
Introducing MaskedType enum field-level property.
A new MaskType enum property is introduced with the values Concealed and None. The default value is None. When set, MaskType instructs the web client to display the field with its value hidden by default, allowing users to toggle visibility and view the value in plain text. The use of the MaskType property is restricted by AW0017, which prohibits setting this property on fields inside repeater controls.
Allow copying nodes in the profile editor and support for hovering
In the profile editor, individual nodes can be copied and hovered to show the full text of the node. This allows for easier editing of long nodes, such as SQL queries.
Cancel publish and package commands
Publishing and packaging AL applications can now be canceled from the Visual Studio Code UI.
New Business Central Themes for Visual Studio Code
We are excited to introduce two new themes: Business Central Light and Business Central Dark. These themes prominently feature our favorite color; teal, and are included in the .vsix package. We hope you enjoy the refreshed look and feel they bring to your development experience!
ALDoc: Improvements
Namespaces can now be documented and when they are, an «Overview» entry is added in the table of contents. The overview includes objects and events from the namespace. The recommended way to document a namespace is to include a source file named after the namespace with ‘.Namespace.al’ appended just containing the documentation and the namespace declaration as the example below:
/// <summary>
/// Summary of the namespace functionality
/// </summary>
/// <remarks>
/// Some clever remarks
/// </remarks>
namespace MyCompany.MyNamespace;
The aldoc tool is updated to support the latest version of DocFx (2.78.3) when generating the docfx.json file. Existing documentation folders can be updated with the following command:
aldoc refresh -o <doc folder>
which adds a "_disableToc": false setting to the globalMetadata of the docfx.json file and refreshes the Business Central docfx templates.
Summary System Part Support
With this release, we Introduce a new system part of type Summary that can be controlled on Card, Document, and ListPlus pages. This allows developers to hide or configure the Summary factbox when it’s not needed.
Control the Summary part in page extensions using the identifier DefaultSummaryPart:
pageextension 50101 MyPageExtension extends "Customer Card"
{
layout
{
modify(DefaultSummaryPart)
{
Visible = false;
}
}
}
Or, define it explicitly in new pages like this:
page 50101 MyPage
{
layout
{
area(FactBoxes)
{
systempart(DefaultSummaryPart; Summary)
{
Visible = false;
}
}
}
}
Note that there can only be one summary system part per page.
ALTool: New «compile» Command Support
ALTool now supports invoking alc for compiling AL packages. The syntax is:
altool compile <alc arguments>
This feature is particularly useful when used with the Business Central Development Tools NuGet package. The package is a .NET tool that includes the AL development tools required for pipelines. Unlike the .vsix installation, it can easily be installed in a pipeline. When installed as a global tool, you can start a compilation by using the following command:
AL compile <alc arguments>
The AL command acts as a convenient alias for ALTool when installed via the NuGet package.
To explore all available commands for ALTool (or AL alias), run the tool without any arguments. Currently supported commands include:
| Command | Description |
|---|---|
compile | Compile a package using alc.exe. |
GetPackageManifest | Retrieve the manifest from a .app file. |
CreateSymbolPackage | Create a symbol-only package from a .app file. |
GetLatestSupportedRuntimeVersion | Get the latest supported AL runtime version for a platform version. |
help | Display detailed information about a specific command. |
version | Display version information. |
This enhancement streamlines the AL development process, especially in CI/CD pipelines, by providing a more accessible and efficient way to compile AL packages.
Go To Symbol in Workspace
The Visual Studio Code feature «Go To Symbol In Workspace» (Ctrl + T) has been extended to search for a broader range of AL symbols. In addition to application objects, it now includes procedures, events, global variables, page controls, page actions, table fields, and many more.
This new way of searching can be disabled under the setting «al.extendGoToSymbolInWorkspace.enabled». In addition, you can configure the maximum amount of symbols to display with the «al.extendGoToSymbolInWorkspace.ResultLimit» setting. Use the «al.extendGoToSymbolInWorkspace.IncludeSymbolFiles» setting to specify if the search should include the dependencies symbol files.
RecordRef – Get field by name
New overloads are added to the Field and FieldExist methods, which allows searching for a field by its name.
Editable fields in page customizations
You can now make page fields defined in page customizations editable. Previously, such fields were always read-only, unlike fields declared in pages or page extensions.
pagecustomization MyPageCust customizes MyPage
{
layout
{
addfirst(Content)
{
field(MyPageCustField; Rec.MyTableField) { Editable = true; }
}
}
}
To give AL developers more control over how table fields are used in customizations, new values have been added to the AllowInCustomizations property:
Never– still excludes a table’s fields from the in-client designer.AsReadOnly– allows use in page customizations, but only as read-only.AsReadWrite– allows fields to be made editable in page customizations.
The default value ToBeClassified and the obsolete value Always both behave like AsReadOnly.
For efficiency, AllowInCustomizations can now also be set at the table and table extension level. On table extensions, this only applies to fields declared in the table extension and does not affect the base table fields.
To support field classification, new analyzer rules are introduced: AS0138, AS0139, and PTE0026. These rules are currently optional and do not block AppSource submissions or PTE uploads. Learn more in the dedicated sections for analyzer rules.
Semantic Highlighting Improvements

Code made inactive using #if/#else/#endif directives is now shown in the same color. This improves readability when using Conditional directives. There is a known issue with brackets (parentheses, begin/end, curly braces, etc.) if bracket pair colorization is active. Unless "editor.bracketPairColorization.enabled": false, brackets will still have colors when code is inactive.
XML documentation comments now support Semantic Highlighting if the selected theme supports it. Try the Visual Studio 2019 Dark & Light themes.
Obsolete symbols now also support Semantic Highlighting.
Reporting
- Allow empty dataitems when emitting Excel layouts with multiple datasheets (error if no data items contains columns which would result in a workbook with no data sheets).
- Add new layout information fields in the aggregated metadata sheet for the Excel layout template (object caption, local date. and UTC timezone offset).
- Updated report Word layout XML, enabling layouts to be compatible with the new data picker in the Word add-in; and it now includes the ‘Obsolete State’ attribute for Report Column and DataItem elements.
ALDoc Improvements
- New option (–includeinternals) to include internal symbols in the generated documentation.
- Fixed navigational links to other reference symbols
- Reference to other objects contains object type.
- New fallbacks in case of missing symbol documentation
- Promote
AboutTextproperty to page or report summary - Promote
Tooltipproperty to table fields summary
- Promote
- New ALDoc option (–targetpackageslist) accepts space-separated values to support target package names containing commas (unlike –targetpackages). For example,
--targetpackageslist "TechCore,Inc" "Fintech Corp" "Global Solutions, Ltd"
TestType Property in AL tests
We have introduced a new TestType property in test codeunits, which allows engineers to specify the primary purpose and scope of the test.
The property can be used to group tests for execution and reporting in CI/CD pipelines.
RequiredTestIsolation Property in AL tests
We have introduced a new RequiredTestIsolation property in test codeunits, which allows engineers to set the required TestIsolation for the test codeunit to run in. If the selected TestRunner does not satisfy the test codeunit’s RequiredTestIsolation property, then the tests might fail.
The property can be used to group tests for execution and reporting in CI/CD pipelines.
If a test codeunit has RequiredTestIsolation = None, then it can run by a TestRunner with any TestIsolation.
If a test codeunit has RequiredTestIsolation = Codeunit, then it requires a TestRunner with Codeunit TestIsolation.
If a test codeunit has RequiredTestIsolation = Function, then it requires a TestRunner with Function TestIsolation.
If a test codeunit has RequiredTestIsolation = Disabled, then it requires a TestRunner with Disabled TestIsolation.
AppSourceCop
- New rules AS0136 and AS0137 which will allow the change of field IDs for tables and table extensions under specific conditions. The feature is enabled only for Microsoft applications for now.
- New rule AS0138 validating that table fields are classified with a value different from
ToBeClassifiedandAlways. This rule will not fail AppSource submissions as it is not enabled by default and requires a ruleset to be enabled. - New rule AS0139 validating that newly added table fields are classified with a value different from
ToBeClassifiedandAlways. This rule will not fail AppSource submissions as the default severity isWarning. - Relaxed rule AS0018 to allow removal of non-obsolete procedures referencing an obsolete removed table or a removed application application within an array parameter or array return type.
PerTenantExtensionCop
- New rule PTE0026 validating that table fields are classified with a value different from
ToBeClassifiedandAlways. This rule will not fail PTE uploads as it is not enabled by default and requires a ruleset to be enabled.
GitHub Issues
- #7885 No object ID suggested when namespace is used
- #8004 PageCustomization IntelliSense – Fields of PageExtensions missing
- #7741 AA0198 is not reported for return variables of procedures
- #7949 Convert page control tooltip to table control tooltip does not work for non-Rec variables.
- #7988 AL0155 is raised for ReportExtension but not on other extension objects
- #8020 Unable obsolete usercontrol
- #8002 False positive AA0210 on CustomTable SystemId SetRange
- #7874 False positive for AA0206 when using DateTime.Date() or DateTime.Time()
- #8005 AA0137 missing warning for global variables on report extensions
- #8078 dotnet tool al returns exit code 1 when displaying help information
- #7477 Semantics are lost on Enum values if AsInteger has no parentheses
- #7867 AA0248 in Pageextensions not working as expected
- #7996 Snapshot debugging via «Help & Support» doesn’t work if .vscode folder exists
- #7985 No AA0218 warning on certain role center actions
- #8015 Error 85132273 during Publish and Install application
- #8039 generateCrossReferences not working – System.AggregateException due to System.NullReferenceException
- #8036 Unable to authenticate to BC on Linux #8036
- #8059 Analyzer ‘Microsoft.Dynamics.Nav.CodeCop.Design.Rule139DoNotAssignToStringWithSmallerCapacity’ threw an exception of type ‘System.InvalidCastException’
- #8058 ALDOC fails when app publisher name contains a comma
- #8061 Debugger does not show named return variable
- #8069 AL Language Opens Problem Pane on Every Project Open
Miscellaneous
- Error diagnostic for defining methods with an empty name.
- RAD publishing will stop if there are no detected application object changes.
- Implicit conversion from
TestFilterFieldtoVariantorJokeris no longer allowed, correcting for a previous issue where such conversions would result in a runtime error. - Fixed an issue where it was not possible to refer to members (eg. fields) added by page extensions via a page customization on the same application.
- Fixed an issue where return values which collided with global variables did not produce a warning.
- Fixed an issue where AL:Package copied an empty app file to other projects in the same workspace that were referencing the packaged one. The issue only occured when the
compilationOptionsoutFolderwas set to a relative path. - When the manifest file is saved, analyzer diagnostics will no longer disappear.
- Fixed some cases where diagnostics would be emitted for an older version of the source.
- The methods
Visible()andEnabled()are now available onTestPartobjects. UpdateAuditFieldsonDataTransferis now in Cloud scope.- More diverse tokens for semanticTokenColorCustomizations
- Added new CodeCop rules to ensure
AutoFormatTypeandAutoFormatExpressionproperties are correctly specified for decimal fields:- AA0471:
AutoFormatTypemust be specified for decimal fields on pages. - AA0472:
AutoFormatExpressionmust be specified for decimal fields on pages whenAutoFormatTypeis 1, 2, or 10. - AA0473:
AutoFormatTypemust be specified for decimal fields on tables. - AA0474:
AutoFormatExpressionmust be specified for decimal fields on tables whenAutoFormatTypeis 1, 2, or 10.
- AA0471:
- Add support for Truncate on Record and RecordRef, and a CodeCop rule to ensure it is only used where applicable.
- AA0475:
Truncatecan only be used on normal tables without media fields and outside of try functions.
- AA0475:
- Add support for custom Microsoft Entra ID authentication overrides in settings. The new setting is
al.entraIdAuthentication, a complex type consisting of one or more of the following properties:endpoint(ex. https://login.microsoftonline.com),clientId(ex. 41839ce3-4041-4bac-8c17-0941f25d7aaf),redirectionUri(ex. https://developer.businesscentral.dynamics.com),scope(ex. https://api.businesscentral.dynamics.com/.default). See Public client and confidential client applications for reference on creating a public client. - Fixed an issue where entering credentials after failed requests would not respect user’s request to cancel (pressing Esc).
- Compilation will now fail more gracefully when the
app.jsonfile is malformed. - Fixed an issue where
Labeltype variables coming from dependency apps would be displayed as MissingTypeSymbol if the label has MaxLength defined. - Supports having collections with RecordRefs
- Add
Guid.CreateGuid(same asCreateGuid) andGuid.CreateSequentialGuidwhich creates a new unique GUID which is more performant when used in a table key. - Add
LockTimeoutDurationallow increasing/lowering lock timeout instead of only disabling/enabling it. - Fixed an issue where the altpgen tool would fail if the project contained references to apps with relevant table extensions.
15.3
GitHub Issues
- #7771 Table fields with AllowInCustomizations = Never are not visible when added to a page extension
- #8011 Formatter issue with AL Language Extension on save
AppSourceCop
- Updated rule AS0034 to allow tables to transition from temporary to normal.
Miscellaneous
- Fixed an issue where scheduling a PTE for the next major would fail with PTE0004 error in certain cases.
15.2
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 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.
Miscellaneous
Updated the maximum allowed CSV length to 2048 to resolve import errors in the Bank Reconciliation Journal via Data Exchange Definition.
15.1
Pass SecretText to control-addins
It is now possible to pass a value of type SecretText to control add-in procedures. This permits the integration of credentials with JavaScript-based authentication solutions.
New method to add SecretText values to JSON objects – WriteWithSecretsTo
A new method was added to the JsonObject type, which allows developers to add SecretText values. To use it, the AL developer first creates a JSON object with placeholder values for their secret values. Then they provide paths to the values in the JPath format as well as the values themselves. Finally, the method produces a new SecretText value with the credentials replaced.
procedure CreateSecretBody(ApiKey: SecretText, SecretSalt: SecretText) : SecretText
var
JsonBody: JsonObject;
Secrets: Dictionary of [Text, SecretText];
Result: SecretText;
begin
// Create a debuggable body
JsonBody.Add('type', 'Some type');
JsonBody.Add('api_key', 'placeholder');
JsonBody.Add('salt', 'placeholder');
// Prepare the replacements
Secrets.Add('$.api_key', ApiKey);
Secrets.Add('$.salt', SecretSalt);
// Produce the secret body
JsonBody.WriteWithSecretsTo(Secrets, Result);
exit(Result);
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.
GitHub Issues
- #7993 Using HttpClient.UseServerCertificateValidation requires to use return value, but only in method usage.
- #7790 Support for multiple extensions to same target introduce 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 an issue where an error during publishing would be hidden, causing it to look as if the publishing operation had stalled.
15.0
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;
}
Mocking HTTP calls in AL tests
We have introduced a new handler type HttpClientHandler to allow mocking the response of HTTP requests in test codeunits. This feature allows for more controlled and easier testing of modules that interact with external services. The feature is limited to OnPrem instances only.
HttpClientHandler
When an HttpClientHandler is added to a test method, every HTTP request that occurs during the execution of that test will be intercepted and routed to the handler. The handler method signature is as follows: it receives a TestHttpRequestMessage that contains information about the HTTP request, as well as a TestHttpResponseMessage that contains the mocked HTTP response values that should be updated by the handler. The Boolean return value indicates whether to fall through and issue the original HTTP request (true) or to use the mocked response (false).
TestHttpRequestPolicy Property
We have also introduced a new property on test codeunits called TestHttpRequestPolicy. This property determines how outbound HTTP requests are treated during test execution and has the following possible values:
- BlockOutboundRequests: Any HTTP request issued during the test execution that is not caught and handled by an HTTP client handler will raise an exception.
- AllowOutboundFromHandler: All HTTP requests issued during the test execution are required to be caught by an HTTP client handler. The handler is allowed to explicitly fall through to issue the original request to the external endpoint.
- AllowAllOutboundRequests: All outbound HTTP requests issued during the test execution are allowed.
Example code
codeunit 10 MyCodeunit
{
procedure MethodWithHttpRequest()
var
Client: HttpClient;
Response: HttpResponseMessage;
begin
Client.Get('http://example.com/', Response);
end;
}
codeunit 11 MyCodeunitTests
{
Subtype = Test;
TestHttpRequestPolicy = AllowOutboundFromHandler;
[Test]
[HandlerFunctions('HttpClientHandler')]
procedure TestUnauthorizedResponseHandled()
var
MyCodeunit: Codeunit "MyCodeunit";
begin
MyCodeunit.MethodWithHttpRequest();
end;
[HttpClientHandler]
procedure HttpClientHandler(request: TestHttpRequestMessage; var response: TestHttpResponseMessage): Boolean
begin
// Mock a '401 Unauthorized' response for the 'GET http://example.com/' request
if (request.RequestType = HttpRequestType::Get) and (request.Path = 'http://example.com/') then begin
response.HttpStatusCode := 401;
response.ReasonPhrase := 'Unauthorized';
exit(false); // Use the mocked response
end;
// Fall through and issue the original request in case of other requests
exit(true);
end;
}
Searchable downloaded symbols and using them as context in Copilot Chat
Objects from downloaded symbol packages can now be added as context when using the Github Copilot Chat extension (prerelease version 0.24.2024121201) and Visual Studio Code Insiders (version 1.97 and later). It will also be possible to search and navigate to objects coming from downloaded symbol packages via the ‘Open Symbol by Name’ functionality (Ctrl + T). Additionally, the performance of searching workspace symbols has been improved to support the now larger amount of available symbols.
UserControlHost PageType
We have introduced a new PageType UserControlHost. This page type can be used to only render a single usercontrol in the client. With the UserControlHost page type, the layout is optimized by the client to maximize the available space for the usercontrol.
This new page can only have a single control of type usercontrol within the layout Content area.
Actions cannot be specified on this page, and limited properties and triggers are available for it. It is also not extensible.
Multiline strings
AL now has support for multiline string literals. A multiline string must be prefixed with @.
var
t: Text;
begin
t := @'This is
a
multiline
string
';
end;
Continue statement
From runtime version 15, it is possible to use the continue keyword in loops to continue to the next iteration.
Preview support in File
Two new methods to open and view a file on the client.
[Ok :=] File.ViewFromStream(Stream: InStream, FileName: String [, AllowDownloadAndPrint: Boolean]);
[Ok :=] File.View(FilePath: String [, AllowDownloadAndPrint: Boolean]);
New methods access properties and array elements
We have improved the API for accessing JSON data with a new set of methods that will avoid always to read data through a JsonToken.
For JsonObject instances we have added:
value := GetBoolean(Key: Text [; DefaultIfNotFound: Boolean])
value := GetByte(Key: Text [; DefaultIfNotFound: Boolean])
value := GetChar(Key: Text [; DefaultIfNotFound: Boolean])
value := GetInteger(Key: Text [; DefaultIfNotFound: Boolean])
value := GetBigInteger(Key: Text [; DefaultIfNotFound: Boolean])
value := GetDecimal(Key: Text [; DefaultIfNotFound: Boolean])
value := GetOption(Key: Text [; DefaultIfNotFound: Boolean])
value := GetDateTime(Key: Text [; DefaultIfNotFound: Boolean])
value := GetDate(Key: Text [; DefaultIfNotFound: Boolean])
value := GetTime(Key: Text [; DefaultIfNotFound: Boolean])
value := GetDuration(Key: Text [; DefaultIfNotFound: Boolean])
value := GetText(Key: Text [; DefaultIfNotFound: Boolean])
value := GetArray(Key: Text [; DefaultIfNotFound: Boolean])
value := GetObject(Key: Text [; DefaultIfNotFound: Boolean])
For JsonArray instances we have added:
value := GetBoolean(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetByte(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetChar(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetInteger(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetBigInteger(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetDecimal(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetOption(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetDateTime(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetDate(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetTime(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetDuration(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetText(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetArray(Index: Integer [; DefaultIfNotFound: Boolean])
value := GetObject(Index: Integer [; DefaultIfNtFound: Boolean])
New Command in VSCode to start a new project from a template
We have added a new command AL.NewProject. From this it is possible to start a new project from a template.
New IncStr method overload
A new overload of the IncStr method was added to support an arbitrary positive increment. This allows for incrementing number series or other similar series by more than one position in one go.
New VS Code actions from the Web Client
Two new actions have been added to the Extension Management page. One to generate launch configurations in your local AL project to match the environment, and another to select installed extensions and download them as dependencies.
Github Issues
- #7787 Rule AA0234 implemented inconsistently?
- Added warning AL0864 when having controls of
ChartParttype, since they are not supported by the web client. From runtime version 16.0, this will turn into the error AL0855. - #7746 Misleading ToolTip on RunTime in App.Json
- #7873 False positives for warning AA0234
- #7880 Interface XML comments are not properly handled. They are ignored
- #7898 AA0205 is fired for assigned variables when combined with THIS keyword
- #7846 Wrong tooltip in TableRelation when table name matches top-level namespace name
- #7924 AA0242 is thrown when «Rec.AddLoadFields» is used after «Rec.SetLoadFields»
- #7769 The AL Server crashed 5 times in the last 3 minutes
- #7801 AA0218 not working as expected for dependent fields
- #7965 ALDoc – Referenced module not loaded. Name:’Application’
- #7968 AS0064 is thrown even if interface is Access=Internal
- #7963 The AL compiler builds invalid permission XML files when it contains only few permissions
- #7969 Missing AL0185 for page parts
- #7964 Error AS0003 when compiling any app with AppSourceCop enabled – MacOS
- #7974 InlayHint fails
- #7979 ALDoc skips documentations for objects with ampersand
- #7885 No object ID suggested when namespace is used
- #7981 ALDoc skips documentation if procedure param record has ampersand
AppSourceCop
- Updated rule AS0128 to allow removing a previously obsoleted interface from the list of extended interfaces.
- New rule AS0130 that warns against duplicate object names across namespaces.
- Updated rule AS0064 to allow removing a previously internal interface from the list of implemented interfaces.
PerTenantExtensionCop rules
- New rule PTE0025 that warns against duplicate object names across namespaces.
Reporting
- Added the
ObsoleteState,ObsoleteReason, andObsoleteTagproperties to the Report Layout to enable marking a layout as obsolete. - Added the
ExcelLayoutMultipleDataSheetsproperty to the Report Layout to specify whether an Excel layout should be rendered with multiple or a single data sheet. - Add new Excel data sheet when adding root level data items and the layout uses multiple data sheets.
- Add new layout information fields in the aggregated metadata sheet for the Excel layout template (layout name, caption and id). Also add Company Display name to the same table.
- Add a new report trigger OnPreRendering to handle additional platform processing of the generated report artifact.
- Add a new report property TargetFormat that gets the current output format.
- Fixed a problem with multiple sheet Microsoft Excel layout generation, when root DataItems had names containing special or whitespace characters (Excel required table repairs before the workbook could open).
HttpClient
- Added the
UseServerCertificateValidationproperty to the HttpClient data type to selectively disable server certificate validation on HTTP requests. Default value is true.
Miscellaneous
- Added SetAutoCalcFields on the RecordRef data type.
- Deprecated Debugger.EnableSqlTrace
- When the
AddTextorReadmethods are used on a non-assignable target of typeBigText, the produced values will be discarded instead of causing a crash. - Interfaces cannot contain methods whose signatures collide with the methods from the extended interfaces. It is also not possible to extend an interface with other interfaces whose methods collide.
- Allow having a dictionary where the value type is an interface.
- BCIdea Hovering over labels will additionally reveal if they are locked. Enums will show ordinal values. Codeunit hover text will contain the subtype (if it is a test or install codeunit etc.) and if it is a single instance.
- BCIdea Support modification of
CardPageIDonPageExtensions. If the property is already specified on the base page, the value in thePageExtensionwill override it. If multiplePageExtensions modify the property, the last extension to be applied will take effect. - BCIdea Added ToText method to simple types (BigInteger, Boolean, Byte, Date, DateTime, Decimal, Duration, Guid, Integer, Time, Version) for simple conversion to text. Continue to use FORMAT for advanced formatting options.
- Added a new ValidateServerCertificate property in the launch.json file. Default value is true. When set to false the connection to the Business Central service will no longer validate the server endpoint certificate.
- BCIdea It is now possible to ‘Peek references’ by clicking CodeLenses
- CodeLens references
- OptimizeForTextSearch will now cause an error if used on non-normal tables or fields.
- Fixed an issue with «Publish Full Dependency For Active Project» where publishing would fail to use the correct port if a port was specified in the server URL in the
launch.jsonfile. - Fixed an issue where moved fields would cause an ambiguous reference error when used in TestFilters.
- When autocompleting overloads for methods, if all of them have the same deprecation reason, the description will contain it.
- Fixed issues with the «Implement Interface» codefixer. Methods with interfaces parameters are generated correctly. Variable/Parameters type casing is aligned to Pascal Case. Fully qualified names are only used if needed i.e. respecting namespace-declaration and using-statements.
- Fixed issue with deep structured code would cause StackOverflowException
- Added support to display the default value of boolean properties on hover and in IntelliSense suggestions.
- Actions that have the
RunObjectproperty specified will use the Caption, ToolTip, AboutText, and AboutTitle properties of the targeted application object if none of these properties are specified. In support of this, the ToolTip property has also been added to Reports. - It is now possible to specify layout on the GetUrl command.
- Fixed an issue where object IDs were not recommended with namespaces.
- Added support for getting the current callstack by using the following statement
callstack := SessionInformation.Callstack. - Fixed an issue where Rapid Application Development (RAD) publishing would break when workspace changes consisted only of deleted files.
- Continue keyword is now recommended by intellisense.
- New CodeCop rule AA0249 to warn about unused page field triggers.
Más información / More information:



Deja un comentario