Design for extensibility

Enabled for Public preview General availability
Admins, makers, or analysts, automatically This feature is released. Aug 1, 2019 This feature is released. Oct 1, 2019

Feature details

The first release of the source code for the Microsoft application in AL launches a new era where all applications are extensions, and extensibility begins to replace code customization. To help drive this change, we’re making the core application thinner, more extensible, and easier to localize by extracting more and more of our system logic into modules, forming a system application and an application foundation. These modules put simplicity into focus by following a one feature = one module principle. Each module encapsulates complexity and replaces implementation details with clean, documented, and stable APIs. The smaller modules speed up the development cycle and make it easier to monitor and optimize functionality from security and performance perspectives. The number of modules can vary depending on the configuration, and you can update each module individually. Because this is a major shift in the development paradigm for both Microsoft and our partner community, we make each module available well ahead of the 2019 release wave 2.

As we finish modules, we publish the source code in the ALAppExtensions repo on GitHub so that you can provide direct feedback and make contributions. Currently the following modules are published:

Name Responsibility
Assisted Setup Contains all pages that are used by assisted setup guides in Business Central. Assisted setup guides provide step-by-step guidance that helps simplify the process of setting up complex features.
Auto Format Provides methods for formatting the appearance of decimal data types in fields on tables, reports, and pages.
Azure AD Graph Provides functionality for retrieving user and tenant information from Azure AD.
Azure AD Licensing Provides a way to access information about the subscribed SKUs and the corresponding service plans. It uses two collections: one that stores the subscribed SKUs and the other that stores the corresponding service plans of the SKU that we currently point to in the collection.
Azure AD Plan Provides methods for retrieving and managing user plans in Azure Active Directory. The Plan and User Plan tables are marked as internal so you must use the methods provided in this module to query them.
Azure AD Tenant Provides methods for retrieving information about the Azure Active Directory tenant.
Azure AD User Management Use this module to synchronize the database users with the users from Azure AD - either create new ones or update the existing ones.
Azure AD User Provides functionality for retrieving and updating user information from Azure AD.
Azure Key Vault Exposes functionality to extract secret values from Azure key vault.
Blob Storage Provides a way to store various kinds of data. It consists of the TempBlob container to store BLOB data in-memory, the Persistent BLOB Management interface for storing BLOB data between sessions, and the TempBlob List interface for storing sequences of variables, each of which stores BLOB data. Potential uses are storing images, very long texts, PDF files, and so on.
Base64 Convert Provides functionality to convert the text to and from base 64. It may be used for dealing with large XML files, pictures etc.
Caption Class Defines how the CaptionClass property displays captions for pages and tables. You can define rules for how captions display.
Client Type Management The purpose of this module is to allow testing of units that rely on client type other than the one on which the test executes. This is achieved by using the method GetCurrentClientType in the unit to compare the client type and subscribing to the event OnAfterGetCurrentClientType to alter the client type in the test.
Confirm Management Contains helper methods that either display a confirm dialog when logic is run, or suppresses it if UI is not allowed, such as background sessions or webservice calls.
Cryptography Management Provides helper functions for encryption and hashing. For encryption in an on-premises versions, use it to turn encryption on or off, and import and export the encryption key. Encryption is always turned on for online versions.
Cues and KPIs Provides setup pages and interface methods to manage cues in Business Central.
Data Classification Helps you comply with data privacy standards by enabling you to classify data for objects that might contain sensitive information. Classifications for data sensitivity include normal, personal, company confidential, and sensitive.
Data Compression The purpose of this module is to provide ability to create, update, read, and dispose a binary data compression archive.
Date-Time Dialog Helper page for entering a date-time value.
Default Role Center Exposes functionality to define default role center.
DotNet Aliases Defines aliases for the most common DotNet types used in Business Central. As aliases are inherited through dependencies declared in the app.json, any alias defined here does not need to be declared elsewhere.
Environment Information Contains helper methods for getting information about the tenant and general settings, such as determining whether this is a production or sandbox environment or deployed as an online or on-premises version, and so on.
Extension Management Provides features for installing and uninstalling, downloading and uploading, and publishing extensions and their dependencies. It can also check whether an extension and its dependencies are installed.
Field Selection Provides a page where you can look up and select one or more fields from one or more tables. For example, this is useful when you want to set up a KPI on a Role Center.
Filter Tokens Enhances filtering so that users can enter additional filter tokens. The Code or Text filters accept the %me, %user, and %company filter tokens. The Date, Time, and DateTime filters accept the %today, %workdate, %yesterday, %tomorrow, %week, %month, %quarter filter tokens. In addition, the Date filters support date formulas. Developers can add more filter tokens by subscribing to the OnResolveDateFilterToken, OnResolveTextFilterToken, OnResolveTimeFilterToken, OnResolveDateTokenFromDateTimeFilter and OnResolveTimeTokenFromDateTimeFilter events.
Headlines Provides various functions related to headlines functionality. It includes constants for the maximum allowed text length, functionality for truncating text, emphasizing text, determining if the user logged in recently (for greetings) and standard greeting messages.
Language Changes the language for Windows and applications, and converts language codes to language IDs, and vice versa. The Language table is a subset of Windows languages. You can add languages, and edit translations and descriptions in the list.
Manual Setup Lists, describes, and opens pages that are used to manually set up business processes and general entities. For example, setups for business processes include posting groups and general ledger setup. General entities include currency setup, language setup, and so on.
Math Provides constants and static methods for trigonometric, logarithmic, and other common mathematical functions.
Object Selection Look up page for all of the application objects, including objects from installed extensions.
Password Dialog Introduces a dialog for the user to enter a password.
Record Link Management Users can add notes and links to almost any record into the system. The current module provides APIs for developer to deal with records, for example to transfer/copy link from one record to another, transform text input into BLOB format expected by platform, clean up orphaned links.
Recurrence Schedule Provides methods for scheduling the recurrence of an event. Recurrence can be daily, weekly, monthly or yearly. The module also determine when the next occurrence will happen.
Satisfaction Survey Provides methods for presenting a satisfaction survey to users.
Server Settings Exposes methods that get settings from the server configuration file. For example, the extension checks if the Excel add-in is installed, or if online services can be installed on the server.
System Initialization Contains functionality for initializing the application.
Tenant License State Retrieves the current state of the tenant license, such as trial, paid, or suspended, including the start and end dates of the license.
Translation This module lets you add and modify language translations for user data, so that people in different regions can understand the data. For example, this is useful for descriptions of items that you sell, or for providing standard operating procedures in factories located in different regions.
Upgrade Tags Provides functionality for ensuring that the upgrade code is run only one time.
User Login Times Records the date when users sign in for the first time, and keeps track of their two most recent sign ins.
User Permissions Exposes functionality to check and alter User Permission sets.
User Selection Provides a page where you look up and select one or more registered users. For example, this is useful for assigning a person to things like documents, processes, or items.
Video Provides a page where you look up and select videos. For example, use this to access video tutorials.
Web Service Management Provides the tools needed to manage web services.

See also

Dynamics 365 blog (blog)

Development in AL (docs)