What's New: Business Central Developer Tools (2023 release wave 2)
Business Central developer tools in 2023 release wave 2: AL namespaces with using directives and code actions, the AL Doc reference documentation tool, the AL language extension on Linux (in preview), secure text, page inspector explore options, debugger and profiler changes, and IntelliSense updates.
- Introduction and agenda overview
- AL language extension pre-release versions and Linux support
- Live demo: AL development on Windows Subsystem for Linux
- DevOps syntax highlighting and transition to namespaces
- Namespaces in AL: concept, implementation, and code actions
- Namespace syntax, restrictions, and adoption strategy
- Namespace best practices and AL Explorer discovery
- AL Doc reference documentation tool and XML comments
- AL Doc build command, DocFX integration, and live demonstration
- Documentation generation and troubleshooting improvements overview
- Page Inspector, field investigation, and AL Explorer
- Debugging, profiling, and symbol management
- Future ideas and error details with call stacks
- AL language features: namespaces, variants, and secure text
- Secure text data type protection and request security
- Field customization and extended data types
- Queries, Excel layouts, and AL inlay hints
- IntelliSense improvements and find all references
- AL Go configuration, GitHub Copilot Chat, and AI assistance
- AppSource transactability and developer resources
Overview
The session covers developer tooling in 2023 release wave 2. It starts with AL extension pre-release versions, Linux and WSL support (in preview, demoed) and syntax highlighting for AL in Azure DevOps (in preview). Namespaces get the most time: declaration, using directives, fully qualified names, code actions, restrictions, adoption advice and naming conventions.
It then covers AL Doc, which turns XML documentation comments and app structure into YAML that DocFX renders as HTML, with a GitHub Pages demo. Later sections cover the page inspector explore options for Visual Studio Code, debugger and profiler changes, the secure text data type, field and query additions, inlay hints, IntelliSense and find all references, GitHub Copilot Chat for AL, and AppSource transactability.
Key points
- Namespaces are declared as the first statement in a source file and can be nested. Use using directives or fully qualified names to reference namespaced objects, and code actions can add either.
- Wait to namespace your own code until all your dependencies are namespaced, otherwise later namespacing of those dependencies breaks your references. Renaming a namespace is a breaking change.
- Namespace naming advice: start with company name, product, area, feature. Keep the root company-specific and stable, and avoid names like Microsoft, utility or common. Prefixes (fixes) on object names are still needed for now.
- AL Doc has an init command (once per documentation repository) and a build command that produces YAML from .app files. DocFX turns the YAML into HTML, which can be hosted on GitHub Pages.
- The explore page and explore field options in Visual Studio Code need the troubleshooting tools permission. The first symbol download can take time, and a shared symbols path lets you reuse symbols.
- Secure text hides values from normal and snapshot debugging, but it must be constructed in non-debuggable methods. It does not protect data shared outside Business Central.
- The AL profiler sampling interval can be 50, 100 (default) or 150 ms. The debug console supports IntelliSense but does not evaluate methods.
Features
| Feature | Status | At | Evidence |
|---|---|---|---|
| AL language extension pre-release versions | status not stated | 1:27 | |
| AL language extension for Linux | preview, demoed | 1:56 | “One thing we introduced with the preview functionality is the ability to install the AL language extension on Linux.” (1:56) |
| DevOps syntax highlighting | preview | 4:31 | “Another thing we added as a preview is syntax highlighting for DevOps.” (4:31) |
| Namespaces in AL language | status not stated, demoed | 4:55 | |
| Using directives for namespace imports | status not stated, demoed | 8:27 | |
| Fully qualified object names | status not stated, demoed | 9:27 | |
| Namespace code actions | status not stated, demoed | 8:27 | |
| AL Explorer group by namespace | status not stated, demoed | 15:44 | |
| AL Doc reference documentation tool | status not stated, demoed | 16:56 | |
| XML documentation comments in AL | status not stated, demoed | 19:40 | |
| AL Doc init command | status not stated, demoed | 22:06 | |
| AL Doc build command | status not stated, demoed | 22:41 | |
| DocFX integration for HTML generation | status not stated, demoed | 23:10 | |
| GitHub Pages integration for documentation hosting | status not stated, demoed | 24:32 | |
| Explore page in Visual Studio Code | status not stated, demoed | 31:42 | |
| AL Explorer | status not stated, demoed | 33:45 | |
| Explore field in Visual Studio Code | status not stated, demoed | 37:38 | |
| Attach debugger from help and support | status not stated, demoed | 38:17 | |
| Troubleshooting tools permission | status not stated | 39:13 | |
| Shared symbols path | status not stated | 40:34 | |
| Future: CodeSpaces Integration | status not stated | 41:13 | |
| Future: GitHub Source Integration | status not stated | 41:26 | |
| Future: Bulk Symbol Download | status not stated | 41:50 | |
| Error Details with Call Stack | status not stated, demoed | 42:14 | |
| Debug Console IntelliSense | status not stated, demoed | 42:25 | |
| AL Profiler Sampling Interval Options | status not stated, demoed | 44:24 | |
| Implicit Variant to Dictionary and List Conversion | status not stated | 45:45 | |
| Secure Text Data Type | status not stated, demoed | 46:02 | |
| Secure Request URI and Headers | status not stated, demoed | 48:28 | |
| New Field Groups on Base Objects | status not stated | 51:01 | |
| Allow in customization property | status not stated | 51:41 | |
| Analysis mode control on list pages | status not stated | 52:23 | |
| Barcode extended data type | status not stated | 52:36 | |
| Rich text extended data type | status not stated | 52:36 | |
| Queries in run objects for actions | status not stated | 54:04 | |
| Query about title and about text | status not stated | 54:16 | |
| Excel layout multiple data sheets | status not stated | 54:27 | |
| AL inlay hints for parameters and return types | status not stated, demoed | 55:15 | |
| Label hover value display | status not stated, demoed | 57:47 | |
| Improved IntelliSense for overloaded methods | status not stated, demoed | 58:17 | |
| IntelliSense for key parameters | status not stated, demoed | 59:07 | |
| Find all references for triggers and methods | status not stated, demoed | 59:48 | |
| AL Go default project folder setting | status not stated | 1:00:41 | |
| AL compilation output folder | status not stated | 1:01:10 | |
| GitHub Copilot Chat for AL | status not stated, demoed | 1:01:57 | |
| AppSource per user pricing with direct sales | preview | 1:05:25 | “That is as I’m talking now in public preview, but on October 9th, that will actually go into GA.” (1:05:37) |
| AppSource CSP support | preview | 1:05:47 | “in the in the middle of a private preview with select partners on this, but that is” (1:05:47) |
| AppSource entitlements mapping | status not stated | 1:06:05 | |
| Entitlements documentation for license mapping | status not stated | 1:06:29 | |
| Enhanced developer resources and documentation | status not stated | 1:06:55 | |
| Performance tool kit | status not stated | 1:07:06 | |
| BC Icons overview | status not stated | 1:07:17 |
AL objects mentioned
As heard in the captions. A name that matches one object page by exact type and name links to it; the others stay as named.
- codeunit 457 “Environment Information” at 7:24
- table 18 “Customer” at 6:04
- codeunit “Bing Maps GeoCode” at 26:01
- page 21 “Customer Card” at 32:56
- page 22 “Customer List” at 34:42
- table “GL entry” at 51:15
- other “variant” at 45:45
- other “secure text” at 46:02
- other “set current keys” at 59:07
- codeunit “code unit” at 1:03:51
Not found in BC28-30: codeunit “Bing Maps GeoCode”, table “GL entry”, codeunit “code unit”.
Quotes
- 1:27 “When you install the AL language extension you now have the option to install or switch to a pre-release version.”
- 1:56 “One thing we introduced with the preview functionality is the ability to install the AL language extension on Linux.”
- 4:55 “I’m going to talk to you about one of the major new features in the AL language, namespaces.”
- 7:47 “You declare a namespace as the first line in a in a source file or the first non-comment line.”
- 13:05 “you can only have one object of a kind with the same name in the module. Which means that kind name and”
- 14:08 “You should wait with name spacing your own code until all your dependencies are name spaced.”
- 14:48 “Choose a unique name for your name spaces. And the good practice is to choose something that start with your company name, product, area,”
- 17:10 “Reference documentation provides details about programming elements associated with technologies and languages, including class libraries, object model”
- 19:40 “For a couple of a couple of years ago, we added XML documentation comment to the AL language”
- 21:13 “This tool has two purposes. It’s one tool called AL Doc, but it allows us to create reference documentation for all our first-party apps”
- 22:06 “this new tool AL Doc. It resides in the V6 next to the ALC and it has two primary commands”
- 29:23 “it’s great to see that we finally have namespace support in AL. And AL Doc will really help with getting up-to-date documentation on apps.”
- 30:15 “you need to open VS Code, uh you need to create the project, figure out the details about the environment, the connection uh string,”
- 31:42 “But we have a new option now called explore page in Visual Studio Code”
- 31:53 “It will create a dummy project. It will create an app.json in that dummy project with references to the extensions that are required for”
- 33:45 “We also added a new feature in the previous release which was the AL Explorer”
- 39:13 “the options in the page inspector will only appear if you have the troubleshooting tools permission”
- 39:57 “Initially, you need to be patient. You know, downloading symbols can take time, so just wait until everything finishes up”
- 40:44 “you can even now also have a shared uh symbols path where you can reuse uh symbols, so you don’t have to spend time”
- 44:38 “The default for now has been 100 ms. We’re now giving you the option to go a little lower than that, 50 ms, or”
- 45:35 “You can declare namespaces to encapsulate your objects, add using statements to get easy access to objects in that namespace”
- 46:14 “This is a new variable and parameter data type type you can use to protect the data it holds from being debugged”
- 51:27 “Now, we made it possible for you to add fields to a field group that doesn’t exist, thereby enabling the scenario where we want”
- 52:51 “We also have the rich text extended data type that enables you to add rich content capabilities to your fields.”
- 53:05 “It gives you the capability that you would expect from a rich text editor, like formatting, adding images, links”
- 53:19 “it needs to be alone in its own group, so you cannot use it in a repeater or in in an existing group with”
- 55:32 “in this release, we’re adding the ability to get inlay hints for AL parameter names and for return types.”
- 59:48 “we have improved that to now also work on trigger and system methods and trigger events. That’s a portal on page and table fields,”
- 1:02:11 “let’s have a look at the more recent GitHub Copilot Chat, which is an interactive chat experience inside of uh Visual Studio Code.”
- 1:05:25 “We have the first wave of functionality with a per user pricing model that support direct sales channel in Microsoft AppSource.”
- 1:05:37 “That is as I’m talking now in public preview, but on October 9th, that will actually go into GA.”
- 1:05:47 “in the in the middle of a private preview with select partners”
- 1:06:55 “collaboration with partners that has led to updating much more detail with examples”
- 1:07:06 “have a big investment in the performance tool kit that you can go and read off”
- 1:07:35 “there’s one on performance tool kit that’s super important for making you know, testing and making sure that your app performs well”
Disclaimers in the video
- 1:56 preview: One thing we introduced with the preview functionality is the ability to install the AL language extension on Linux.
- 3:42 preview: I need to change the the sandbox here to my preview sandbox, we’re still in preview.
- 4:31 preview: Another thing we added as a preview is syntax highlighting for DevOps.
- 13:31 subject-to-change: We still have a fixes. Um we would like to lift some of the restrictions and for instance, one of those we are looking at is new name spaced object can have names without a fixes.
- 13:42 coming-later: new name spaced object can have names without a fixes. Which will take a little bit longer is member of on objects
- 14:04 coming-later: But it may take a while
- 21:23 preview: We’re starting slowly, but we plan to do it for all our apps
- 33:45 subject-to-change: AL Explorer was added in the previous release
- 41:13 other: there’s no commits right now, but, you know, it would be great if instead of opening up locally on VS Code and sort of that content switching that you can actually open it up in the cloud in CodeSpaces
- 42:02 preview: it’s available in the preview. When you watch this, it’s available in uh you know, the launch
- 53:49 coming-later: In the coming releases, we’ll continue to work on the rich text editor and its capabilities
- 1:03:04 preview: remember to uh review the generated content, especially for AL, because the training material is based on open-source uh code, and for AL, that’s fairly limited.
- 1:05:37 preview: That is as I’m talking now in public preview, but on October 9th, that will actually go into GA.
- 1:05:47 preview: CSP support is actually built but we’re in the in the middle of a private preview with select partners on this
Presenters (as heard): Peter Borring, Stephen Balslev, Espen Kristoffersen, Freddy Christensen, Asbjørn, Peter, Stefan, Esben, Kurt.
