CodamAIDocs
Themafertig

Wenn ein Filter nicht passt

Was bei fehlendem Schlüssel, falschem Operator, unpassendem Wert, ungültiger UUID, unbekanntem Feld oder unauflösbarem Pflichtfilter passiert.

Ausprägungen
key/param fehlt → 400ungültige UUID → 400unbekanntes Feld → 400Operator passt nicht zum Feld → 400Feld eines Untertyps → erlaubtWert passt nicht zum Typ → 400Operator unbekannt → 400falsches Sortierfeld → 400parameter null → 400Pflichtfilter unauflösbar → 500

Worum es geht

Ein Filter, den CDMS nicht anwenden kann, wird nie weggelassen. Die Suche liefe sonst ohne ihn und brächte mehr Treffer, als du wolltest. CDMS kennt deshalb genau zwei Reaktionen:

Zwei Reaktionen auf einen kaputten Filter
abgelehnt
400
  • CDMS erkennt den Fehler in der Anfrage
  • messageKey nennt Ursache, Feld und oft den Wert
  • der Client muss die Anfrage korrigieren
abgebrochen
500
  • ein Sicherheitsfilter lässt sich nicht anwenden
  • unresolvable-mandatory-filter|…
  • liegt an der Konfiguration, nicht an der Anfrage

Kein kaputter Filter, aber auch abgelehnt: ein Filter oder eine Sortierung nach einem Feld, dessen Leserolle dir fehlt. Das ergibt 403 missing-permission|<rolle>. Siehe Geschützte Werte.

Alle Fälle auf einen Blick

Kaputte Filter und was CDMS daraus macht
FallBeispielAntwort
key fehlt{ "value": "x", "param": "EQ" }400 missing-search|key
param ausdrücklich null{ "key": "label", "value": "x", "param": null }400 missing-search|param
param fehlt ganz{ "key": "label", "value": "x" }kein Fehler: LIKE ist der Standard
ungültige UUID bei EQ oder MEMBEROF{ "key": "id", "value": "no-uuid", "param": "EQ" }400 wrong-uuid-in-where|no-uuid
ungültige UUID bei NEQ oder IN{ "key": "id", "value": "no-uuid", "param": "IN" }400 wrong-uuid-in-where|no-uuid
unbekanntes Feld{ "key": "nope", "value": "x", "param": "EQ" }400 unknown-search-key|nope
unbekannter Schritt im Pfad{ "key": "firma.companyname", … }400 unknown-search-key|firma.companyname
Feld, das nur ein Untertyp hatcompany in einer Suche über tenant/personerlaubt, trifft nur Zeilen dieses Untertyps
Operator passt nicht zum Feldtyplabel BEFORE, active AFTER400 unsupported-operator|label|BEFORE
unbekannter Aufzählungswert bei EQ/NEQtype EQ BOSS400 wrong-value-in-where|type|BOSS
Wahrheitswert außer true/falseactive EQ yes400 wrong-value-in-where|active|yes
value fehlt bei einem Textfeld{ "key": "label", "param": "EQ" }keine Treffer, 200
value fehlt bei einem anderen Feld{ "key": "dueOn", "param": "AFTER" }400 wrong-value-in-where|dueOn|null
Wert passt nicht zum Typamount EQ abc, dueOn EQ 10.02.2026400 wrong-value-in-where|amount|abc
unbekannter Aufzählungswert bei INtype IN CEO,BOSS400 wrong-value-in-where|type|BOSS
LIKE auf Zahlamount LIKE 1%400 like-needs-text|amount
Operator unbekannt oder kleingeschrieben"param": "eq", "param": "FOO"400 invalid-value|parameter.query.filter[0].param
MEMBEROF auf Nicht-Listelabel MEMBEROF x400 memberof-needs-collection|label
unbekanntes Sortierfeld{ "field": "nope", "order": "ASC" }400 wrong-order-element-exception
Sortierrichtung kleingeschrieben"order": "desc"400 invalid-value|parameter.order[0].order
parameter ausdrücklich null"parameter": null400 missing-parameter
Pflichtfilter nicht anwendbarAttributfilter auf ein Feld, das es nicht gibt500 unresolvable-mandatory-filter|…
Attribut für Attributfilter fehlt im ProfilProfil ohne company422 missing-attribute-on-profile|company

Wie CDMS einen Filter prüft

Drei Prüfungen, bevor ein Filter in die Datenbank geht
  1. 1
    CDMS
    sucht das Feld aus key im Modell, Schritt für Schritt durch den Pfad; bei einem abstrakten Modell auch in seinen Untertypen
  2. 2
    CDMS
    prüft, ob der Operator zum Feldtyp passt: AFTER und BEFORE gibt es für Datum, Uhrzeit und Zahlen
  3. 3
    CDMS
    wandelt den Wert in den Typ des Feldes um
  4. 4
    CDMS→Datenbank
    führt die Suche mit allen Filtern aus
    Ergebnis: Scheitert eine Prüfung, antwortet CDMS mit 400 und nennt Feld, Operator oder Wert. Die Suche läuft dann gar nicht.

Das gilt in jedem Modus, auch außerhalb des Strict Mode. Für die Filter, die immer mitlaufen, ist es ein 500: Ein Sicherheitsfilter, der sich nicht anwenden lässt, liegt an der Konfiguration, nicht an deiner Anfrage.

So findest du den Fehler

Vom Symptom zur Ursache

Wann: Die Suche liefert mehr als erwartet, vielleicht alles.

Steht in jeder Gruppe type? Ohne type ist die Gruppe ODER, siehe UND/ODER-Gruppen. Sitzt ein Filter in der falschen Gruppe? Ein Tippfehler in key ist es nicht mehr, der führt zu 400.

Ergebnis: Meist ein vergessenes type.

Wann: Die Suche liefert nichts, obwohl es passende Daten gibt.

LIKE ohne %? Leerzeichen in einer IN-Liste? Steht eine Alternative in einer UND-Gruppe statt in einer ODER-Gruppe? Oder die Daten sind für diese Person unsichtbar.

Ergebnis: Meist ein fehlendes % oder ein Sicherheitsfilter.

Wann: Antwort mit messageKey.

Der messageKey nennt Ursache, Feld und Wert, z. B. unknown-search-key|firma.companyname für einen Tippfehler im Pfad, unsupported-operator|label|BEFORE, wrong-value-in-where|dueOn|10.02.2026 oder invalid-value|parameter.query.filter[0].param für einen kleingeschriebenen Operator.

Ergebnis: Den genannten Schlüssel, Operator oder Wert korrigieren, bei Datumswerten siehe Datums- und Zeitwerte.

Wann: messageKey ist unresolvable-mandatory-filter|….

Ein Filter, der immer mitläuft, lässt sich nicht anwenden, etwa ein Attributfilter auf ein Feld, das es nicht gibt. Das liegt an der Konfiguration des Modells, nicht an deiner Anfrage.

Ergebnis: Die Modellierung prüfen lassen, siehe Filter, die immer mitlaufen.

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-persistence-database – DatabaseConditionBuilder, DatabaseOrderBuilder
  • CDMS/cdms-rest-api – CdmsExceptionMapper
  • Probe gegen cdms-integrationtest (preset, employee, company), 2026-09-21
  • CDMS/cdms-integrationtest – QueryInputError*, QueryFilterTypes*, HubQuery*
Suchen