agentleFS
fernandoartalffernandoartalf/AL-Copilot-Skills-Collection/skills/bc-dataverse-entity-generator/SKILL.md

bc-dataverse-entity-generator

Skill28 starsChanged 7 months agoMITView on GitHub

Generates AL CDS integration table objects from Dataverse entities using ALTPGen with PowerShell automation scripts. REQUIRES terminal tools. Automatically determines next available table ID, EXECUTES the generation script via terminal, monitors for errors (especially ALTPGen path issues), auto-fixes configuration problems, handles post-generation file organization to src/Table/ with BCS prefix naming convention, DELETES original generated file to prevent duplicates, and UPDATES permission set automatically. FULLY AUTOMATED workflow - agent executes all commands directly. If terminal tools are unavailable, agent must decline to proceed.

The file

Show its rules and text

We split this skill into the rules it gives an agent

17 rules. About 0 are common, 6 are distinctive, and 11 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Verify within app.json idRanges

    line 49
  2. Very specific:

    Search for altpgen.exe in VS Code extensions: C:\Users\{User}\.vscode\extensions\ms-dynamics-smb.al-*\bin\win32\altpgen\altpgen.exe

    line 74
  3. Very specific:

    Update $AltpgenPath in Generate-Entity.ps1

    line 76
  4. Very specific:

    Add extra Split-Path to calculate correct project root

    line 80
  5. Distinctive:

    Entity not found: Verify entity name (lowercase) exists in Dataverse

    line 86
  6. Distinctive:

    Network: Check ServiceUri and connectivity

    line 88
  7. Very specific:

    Write content to: src/Table/BCSCDS{Entity}.Table.al

    line 101
  8. Very specific:

    Add tabledata "BCS CDS {Entity}"=RIMD, in tabledata section (alphabetical order)

    line 108
  9. Very specific:

    Add table "BCS CDS {Entity}"=X, in table section (alphabetical order)

    line 109
  10. Very specific:

    Verify $ClientId is correct

    line 161
  11. Very specific:

    Check redirect URI in Azure: msal{ClientId}://auth

    line 162
  12. Distinctive:

    Ensure user has Dataverse access

    line 163
  13. Very specific:

    Check API permissions: Dynamics CRM > user_impersonation

    line 164
  14. Distinctive:

    Verify entity exists in Dataverse

    line 167
  15. Very specific:

    Use lowercase schema name (e.g., account, not Account)

    line 168
  16. Distinctive:

    Fix (duplicate object): Check for leftover files in project root.

    line 172
  17. Distinctive:

    Use proper spacing and indentation

    line 194

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Business Central Dataverse Entity Generator

Generates AL table objects from Microsoft Dataverse entities using ALTPGen and PowerShell automation. Automates the COMPLETE workflow: table ID allocation, command execution, error detection/fixing, file organization with BCS prefix, original file deletion, and automatic permission set updates.

⚡ FULLY AUTOMATED: Agent takes control of the terminal and executes all commands automatically. User interaction only required for authentication (browser popup for first-time OAuth).

🚨 TERMINAL TOOLS REQUIRED: This skill REQUIRES terminal command execution. If unavailable, agent must decline to proceed.

Prerequisites

  • Terminal tools enabled (REQUIRED)
  • AL Language extension installed in VS Code (includes ALTPGen)
  • Azure AD App Registration with Dynamics CRM > user_impersonation permission
  • Access to target Dataverse environment
  • PowerShell scripts configured in .github/skills/bc-dataverse-entity-generator/scripts/

Automated Workflow

Step 0: Check Terminal Tools Availability

BEFORE starting, verify terminal tools are available:

if terminal tools NOT available:
    ❌ This process requires terminal command execution to be enabled.
    
    The bc-dataverse-entity-generator skill cannot run manually because it requires:
    - Automatic error detection and path fixing
    - Real-time monitoring of ALTPGen output
    - Automated file organization and cleanup
    - Permission set updates
    
    Please enable terminal tools in VS Code agent settings to use this skill.
    
    STOP — do not proceed

