🧾 Cheat Sheet / Schnellreferenz
📌 Befehle (Command Palette)
| Command ID |
Titel |
Kurzbeschreibung |
| PSGALTools.switchtoversion |
Version wechseln |
Baut app.json & kopiert passende .alpackages für gewählte Version. |
| PSGALTools.createversion |
Version hinzufügen |
Interaktive Anlage eines neuen Eintrags in PSGALTools.json (früher ConditionalCode.json). |
| PSGALTools.buildversion |
Erstelle mehrere Versionen |
Baut mehrere ausgewählte Versionen sequenziell (inkl. Packaging/Signierung). |
| PSGALTools.overridegitignore |
Überschreibe gitignore |
Schreibt empfohlene .gitignore. |
| PSGALTools.createAppSymbolJson |
Erstelle AppSymbol.json |
Scan von src/ – erzeugt .vscode/alsymbols.json (Objekte & Relationen). |
| PSGALTools.createjsonfromapps |
Erstelle JSON aus AL Apps |
Extrahiert SymbolReference.json & DocComments.xml aus .app (+ optional .alpackages). |
| PSGALTools.extractappfiles |
Extrahiere AL App Dateien |
Entpackt komplette .app (→ *_Extracted). |
| PSGALTools.signfile |
Signiere Datei |
Signiert .app via Azure Key Vault. |
| PSGALTools.runAlLinter |
AL Linter ausführen |
Manuelles Auslösen aller aktiven Regeln. |
| PSGALTools.nextObjectId |
AL: Nächste freie Objekt-ID |
Ermittelt nächste freie ID (idRanges + Ignorierliste). |
| PSGALTools.listObjectIds |
AL: Vergebene Objekt-IDs je Typ anzeigen |
Ausgabe aller IDs inkl. Name in Output-Channel. |
Explorer Kontext (.app): JSON generieren, Dateien extrahieren, signieren (Submenü "Conditional Code").
Linter Regeln (wichtige Keys)
| Regel |
Kern-Settings |
Zweck |
| objectNamePrefix |
prefix, objectTypes, severity |
Präfix-Prüfung für Objekt-Namen. |
| fileNameMatchesObject |
allowShorter, showDetailedReasons |
Dateiname spiegelt Objekt-Namen (ohne _). |
| customRegex |
Array von {id, pattern, message} |
Eigene Regex Verstöße. |
| namespace |
allowApp, allowCustomization, customizingCustomerName |
Namespace-Pattern PSG.App.* / PSG.Customization.*. |
| tableFieldNaming |
requirePrefix |
Tabellenfeld Benennung (PSG_ + PascalCase). |
| tableFieldIds |
enforceFirstIdOne, checkExtensionIdRanges, reservedCustomerFrom/To |
Feld-ID Regeln & Reservierungen. |
| versioning |
enforceDevPattern, enforceProdStartPattern, mode |
Versionsformat (Dev/Prod Pattern). |
Inline deaktivieren (nächste Zeile): // al-linter-disable-next-line ObjectNamePrefix oder mehrere durch Leerzeichen / Komma. Global: // al-linter-disable-next-line all.
Ab Version (dev branch) sind sämtliche Regel-Parameter direkt im VS Code Settings UI sichtbar (Suchbegriff: "PSG AL Tools"), inkl. psgAlTools.linter.rules.* für enable/disable, severity und Feineinstellungen (z. B. pageFieldTooltip.minWords, tableFieldIds.enforceSameRangeForTableExtensionFields). Der globale Prefix lässt sich über psgAlTools.linter.naming.prefix ändern – leerer Regel-Prefix bei objectNamePrefix.prefix bewirkt die Nutzung des globalen Prefix.
🧪 Linter Issue Codes
ObjectNamePrefix · FileNameMismatch · FileNameCaseMismatch · FileNameTooShort · FileNameHasTrailing · NamespacePattern · TableFieldNaming · TableFieldIds · Versioning · TableFieldNoQuotedName · PageFieldTooltip · VariableObjectName · EmptyTrigger ·
🧩 CondiCode Syntax
Markers: //CondiCodeStart <Expr> ... //CondiCodeEnd – inaktive Zeilen werden als //CondiCode| markiert. Mehrzeilig mit //CondiCodeContinue.
Verfügbare Variablen/Funktionen innerhalb des Ausdrucks:
platform, runtime, features, tenant, debug, config, VersionCompare(a,op,b), isVersionInRange(v,min,max), TargetCompare(target), now.
Beispiele:
//CondiCodeStart platform >= 26 && TargetCompare("Cloud")
//CondiCodeStart isVersionInRange("26.0.0.0","25.0.0.0","27.0.0.0")
//CondiCodeStart features.includes("A") && !debug
✨ Completions
| Feature |
Trigger |
Ergebnis |
| Objekt-ID |
Zeile beginnt mit Typ (z.B. table) |
Vorschlag nächste freie ID + Liste. |
| Page Feld Snippet |
Var.Feld.PageField |
Feld-Control oder komplette Page. |
| Ausdruck Completion |
Innerhalb CondiCode Ausdruck |
Variablen, Funktionen, Operatoren. |
🔧 Quick Fix / Bulk Fix
Aktuell sind keine automatischen Quick Fix / Bulk Fix Regeln verfügbar (PageFieldCaption entfernt).
🔐 Signierung
Erfordert Umgebungsvariablen: KeyVault_clientId, KeyVault_Secret, KeyVault_tenant (Namen identisch zum Skript). Aktivierung via Setting psgAlTools.AppSigning.
⚙️ Einstellungen
Im Folgenden sind alle verfügbaren VS Code Einstellungen der Erweiterung PSG AL Tools aufgelistet. Die Schlüssel beginnen mit psgAlTools. — für jedes Setting geben wir den Default-Wert und eine kurze Beschreibung an.
Hinweis: Viele Linter-Regeln sind unter psgAlTools.linter.rules.* zusammengefasst und können einzeln aktiviert/deaktiviert oder in ihrer Severity angepasst werden.
Basis & Allgemein
| Setting |
Default |
Beschreibung |
psgAlTools.AppSigning |
false |
Aktiviert das Signieren erzeugter .app Dateien. |
psgAlTools.objectCreation.useTypeFolders |
true |
Lege neue AL Objekte in Unterordner pro Typ (Tables, Pages, ...). |
Translation / Übersetzungsunterstützung
| Setting |
Default |
Beschreibung |
psgAlTools.translation.enable |
true |
Aktiviert Hover & Editor für Übersetzungen (XLF). |
psgAlTools.translation.autoLintOnSave |
true |
Führt nach koalesziertem XLF-Speichern automatisch den AL Linter aus. |
psgAlTools.translation.hoverCacheSize |
300 |
Anzahl gecachter Hover-Einträge (LRU). 0 deaktiviert den Cache. |
psgAlTools.translation.ai.verboseLogging |
false |
Ausführliches Debug-Logging für KI-Übersetzungsvorschläge. |
psgAlTools.translation.ai.maxPromptSourceLength |
500 |
Maximale Quelltextlänge die in KI-Prompts genutzt wird. |
Objekt-IDs & Completion
| Setting |
Default |
Beschreibung |
psgAlTools.objectId.ignoreIdsOrRanges |
[] |
Liste von IDs oder Bereichen, die bei der Vergabe übersprungen werden (z.B. 50100-50120, table:60000-60010). |
psgAlTools.objectId.completion.enable |
true |
Aktiviert Completion für nächste freie Objekt-ID. |
psgAlTools.objectId.completion.showIdList |
true |
Zeigt bereits verwendete IDs im Completion Tooltip. |
Completions & Expression Support
| Setting |
Default |
Beschreibung |
psgAlTools.dynamicPageFieldCompletion.enable |
true |
Aktiviert dynamische Page Field Completion (z.B. Var.Field.PageField → Snippets). |
psgAlTools.expression.showVariableValues |
true |
Zeigt berechnete Werte in CondiCode-Ausdrücken inline an. |
psgAlTools.expression.autoAdjustBlocks |
false |
EXPERIMENTELL: Auto-Anpassung von CondiCode Block-Kommentaren bei Format/Änderungen. |
Copilot / KI Integration
| Setting |
Default |
Beschreibung |
psgAlTools.copilot.apiUrl |
"" |
Optional: Externe Copilot-API-URL (z. B. ein eigenes Proxy/Endpoint). Leer = lokale Commands. |
Linter Core
| Setting |
Default |
Beschreibung |
psgAlTools.linter.enable |
true |
Hauptschalter für den AL Linter. |
psgAlTools.linter.runOnOpen |
true |
Lint automatisch beim Öffnen von Dateien. |
psgAlTools.linter.runOnSave |
true |
Lint automatisch beim Speichern. |
psgAlTools.linter.ignoreInlineDirective |
"al-linter-disable-next-line" |
Directive-String zum Deaktivieren der nächsten Zeile. |
psgAlTools.linter.naming.prefix |
"PSG_" |
Globaler Namens-Prefix für Objekt- und Feld-Regeln (überschreibt Standard in Regeln). |
psgAlTools.linter.ruleRuntimeActivation |
[ { rule: "NamespacePattern", minRuntime: "12.0" } ] |
Liste dynamischer Aktivierungen: Regeln erst ab gegebener Runtime aktiv. |
Linter: Objekt- & Dateiregeln
| Setting |
Default |
Beschreibung |
psgAlTools.linter.rules.objectNamePrefix.enable |
true |
Aktiviert Objektname-Prüfung (Prefix). |
psgAlTools.linter.rules.objectNamePrefix.prefix |
"PSG_" |
Spezifischer Präfix für ObjectNamePrefix (leer = globaler Prefix verwenden). |
psgAlTools.linter.rules.objectNamePrefix.objectTypes |
["codeunit","table","page","report","enum","interface","pageextension","tableextension"] |
Welche Objekt-Typen geprüft werden. |
psgAlTools.linter.rules.objectNamePrefix.severity |
"warning" |
Severity für ObjectNamePrefix Verstöße. |
psgAlTools.linter.rules.fileNameMatchesObject.enable |
true |
Prüft, ob Dateiname zum Objekt passt. |
psgAlTools.linter.rules.fileNameMatchesObject.allowShorter |
true |
Erlaubt, dass Dateiname ein Präfix des Objekt-Namens ist. |
psgAlTools.linter.rules.fileNameMatchesObject.showDetailedReasons |
true |
Zeigt detaillierte Gründe (z.B. CaseMismatch) an. |
psgAlTools.linter.rules.fileNameMatchesObject.severity |
"warning" |
Severity für Dateiname-Regel. |
Linter: Namespace & Versioning
| Setting |
Default |
Beschreibung |
psgAlTools.linter.rules.namespace.enable |
true |
Aktiviert NamespacePattern Prüfung. |
psgAlTools.linter.rules.namespace.allowApp |
true |
Erlaubt PSG.App.<AppName> Basis-Namespace. |
psgAlTools.linter.rules.namespace.allowCustomization |
true |
Erlaubt PSG.Customization.<CustomerName>. |
psgAlTools.linter.rules.namespace.customizingCustomerName |
"" |
Optionaler fester Kundenname für Customization Namespace. |
psgAlTools.linter.rules.namespace.severity |
"warning" |
Severity für Namespace-Verstöße. |
psgAlTools.linter.rules.versioning.enable |
true |
Aktiviert Versions-Format-Prüfungen. |
psgAlTools.linter.rules.versioning.enforceDevPattern |
true |
Erzwingt Dev-Versionen Pattern. |
psgAlTools.linter.rules.versioning.enforceProdStartPattern |
true |
Erzwingt Prod-Start Pattern. |
psgAlTools.linter.rules.versioning.mode |
"auto" |
Modus: auto, dev oder prod. |
psgAlTools.linter.rules.versioning.severity |
"warning" |
Severity für Versioning-Regel. |
Linter: Tabellen & Feld-IDs
| Setting |
Default |
Beschreibung |
psgAlTools.linter.rules.tableFieldNaming.enable |
true |
Aktiviert Feldnamen-Prüfung. |
psgAlTools.linter.rules.tableFieldNaming.requirePrefix |
true |
Erfordert Prefix (Regel- oder globaler Prefix). |
psgAlTools.linter.rules.tableFieldNaming.severity |
"warning" |
Severity für Feldnamensverstöße. |
psgAlTools.linter.rules.tableFieldNoQuotedName.enable |
true |
Verhindert quoted / gespacete Feldnamen. |
psgAlTools.linter.rules.tableFieldNoQuotedName.severity |
"warning" |
Severity für quoted name Verstöße. |
psgAlTools.linter.rules.tableFieldIds.enable |
true |
Aktiviert Feld-ID Prüfungen. |
psgAlTools.linter.rules.tableFieldIds.enforceFirstIdOne |
true |
Erzwingt, dass erste Feld-ID bei 1 beginnt. |
psgAlTools.linter.rules.tableFieldIds.checkExtensionIdRanges |
true |
Prüft Extension ID Ranges. |
psgAlTools.linter.rules.tableFieldIds.enforceSameRangeForTableExtensionFields |
true |
Erzwingt gleiche ID-Range für TableExtension-Felder. |
psgAlTools.linter.rules.tableFieldIds.reservedCustomerFrom |
50900 |
Beginn des reservierten Kundenbereichs für Feld-IDs. |
psgAlTools.linter.rules.tableFieldIds.reservedCustomerTo |
50999 |
Ende des reservierten Kundenbereichs für Feld-IDs. |
psgAlTools.linter.rules.tableFieldIds.severity |
"warning" |
Severity für Feld-ID Regel. |
psgAlTools.linter.rules.customRegex |
[] |
Array eigener Regex-Regeln: [{id:'MyRule', enable:true, pattern:'REGEX', flags:'g', message:'Text', appliesTo:['al'] }]. |
Linter: Page Felder & Sonstige Regeln
| Setting |
Default |
Beschreibung |
psgAlTools.linter.rules.pageFieldTooltip.enable |
true |
Aktiviert Tooltip-Prüfungen für Page-Felder. |
psgAlTools.linter.rules.pageFieldTooltip.minWords |
3 |
Minimale Wortanzahl für Tooltip. |
psgAlTools.linter.rules.pageFieldTooltip.minLength |
15 |
Minimale Länge für Tooltip in Zeichen. |
psgAlTools.linter.rules.pageFieldTooltip.severity |
"warning" |
Severity für Tooltip-Regel. |
psgAlTools.linter.rules.variableObjectName.enable |
true |
Aktiviert Variable-Objekt-Namen Prüfungen. |
psgAlTools.linter.rules.variableObjectName.objectTypes |
["record","report","page","codeunit"] |
Welche Objekt-Typen geprüft werden für Variablen. |
psgAlTools.linter.rules.variableObjectName.severity |
"warning" |
Severity für VariableObjectName. |
psgAlTools.linter.rules.emptyTrigger.enable |
true |
Prüft auf leere Trigger. |
psgAlTools.linter.rules.emptyTrigger.allowCommentOnly |
false |
Erlaubt nur Kommentar-Inhalt im Trigger. |
psgAlTools.linter.rules.emptyTrigger.severity |
"warning" |
Severity für EmptyTrigger. |
psgAlTools.linter.rules.missingTranslations.enable |
true |
Prüft auf fehlende Übersetzungen (Captions, Tooltips, Labels). |
psgAlTools.linter.rules.missingTranslations.checkCaptions |
true |
Berücksichtige Captions bei der Prüfung. |
psgAlTools.linter.rules.missingTranslations.checkTooltips |
true |
Berücksichtige Tooltips bei der Prüfung. |
psgAlTools.linter.rules.missingTranslations.checkLabels |
true |
Berücksichtige Labels bei der Prüfung. |
psgAlTools.linter.rules.missingTranslations.skipIfNoXlf |
true |
Überspringe die Prüfung, wenn kein XLF vorhanden ist. |
psgAlTools.linter.rules.missingTranslations.severity |
"warning" |
Severity für fehlende Übersetzungen. |
Wenn Sie weitere Details zu einer Regel oder Einstellung benötigen, öffnen Sie die VS Code Settings (Strg+,) und suchen Sie nach "PSG AL Tools" oder den einzelnen Schlüsseln wie psgAlTools.linter.rules.tableFieldIds.
🆔 Objekt-ID Logik
Berücksichtigt app.json idRanges; ignoriert definierte Ausschlüsse; Cache invalidiert bei Save.
🧯 Troubleshooting Kurz
| Problem |
Hinweis |
| Keine ID Vorschläge |
Prüfen: completion.enable & Zeilenkontext vor Objektname. |
| Namespace Warnung |
customizingCustomerName / Schreibweise prüfen. |
| Ausdruck toggelt nicht |
Ausdruck Syntax / Mehrzeilen mit Continue prüfen. |
| Signierung fehlgeschlagen |
Umgebungsvariablen vorhanden & Terminal-Ausgabe kontrollieren. |
✅ Best Practices
Kurz halten: CondiCode Blöcke dokumentieren • CustomRegex sparsam einsetzen • Eigene ID-Ranges früh definieren.
Hauptfunktionen
1. Versions-Management
- Multi-Version Support: Verwalten Sie mehrere Versionen Ihrer Business Central-Anwendung in einem einzigen Projekt
- Version-Switching: Nahtloses Umschalten zwischen verschiedenen BC-Versionen (z.B. 26.0.0.0, 25.0.0.0)
- Plattform-spezifische Anpassungen: Separate Verwaltung von Cloud- und On-Premise-Versionen
2. Bedingter Code
- Intelligente Code-Markierung: Nutzen Sie
//CondiCodeStart und //CondiCodeEnd zur Kennzeichnung versionsspezifischen Codes
- Automatische Code-Aktivierung: Code wird basierend auf der gewählten Version automatisch aktiviert/deaktiviert
- Syntax-Highlighting: Spezielle Hervorhebung der bedingten Code-Bereiche
3. App-Paket-Management
- Automatische App-Signierung: Integrierte Azure Key Vault-Unterstützung für App-Signierung
- Paket-Konvertierung: Tools zum Konvertieren zwischen .app und .zip Formaten
- Symbol-Extraktion: Automatische Extraktion von Symbolen und Dokumentation aus Apps
Detaillierte Einrichtung
Voraussetzungen
- Visual Studio Code
- Business Central AL Language Extension
- Azure Key Vault (für App-Signierung) Dokumentation
Installation
- Marketplace Installation
- Öffnen Sie Visual Studio Code
- Drücken Sie
Ctrl+Shift+X um den Extensions Marketplace zu öffnen
- Geben Sie "PSG AL Tools" (früher "ConditionalCode") in die Suchleiste ein
- Klicken Sie auf die Extension von "profor software GmbH"
- Klicken Sie auf den blauen "Install" Button
- Neu starten Sie VS Code nach der Installation
- Manuelle Installation
- Laden Sie die neueste .vsix-Datei aus den Releases herunter
- Öffnen Sie VS Code
- Drücken Sie
Ctrl+Shift+X für die Extensions-Ansicht
- Klicken Sie auf das "..." Menü (Weitere Aktionen)
- Wählen Sie "Install from VSIX..."
- Navigieren Sie zur heruntergeladenen .vsix-Datei und wählen Sie diese aus
- Bestätigen Sie die Installation und starten Sie VS Code neu
Erste Schritte
- Projekt-Konfiguration
a. Version erstellen:
- Öffnen Sie die Command Palette mit
Ctrl+Shift+P
- Geben Sie "Version hinzufügen" ein (oder
PSGALTools.createversion – früher ConditionalCode.createversion)
b. Versions-Details eingeben:
- Name der Version: Eindeutiger Name (z.B. "BC26")
- BC Platform: Business Central Platform Version (z.B. "26.0.0.0")
- BC Application: Application Version, meist identisch mit Platform
- BC Target: Wählen Sie zwischen "Cloud" oder "OnPrem"
- BC Runtime: .NET Runtime Version (z.B. "14.0")
c. Workspace vorbereiten:
Die Erweiterung erstellt und konfiguriert automatisch:
.vscode/PSGALTools.json (früher .vscode/ConditionalCode.json) für Versionskonfigurationen
.allalpackages Ordner für gemeinsam genutzte Dependencies
d. AL Objekt-Analyse:
Die Erweiterung analysiert automatisch:
- Tabellen und Tabellenbeziehungen
- Seiten und Seitenerweiterungen
- Codeunits und deren Abhängigkeiten
- Reports und XMLPorts
- Enumerationen und Schnittstellen
Code-Versionierung einrichten
a. Code-Blöcke markieren:
//CondiCodeStart VersionCompare(config.app.platform,'>=', '26.0.0.0') && TargetCompare('Cloud')
procedure ModernCloudFeature()
begin
// Nur für BC 26.0 oder höher in der Cloud
end;
//CondiCodeEnd
//CondiCodeStart VersionCompare(config.app.platform,'==', '25.0.0.0')
procedure LegacyFeature()
begin
// Nur für BC 25.0
end;
//CondiCodeEnd
//CondiCodeStart TargetCompare('OnPrem')
procedure OnPremiseIntegration()
begin
// Nur für On-Premise-Installationen
end;
//CondiCodeEnd
b. Bedingungs-Syntax und Operatoren:
- Versions-Vergleiche:
VersionCompare(config.app.platform,'>=', '26.0.0.0') (exakte Version)
VersionCompare(config.app.platform,'>=', '26.0.0.0') (mindestens Version)
VersionCompare(config.app.platform,'<=', '26.0.0.0') (höchstens Version)
- Target-Checks:
TargetCompare('Cloud')
TargetCompare('OnPrem')
- Logische Operatoren:
&& für UND-Verknüpfung
|| für ODER-Verknüpfung
! für NICHT
c. Automatische Verwaltung:
- Dynamische Aktivierung/Deaktivierung beim Versionswechsel
- Automatische Kommentierung inaktiver Blöcke
- Intelligentes Folding der Code-Bereiche
- Integration mit AL-Objektverwaltung
App-Signing konfigurieren (optional)
a. Umgebungsvariablen setzen:
# Permanent für den Benutzer setzen
[Environment]::SetEnvironmentVariable("KeyVault_clientId", "Ihre-Client-ID", "User")
[Environment]::SetEnvironmentVariable("KeyVault_Secret", "Ihr-Client-Secret", "User")
[Environment]::SetEnvironmentVariable("KeyVault_tenant", "Ihre-Tenant-ID", "User")
# Optional: Test der Konfiguration
$Env:KeyVault_clientId
$Env:KeyVault_Secret
$Env:KeyVault_tenant
Fortgeschrittene Funktionen
Automatisierte Build-Prozesse
- App-Pakete erstellen
- Versionsspezifische Builds mit
PSGALTools.buildversion
- Automatische .app-Datei Generierung
- Parallele Builds für mehrere Versions-Targets
AL-Kompilierung
- Native AL-Compiler Integration
- Intelligentes Dependency Management
- Version-spezifische Compiler-Einstellungen
- Build-Output-Verwaltung nach Version
Package-Management
.alpackages Synchronisation pro Version
.allalpackages für geteilte Dependencies
- Automatisches Cleanup und Versionierung
- App-zu-Zip Konvertierung für Analysen
Build-Konfiguration
{
"AllConfig": {
"app": {
"id": "com.yourcompany.app",
"name": "Your App Name",
"publisher": "Your Company",
"brief": "App Description",
"privacyStatement": "https://privacy.url",
"EULA": "https://eula.url",
"help": "https://help.url",
"url": "https://company.url",
"supportedLocales": ["de-DE", "en-US"],
"dependencies": [],
"idRanges": [{"from": 50000, "to": 50999}],
"features": ["TranslationFile"]
}
},
"Versions": {
"BC26": {
"app": {
"version": "26.0.0.0",
"platform": "Microsoft Dynamics 365 Business Central",
"application": "26.0.0.0",
"target": "Cloud",
"runtime": "14.0"
}
}
}
}
Symbol-Management
- Automatische Generierung von Symbol-Referenzen
- Extraktion von Dokumentationskommentaren
- Verwaltung von Objekt-Beziehungen
Workspace-Organisation
- Automatische .gitignore-Konfiguration
- Verwaltung von versionsspezifischen Abhängigkeiten
- Strukturierte Arbeitsbereich-Organisation
Troubleshooting
Häufige Probleme und Lösungen
App-Signierung schlägt fehl
a. Symptome:
- Fehlermeldung beim Build-Prozess
- Signatur wird nicht erstellt
- Azure-Authentifizierungsfehler
b. Lösungsschritte:
# Überprüfen der Umgebungsvariablen
$env:KeyVault_clientId
$env:KeyVault_Secret
$env:KeyVault_tenant
Versions-Konflikte
a. Symptome:
- Inkonsistente Code-Aktivierung
- Unerwartetes Verhalten beim Version-Switching
- Build-Fehler mit verschiedenen Versionen
b. Diagnose:
- Überprüfen Sie die
PSGALTools.json (früher ConditionalCode.json):
{
"Versions": {
"BC26-Cloud": {
"app": {
"version": "26.0.0.0",
"target": "Cloud"
}
}
}
}
- Validieren Sie die bedingten Code-Blöcke:
//CondiCodeStart VersionCompare(config.app.platform,'>=', '26.0.0.0')'
// Dieser Code sollte eindeutig einer Version zugeordnet sein
//CondiCodeEnd
Build-System-Probleme
a. Compiler-Fehler:
- Überprüfen Sie die AL Language Extension Version
- Validieren Sie die Compiler-Einstellungen in launch.json
- Stellen Sie sicher, dass alle Dependencies verfügbar sind
b. Performance-Probleme:
Entwicklung und Beitrag
Setup für Entwickler
- Repository klonen:
git clone https://github.com/profor-software/PSG_AL_Tools.git
cd PSG_AL_Tools
- Abhängigkeiten installieren:
npm install
- Entwicklungs-Watch starten:
npm run watch
Testing
- Nutzen Sie die integrierten Test-Tools
- Führen Sie Tests mit unterschiedlichen BC-Versionen durch
- Testen Sie Cloud- und On-Premise-Szenarien
Lizenz
MIT
Support
Bei Fragen oder Problemen:
Hinweise
Standard .gitignore Einträge:
.vscode/.alcache/*.*
.vscode/.altemplates/*.*
.alpackages
/*.app
Translations/*.xlf
.vscode/launch.json
.vscode/rad.json
| |