AL Productivity Pack
A suite of productivity tools for Business Central AL developers
Why This Extension?
Every Business Central developer knows the pain:
- 🔍 "Which event do I subscribe to?" — Digging through base app source to find the right integration event
- 📋 Copy-paste nightmares — Getting the subscriber signature wrong because of a typo in object names or parameter lists
- 🔗 "Who else subscribes to this?" — No easy way to see all subscribers across your codebase
- 💀 Silent failures — Dead subscribers pointing to events that no longer exist after a BC upgrade
AL Productivity Pack solves all of this — directly inside VS Code.
Features
🔍 Event Subscriber Finder
Search and discover all published events across your workspace — including the Base Application symbols.
Command: ALP: Find Published Events
- Instantly search by event name, object name, or parameters
- Navigate directly to the event definition
- Supports
IntegrationEvent, BusinessEvent, and InternalEvent types

🗺️ Subscriber Mapper
See all event subscribers in your codebase and what they're listening to.
Command: AL: Find Event Subscribers
- View all
[EventSubscriber] procedures mapped to their targets
- Quick-navigate to any subscriber
- Understand cross-extension dependencies at a glance
⚡ Boilerplate Generator
Generate correct subscriber code with one click — no more typos.
Command: AL: Generate Event Subscriber Boilerplate
- Select any event → get a ready-to-use subscriber procedure
- Correct
ObjectType, object name, event name, and full parameter signature
- Inserts as a VS Code snippet with tab stops for customization
Example output:
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnBeforePostSalesDoc', '', false, false)]
local procedure OnBeforePostSalesDoc(var SalesHeader: Record "Sales Header"; CommitIsSuppressed: Boolean)
begin
// TODO: Implement subscriber logic
end;
🔗 Event Chain Visualization
Understand the full event flow within any object — see all events fired in execution order.
Command: AL: Show Event Chain
- Pick an object → see all its published events in sequence
- Visual flow diagram in a side panel
- Helps choose the right hook point (OnBefore vs OnAfter vs OnRun)
💀 Dead Subscriber Detection
Find subscribers in your code that point to events which no longer exist.
Command: AL: Detect Dead Subscribers
- Scans all
[EventSubscriber] procedures
- Flags any whose target event can't be found in the index
- Prevents runtime errors after BC version upgrades
- Navigate directly to problematic code
🌳 AL Events Explorer (Tree View)
A dedicated tree view in the Activity Bar showing all events grouped by object.
- Grouped by object type and name
- Click to navigate to event source
- Tooltip with full event details
- Auto-refreshes on file changes
🔀 Cross-Extension Dependency Explorer
Track how your apps depend on each other across a multi-app workspace.
- See which projects extend your tables, pages, enums, and codeunits
- Track field references and Record variable usage across projects
- Detect cross-project dependencies instantly
- Tree view in the Activity Bar with full drill-down
📦 App Dependency Graph (Deploy Sequence)
Visualize the deployment order for all your apps.
Command: ALP: Show App Dependency Graph
- Numbered deploy sequence — exact order to publish
- Clickable items — jump directly to each app's
app.json
- Parallel deploy detection (apps with no interdependency)
- External dependencies grouped by publisher (Microsoft, Lanham, EOS, etc.)
- Scans workspace + sibling project folders automatically
📄 File Insights
One-click summary of the current AL file — right from the editor title bar.
Command: ALP: File Insights
- Objects, events, subscribers, fields, extensions, and cross-references in the file
- Quick navigation to any item
- Editor title button (icon) for instant access
🎬 Page Script Generator
Convert human-readable repro steps into BC Page Scripting YAML — ready to run in Business Central's test automation.
Command: ALP: Generate Page Script from Repro Steps
- Write steps in natural DSL:
Open, Click, Set, Confirm, Choose, Validate, Wait
- Quotes optional on field names —
Set Name = "Value" works just like Set "Name" = "Value"
- Intelligent field resolution from AL page sources (workspace +
.alpackages)
- QuickPick field selector when mapping is needed — browse all fields on the page
- Handles Confirm/Choose dialogs with correct automationIds
- Subpage/lines input with proper part → page → repeater path
- Output saved to
.page-scripts/ directory
DSL Example:
Open "Purchase Order List"
Click "New"
Set Buy-from Vendor Name = "10000"
In "PurchLines" Set No. = "1000"
In "PurchLines" Set Quantity = "1"
Click "Release"
Click "Post"
Choose 2
Confirm "Yes"

Running in Business Central:

- Peek Subscribers at Cursor — right-click any event to see all subscribers
- Peek Cross-References at Cursor — right-click any AL symbol to find who uses it
- Generate Subscriber for Event — right-click an event to scaffold a subscriber
Installation
From VS Code Marketplace
- Open VS Code
- Go to Extensions (
Ctrl+Shift+X / Cmd+Shift+X)
- Search for "AL Productivity Pack"
- Click Install
From VSIX (Manual)
code --install-extension al-productivity-pack-0.2.0.vsix
Configuration

| Setting |
Default |
Description |
alProductivityPack.searchPaths |
[] |
Additional paths to scan for AL files |
alProductivityPack.includeBaseApp |
true |
Include Base Application events from .alpackages |
alProductivityPack.autoRefresh |
true |
Auto-refresh index when AL files change |
Example settings.json
{
"alProductivityPack.searchPaths": [
"/path/to/shared/al-symbols"
],
"alProductivityPack.includeBaseApp": true,
"alProductivityPack.autoRefresh": true
}
Commands
| Command |
Description |
ALP: Find Published Events |
Search all indexed events with quick-pick |
ALP: Find Event Subscribers |
Browse all subscribers in workspace |
ALP: Generate Event Subscriber Boilerplate |
Pick an event and insert subscriber code |
ALP: Show Event Chain |
Visualize event flow for an object |
ALP: Detect Dead Subscribers |
Find subscribers with missing targets |
ALP: Refresh Event Index |
Manually rebuild the event index |
ALP: Peek Subscribers at Cursor |
Show subscribers for event under cursor |
ALP: Peek Cross-References at Cursor |
Show cross-project references for symbol |
ALP: File Insights |
Summary of current file's AL objects |
ALP: Show App Dependency Graph |
Deploy sequence visualization |
ALP: Generate Page Script from Repro Steps |
Convert DSL repro steps to BC Page Script YAML |
How It Works
- Indexing — On activation (or manual refresh), the extension scans all
.al files in your workspace and .alpackages folder
- Parsing — Regex-based parser extracts
[IntegrationEvent], [BusinessEvent], [InternalEvent] publishers and [EventSubscriber] attributes
- Mapping — Events and subscribers are cross-referenced to build a complete dependency graph
- Querying — Commands provide instant search, navigation, and code generation from the index
Roadmap
- [x] v0.1 — Event Subscriber Finder, CodeLens, Dependency Explorer, App Dependency Graph
- [x] v0.2 — Page Script Generator (DSL → BC Page Scripting YAML)
- [ ] v0.3 — Event comparison between BC versions (detect breaking changes)
- [ ] v0.4 — AL Test Helper tools
- [ ] v0.5 — Object ID conflict detection across extensions
- [ ] v1.0 — Stable release with full feature set
See the CHANGELOG for release history.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Requirements
License
MIT © Rishabh Shukla
Made with ❤️ for the Business Central community