From bc-claude-plugin
Ask data questions in plain language against a BC environment
npx claudepluginhub appfabriek/bc-claude-plugin --plugin bc-claude-plugin# BC Query
Stel datavragen aan een BC-omgeving in gewoon Nederlands. Claude schrijft de AL-code, voert de diagnostic uit, en presenteert het resultaat.
## Input
$ARGUMENTS — datavraag in gewoon Nederlands, bijvoorbeeld:
- "hoeveel open verkooporders op productie"
- "top 10 klanten op saldo, omgeving dev"
- "welke jobs staan op error op accept"
- "hoeveel items zijn er in omgeving X"
- "toon de laatste 20 geboekte verkoopfacturen op productie"
## Instructies
### Stap 0 — Laad kennis
1. Lees `bc-tables.md` uit de knowledge/ map van de bc-claude-plugin.
Zoek het bestand met: `find ~/...Share bugs, ideas, or general feedback.
Stel datavragen aan een BC-omgeving in gewoon Nederlands. Claude schrijft de AL-code, voert de diagnostic uit, en presenteert het resultaat.
$ARGUMENTS — datavraag in gewoon Nederlands, bijvoorbeeld:
Lees bc-tables.md uit de knowledge/ map van de bc-claude-plugin.
Zoek het bestand met: find ~/.claude/plugins/bc-claude-plugin/knowledge ./.claude/plugins/bc-claude-plugin/knowledge ~/.local/share/claude/plugins/bc-claude-plugin/knowledge ~/code/bc-claude-plugin/knowledge -name "bc-tables.md" 2>/dev/null | head -1
Als het niet gevonden wordt, meld dit en vraag of de plugin correct geïnstalleerd is.
Lees diagnostic-recipes.md uit de knowledge/ map van de bc-claude-plugin.
Zoek het bestand met: find ~/.claude/plugins/bc-claude-plugin/knowledge ./.claude/plugins/bc-claude-plugin/knowledge ~/.local/share/claude/plugins/bc-claude-plugin/knowledge ~/code/bc-claude-plugin/knowledge -name "diagnostic-recipes.md" 2>/dev/null | head -1
Als het niet gevonden wordt, meld dit en vraag of de plugin correct geïnstalleerd is.
voor bewezen snippets die je kunt hergebruiken.
Lees al-guidelines.md uit de knowledge/ map van de bc-claude-plugin.
Zoek het bestand met: find ~/.claude/plugins/bc-claude-plugin/knowledge ./.claude/plugins/bc-claude-plugin/knowledge ~/.local/share/claude/plugins/bc-claude-plugin/knowledge ~/code/bc-claude-plugin/knowledge -name "al-guidelines.md" 2>/dev/null | head -1
Als het niet gevonden wordt, meld dit en vraag of de plugin correct geïnstalleerd is.
voor AL-patronen (SetLoadFields, SetRange, etc.)
Lees het workflow YAML (bc-diagnostic.yaml) voor de beschikbare omgevingsnamen.
Bepaal uit de beschrijving:
bc-tables.md)Schrijf de body van Execute(var pCduResult: Codeunit "Diagnostic Result").
Patronen per vraagtype:
Telling:
var
SalesHeader: Record "Sales Header";
begin
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
pCduResult.SetInteger('count', SalesHeader.Count());
end;
Lijst (top-N):
var
Customer: Record Customer;
ResultArray: JsonArray;
ResultObject: JsonObject;
Counter: Integer;
begin
// SetLoadFields geldt alleen voor fysieke velden, niet voor FlowFields
Customer.SetLoadFields("No.", Name);
if Customer.FindSet() then
repeat
Customer.CalcFields("Balance (LCY)");
if Customer."Balance (LCY)" > 0 then begin
Counter += 1;
Clear(ResultObject);
ResultObject.Add('no', Customer."No.");
ResultObject.Add('name', Customer.Name);
ResultObject.Add('balance', Customer."Balance (LCY)");
ResultArray.Add(ResultObject);
end;
until (Customer.Next() = 0) or (Counter >= 10);
pCduResult.SetArray('results', ResultArray);
pCduResult.SetInteger('count', ResultArray.Count());
end;
Regels voor de AL-code:
SetLoadFields als je niet alle velden nodig hebtSetRange voor eenvoudige filters, SetFilter voor wildcards/ORCalcFields alleen voor FlowFields en alleen als je de waarde nodig hebtRecordRef + FieldRef voor virtuele/systeem-tabellencat > /tmp/diag.al << 'ALEOF'
var
...
begin
...
end;
ALEOF
gh workflow run bc-diagnostic.yaml \
-f environment="<omgeving>" \
-F al_code=@/tmp/diag.al
Voeg -f company="<naam>" toe indien nodig.
BELANGRIJK: Self-hosted runners draaien sequentieel. Nooit meerdere runs parallel triggeren.
sleep 3
RUN_ID=$(gh run list --workflow=bc-diagnostic.yaml --limit=1 --json databaseId -q '.[0].databaseId')
gh run watch "$RUN_ID" --exit-status
gh run view "$RUN_ID" --log 2>&1 | grep -A 30 "DIAGNOSTIC RESULT"
Vertaal het JSON-resultaat naar een leesbaar antwoord:
Gebruik geen technisch jargon tenzij de gebruiker er expliciet om vraagt. De gebruiker hoeft de AL-code niet te zien.
Als de gebruiker doorvraagt ("en op accept?", "filter op klant X"), hergebruik de vorige query met aangepaste parameters. Trigger sequentieel.
bc-tables.md (plugin knowledge) voor veldnummers — raad ze niet