Install
$ agentstack add skill-fernandoartalf-al-copilot-skills-collection-bc-attachments-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.
About
BC Attachments, Links & Notes Generator
Automates BC standard document attachment functionality on custom tables.
Overview
Generates complete attachment, link, and notes implementation for custom BC tables following Microsoft patterns. Creates 3 event subscribers, lifecycle triggers, modern factbox configuration, and setup controls.
Complete code templates available in: [references/code-templates.md](references/code-templates.md)
Prerequisites
- AL workspace with custom table
- Setup table (or will create one)
- Card and List pages for entity
Workflow
Step 1: Gather Information
Collect from user:
- Entity name (e.g., "Statistical Account")
- Table name and ID
- Prefix (e.g., "BCS")
- Primary key field (usually "No.")
- Setup table name
- Card and list page names
Step 2: Update Setup Table
Add 3 boolean fields to setup table:
"Enable Attachments"(InitValue = true)"Enable Links"(InitValue = true)"Enable Notes"(InitValue = true)
Location: src/Table/[Prefix][SetupName].Table.al
See [code-templates.md](references/code-templates.md#setup-table-fields) for complete code.
Step 3: Update Setup Page
Add 3 fields to setup page layout in General group.
Location: src/Page/[Prefix][SetupName].Page.al
See [code-templates.md](references/code-templates.md#setup-page-fields) for complete code.
Step 4: Create Enum Extension
Extend "Attachment Document Type" enum with custom value.
Location: src/Enum Extension/[Prefix]AttachmentDocType.EnumExt.al
enumextension [ID] "[Prefix] Attachment Doc Type" extends "Attachment Document Type"
{
value([ID]; [Prefix][Entity]) // Remove spaces: "Statistical Account" → "BCSStatisticalAccount"
{
Caption = '[Entity]';
}
}
Step 5: Create Attachment Management Codeunit
Create codeunit with 3 event subscribers + 5 procedures.
Location: src/Codeunit/[Prefix]AttachmentManagement.Codeunit.al
Event Subscribers:
OnAfterGetRecRefFail- Handle record reference resolution for attachment factbox (Page::"Doc. Attachment List Factbox")OnAfterOpenForRecRef- Filter attachments when opening details (Page::"Document Attachment Details")OnAfterInitFieldsFromRecRef- Initialize attachment from record (Table::"Document Attachment")
Procedures:
EntityEnabledAttachments(TableId)- Check if attachments enabledEntityEnabledLinks(TableId)- Check if links enabledEntityEnabledNotes(TableId)- Check if notes enabledDeleteRelatedDocumentAttachments(No)- Delete attachments on record deleteCopyRelatedDocumentAttachments(OldNo, NewNo)- Copy attachments on rename
See [code-templates.md](references/code-templates.md#complete-attachment-management-codeunit) for complete code.
Step 6: Add Table Lifecycle Triggers
Extend table with:
OnBeforeRename()- Copy attachments to new No., delete old onesOnBeforeDelete()- Delete related attachments to prevent orphans
Location: Update existing table extension
See [code-templates.md](references/code-templates.md#table-extension-triggers) for complete code.
Step 7: Extend Card Page
Add factboxes section with:
- Modern factbox:
"Doc. Attachment List Factbox"(UpdatePropagation = Both) - Modify Links factbox:
Control1900383207 - Modify Notes factbox:
Control1905767507
> Note: The legacy "Document Attachment Factbox" is fully deprecated and must NOT be included.
Add OnOpenPage() trigger to set visibility variables.
Location: src/Page Extension/[Prefix][Entity]Card.PageExt.al
SubPageLink configuration:
SubPageLink = "Table ID" = const(Database::"[Base Table]"),
"No." = field("No.");
See [code-templates.md](references/code-templates.md#page-extension-card-page-factboxes) for complete code.
Control ID Note: If modify fails (e.g., "Control not found"), inspect base page to find actual IDs. They may vary between BC versions.
Step 8: Extend List Page
Repeat Step 7 for list page.
Location: src/Page Extension/[Prefix][Entity]List.PageExt.al
Step 9: Update Permissions
Add to permission set:
codeunit "[Prefix] Attachment Management" = X;
Step 10: Test
Critical tests:
- Upload attachment → verify appears in factbox
- Delete record → verify attachments deleted
- Rename record → verify attachments follow (copied to new No.)
- Navigate between records → verify factbox refreshes
- Toggle setup fields → verify factboxes hide/show
Troubleshooting
Factboxes Not Appearing
- Check setup page: ensure "Enable Attachments/Links/Notes" checked
- Verify
OnOpenPage()trigger runs and sets variables - Confirm
DATABASE::"[Table]"matches exactly (case-sensitive)
Attachments Not Filtering
- Verify enum extension exists and builds first
- Check
SubPageLinkincludes correct"Table ID"and"No."field - Confirm
OnAfterInitFieldsFromRecRefsets"Document Type"correctly
Orphan Attachments After Delete/Rename
- Missing
OnBeforeDeletetrigger → Add and callDeleteRelatedDocumentAttachments() - Missing
OnBeforeRenametrigger → AddRenameAttachments()procedure
Links/Notes Factbox Visibility Not Working
- Wrong control IDs → Inspect base page to find actual IDs
- Common IDs:
1900383207(Links),1905767507(Notes) - Base page may not have these factboxes
Factbox Not Refreshing on Navigation
- Missing
UpdatePropagation = Bothon modern factbox - Add to
"Doc. Attachment List Factbox"part
Multi-Entity Pattern
When adding attachments to multiple tables in one extension, use case statements in all event subscribers and procedures.
See [code-templates.md](references/code-templates.md#multi-entity-support-pattern) for complete example.
Storage Best Practice
BC has database storage limits. Recommend:
- Small files in BC attachments (< 1 MB)
- Large files in SharePoint/OneDrive
- Use Links factbox for SharePoint URLs
Quick Reference
Required Objects:
- Setup fields (3 booleans)
- Enum extension
- Attachment management codeunit (3 event subscribers, 5 procedures)
- Table triggers (OnBeforeDelete, OnBeforeRename)
- Page factboxes (card and list)
Event Subscribers:
OnBeforeDrillDown(obsolete factbox)OnAfterOpenForRecRef(details page)OnAfterInitFieldsFromRecRef(initialization)
Factbox Control IDs:
- Links:
Control1900383207 - Notes:
Control1905767507 - May vary by BC version
Real-world example: BC Scout Statistical Accounts
- Rename record → verify attachments follow (copied to new No.)
- Navigate between records → verify factbox refreshes
- Toggle setup fields → verify factboxes hide/show
Troubleshooting
Factboxes Not Appearing
- Check setup page: ensure "Enable Attachments/Links/Notes" checked
- Verify
OnOpenPage()trigger runs and sets variables - Confirm
DATABASE::"[Table]"matches exactly (case-sensitive)
Attachments Not Filtering
- Verify enum extension exists and builds first
- Check
SubPageLinkincludes correct"Table ID"and"No."field - Confirm
OnAfterInitFieldsFromRecRefsets"Document Type"correctly
Orphan Attachments After Delete/Rename
- Missing
OnBeforeDeletetrigger → Add and callDeleteRelatedDocumentAttachments() - Missing
OnBeforeRenametrigger → AddRenameAttachments()procedure
Links/Notes Factbox Visibility Not Working
- Wrong control IDs → Inspect base page to find actual IDs
- Common IDs:
1900383207(Links),1905767507(Notes) - Base page may not have these factboxes
Factbox Not Refreshing on Navigation
- Missing
UpdatePropagation = Bothon modern factbox - Add to
"Doc. Attachment List Factbox"part
Multi-Entity Pattern
When adding attachments to multiple tables in one extension, use case statements in all event subscribers and procedures.
See [code-templates.md](references/code-templates.md#multi-entity-support-pattern) for complete example.
Storage Best Practice
BC has database storage limits. Recommend:
- Small files in BC attachments (< 1 MB)
- Large files in SharePoint/OneDrive
- Use Links factbox for SharePoint URLs
Quick Reference
Required Objects:
- Setup fields (3 booleans)
- Enum extension
- Attachment management codeunit (3 event subscribers, 5 procedures)
- Table triggers (OnBeforeDelete, OnBeforeRename)
- Page factboxes (card and list)
Event Subscribers:
OnBeforeDrillDown(obsolete factbox)OnAfterOpenForRecRef(details page)OnAfterInitFieldsFromRecRef(initialization)
Factbox Control IDs:
- Links:
Control1900383207 - Notes:
Control1905767507 - May vary by BC version
Real-world example: BC Scout Statistical Accounts
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.