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:
- CDMS erkennt den Fehler in der Anfrage
messageKeynennt Ursache, Feld und oft den Wert- der Client muss die Anfrage korrigieren
- 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
| Fall | Beispiel | Antwort |
|---|---|---|
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 hat | company in einer Suche über tenant/person | erlaubt, trifft nur Zeilen dieses Untertyps |
| Operator passt nicht zum Feldtyp | label BEFORE, active AFTER | 400 unsupported-operator|label|BEFORE |
unbekannter Aufzählungswert bei EQ/NEQ | type EQ BOSS | 400 wrong-value-in-where|type|BOSS |
Wahrheitswert außer true/false | active EQ yes | 400 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 Typ | amount EQ abc, dueOn EQ 10.02.2026 | 400 wrong-value-in-where|amount|abc |
unbekannter Aufzählungswert bei IN | type IN CEO,BOSS | 400 wrong-value-in-where|type|BOSS |
LIKE auf Zahl | amount 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-Liste | label MEMBEROF x | 400 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": null | 400 missing-parameter |
| Pflichtfilter nicht anwendbar | Attributfilter auf ein Feld, das es nicht gibt | 500 unresolvable-mandatory-filter|… |
| Attribut für Attributfilter fehlt im Profil | Profil ohne company | 422 missing-attribute-on-profile|company |
Wie CDMS einen Filter prüft
-
1CDMSsucht das Feld aus
keyim Modell, Schritt für Schritt durch den Pfad; bei einem abstrakten Modell auch in seinen Untertypen -
2CDMSprüft, ob der Operator zum Feldtyp passt:
AFTERundBEFOREgibt es für Datum, Uhrzeit und Zahlen -
3CDMSwandelt den Wert in den Typ des Feldes um
-
4CDMS→Datenbankführt die Suche mit allen Filtern ausErgebnis: 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
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.