Install
$ agentstack add skill-fernandoartalf-al-copilot-skills-collection-bc-setup-wizard-generator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
BC Setup Wizard Generator
Automates creation of assisted setup wizards for Business Central setup tables following Guided Experience patterns.
Overview
Generates complete NavigatePage setup wizards with step-based navigation, banner images, temporary records, and Guided Experience registration. Follows Microsoft patterns for assisted setup.
Complete code templates available in: [references/code-templates.md](references/code-templates.md)
Prerequisites
- AL workspace with setup table
- Setup table with fields to configure
- (Optional) Setup page for post-wizard access
Workflow
Step 1: Gather Information
Collect from user:
- Setup entity name (e.g., "Statistical Account")
- Setup table name and ID
- Prefix (e.g., "BCS")
- Number of configuration steps (typically 2-4)
- Field groups per step
- Documentation URLs (video + written)
Step 2: Plan Wizard Steps
Define wizard structure:
- Step 1: Welcome - InstructionalText explaining wizard purpose
- Step 2-N: Configuration - Field groups by logical category
- Final Step: Review & Finish - Read-only summary of all settings
Example 3-step wizard:
- Welcome
- Attachments Settings (Step 1/2)
- Number Series Setup (Step 2/2)
- Review & Finish
Step 3: Create Wizard Page
Create NavigatePage with:
PageType = NavigatePageSourceTable = [Setup Table]SourceTableTemporary = true← Critical for unsaved workflow
Location: src/Page/[Prefix][Entity]SetupWizard.Page.al
See [code-templates.md](references/code-templates.md#wizard-page-structure) for complete structure.
Step 4: Add Banner Groups
Add two banner groups at top of layout:
- SetupWIPBanner: Visible during configuration steps
- SetupFinishedBanner: Visible on review/finish step
Uses Media Repository records:
AssistedSetup-NoText-400px.png(WIP)AssistedSetupDone-NoText-400px.png(Finished)
See [code-templates.md](references/code-templates.md#banner-groups) for complete code.
Step 5: Add Step Groups
Create one group per step with:
Visibleproperty bound toStepXVisibleboolean- InstructionalText for welcome/review steps
- Field groups for configuration
Critical: Use step counters in captions for user guidance:
Caption = 'Attachments Settings 📎(Step 1/3)'
See [code-templates.md](references/code-templates.md#step-groups) for complete patterns.
Step 6: Add Navigation Actions
Add three actions in area(Processing):
- ActionBack:
Enabled = BackActionEnabled, callsNextStep(true) - ActionNext:
Enabled = NextActionEnabled, callsNextStep(false) - ActionFinish:
Enabled = FinishActionEnabled, callsFinishAction()
All have InFooterBar = true for bottom positioning.
See [code-templates.md](references/code-templates.md#navigation-actions) for complete code.
Step 7: Add Page Triggers
OnOpenPage:
- Initialize temporary record from actual setup table
- Call
EnableControls()to show first step - Call
LoadSetupBanner()to load banner images
OnQueryClosePage:
- If
FinishedProcess = true: Commit changes, mark setup complete - Else: Confirm user wants to exit without saving
See [code-templates.md](references/code-templates.md#page-triggers) for complete implementation.
Step 8: Add Navigation Procedures
Create local procedures:
ResetControls(): Reset all visibility booleans and action states
NextStep(Backwards: Boolean): Increment/decrement Step option, call EnableControls()
EnableControls(): Case statement routing Step to SetControlsStepXX()
SetControlsStepXX(): Set visibility for specific step, enable/disable actions
See [code-templates.md](references/code-templates.md#navigation-procedures) for complete code.
Step 9: Add Data Management Procedures
InitRecord():
- Check if setup record exists
- Create temporary record from existing or initialize new
CommitRecord():
- Transfer temporary record to actual setup table
- Insert if new, Modify if exists
FinishAction():
- Set
FinishedProcess = true - Close page (triggers OnQueryClosePage commit)
See [code-templates.md](references/code-templates.md#data-management-procedures) for complete code.
Step 10: Add Setup Banner Loading
LoadSetupBanner():
- Get Media Repository records by name
- Get Media Resources by reference
- Set
BannersVisibleif media has value
See [code-templates.md](references/code-templates.md#banner-loading-procedure) for complete code.
Step 11: Declare Variables
Declare variables:
- Record variables: Setup table, Media Repository (2), Media Resources (2)
- Codeunit:
GuidedExperience - Boolean: StepXVisible (per step), BackActionEnabled, NextActionEnabled, FinishActionEnabled, FinishedProcess, BannersVisible
- Option:
Stepwith values matching step groups
See [code-templates.md](references/code-templates.md#variable-declarations) for complete list.
Step 12: Create Registration Codeunit
Create codeunit with event subscriber:
- Subscribe to
Codeunit::"Guided Experience"::OnRegisterAssistedSetup - Call
AssistedSetup.InsertAssistedSetup()with: - Title and description labels
- Time estimate (minutes)
- Wizard page ID
- Assisted Setup Group
- Video URL and category
- Documentation URL
Location: src/Codeunit/[Prefix][Entity]SetupManagement.Codeunit.al
See [code-templates.md](references/code-templates.md#registration-codeunit) for complete code.
Step 13: Build and Test
- Build project:
al_build - Publish:
al_publish - Test from:
- Assisted Setup page (search "Assisted Setup")
- Extension Management (Setup actions)
- Verify:
- Navigation works (Back/Next/Finish)
- Banners display correctly
- Exit confirmation on close without finish
- Changes saved on finish
- Completion check marked
Troubleshooting
Wizard doesn't appear in Assisted Setup
Cause: Event subscriber not firing or registration failed Fix: Check OnRegisterAssistedSetup event subscriber syntax, verify codeunit compiles without errors
Banners don't display
Cause: Media Repository records not found or media reference empty Fix: Check exact image names (AssistedSetup-NoText-400px.png, AssistedSetupDone-NoText-400px.png), verify Media Repository exists in base BC
Changes saved even when clicking X to close
Cause: OnQueryClosePage not checking FinishedProcess flag Fix: Ensure if FinishedProcess then condition exists, verify FinishAction sets flag before CurrPage.Close()
Steps don't navigate forward/backward
Cause: Step option enum values don't match group names, or EnableControls case statement incomplete Fix: Verify Step option has value for each step (Step10, Step20, Step30, etc.), check Case statement includes all values
Error on finish: "Record already exists"
Cause: CommitRecord trying to Insert when record exists Fix: Check if not SetupRecord.Get() then Insert else Modify pattern in CommitRecord procedure
Setup marked complete but changes not saved
Cause: CommitRecord not called before CompleteAssistedSetup Fix: Ensure OnQueryClosePage calls CommitRecord() before GuidedExperience.CompleteAssistedSetup()
Review step shows editable fields
Cause: Review step groups missing Editable = false property Fix: Add Editable = false to all field groups in final review step
Quick Reference
Snippet: Use Waldo's tpagewizard3stepswaldo snippet for rapid scaffolding
Core Pattern: Temporary record → User edits → Finish commits → Mark complete
Key Properties:
- Page:
PageType = NavigatePage,SourceTableTemporary = true - Actions:
InFooterBar = true - Groups:
Visible = StepXVisible
Required Codeunits: Guided Experience (InsertAssistedSetup, CompleteAssistedSetup)
Media Files: AssistedSetup-NoText-400px.png, AssistedSetupDone-NoText-400px.png
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: fernandoartalf
- Source: fernandoartalf/AL-Copilot-Skills-Collection
- License: MIT
- Homepage: https://alcopilotskills.com/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.