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
1,034 lines • 41.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.rowFields = exports.rowOperations = void 0;
exports.rowOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['row'],
},
},
options: [
{
name: 'Alle Zeilen Abrufen',
value: 'getAll',
description: 'Alle Zeilen einer Tabelle oder View abrufen',
action: 'Alle Zeilen abrufen',
},
{
name: 'Zeile Abrufen',
value: 'get',
description: 'Eine spezifische Zeile abrufen',
action: 'Zeile abrufen',
},
{
name: 'Zeile Erstellen',
value: 'create',
description: 'Eine neue Zeile erstellen',
action: 'Zeile erstellen',
},
{
name: 'Zeile Erstellen (KI-Friendly)',
value: 'createAIFriendly',
description: 'Eine neue Zeile erstellen - optimiert für KI Agents',
action: 'Zeile erstellen (KI-Friendly)',
},
{
name: 'Alle Zeilen Abrufen (KI-Friendly)',
value: 'getAllAIFriendly',
description: 'Zeilen mit erweiterten Filter/Sortierung-Optionen - optimiert für KI Agents',
action: 'Alle Zeilen abrufen (KI-Friendly)',
},
{
name: 'Zeile Aktualisieren',
value: 'update',
description: 'Eine Zeile aktualisieren',
action: 'Zeile aktualisieren',
},
{
name: 'Zeile Aktualisieren (KI-Friendly)',
value: 'updateAIFriendly',
description: 'Eine Zeile aktualisieren - optimiert für KI Agents',
action: 'Zeile aktualisieren (KI-Friendly)',
},
],
default: 'getAll',
},
];
exports.rowFields = [
// ==============================================
// KI-FRIENDLY OPERATIONS - Alle Parameter verfügbar
// ==============================================
// Quelle für AI-Friendly Operationen
{
displayName: 'Datenquelle (AI-Friendly)',
name: 'sourceConfig',
type: 'fixedCollection',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['createAIFriendly', 'getAllAIFriendly', 'updateAIFriendly'],
},
},
default: {},
options: [
{
displayName: 'Quelle',
name: 'source',
values: [
{
displayName: 'Quell-Typ',
name: 'type',
type: 'string',
required: true,
default: 'table',
description: 'Wählen Sie ob Sie mit einer Tabelle oder View arbeiten. Gültige Werte: "table" (Tabelle), "view" (View)',
placeholder: 'table',
},
{
displayName: 'Tabellen-ID',
name: 'tableId',
type: 'string',
default: '',
description: 'Die ID der Tabelle (nur wenn Typ = "table")',
placeholder: '123',
},
{
displayName: 'View-ID',
name: 'viewId',
type: 'string',
default: '',
description: 'Die ID der View (nur wenn Typ = "view")',
placeholder: '456',
},
],
},
],
description: 'Konfiguration der Datenquelle für die Operation',
},
// Zeilen-Daten für createAIFriendly
{
displayName: 'Zeilen-Daten (AI-Friendly)',
name: 'rowDataConfig',
type: 'fixedCollection',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['createAIFriendly'],
},
},
default: {},
options: [
{
displayName: 'Daten',
name: 'data',
values: [
{
displayName: 'Spalten-Daten',
name: 'columns',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Spalte hinzufügen',
default: {},
options: [
{
displayName: 'Spalte',
name: 'column',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'string',
required: true,
default: '',
description: 'Die ID der Spalte',
placeholder: '1',
},
{
displayName: 'Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der Wert für diese Spalte',
placeholder: 'Wert eingeben...',
},
],
},
],
description: 'Die Spalten-Daten für die neue Zeile',
},
],
},
],
description: 'Konfiguration der Zeilen-Daten',
},
// Update-Daten für updateAIFriendly
{
displayName: 'Update-Daten (AI-Friendly)',
name: 'updateDataConfig',
type: 'fixedCollection',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['updateAIFriendly'],
},
},
default: {},
options: [
{
displayName: 'Update-Konfiguration',
name: 'update',
values: [
{
displayName: 'Zeilen-ID',
name: 'rowId',
type: 'string',
required: true,
default: '',
description: 'Die ID der zu aktualisierenden Zeile',
placeholder: '123',
},
{
displayName: 'Tabellen-ID',
name: 'tableId',
type: 'string',
required: true,
default: '',
description: 'Die ID der Tabelle (erforderlich für API-Pfad)',
placeholder: '456',
},
{
displayName: 'Spalten-Daten',
name: 'columns',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Spalte hinzufügen',
default: {},
options: [
{
displayName: 'Spalte',
name: 'column',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'string',
required: true,
default: '',
description: 'Die ID der Spalte',
placeholder: '1',
},
{
displayName: 'Neuer Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der neue Wert für diese Spalte',
placeholder: 'Neuer Wert...',
},
],
},
],
description: 'Die zu aktualisierenden Spalten-Daten',
},
],
},
],
description: 'Konfiguration für Zeilen-Update',
},
// Query-Optionen für getAllAIFriendly
{
displayName: 'Abfrage-Optionen (AI-Friendly)',
name: 'queryConfig',
type: 'fixedCollection',
displayOptions: {
show: {
resource: ['row'],
operation: ['getAllAIFriendly'],
},
},
default: {},
options: [
{
displayName: 'Abfrage-Konfiguration',
name: 'query',
values: [
{
displayName: 'Pagination',
name: 'pagination',
type: 'fixedCollection',
default: {},
options: [
{
displayName: 'Pagination-Einstellungen',
name: 'settings',
values: [
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'Maximale Anzahl Zeilen',
},
{
displayName: 'Offset',
name: 'offset',
type: 'number',
default: 0,
description: 'Anzahl zu überspringender Zeilen',
},
],
},
],
description: 'Pagination-Einstellungen',
},
{
displayName: 'Filter',
name: 'filters',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Filter hinzufügen',
default: {},
options: [
{
displayName: 'Filter-Regel',
name: 'filter',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'string',
required: true,
default: '',
description: 'Die ID der zu filternden Spalte',
placeholder: '1',
},
{
displayName: 'Operator',
name: 'operator',
type: 'options',
options: [
{
name: 'Gleich (=)',
value: 'equals',
description: 'Exakte Übereinstimmung',
},
{
name: 'Ungleich (!=)',
value: 'not_equals',
description: 'Nicht gleich',
},
{
name: 'Größer (>)',
value: 'greater_than',
description: 'Größer als',
},
{
name: 'Größer gleich (>=)',
value: 'greater_equal',
description: 'Größer oder gleich',
},
{
name: 'Kleiner (<)',
value: 'less_than',
description: 'Kleiner als',
},
{
name: 'Kleiner gleich (<=)',
value: 'less_equal',
description: 'Kleiner oder gleich',
},
{
name: 'Enthält (LIKE)',
value: 'contains',
description: 'Text enthält Begriff',
},
{
name: 'Beginnt mit',
value: 'starts_with',
description: 'Text beginnt mit',
},
{
name: 'Endet mit',
value: 'ends_with',
description: 'Text endet mit',
},
{
name: 'Ist leer',
value: 'is_empty',
description: 'Feld ist leer',
},
{
name: 'Ist nicht leer',
value: 'is_not_empty',
description: 'Feld hat einen Wert',
},
],
default: 'equals',
description: 'Der Filter-Operator',
},
{
displayName: 'Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der Filter-Wert',
placeholder: 'Filter-Wert...',
},
],
},
],
description: 'Filter-Regeln für die Abfrage',
},
{
displayName: 'Sortierung',
name: 'sorting',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Sortierung hinzufügen',
default: {},
options: [
{
displayName: 'Sortier-Regel',
name: 'sort',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'string',
required: true,
default: '',
description: 'Die ID der zu sortierenden Spalte',
placeholder: '1',
},
{
displayName: 'Richtung',
name: 'direction',
type: 'options',
options: [
{
name: 'Aufsteigend (A-Z, 1-9)',
value: 'ASC',
description: 'Von klein zu groß',
},
{
name: 'Absteigend (Z-A, 9-1)',
value: 'DESC',
description: 'Von groß zu klein',
},
],
default: 'ASC',
description: 'Die Sortierrichtung',
},
],
},
],
description: 'Sortier-Regeln für die Abfrage',
},
{
displayName: 'Suche',
name: 'search',
type: 'fixedCollection',
default: {},
options: [
{
displayName: 'Such-Einstellungen',
name: 'settings',
values: [
{
displayName: 'Suchbegriff',
name: 'term',
type: 'string',
default: '',
description: 'Der Suchbegriff',
placeholder: 'Suchbegriff...',
},
{
displayName: 'Spalten-IDs für Suche',
name: 'columns',
type: 'string',
default: '',
description: 'Spalten-IDs durch Komma getrennt (leer = alle)',
placeholder: '1,3,5',
},
{
displayName: 'Groß-/Kleinschreibung beachten',
name: 'caseSensitive',
type: 'boolean',
default: false,
description: 'Ob Groß-/Kleinschreibung beachtet wird',
},
],
},
],
description: 'Such-Konfiguration',
},
],
},
],
description: 'Erweiterte Abfrage-Optionen für Zeilen-Abruf',
},
// ==============================================
// ORIGINAL OPERATIONS - Für normale UI Nutzer
// ==============================================
// Node Collection für getAll, create
{
displayName: 'Quelle',
name: 'nodeCollection',
type: 'options',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll', 'create'],
},
},
options: [
{
name: 'Tabelle',
value: 'tables',
description: 'Zeilen direkt aus einer Tabelle abrufen/erstellen',
},
{
name: 'View',
value: 'views',
description: 'Zeilen aus einer View abrufen/erstellen',
},
],
default: 'tables',
description: 'Wählen Sie aus, ob Sie mit einer Tabelle oder View arbeiten möchten',
},
// Tabellen-ID für tables nodeCollection
{
displayName: 'Tabelle',
name: 'tableId',
type: 'resourceLocator',
default: { mode: 'list', value: '' },
required: true,
description: 'Wählen Sie eine Tabelle aus der Liste oder geben Sie deren ID an',
modes: [
{
displayName: 'Liste',
name: 'list',
type: 'list',
typeOptions: {
searchListMethod: 'getTables',
searchable: true,
searchFilterRequired: false,
},
},
{
displayName: 'ID',
name: 'id',
type: 'string',
placeholder: 'Tabellen-ID',
validation: [
{
type: 'regex',
properties: {
regex: '^[0-9]+$',
errorMessage: 'Bitte eine gültige Tabellen-ID (Zahl) eingeben',
},
},
],
},
],
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll', 'create'],
nodeCollection: ['tables'],
},
},
},
// View-ID für views nodeCollection
{
displayName: 'View',
name: 'viewId',
type: 'resourceLocator',
default: { mode: 'list', value: '' },
required: true,
description: 'Wählen Sie eine View aus der Liste oder geben Sie deren ID an',
modes: [
{
displayName: 'Liste',
name: 'list',
type: 'list',
typeOptions: {
searchListMethod: 'getViews',
searchable: true,
searchFilterRequired: false,
},
},
{
displayName: 'ID',
name: 'id',
type: 'string',
placeholder: 'View-ID',
validation: [
{
type: 'regex',
properties: {
regex: '^[0-9]+$',
errorMessage: 'Bitte eine gültige View-ID (Zahl) eingeben',
},
},
],
},
],
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll', 'create'],
nodeCollection: ['views'],
},
},
},
// Daten für create - DIREKT nach Tabellen-Auswahl!
{
displayName: 'Zeilen-Daten',
name: 'data',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Spalte hinzufügen',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['create'],
},
},
default: {},
options: [
{
displayName: 'Spalte',
name: 'column',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getColumns',
},
default: '',
description: 'Die ID der Spalte',
},
{
displayName: 'Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der Wert für diese Spalte',
typeOptions: {
canBeExpression: true,
},
},
],
},
],
description: 'Die Daten für die neue Zeile',
},
// Zeilen-ID für get, update
{
displayName: 'Zeilen-ID',
name: 'rowId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['row'],
operation: ['get', 'update'],
},
},
default: '',
description: 'Die ID der Zeile',
placeholder: '123',
typeOptions: {
canBeExpression: true,
},
},
// Tabellen-ID für get, update (benötigt für API-Pfad)
{
displayName: 'Tabelle',
name: 'tableId',
type: 'resourceLocator',
default: { mode: 'list', value: '' },
required: true,
description: 'Die Tabelle, die die Zeile enthält',
modes: [
{
displayName: 'Liste',
name: 'list',
type: 'list',
typeOptions: {
searchListMethod: 'getTables',
searchable: true,
searchFilterRequired: false,
},
},
{
displayName: 'ID',
name: 'id',
type: 'string',
placeholder: 'Tabellen-ID',
validation: [
{
type: 'regex',
properties: {
regex: '^[0-9]+$',
errorMessage: 'Bitte eine gültige Tabellen-ID (Zahl) eingeben',
},
},
],
},
],
displayOptions: {
show: {
resource: ['row'],
operation: ['get', 'update'],
},
},
},
// Daten für update
{
displayName: 'Zeilen-Daten Aktualisieren',
name: 'data',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
placeholder: 'Spalte hinzufügen',
displayOptions: {
show: {
resource: ['row'],
operation: ['update'],
},
},
default: {},
options: [
{
displayName: 'Spalte',
name: 'column',
values: [
{
displayName: 'Spalten-ID',
name: 'columnId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getColumns',
},
default: '',
description: 'Die ID der Spalte',
},
{
displayName: 'Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der neue Wert für diese Spalte',
typeOptions: {
canBeExpression: true,
},
},
],
},
],
description: 'Die zu aktualisierenden Daten',
},
// ============ AB HIER: NUR FÜR getAll ============
// Zusätzliche Optionen für getAll - NUR FÜR getAll!
{
displayName: 'Zusätzliche Optionen',
name: 'additionalOptions',
type: 'collection',
placeholder: 'Option hinzufügen',
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll'], // NUR für getAll!
},
},
default: {},
options: [
{
displayName: 'Limit',
name: 'limit',
type: 'number',
typeOptions: {
minValue: 1,
maxValue: 1000,
},
default: 50,
description: 'Maximale Anzahl der zurückgegebenen Zeilen',
hint: 'Empfohlen: 50-200 für optimale Performance. Maximum: 1000 Zeilen pro Anfrage.',
},
{
displayName: 'Offset',
name: 'offset',
type: 'number',
typeOptions: {
minValue: 0,
},
default: 0,
description: 'Anzahl der zu überspringenden Zeilen (für Pagination)',
hint: 'Für Seite 2 mit Limit 50: Offset = 50. Für Seite 3: Offset = 100.',
},
{
displayName: 'Filter aktivieren',
name: 'useFilters',
type: 'boolean',
default: false,
description: 'Ob Filter angewendet werden sollen',
hint: 'Aktivieren Sie Filter um nur bestimmte Zeilen basierend auf Spalten-Werten abzurufen.',
},
{
displayName: 'Sortierung aktivieren',
name: 'useSorting',
type: 'boolean',
default: false,
description: 'Ob Sortierung angewendet werden soll',
hint: 'Sortieren Sie Zeilen nach einer oder mehreren Spalten (erste Regel hat höchste Priorität).',
},
{
displayName: 'Suche aktivieren',
name: 'useSearch',
type: 'boolean',
default: false,
description: 'Ob Textsuche angewendet werden soll',
hint: 'Durchsuchen Sie Text-Spalten nach bestimmten Begriffen.',
},
],
},
// Filter-Konfiguration - NUR FÜR getAll!
{
displayName: 'Filter (aktiviert wenn "Filter aktivieren" gesetzt ist)',
name: 'filters',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
placeholder: 'Filter hinzufügen',
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll'], // NUR für getAll!
},
},
options: [
{
displayName: 'Filter-Regel',
name: 'filter',
values: [
{
displayName: 'Spalte',
name: 'columnId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getColumns',
},
default: '',
description: 'Die zu filternde Spalte',
hint: 'Wählen Sie die Spalte aus, auf die der Filter angewendet werden soll.',
},
{
displayName: 'Operator',
name: 'operator',
type: 'options',
default: 'equals',
description: 'Der Filter-Operator',
hint: 'Wählen Sie den Vergleichsoperator für den Filter.',
options: [
{
name: 'Gleich (=)',
value: 'equals',
description: 'Exakte Übereinstimmung - findet nur genau den angegebenen Wert',
},
{
name: 'Ungleich (!=)',
value: 'not_equals',
description: 'Nicht gleich - findet alle Werte außer dem angegebenen',
},
{
name: 'Größer (>)',
value: 'greater_than',
description: 'Größer als - für Zahlen und Daten',
},
{
name: 'Größer gleich (>=)',
value: 'greater_equal',
description: 'Größer oder gleich - für Zahlen und Daten',
},
{
name: 'Kleiner (<)',
value: 'less_than',
description: 'Kleiner als - für Zahlen und Daten',
},
{
name: 'Kleiner gleich (<=)',
value: 'less_equal',
description: 'Kleiner oder gleich - für Zahlen und Daten',
},
{
name: 'Enthält (LIKE)',
value: 'contains',
description: 'Text enthält den angegebenen Begriff (Groß-/Kleinschreibung wird ignoriert)',
},
{
name: 'Beginnt mit',
value: 'starts_with',
description: 'Text beginnt mit dem angegebenen Begriff',
},
{
name: 'Endet mit',
value: 'ends_with',
description: 'Text endet mit dem angegebenen Begriff',
},
{
name: 'Ist leer',
value: 'is_empty',
description: 'Feld ist leer, null oder nicht gesetzt',
},
{
name: 'Ist nicht leer',
value: 'is_not_empty',
description: 'Feld hat einen Wert (nicht leer, null oder nicht gesetzt)',
},
],
},
{
displayName: 'Wert',
name: 'value',
type: 'string',
default: '',
description: 'Der Filter-Wert (leer lassen für Operatoren "ist leer" und "ist nicht leer")',
hint: 'Für Zahlen: "42", für Daten: "2024-01-01" oder "2024-01-01T10:00:00Z", für Text: beliebiger Text. Bei "ist leer"/"ist nicht leer" dieses Feld leer lassen.',
placeholder: 'Filter-Wert eingeben...',
},
],
},
],
description: 'Filter-Regeln für die Zeilen-Abfrage',
},
// Sortierung-Konfiguration - NUR FÜR getAll!
{
displayName: 'Sortierung (aktiviert wenn "Sortierung aktivieren" gesetzt ist)',
name: 'sorting',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
placeholder: 'Sortierung hinzufügen',
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll'], // NUR für getAll!
},
},
options: [
{
displayName: 'Sortier-Regel',
name: 'sort',
values: [
{
displayName: 'Spalte',
name: 'columnId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getColumns',
},
default: '',
description: 'Die zu sortierende Spalte',
hint: 'Wählen Sie die Spalte für die Sortierung. Bei mehreren Regeln hat die erste höchste Priorität.',
},
{
displayName: 'Richtung',
name: 'direction',
type: 'options',
default: 'ASC',
description: 'Sortier-Richtung',
hint: 'ASC = A-Z, 1-9, älteste zuerst. DESC = Z-A, 9-1, neueste zuerst.',
options: [
{
name: 'Aufsteigend (A-Z, 1-9)',
value: 'ASC',
description: 'Alphabetisch A-Z, numerisch 1-9, Datum alt zu neu',
},
{
name: 'Absteigend (Z-A, 9-1)',
value: 'DESC',
description: 'Alphabetisch Z-A, numerisch 9-1, Datum neu zu alt',
},
],
},
],
},
],
description: 'Sortier-Regeln für die Zeilen-Abfrage (erste Regel hat höchste Priorität)',
},
// Suche-Konfiguration - NUR FÜR getAll!
{
displayName: 'Suche (aktiviert wenn "Suche aktivieren" gesetzt ist)',
name: 'search',
type: 'collection',
placeholder: 'Suche konfigurieren',
default: {},
displayOptions: {
show: {
resource: ['row'],
operation: ['getAll'], // NUR für getAll!
},
},
options: [
{
displayName: 'Suchbegriff',
name: 'term',
type: 'string',
default: '',
description: 'Der Suchbegriff (durchsucht alle Text-Spalten)',
hint: 'Geben Sie einen Begriff ein, der in den Text-Spalten gesucht werden soll.',
placeholder: 'z.B. "München" oder "projekt"',
},
{
displayName: 'Nur spezifische Spalten durchsuchen',
name: 'searchColumns',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getColumns',
},
default: [],
description: 'Nur diese Spalten durchsuchen (leer = alle Text-Spalten)',
hint: 'Lassen Sie dies leer um alle Text-Spalten zu durchsuchen, oder wählen Sie spezifische Spalten.',
},
{
displayName: 'Groß-/Kleinschreibung beachten',
name: 'caseSensitive',
type: 'boolean',
default: false,
description: 'Ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll',
hint: 'Deaktiviert: "München" findet auch "münchen". Aktiviert: nur exakte Schreibweise.',
},
],
description: 'Volltext-Suche in den Zeilen-Daten',
},
];
//# sourceMappingURL=row.js.map