n8n-nodes-nextcloud-tables
Version:
Production-Ready n8n Node für Nextcloud Tables - Vollständige API-Abdeckung mit erweiterten Filtern, Multi-Column-Sorting, CSV-Import und professioneller Datenvalidierung
523 lines (433 loc) • 19.5 kB
Markdown
# n8n-nodes-nextcloud-tables
Ein **Community** n8n Node für die Integration mit Nextcloud Tables. Diese Node ermöglicht vollständige Tabellen-Verwaltung, erweiterte Datenoperationen und ist **speziell für KI-Agents optimiert**.
## 🚀 **Produktions-Status: v2.4.7** ✅
**Diese Node ist produktionsreif für die getesteten Kern-Features und gegen kritische NaN-Bugs abgehärtet!**
### ✅ **Version 2.4.8 - Production-Ready:**
- ✅ **Robuste Resource Locator Validierung** - Keine NaN-Fehler mehr
- ✅ **KI-Agent Kompatibilität** - Spezielle AI-Friendly Operationen
- ✅ **Umfassende Fehlerbehandlung** - Detaillierte HTTP-Status-Codes
- ✅ **Optimierte API-Performance** - Query-Parameter für Column-Operationen
- ✅ **Verbesserte Log-Kennzeichnung** - Eindeutige Node-Identifikation für besseres Grepping
- ✅ **Strukturiertes Logging** - Debug, Info, Warn, Error Level mit Kontext
### ✅ **Version 2.4.7 - Production-Ready:**
- **🛡️ NaN-Bug-Fixes**: Robuste Validierung gegen alle NaN-Quellen (null, undefined, 'NaN' strings)
- **🧹 Production-Cleanup**: Alle Debug-Tools entfernt, saubere Codebase
- ⚡ **Enhanced Error Handling**: Hilfreiche Fehlermeldungen für Resource Locator Probleme
- 🔧 **Optimierte Builds**: TypeScript-Compilation ohne Warnings
- 📦 **Clean Dependencies**: Entfernte veraltete Scripts und Altlasten
### ✅ **Getestet & Produktionsreif:**
- **Tabellen-Management**: Grundlegende CRUD-Operationen (getAll, get) ✅
- **Spalten-Management**: Alle Operationen inkl. AI-friendly Extensions ✅
- **Zeilen-Management**: Basis CRUD (create, getAll, get) ✅
- **Views-Management**: Basis-Operationen (getAll, create) ✅
- **Shares-Management**: Benutzer/Gruppen-Freigaben ✅
- **NaN-Bug-Protection**: Robuste Resource Locator Validierung ✅
### ⚠️ **Implementiert aber ungetestet:**
- **Erweiterte Tabellen-Ops**: update, delete
- **Erweiterte Zeilen-Ops**: update (delete nicht von API unterstützt)
- **Erweiterte Views-Ops**: get, update, delete, getRows
- **Erweiterte Shares-Ops**: update, delete
- **CSV-Import**: Vollständige Import-Pipeline
- **Context-Integration**: App-Context-Features
- **Erweiterte Filter/Sort**: Komplexe Multi-Column-Operationen
## 🛡️ **Kritische Bug-Fixes in v2.4.7**
### **Problem gelöst: NaN Table IDs**
Nextcloud-Logs zeigten kritische Fehler wie:
```
[error] Did expect one result but found none for table id = NaN
[error] no read access to table id = 0
```
### **Root Cause: Resource Locator Handling**
```typescript
// VORHER: Unzureichende Validierung führte zu NaN IDs
if (!tableId || isNaN(tableId)) { ... }
// NACHHER: Robuste Validierung gegen ALLE NaN-Quellen
if (resourceLocator === null || resourceLocator === undefined ||
resourceLocator === 'null' || resourceLocator === 'undefined' ||
resourceLocator === 'NaN' ||
(typeof resourceLocator === 'number' && isNaN(resourceLocator))) {
throw new Error('Resource Locator ist erforderlich aber nicht gesetzt oder ungültig');
}
```
### **Gehärtete Validation in Load Options**
- ✅ **Tabellen-ID Extraktion**: Robuste Behandlung von `__rl` Resource Locators
- ✅ **Column/View Loading**: Validierung verhindert `/tables/NaN/columns` Requests
- ✅ **Error Messages**: Hilfreiche Debugging-Informationen
- ✅ **String-to-Number Conversion**: Sichere parseInt() mit Validation
## 🤖 **KI-Agent Optimiert** ⭐
**Einzigartig**: Diese Node ist die **erste n8n Community Node**, die speziell für **KI-Agents** optimiert wurde!
### **Problem gelöst**:
Standard n8n-Nodes verwenden `displayOptions`, die Parameter dynamisch verstecken. KI-Agents können diese nicht sehen.
### **Lösung**: AI-Friendly Operationen
- ✅ **Alle Parameter gleichzeitig sichtbar**
- ✅ **Keine UI-Dependencies** für KI-Agents
- ✅ **String-basierte IDs** statt Dropdown-Navigation
- ✅ **Flache Parameter-Struktur** ohne Verschachtelung
- ✅ **Robuste NaN-Protection** in v2.4.7
### **AI-Friendly Operationen verfügbar:**
#### **Spalten-Management (AI-Optimiert)**
```javascript
// Für KI-Agents optimiert - ALLE Parameter sichtbar
Operation: "Spalte Erstellen (KI-Friendly)"
{
"tableIdAI": "123",
"columnType": "selection",
"columnTitle": "Status",
"columnMandatory": true,
// Alle typ-spezifischen Parameter gleichzeitig verfügbar:
"selectionOptionsAI": "[\"Offen\", \"In Bearbeitung\", \"Fertig\"]",
"selectionDefaultAI": "Offen",
"selectionMultipleAI": false,
// Text-Parameter (werden ignoriert bei anderen Typen):
"textSubtypeAI": "line",
"textMaxLengthAI": 255,
// ... alle anderen Parameter verfügbar
}
// Vollständige Updates möglich
Operation: "Spalte Aktualisieren (KI-Friendly)"
{
"columnIdAI": "456",
"columnType": "text", // Typ ändern
"columnTitle": "Neuer Name", // Titel ändern
"textSubtypeAI": "long", // Text-spezifisch
"textMaxLengthAI": 500, // Max-Länge ändern
// Nur relevante Parameter werden verwendet
}
```
**Vorteile für KI-Agents:**
- 🔍 **Parameter-Transparenz**: 24 Parameter gleichzeitig sichtbar
- 🎯 **Autonome Operationen**: Keine UI-Interaktion erforderlich
- 🚀 **String-basierte Eingaben**: Keine Dropdown-Listen, maximale Flexibilität
- 🛡️ **NaN-Protection**: Robuste Validierung verhindert API-Fehler (v2.4.7)
- ↩️ **Backward Compatible**: Human-UI bleibt unverändert
## 📊 **Feature-Übersicht & Test-Status**
### 🏗️ **Tabellen-Operationen**
- ✅ **Alle Tabellen abrufen**: Getestet, produktionsreif
- ✅ **Tabelle abrufen**: Getestet, produktionsreif
- ⚠️ **Tabelle erstellen**: Implementiert, ungetestet
- ⚠️ **Tabelle aktualisieren**: Implementiert, ungetestet
- ⚠️ **Tabelle löschen**: Implementiert, ungetestet
### 📋 **Spalten-Management** ✅ **VOLLSTÄNDIG GETESTET & AI-OPTIMIERT**
**Standard-Operationen:**
- ✅ **Alle Spalten abrufen**: Getestet, produktionsreif
- ✅ **Spalte abrufen**: Getestet, produktionsreif
- ✅ **Spalte erstellen**: Getestet, produktionsreif
- ⚠️ **Spalte aktualisieren**: Implementiert, ungetestet
- ⚠️ **Spalte löschen**: Implementiert, ungetestet
**🤖 KI-Friendly Operationen:**
- ✅ **Spalte Erstellen (KI-Friendly)**: Getestet, produktionsreif - 23 Parameter gleichzeitig sichtbar
- ⚠️ **Spalte Aktualisieren (KI-Friendly)**: Implementiert, ungetestet - 24 Parameter für vollständige Updates
**5 Spaltentypen vollständig unterstützt:**
- ✅ **Text**: Getestet - Pattern-Validierung, Max-Länge, Subtypen (einzeilig/mehrzeilig)
- ✅ **Number**: Getestet - Min/Max, Dezimalstellen, Präfix/Suffix, Validierung
- ✅ **DateTime**: Getestet - Standard-Datum, flexible Eingabeformate
- ✅ **Selection**: Getestet - Dropdown-Optionen, Standard-Werte, Mehrfachauswahl
- ✅ **UserGroup**: Getestet - Benutzer/Gruppen-Auswahl, Multi-Select, Teams
### 🎯 **Zeilen-Operationen**
- ✅ **Alle Zeilen abrufen**: Getestet, produktionsreif
- ✅ **Zeile abrufen**: Getestet, produktionsreif (clientseitige Filterung)
- ✅ **Zeile erstellen**: Getestet, produktionsreif
- ⚠️ **Zeile aktualisieren**: Implementiert, ungetestet
- ❌ **Zeile löschen**: Nicht von Nextcloud Tables API unterstützt
**Erweiterte Zeilen-Features (ungetestet):**
- ⚠️ **Smart-Pagination**: 1-1000 Zeilen optimiert
- ⚠️ **11 Filter-Operatoren**: =, !=, >, >=, <, <=, LIKE, starts_with, ends_with, is_empty, is_not_empty
- ⚠️ **Multi-Column-Sorting**: Prioritäts-basierte Sortierung
- ⚠️ **Volltext-Suche**: Case-sensitive/insensitive, spalten-spezifisch
- ✅ **Automatische Validierung**: Spalten-basierte Datenformatierung
### 📋 **Views-Management**
- ✅ **Views abrufen**: Getestet, produktionsreif
- ✅ **View erstellen**: Getestet, produktionsreif
- ⚠️ **View abrufen (einzeln)**: Implementiert, ungetestet
- ⚠️ **View aktualisieren**: Implementiert, ungetestet
- ⚠️ **View löschen**: Implementiert, ungetestet
- ⚠️ **Zeilen aus View abrufen**: Implementiert, ungetestet
### 🤝 **Kollaborations-Features**
- ✅ **Shares abrufen**: Getestet, produktionsreif
- ✅ **Share erstellen**: Getestet, produktionsreif (Benutzer & Gruppen)
- ⚠️ **Share aktualisieren**: Implementiert, ungetestet
- ⚠️ **Share löschen**: Implementiert, ungetestet
- ✅ **Benutzer/Gruppen-Listen**: Getestet, produktionsreif
### 📥 **CSV-Import** ⚠️ **UNGETESTET**
- ⚠️ **Flexible Optionen**: Header-Erkennung, Trennzeichen-Auswahl
- ⚠️ **Column-Mapping**: Automatische oder manuelle Zuordnung
- ⚠️ **Datentyp-Konvertierung**: Auto, Text, Number, DateTime, Boolean
- ⚠️ **Import-Status**: Überwachung und Fehlerbehandlung
### 🌐 **App-Context-Integration** ⚠️ **UNGETESTET**
- ⚠️ **Context-Navigation**: Nahtlose Nextcloud-App-Integration
- ⚠️ **Context-Tabellen**: Gefilterte Ansichten nach App-Context
- ⚠️ **Context-Pages**: App-Page-Management
## Installation
```bash
npm install n8n-nodes-nextcloud-tables
```
Starten Sie n8n neu, um die neue Node zu laden.
## Konfiguration
### Credentials
Erstellen Sie neue Credentials vom Typ "Nextcloud Tables API":
1. **Nextcloud URL**: Vollständige URL (z.B. `https://cloud.example.com`)
2. **Benutzername**: Ihr Nextcloud-Benutzername
3. **Passwort**: App-Passwort (empfohlen) oder normales Passwort
**🔒 Sicherheit**: Verwenden Sie App-Passwörter:
- Nextcloud → Einstellungen → Sicherheit → App-Passwörter
- Erstellen Sie ein neues App-Passwort für n8n
## 🤖 **KI-Agent Usage Examples**
### Spalte für KI-Agents erstellen
```javascript
{
"resource": "Spalte",
"operation": "Spalte Erstellen (KI-Friendly)",
"tableIdAI": "123",
"columnType": "selection",
"columnTitle": "Projekt-Status",
"columnDescription": "Aktueller Status des Projekts",
"columnMandatory": true,
"selectionOptionsAI": "[\"Geplant\", \"In Arbeit\", \"Testing\", \"Fertig\", \"Archiviert\"]",
"selectionDefaultAI": "Geplant",
"selectionMultipleAI": false
}
```
### Spalte für KI-Agents aktualisieren
```javascript
{
"resource": "Spalte",
"operation": "Spalte Aktualisieren (KI-Friendly)",
"columnIdAI": "456",
"columnTitle": "Erweiterte Projekt-Status",
"selectionOptionsAI": "[\"Backlog\", \"Sprint\", \"Review\", \"Done\", \"Cancelled\"]",
"selectionDefaultAI": "Backlog"
}
```
### Verschiedene Spaltentypen für KI-Agents
```javascript
// Text-Spalte erstellen
{
"columnType": "text",
"columnTitle": "Beschreibung",
"textSubtypeAI": "long",
"textMaxLengthAI": 1000,
"textPatternAI": "^[A-Za-z0-9\\s]+$"
}
// Zahlen-Spalte erstellen
{
"columnType": "number",
"columnTitle": "Budget",
"numberMinAI": 0,
"numberMaxAI": 100000,
"numberDecimalsAI": 2,
"numberPrefixAI": "€"
}
// Benutzer/Gruppen-Spalte erstellen
{
"columnType": "usergroup",
"columnTitle": "Zuständig",
"usergroupTypeAI": "user",
"usergroupMultipleAI": false
}
```
### Human vs. KI-Agent Vergleich
```javascript
// HUMAN (UI-optimiert) - Parameter erscheinen dynamisch
Operation: "Spalte Erstellen"
Tabelle: [Dropdown-Auswahl]
Typ: "Auswahl"
// → Dann erscheinen Auswahl-spezifische Parameter
// KI-AGENT (AI-optimiert) - Alle Parameter sichtbar
Operation: "Spalte Erstellen (KI-Friendly)"
// → ALLE 23 Parameter sofort sichtbar und verwendbar
// → String-basierte Eingaben statt Dropdown-Listen
// → Maximale Flexibilität für autonome Ausführung
```
## 🔧 **Advanced Usage**
### Erweiterte Zeilen-Abfrage mit Filtern
```javascript
{
"resource": "Zeile",
"operation": "Alle Zeilen Abrufen",
"source": "table",
"tableId": "123",
"useFiltering": true,
"filters": [
{
"columnId": "5",
"operator": "EQ",
"value": "Aktiv"
},
{
"columnId": "8",
"operator": "GT",
"value": "2024-01-01"
}
],
"useSorting": true,
"sorting": [
{
"columnId": "10",
"direction": "DESC"
}
]
}
```
### CSV-Import mit Column-Mapping
```javascript
{
"resource": "Import",
"operation": "CSV in Tabelle Importieren",
"tableId": "123",
"csvData": "[Binary CSV Data]",
"hasHeader": true,
"delimiter": ";",
"columnMapping": [
{
"csvColumn": "Kundenname",
"tableColumn": "1",
"dataType": "text"
},
{
"csvColumn": "Erstellungsdatum",
"tableColumn": "2",
"dataType": "datetime"
}
]
}
```
## 📊 **Vollständige API-Abdeckung**
### ✅ Implementierte Endpunkte
- **Tables**: `/tables/*` (vollständige CRUD)
- **Rows**: `/tables/{id}/rows`, `/views/{id}/rows` (vollständige CRUD außer DELETE*)
- **Views**: `/tables/{id}/views`, `/views/{id}` (vollständige CRUD)
- **Columns**: `/tables/{id}/columns`, `/columns/{id}` (vollständige CRUD + AI-friendly)
- **Shares**: `/tables/{id}/shares`, `/shares/{id}` (vollständige CRUD)
- **Import**: `/tables/{id}/import` (POST + Status-Monitoring)
- **Context**: `/contexts/*` (GET-Operationen)
**\*Note**: Row DELETE ist von der Nextcloud Tables API nicht unterstützt
### 🔧 **Kompatibilität**
- **Nextcloud**: 28+ (getestet)
- **Tables App**: 0.6+ (getestet)
- **n8n**: 1.0+ (getestet)
### 🛠️ **Technische Details**
- **API Version**: Hybrid v1/v2 (optimal je nach Operation)
- **Authentifizierung**: Basic Auth mit App-Passwort-Support
- **Error Handling**: 10 HTTP-Status-Codes mit spezifischen Meldungen
- **Retry Logic**: 3 Versuche mit exponentiellem Backoff
- **Validation**: Spalten-basierte Echtzeit-Validierung
## Development & Testing
### Setup
```bash
npm install # Dependencies
npm run build # TypeScript kompilieren
npm run dev # Development-Modus
npm run lint # Code-Prüfung
npm run format # Code formatieren
```
### Projekt-Architektur
```
nodes/NextcloudTables/
├── NextcloudTables.node.ts # Haupt-Node
├── descriptions/ # UI-Definitionen
│ ├── column.ts ← KI-OPTIMIERT
│ ├── table.ts ├── row.ts
│ ├── view.ts ├── share.ts
│ ├── import.ts └── context.ts
├── handlers/ # Business Logic
│ ├── column.handler.ts ← KI-FRIENDLY LOGIC
│ └── *.handler.ts
├── helpers/ # Core Utilities
│ ├── api.helper.ts # HTTP + Error Handling
│ ├── data.formatter.ts # Validation
│ └── node.methods.ts # Dynamic Dropdowns
└── interfaces/ # TypeScript Types
```
## 🛠️ **Troubleshooting**
### Logging & Debugging
**🔍 Verbesserte Log-Kennzeichnung (Neu in v2.4.8)**
Alle Logs der Node sind jetzt eindeutig gekennzeichnet für besseres Grepping:
```bash
# Alle Nextcloud Tables Node Logs
grep "N8N-NEXTCLOUD-TABLES" /path/to/n8n/logs
# Nur API-Fehler
grep "N8N-NEXTCLOUD-TABLES.*API-ERROR" /path/to/n8n/logs
# Nur Validierungsfehler
grep "N8N-NEXTCLOUD-TABLES.*VALIDATION-ERROR" /path/to/n8n/logs
# Operation-spezifische Logs
grep "N8N-NEXTCLOUD-TABLES.*OPERATION-" /path/to/n8n/logs
# Resource Locator Debugging
grep "N8N-NEXTCLOUD-TABLES.*RESOURCE-VALIDATION" /path/to/n8n/logs
```
**Log-Kategorien:**
- `[N8N-NEXTCLOUD-TABLES] [DEBUG] [API-REQUEST]` - API-Anfragen
- `[N8N-NEXTCLOUD-TABLES] [DEBUG] [API-RESPONSE]` - API-Antworten
- `[N8N-NEXTCLOUD-TABLES] [INFO] [OPERATION-START]` - Operation gestartet
- `[N8N-NEXTCLOUD-TABLES] [INFO] [OPERATION-SUCCESS]` - Operation erfolgreich
- `[N8N-NEXTCLOUD-TABLES] [ERROR] [OPERATION-ERROR]` - Operation fehlgeschlagen
- `[N8N-NEXTCLOUD-TABLES] [WARN] [VALIDATION-ERROR]` - Validierungsfehler
- `[N8N-NEXTCLOUD-TABLES] [DEBUG] [RESOURCE-VALIDATION]` - Resource Locator Debugging
**Beispiel-Logs:**
```
2024-01-15T10:30:45.123Z [N8N-NEXTCLOUD-TABLES] [INFO] [OPERATION-START] table.getAll
2024-01-15T10:30:45.124Z [N8N-NEXTCLOUD-TABLES] [DEBUG] [API-REQUEST] GET /tables
2024-01-15T10:30:45.234Z [N8N-NEXTCLOUD-TABLES] [DEBUG] [API-RESPONSE] GET /tables -> 200 (110ms)
2024-01-15T10:30:45.235Z [N8N-NEXTCLOUD-TABLES] [INFO] [OPERATION-SUCCESS] table.getAll completed (112ms)
```
### Häufige Probleme
**401 Unauthorized**
✅ **Lösung**: App-Passwort verwenden, Berechtigungen prüfen
**KI-Agent kann Parameter nicht sehen**
✅ **Lösung**: KI-Friendly Operationen verwenden (`createAIFriendly`, `updateAIFriendly`)
**🚨 NaN Table ID Errors (BEHOBEN in v2.4.7)**
❌ **Symptom**: Nextcloud-Logs zeigen `table id = NaN` oder `table id = 0`
✅ **Lösung**: Update auf v2.4.7 - Robuste Resource Locator Validierung implementiert
**Filter funktionieren nicht**
✅ **Lösung**: Spalten-IDs statt Namen, korrekte Operatoren verwenden
**Column-Erstellung fehlgeschlagen**
✅ **Behoben**: Verwendet optimierte API v1 mit Query-Parametern
**Resource Locator Validation Errors**
✅ **Neu in v2.4.7**: Detaillierte Fehlermeldungen helfen bei Debugging:
```
"Resource Locator ist erforderlich aber nicht gesetzt oder ungültig"
"Ungültige ID in Resource Locator: 'undefined' ist keine gültige Zahl"
```
### Error Handling
Detaillierte Fehlermeldungen für alle HTTP-Status-Codes:
- **400-404**: Client-Fehler mit Lösungshinweisen
- **429**: Rate-Limiting mit automatischer Wiederholung
- **5xx**: Server-Fehler mit Retry-Logic
- **Resource Locator**: Spezifische Validierung und Debugging-Hilfen (v2.4.7)
## 🎯 **Roadmap**
### ✅ **Version 2.4.8 (Aktuell)**
- ✅ **Verbesserte Log-Kennzeichnung** - Eindeutige `[N8N-NEXTCLOUD-TABLES]` Präfixe
- ✅ **Strukturiertes Logging** - Debug, Info, Warn, Error Level mit Kontext
- ✅ **API-Request/Response Logging** - Detaillierte Debugging-Informationen
- ✅ **Operation-Tracking** - Start, Success, Error Logging mit Zeitstempel
- ✅ **Validation-Logging** - Resource Locator und Parameter-Validierung
- ✅ **Grep-freundliche Logs** - Einfache Filterung nach Kategorien
### ✅ **Version 2.4.7**
- 🛡️ **Kritische NaN-Bug-Fixes**: Robuste Resource Locator Validierung
- 🧹 **Production-Cleanup**: Entfernung aller Debug-Tools und Altlasten
- ⚡ **Enhanced Error Handling**: Hilfreiche Fehlermeldungen und Validierung
- 📦 **Optimierte Builds**: Saubere TypeScript-Compilation ohne Warnings
### ✅ **Version 2.4.6 (Vorgänger)**
- Vollständige KI-Agent-Optimierung
- 24 AI-Parameter mit systematischer Trennung
- Robuste Validierung und Error Handling
- Saubere UX für alle Operationen
### 🔮 **Zukünftige Versionen**
- **Weitere AI-Friendly Operationen** für andere Ressourcen
- **Erweiterte KI-Features** (Bulk-Operations, Schema-Inference)
- **Performance-Optimierungen** für große Datenmengen
- **Extended Context-Integration** mit mehr Nextcloud-Apps
## Contributing
**Beiträge willkommen!** Besonders:
- 🤖 **KI-Agent Testing**: Testen Sie die AI-friendly Operationen
- 🐛 **Bug Reports**: GitHub Issues für Probleme
- 💻 **Code**: Verbesserungen und neue Features
- 📝 **Dokumentation**: Beispiele und Best Practices
## Lizenz
MIT
## Support
- **GitHub**: [Issues & Discussions](https://github.com/terschawebIT/n8n-nodes-nextcloud-tables)
- **n8n Community**: [Community Forum](https://community.n8n.io/)
- **Documentation**: [Nextcloud Tables API](https://github.com/nextcloud/tables/blob/main/docs/API.md)
**🤖 Diese Node ist die erste KI-Agent-optimierte n8n Community Node!**
**Probieren Sie die AI-friendly Operationen aus und erleben Sie autonome Tabellen-Verwaltung.**