Development
Development for Business Central covers building AL extensions: tooling setup in Visual Studio Code, the AL language, extensibility, best practices, extension lifecycle, analytics and reporting, AL-Go for GitHub, and troubleshooting. It answers how-to, syntax, build, deploy and debug questions for extension developers.
Path: Development · tier official · system development · narrative reviewed (checked by Opus)
Overview
Development is the entry point for creating Business Central extensions in AL using Visual Studio Code. Its own pages introduce developing extensions in AL (the extension model, table and page extensions, code snippets, compiler validation, the designer), the AL Language reference (data types, methods, properties, triggers, diagnostics, code analyzers, method attributes), and AL-Go for GitHub, which provides templates and actions for CI/CD, automated testing and version control.
The subtopics follow a typical path. Start with Get started and Development environment for installing the AL Language extension, configuring projects, and compiling, publishing, debugging and testing. Then use Programming in the AL language and The AL programming language for syntax and object types, and Extensibility for extending base code without changing it.
Later topics cover quality and delivery: Rules, guidelines, and best practices (obsoleting objects, conventions, performance, security), Extension lifecycle (extension types, scopes, deployment, updating, deprecation), and Troubleshooting. Data analytics and reporting and System and application reference documentation cover analysis options and the modular application layers.
Key points
- Developing extensions in AL uses Visual Studio Code and covers tables, pages, codeunits and reports, with table and page extensions, code snippets and a drag-and-drop designer.
- The AL Language reference covers data types, methods, properties, triggers, AL and AVS diagnostics, code analyzers and method attributes.
- AL-Go for GitHub offers GitHub templates and actions for CI/CD, automated testing, version control and repository maintenance, for per-tenant extensions or Marketplace apps.
- Get started covers installing Visual Studio Code and the AL Language extension, editor tools, Designer, telemetry, translations and runtime packages.
- Extensibility covers extending code flow, tables, pages, reports, enums and permission sets via events, without changing base code.
- Best practices cover obsoleting AL objects and methods, deprecating external business events, testing, performance, security and Marketplace preparation.
- Extension lifecycle explains global apps, per-tenant extensions and DEV extensions, and moving apps between scopes.
- Troubleshooting covers AL debugging and profiling, telemetry setup and analysis, and guides for migration, report and web service errors.
Subtopics
- Get started (29 pages)
- Development environment (54 pages)
- Programming in the AL language (340 pages)
- The AL programming language (45 pages)
- System and application reference documentation (7 pages)
- Data analytics and reporting (7 pages)
- Extensibility (42 pages)
- Rules, guidelines, and best practices (19 pages)
- Extension lifecycle (35 pages)
- Troubleshooting (31 pages)
More Learn pages
- AL Language reference overview: Library of AL reference for developing for Dynamics 365 Business Central
- Developing extensions in AL: Overview of the development experience for building extensions using the AL language.
- Overview of AL-Go: Overview of how to use AL-Go templates and actions to streamline and automate DevOps processes for Business Central.
Videos, posts and code changes
Linked by a Haiku matcher with a grounding quote from the item’s summary (link/topics.ts); machine-generated.
- #10545 [Master] - Bug 647253: [WHT] Inconsistency with the Payments (code change): “Fixes bug 647253 about withholding tax inconsistency”
- #10828 Avoid remote attachment checks during FactBox refresh (code change): “Attachment FactBox navigation performance improved by deferring external file existence checks”
- #10869 [29.x]-[WHT] Inconsistency with the Payments (code change): “Withholding Tax Mgmt. codeunit 6785 is modified in releases”
- #10927 [Change Log] Preserve SystemId for unloaded record modifications (code change): “Change Log Management now preserves the SystemId from persisted”
- #11002 [Master] - Slice 626305: [Excise Tax][VENDOR] Improving Excise Duty Calculation (code change): “Excise duty calculation now supports specific-per-unit, ad valorem”
- #8745 Bug 640098: Make Table Information Cache refresh resilient to duplicate table numbers (code change): “Table Information Cache refresh now aggregates metrics when duplicate table numbers are encountered”
- #9351 [master]Subscription Billing: O(N²) contract-renewal detection in Sales-Post subscribers slows posting (~28% of batch CPU) (code change): “Contract renewal detection in the Sales-Post subscribers was reworked”
- #9600 Uptake sift disable enable support (code change): “Index management pages now support viewing and disabling SIFT indexes on relevant tables”
- #9605 [Quality Management] UI actions to restore default shipped source configurations (code change): “Quality Management adds UI actions to restore, reset, or recreate default source configurations”
- #9643 Update SII subscribers SkipMissingPermissions (code change): “Updates the SkipMissingPermissions setting on event subscribers”
- #9650 [Master] -Revert Changes- ‘Greater Than’ Withholding Tax Calculation Rule is not applied correctly in Withholding Tax Posting Setup. (code change): “Reverts the earlier change from PR 9515 to how the ‘Greater Than’ withholding tax calculation”
- #9876 [Subscription Billing] Rename progress tracker (code change): “Codeunit 8035 renamed from ‘Progress Tracker’ to ‘Sub. Billing Progress Tracker’”
- #87 Fix knowledge corpus integrity issues (code change): “Dead knowledge and sample references in skill documentation were replaced with canonical current articles”
- GitHub Copilot Coding Agent helps you stay strong on the bike… (community post): “GitHub Copilot Coding Agent helps you stay strong on the bike. The author assigned an urgent issue”
- What’s New: Key Updates in our Learning Content (documentation) For Developers (2024 release wave 1) (video): “Key Updates in our Learning Content documentation For Developers 2024 release wave 1”
Business Central pages and reports
The pages, reports and queries this hub’s Learn pages name (ms.search.form, API reference), joined to the code by exact object id (data/index/docs-objects.json); a page shows the table it runs on.
- Page 16 “Chart of Accounts” · on Table 15 “G/L Account” · via Programming in the AL language
- Page 21 “Customer Card” · on Table 18 “Customer” · via Programming in the AL language
- Page 22 “Customer List” · captioned “Customers” · on Table 18 “Customer” · via Programming in the AL language
- Page 25 “Customer Ledger Entries” · on Table 21 “Cust. Ledger Entry” · via Programming in the AL language
- Page 26 “Vendor Card” · on Table 23 “Vendor” · via Programming in the AL language
- Page 27 “Vendor List” · captioned “Vendors” · on Table 23 “Vendor” · via Programming in the AL language
- Page 31 “Item List” · captioned “Items” · on Table 27 “Item” · via Programming in the AL language
- Page 119 “User Setup” · on Table 91 “User Setup” · via Troubleshooting
- Page 143 “Posted Sales Invoices” · on Table 112 “Sales Invoice Header” · via Programming in the AL language
- Page 144 “Posted Sales Credit Memos” · on Table 114 “Sales Cr.Memo Header” · via Programming in the AL language
- Page 456 “No. Series” · on Table 308 “No. Series” · via Programming in the AL language
- Page 457 “No. Series Lines” · on Table 309 “No. Series Line” · via Programming in the AL language
- Page 458 “No. Series Relationships” · on Table 310 “No. Series Relationship” · via Programming in the AL language
- Page 459 “Sales & Receivables Setup” · on Table 311 “Sales & Receivables Setup” · via Programming in the AL language
- Page 460 “Purchases & Payables Setup” · on Table 312 “Purchases & Payables Setup” · via Programming in the AL language
- Page 461 “Inventory Setup” · on Table 313 “Inventory Setup” · via Programming in the AL language
- Page 2650 “Email Printer Settings” · on Table 2650 “Email Printer Settings” · via Programming in the AL language
- Page 2750 “Universal Printer Settings” · on Table 2751 “Universal Printer Settings” · via Programming in the AL language
- Page 2752 “Add Universal Printers Wizard” · captioned “Add Universal Print Printers” · via Programming in the AL language
- Page 2753 “Universal Print Shares List” · captioned “Print Shares” · on Table 2752 “Universal Print Share Buffer” · via Programming in the AL language
- Page 2754 “Universal Printer Tray List” · captioned “Universal Printer Trays” · on Table 823 “Name/Value Buffer” · via Programming in the AL language
- Page 4500 “Current User Email Account” · on Table 4508 “Email - Outlook Account” · via Extensibility
- Page 4503 “Microsoft 365 Email Account” · on Table 4508 “Email - Outlook Account” · via Extensibility
- Page 4504 “Microsoft 365 Email Wizard” · captioned “Set up Microsoft 365 email account” · on Table 4508 “Email - Outlook Account” · via Extensibility
- Page 4511 “SMTP Account Wizard” · captioned “Set up SMTP Account” · on Table 4511 “SMTP Account” · via Extensibility
- Page 4512 “SMTP Account” · on Table 4511 “SMTP Account” · via Extensibility
- Page 6103 “E-Document Services” · on Table 6103 “E-Document Service” · via Extensibility
- Page 6133 “E-Document Service” · on Table 6103 “E-Document Service” · via Extensibility
- Page 6316 “Sustainability Report Power BI” · captioned “Sustainability Report (Power BI)” · via Data analytics and reporting
- Page 6317 “To Net Zero Carbon Power BI” · captioned “Journey to Net Zero Carbon (Power BI)” · via Data analytics and reporting
- Page 8700 “Table Information” · via Troubleshooting
- Page 8705 “Table Information Card” · captioned “Index Management” · via Troubleshooting
- Page 8900 “Administrator Main Role Center” · captioned “Administrator Role Center” · via Programming in the AL language
- Page 8930 “Email View Policy List” · captioned “User Email View Policies” · on Table 8930 “Email View Policy” · via Troubleshooting
- Page 9000 “Whse. WMS Role Center” · captioned “Shipping and Receiving - Warehouse Management System” · via Troubleshooting
- Page 9004 “Bookkeeper Role Center” · captioned “Bookkeeper” · via Troubleshooting
- Page 9005 “Sales Manager Role Center” · captioned “Sales Manager” · via Troubleshooting
- Page 9006 “Order Processor Role Center” · captioned “Sales Order Processor” · via Troubleshooting
- Page 9007 “Purchasing Agent Role Center” · captioned “Purchasing Agent” · via Troubleshooting
- Page 9009 “Whse. Worker WMS Role Center” · captioned “Warehouse Worker - Warehouse Management System” · via Troubleshooting
- Page 9010 “Production Planner Role Center” · captioned “Manufacturing Manager” · via Troubleshooting
- Page 9016 “Service Dispatcher Role Center” · captioned “Service Manager” · via Troubleshooting
- Page 9017 “Service Technician Role Center” · captioned “Outbound Technician - Customer Service” · via Troubleshooting
- Page 9020 “Small Business Owner RC” · captioned “President - Small Business” · via Troubleshooting
- Page 9022 “Business Manager Role Center” · captioned “Business Manager” · via Troubleshooting
- Page 9024 “Security Admin Role Center” · captioned “Administration of users, security groups and permissions” · via Troubleshooting
- Page 9026 “Sales & Relationship Mgr. RC” · captioned “Sales and Relationship Manager” · via Troubleshooting
- Page 9027 “Accountant Role Center” · captioned “Accountant” · via Troubleshooting
- Page 9030 “Account Manager Activities” · captioned “Activities” · on Table 9054 “Finance Cue” · via Troubleshooting
- Page 9171 “Profile List” · captioned “Profiles (Roles)” · via Troubleshooting
- Page 9300 “Sales Quotes” · on Table 36 “Sales Header” · via Programming in the AL language
- Page 9301 “Sales Invoice List” · captioned “Sales Invoices” · on Table 36 “Sales Header” · via Programming in the AL language
- Page 9303 “Blanket Sales Orders” · on Table 36 “Sales Header” · via Programming in the AL language
- Page 9304 “Sales Return Order List” · captioned “Sales Return Orders” · on Table 36 “Sales Header” · via Programming in the AL language
- Page 9305 “Sales Order List” · captioned “Sales Orders” · on Table 36 “Sales Header” · via Programming in the AL language
- Page 9306 “Purchase Quotes” · on Table 38 “Purchase Header” · via Programming in the AL language
- Page 9307 “Purchase Order List” · captioned “Purchase Orders” · on Table 38 “Purchase Header” · via Programming in the AL language
- Page 9309 “Purchase Credit Memos” · on Table 38 “Purchase Header” · via Programming in the AL language
- Page 9310 “Blanket Purchase Orders” · on Table 38 “Purchase Header” · via Programming in the AL language
- Page 9311 “Purchase Return Order List” · captioned “Purchase Return Orders” · on Table 38 “Purchase Header” · via Programming in the AL language
- Page 9511 “Database Locks” · via Troubleshooting
- Page 9650 “Custom Report Layouts” · on Table 9650 “Custom Report Layout” · via Programming in the AL language
- Page 9652 “Report Layout Selection” · on Table 9651 “Report Layout Selection” · via Programming in the AL language
- Page 9660 “Report Layouts” · via Programming in the AL language
- Page 9666 “Report Theme and Header/Footer” · captioned “Manage themes and header-footer layouts” · via Programming in the AL language
- Page 9800 “Users” · via Troubleshooting
- Page 9802 “Permission Sets” · on Table 9009 “Permission Set Buffer” · via Troubleshooting
- Page 9807 “User Card” · via Troubleshooting
- Page 9808 “User Permission Sets” · via Troubleshooting
- Page 9816 “Permission Set by User” · via Troubleshooting
- Page 9855 “Permission Set” · on Table 9862 “PermissionSet Buffer” · via Troubleshooting
- Page 9862 “Expanded Permissions” · via Troubleshooting
- Page 9865 “Permission Lookup List” · on Table 9865 “Permission Lookup Buffer” · via Troubleshooting
- Page 9874 “Permission Set By Sec. Group” · captioned “Permission Set by Security Group” · via Troubleshooting
- Page 9878 “Permission Set Lookup List” · captioned “Permission Set Lookup” · on Table 9862 “PermissionSet Buffer” · via Troubleshooting
- Page 9882 “Report Res. Govern. Settings” · captioned “Report Limits and Settings” · via Programming in the AL language
- Page 9883 “Permissions Overview” · via Troubleshooting
Learn also names 11 objects with no object page: page/9830, page/9831, page/149000, page/149001, page/149003, page/149004, page/149005, page/149006, page/149007, page/149008, page/149009.
Source: Microsoft Learn (CC BY 4.0). Descriptions are Learn’s own.
What Learn documents here 8 of 523 Learn pages
- learn.NET control add-ins2025-01-07
- learn(automation API) Get permissionSet2024-05-31
- learn(Obsolete) Create and modify custom report layouts2025-03-12
- learn(Obsolete) Import and Export Custom Report Layouts2021-04-01
- learn(Obsolete) Set the Layout Used by a Report2022-03-07
- learn(Obsolete) Update Custom Report Layouts2021-06-24
- learnAccessing Columns of a Query Dataset2024-04-29
- learnAction bar improvements2025-05-15
Show 32 more
- learnActionable errors2026-06-29
- learnActions in the user interface2025-01-07
- learnActions overview2025-05-15
- learnAdd FactBoxes to Business Central Pages2026-10-06
- learnAdd Menus to Role Center Navigation2026-10-06
- learnAdd pages and reports to Tell me2025-05-15
- learnAdd Tooltips to Table and Page Fields2026-10-06
- learnAdding actions to a page2025-11-14
- learnAdding and Accessing Resources in Business Central extensions2026-08-25
- learnAdding barcodes to reports2021-04-06
- learnAdding data for Extensions2021-04-01
- learnAdopting namespaces in AL2026-06-09
- learnAggregating data in query objects2024-05-03
- learnAL code actions2026-05-27
- learnAL code navigation2024-03-01
- learnAL complex types2024-03-01
- learnAL control statements2025-03-26
- learnAL database methods and performance on SQL Server2025-04-01
- learnAL development environment reference overview2025-05-14
- learnAL Development Tools package2026-01-15
- learnAL diagnostics2026-10-01
- learnAL error handling2024-03-01
- learnAL Explorer2024-09-18
- learnAL Formatter2024-04-01
- learnAL Home2026-07-07
- learnAL Language extension configuration2026-08-25
- learnAL Language reference overview2026-03-23
- learnAL operators2024-09-18
- learnAL Preprocessor Directives Overview2026-10-05
- learnAL Properties Overview for Business Central2026-10-01
- learnAL simple statements2025-01-24
- learnAL type conversion in expressions2025-02-07