Step 1: Analyze Request & Determine Next Table ID

  • Extract entity name from user request (lowercase: "account", "contact", "quote")
  • Scan existing tables in src/Table/*.al
  • Extract table IDs using regex: table\s+(\d+)
  • Find highest ID and add 1
  • Verify within app.json idRanges

Step 2: Execute PowerShell Generation Script

Build and execute command:

cd .github\skills\bc-dataverse-entity-generator\scripts
powershell -ExecutionPolicy Bypass -File ".\Generate-Entity.ps1" -Entity "{entity}" -BaseId {tableId}

Agent MUST execute directly via terminal tools

Inform user while executing:

Generating {Entity} CDS table...
Entity: {entity}
Table ID: {tableId} (next available)
Note: Browser may prompt for authentication (first run only)

Monitor terminal output for completion or errors.

Step 3: Error Handling & Auto-Fix

ALTPGen Path Error:

  1. Search for altpgen.exe in VS Code extensions: C:\Users\{User}\.vscode\extensions\ms-dynamics-smb.al-*\bin\win32\altpgen\altpgen.exe
  2. Find latest version automatically
  3. Update $AltpgenPath in Generate-Entity.ps1
  4. Re-execute generation script

Base Path Error:

  1. Add extra Split-Path to calculate correct project root
  2. Update script
  3. Re-execute

Other Errors:

  • Authentication: Inform user to complete browser popup
  • Entity not found: Verify entity name (lowercase) exists in Dataverse
  • Duplicate ID: Find next available ID, re-execute with new ID
  • Network: Check ServiceUri and connectivity

Step 4: Post-Generation File Organization

Automatic steps:

  1. Locate generated file in project root (e.g., Account.al, CDSaccount.Table.al)
  2. Read file content and apply BCS prefix:
    • Find table declaration: table \d+ "CDS {Entity}"
    • Update to: table {id} "BCS CDS {Entity}"
  3. Create properly named file:
    • Write content to: src/Table/BCSCDS{Entity}.Table.al
    • Example: Account.al → src/Table/BCSCDSAccount.Table.al
  4. Delete original file from project root to prevent duplicate object errors
  5. Update permission set (AGENTDEMO.permissionset.al):
    • Parse existing Permissions section
    • Add tabledata "BCS CDS {Entity}"=RIMD, in tabledata section (alphabetical order)
    • Add table "BCS CDS {Entity}"=X, in table section (alphabetical order)
    • Maintain proper comma placement (last entry ends with ;)
  6. Confirm completion:
✅ {Entity} CDS table generated successfully!

Created: src/Table/BCSCDS{Entity}.Table.al
Table ID: {tableId}
Table Name: "BCS CDS {Entity}"

✅ Cleaned up: Deleted {originalFile} from project root
✅ Updated: AGENTDEMO.permissionset.al with table permissions

Next steps:
- Review the generated table structure
- Build project: Ctrl+Shift+P → AL: Build
- Test integration with Dataverse environment

Configuration: Sensitive Variables

Scripts contain environment-specific and sensitive values in Generate-Entity.ps1:

VariableTypePurposeHow to Find
$ServiceUriENVIRONMENTDataverse environment URLPower Platform Admin Center > Environments > Environment URL
$ClientIdSECRETAzure AD App Registration client IDAzure Portal > App Registrations > Application (client) ID
$RedirectUriSECRETOAuth redirect URI (auto-generated from ClientId)Format: msal{ClientId}://auth
$AltpgenPathENVIRONMENTPath to ALTPGen.exe (version-specific)VS Code extensions folder (agent can auto-detect)

See script comments for detailed configuration instructions.

Common Entity Names

EntityDescription
accountCustomer/company
contactPerson
leadPotential customer
opportunitySales opportunity
quotePrice quote
salesorderSales order
invoiceCustomer invoice
productProduct/service

Troubleshooting

Error: "ALTPGen tool not found"

Auto-fix: Agent searches for ALTPGen.exe, updates path, re-executes

Error: "Authentication failed"

  • Verify $ClientId is correct
  • Check redirect URI in Azure: msal{ClientId}://auth
  • Ensure user has Dataverse access
  • Check API permissions: Dynamics CRM > user_impersonation

Error: "Entity not found"

  • Verify entity exists in Dataverse
  • Use lowercase schema name (e.g., account, not Account)

Error: "Duplicate table ID" or "Duplicate object"

Auto-fix (ID): Agent rescans for next available ID, re-executes Fix (duplicate object): Check for leftover files in project root; agent should delete automatically

Permission Set Update Details

File structure: namespace AGENTDEMO; permissionset 70000 AGENTDEMO { Assignable = true; Permissions = ... }

Sections order: tabledata → table → codeunit → page

Format:

Permissions = 
    tabledata "BCS CDS Account"=RIMD,
    tabledata "BCS CDS Contact"=RIMD,
    table "BCS CDS Account"=X,
    table "BCS CDS Contact"=X,
    codeunit "BCS ..."=X,
    page "BCS ..."=X;

Rules:

  • Maintain alphabetical order within each section
  • Each entry ends with , except the last entry (ends with ;)
  • Use proper spacing and indentation

Quick Reference

Navigate to Scripts

cd .github\skills\bc-dataverse-entity-generator\scripts

Generate Single Entity (Manual)

powershell -ExecutionPolicy Bypass -File ".\Generate-Entity.ps1" -Entity "account" -BaseId 70004

Find Next Table ID (Manual)

Get-ChildItem ..\..\..\..\src\Table\*.al | 
  ForEach-Object { if ((Get-Content $_.FullName -Raw) -match 'table\s+(\d+)') { [int]$matches[1] } } | 
  Sort-Object | Select-Object -Last 1

Script Locations

.github/skills/bc-dataverse-entity-generator/
├── SKILL.md                          # This file
├── scripts/
│   ├── Generate-Entity.ps1           # Single entity generator (with sensitive variable documentation)
│   └── Generate-Entity-List.ps1      # Batch entity generator

External Resources

Agent Workflow Summary

  1. ✅ Check terminal tools available (STOP if not)
  2. ✅ Extract entity name, determine next table ID
  3. ✅ Execute PowerShell script via terminal
  4. ✅ Monitor output, auto-fix errors (ALTPGen path, base path)
  5. ✅ Locate generated file in project root
  6. ✅ Apply BCS prefix, create file in src/Table/
  7. ✅ Delete original file from project root
  8. ✅ Update AGENTDEMO.permissionset.al automatically
  9. ✅ Confirm completion with file paths and next steps

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.