# EspoCRM Validator & Rebuild Tool v2.0 **Letzte Aktualisierung:** 10. März 2026 **Tool:** `custom/scripts/validate_and_rebuild.py` ## Übersicht Erweiterte Python-Tool zur Validierung von EspoCRM Custom-Entities mit intelligenter Log-Prüfung und CRUD-Tests. Version 2.0 bietet minimalen/verbose Output, Live-Entity-Tests und KI-freundliches Feedback. ## 🆕 Neue Features in v2.0 ### 1. Intelligenter Output-Modus - **Standard-Modus:** Minimale Ausgabe, nur Ergebnisse - **Verbose-Modus (`-v`):** Detaillierte Informationen mit Timing ### 2. Log-Prüfung mit präzisen Zeitstempeln - Prüft Logs nach **jedem** API-Request - Nur Logs seit Request-Start - Test bricht ab bei Fehler in Logs - Filtert bekannte unwichtige Meldungen ### 3. CRUD-Tests für alle Entities - CREATE, READ, UPDATE, LIST, DELETE - Log-Check nach jeder Operation - Automatisches Cleanup - Detektiert fehlende Service-Klassen ### 4. KI-freundliches JSON-Feedback - Strukturierte Fehleranalyse - Konkrete Empfehlungen - Maschinenlesbar ## Verwendung ### Basis-Befehle ```bash # Standard: Minimaler Output, vollständige Tests python3 custom/scripts/validate_and_rebuild.py # Verbose: Detaillierte Ausgabe für Debugging python3 custom/scripts/validate_and_rebuild.py -v # Nur Validierung (kein Rebuild) python3 custom/scripts/validate_and_rebuild.py --dry-run # Ohne Entity-Tests (schneller) python3 custom/scripts/validate_and_rebuild.py --skip-tests ``` ### Erweiterte Parameter ```bash # Custom Base-URL python3 custom/scripts/validate_and_rebuild.py --base-url http://my-espo.local # Custom Credentials python3 custom/scripts/validate_and_rebuild.py --username admin --password secret # Kombination python3 custom/scripts/validate_and_rebuild.py -v --skip-tests --dry-run ``` ## Validierungsphasen ### Phase 1: Statische Validierung 1. **JSON-Syntax-Prüfung** - Validiert alle `.json` Dateien im `custom/` Verzeichnis - Findet Syntax-Fehler mit Dateiname und Zeilennummer 2. **Relationship-Konsistenz** - Prüft bidirektionale Relationships (hasMany/hasOne) - Validiert `foreign`-Links zwischen Entities - Überprüft `relationName`-Konsistenz bei M2M - Erkennt fehlende Gegenseiten-Definitionen 3. **Erforderliche Dateien** - Prüft Vorhandensein von scopes-Dateien - Validiert i18n-Dateien (de_DE + en_US) - Warnt bei fehlenden Translations 4. **Dateirechte** - Prüft Owner (www-data:www-data) in: - `custom/Espo/Custom/Resources/` - `client/custom/` - `data/` (inkl. config.php) - Korrigiert automatisch (664/775) 5. **PHP-Syntax-Validierung** - Validiert alle Custom-PHP-Klassen - Nutzt `php -l` für Syntax-Check ### Phase 2: Rebuild mit Log-Prüfung 6. **Cache-Clearing** - Löscht EspoCRM-Cache vor Rebuild 7. **EspoCRM Rebuild** - Führt `php command.php rebuild` aus - **Prüft Logs direkt nach Rebuild** - Bricht ab bei Fehlern in Logs ### Phase 3: Live Entity-Tests (optional) Für jede Custom Entity (außer Junction Tables): 8. **CREATE Test** - Erstellt Test-Record via API - Prüft Logs nach Request - Validiert Response 9. **READ Test** - Liest erstellten Record - Prüft Logs - Validiert Daten 10. **UPDATE Test** - Aktualisiert Record - Prüft Logs - Validiert Änderung 11. **LIST Test** - Ruft Entity-Liste ab - Prüft Logs - Validiert Response 12. **DELETE Test** - Löscht Test-Record - Prüft Logs - Entfernt aus Cleanup-Liste 13. **Automatisches Cleanup** - Löscht alle verbliebenen Test-Records ## Output-Beispiele ### Standard-Modus (Minimal) ``` EspoCRM Validator & Rebuild Tool v2.0 1. JSON-SYNTAX VALIDIERUNG ✓ Alle 746 JSON-Dateien valide 2. RELATIONSHIP-KONSISTENZ ✓ 51 Relationships geprüft 3. ERFORDERLICHE DATEIEN ✗ 1 fehlende Dateien CVMHBeteiligte: scopes/CVMHBeteiligte.json fehlt 4. DATEIRECHTE-PRÜFUNG ✓ Alle Dateirechte korrekt (www-data:www-data) 5. PHP-SYNTAX VALIDIERUNG ✓ Alle 353 PHP-Dateien valide 6. ESPOCRM REBUILD ✓ Rebuild erfolgreich abgeschlossen 7. ENTITY CRUD-TESTS Ergebnis: 18 erfolgreich, 0 fehlgeschlagen ✓ Alle 18 Entities getestet ZUSAMMENFASSUNG WARNUNGEN: 1 ⚠ CVMHBeteiligte: scopes/CVMHBeteiligte.json fehlt ✓ ERFOLGREICH ABGESCHLOSSEN ``` ### Verbose-Modus (`-v`) ``` EspoCRM Validator & Rebuild Tool v2.0 Verbose-Modus aktiviert ================================================================================ 1. JSON-SYNTAX VALIDIERUNG ================================================================================ ℹ Prüfe 746 JSON-Dateien... ✓ Alle 746 JSON-Dateien valide ================================================================================ 6. ESPOCRM REBUILD ================================================================================ ℹ Container: espocrm ℹ Lösche Cache... ℹ Starte Rebuild... ✓ Rebuild erfolgreich abgeschlossen ================================================================================ 7. ENTITY CRUD-TESTS ================================================================================ ℹ Teste 18 Custom-Entities... ▶ CAICollection: Create... ✓ 0.042s ID: 69b00123456789abc ▶ CAICollection: Read... ✓ 0.028s Name: Test CAICollection 1710065432 ▶ CAICollection: Update... ✓ 0.035s ▶ CAICollection: List... ✓ 0.031s 12 Einträge ▶ CAICollection: Delete... ✓ 0.029s [... weitere Entities ...] ℹ Ergebnis: 18 erfolgreich, 0 fehlgeschlagen ✓ Alle 18 Entities getestet ``` ### Bei Fehlern (mit Log-Analyse) ``` 7. ENTITY CRUD-TESTS ▶ CAICollection: Create... ✗ 0.018s Logs enthalten Fehler! ✗ Log-Fehler bei CREATE: [2026-03-10 12:34:56] CRITICAL: InjectableFactory: Class 'Espo\Custom\Services\CAICollection' does not exist. :: GET /CAICollection :: /var/www/html/application/Espo/Core/InjectableFactory.php(164) ZUSAMMENFASSUNG KI-FEEDBACK: { "status": "failed", "summary": { "errors": 1, "warnings": 0, "entities_checked": 28 }, "errors": ["InjectableFactory: Class 'Espo\\Custom\\Services\\CAICollection' does not exist"], "recommendations": [ "KRITISCH: Service-Klassen fehlen! Erstelle Services in custom/Espo/Custom/Services/" ] } ⚠ TESTS FEHLGESCHLAGEN ``` ## Exit Codes - `0` - Erfolg: Alle Validierungen bestanden, Rebuild erfolgreich - `1` - Fehler: Kritische Fehler gefunden oder Rebuild/Tests fehlgeschlagen ## Fehlertypen ### Kritische Fehler (Rebuild-Abbruch) - JSON-Syntax-Fehler - PHP-Syntax-Fehler - Fehlende Relationship-Definitionen - Rebuild-Fehler - **Log-Fehler nach Rebuild** ### Warnungen (kein Abbruch) - Fehlende i18n-Übersetzungen - Fehlende scopes-Dateien - Dateirechte-Probleme (werden auto-korrigiert) ### Test-Fehler (kein Abbruch bei --skip-tests) - Entity-Tests schlagen fehl - API-Authentifizierung fehlgeschlagen - Service-Klassen fehlen (wird erkannt!) ## Häufige Fehler und Lösungen ### 1. InjectableFactory: Service-Klasse fehlt **Symptom:** ``` CRITICAL: InjectableFactory: Class 'Espo\Custom\Services\{Entity}' does not exist ``` **Lösung:** ```bash # Service-Klasse erstellen cat > custom/Espo/Custom/Services/{Entity}.php << 'EOF'