Worum es geht
Du willst Mitarbeiter finden, deren Firma „Codamic“ heißt. Der Name steht nicht im Mitarbeiter, sondern in der Firma. Dafür schreibst du im key einen Pfad: die Namen der Beziehungen mit Punkten verbunden, am Ende das Feld.
{ "key": "company.companyname", "value": "Cod%", "param": "LIKE" }
flowchart LR
E["employee"] -->|"company"| C["company"]
C -->|"companyname"| V["'Codamic AG'"]
Wie CDMS einen Pfad auflöst
-
1CDMSzerlegt den Pfad am Punkt:
company,companyname -
2CDMS
companyist eine Beziehung → LEFT JOIN vonemployeeaufcompany -
3CDMS
companynameist das Feld am Ende → daran wird verglichen -
4CDMS→Datenbank
… FROM employee e LEFT JOIN company c … WHERE c.companyname LIKE 'Cod%'
Ein Pfad darf beliebig viele Schritte haben, z. B. customer.address.city oder order.customer.company.name. Jeder Schritt ist ein weiterer LEFT JOIN.
Warum Objekte ohne Beziehung nicht herausfallen
Beispieldaten: Daniel und Eva arbeiten bei Codamic, Anna bei Acme, Olaf hat keine Firma.
| Filter | Daniel (Codamic) | Eva (Codamic) | Anna (Acme) | Olaf (ohne Firma) | Bedeutung |
|---|---|---|---|---|---|
company.companyname LIKE Cod% | ja | ja | nein | nein | Olaf passt nicht, weil er keinen Firmennamen hat |
ODER-Gruppe: company.companyname LIKE Cod% / lastname EQ Ohne | ja | ja | nein | ja | Olaf ist dabei, der LEFT JOIN verliert ihn nicht |
company ISNULL | nein | nein | nein | ja | alle ohne Firma |
Bei einem normalen (inneren) JOIN wäre Olaf in der zweiten Zeile verloren gegangen, obwohl sein Nachname passt. Deshalb nimmt CDMS für Filter immer LEFT JOIN.
Alle Ausprägungen
Wann: Feld eines direkt referenzierten Objekts.
{ "key": "company.companyname", "value": "Codamic AG", "param": "EQ" }
Ergebnis: Mitarbeiter der Firma „Codamic AG“.
Wann: Das Feld liegt zwei oder mehr Beziehungen entfernt.
{ "key": "order.customer.city", "value": "Köln", "param": "EQ" } auf einer Rechnungsposition.
Ergebnis: Ein LEFT JOIN pro Schritt.
Wann: Du kennst die id des referenzierten Objekts.
{ "key": "company.id", "value": "a1…", "param": "EQ" }. Das ist die übliche Form für „alle Mitarbeiter dieser Firma“.
Ergebnis: Vergleich über die ID. Eine ungültige UUID liefert 400.
Wann: Du suchst Firmen, bei denen ein Mitarbeiter passt: { "key": "employees.lastname", "value": "M%", "param": "LIKE" }.
Auch eine Liste lässt sich im Pfad durchlaufen. Die Firma kommt einmal in data, egal wie viele ihrer Mitarbeiter passen. totalCount zählt dabei jeden passenden Mitarbeiter mit: Zwei passende Mitarbeiter derselben Firma ergeben totalCount 2 bei einem Objekt in data.
Ergebnis: Firmen mit mindestens einem passenden Mitarbeiter. Für „enthält diesen einen“ gibt es MEMBEROF, das jede Firma genau einmal zählt.
Wann: Ein Teil des Pfads ist falsch geschrieben, z. B. firma.companyname.
CDMS findet den Schritt nicht und lehnt die Suche ab. Sie läuft gar nicht erst.
Ergebnis: 400 unknown-search-key|firma.companyname.
Sortieren über einen Pfad
Auch in order darfst du Pfade verwenden:
"order": [ { "field": "company.companyname", "order": "ASC" } ]
Ein unbekannter Sortierpfad liefert 400 wrong-order-element-exception. Mehr unter Sortierung.