Worum es geht
Mit POST {basis}/query holst du eine Liste von Objekten eines Modells, zum Beispiel alle Kunden aus Köln, sortiert nach Namen, 25 pro Seite. Der Körper hat zwei Teile:
responsesagt, welche Felder jedes Objekt in der Liste hat. Das ist dieselbe Feldauswahl wie beim Lesen, siehe Feldauswahl.parametersagt, welche Objekte in welcher Reihenfolge kommen.
Ein vollständiger Request
{
"response": ["id", "name", "city"],
"parameter": {
"query": {
"type": "AND",
"filter": [
{ "key": "city", "value": "Köln", "param": "EQ" }
],
"group": []
},
"order": [ { "field": "name", "order": "ASC" } ],
"page": 0,
"limit": 25,
"meta": true
}
}
flowchart TB
B["Körper von POST /query"] --> R["response<br/>welche Felder"]
B --> P["parameter"]
P --> Q["query<br/>welche Objekte (Filterbaum)"]
P --> O["order<br/>in welcher Reihenfolge"]
P --> S["page + limit<br/>welcher Ausschnitt"]
P --> M["meta<br/>Angaben zur Liste"]
Q --> T["type: AND oder OR"]
Q --> F["filter: einzelne Bedingungen<br/>key, value, param"]
Q --> G["group: Untergruppen<br/>wieder mit type, filter, group"]
| Teil | Bedeutung | Mehr dazu |
|---|---|---|
query.type | wie die Einträge dieser Gruppe verknüpft werden: AND oder OR | UND/ODER-Gruppen |
query.filter | einzelne Bedingungen: Feld (key), Wert (value), Operator (param) | Alle Filteroperatoren |
query.group | Untergruppen mit eigenem type | UND/ODER-Gruppen |
order | Sortierkriterien in Reihenfolge ihrer Wichtigkeit | Sortierung |
page, limit | welche Seite und wie viele Objekte pro Seite | Blättern und Trefferzahl |
meta | ob Angaben zur Liste mitkommen | Blättern und Trefferzahl |
Standardwerte
Alles in parameter darf fehlen. Dann gilt:
| Angabe | Standard | Wirkung |
|---|---|---|
parameter | leer | alle sichtbaren Objekte, keine Sortierung |
query | keiner | kein Filter vom Client |
query.type | OR | Einträge der Gruppe werden mit ODER verknüpft |
filter[].param | LIKE | Vergleich mit Suchmuster |
order | keine | Reihenfolge nicht festgelegt |
page | 0 | erste Seite, gezählt ab 0 |
limit | -1 | alle Treffer auf einmal |
meta | true | Angaben zur Liste kommen mit |
Die Antwort
POST /api/rest/crm/customer/query
{ "response": ["id", "name"],
"parameter": { "limit": 2, "order": [{ "field": "name", "order": "ASC" }] } }{
"data": [
{ "id": "5a2b…", "name": "Alt-Muster AG" },
{ "id": "7c1d…", "name": "Muster GmbH" }
],
"meta": {
"error": false,
"totalCount": 42,
"currentPage": 0,
"currentLimit": 2
}
}data ist die Liste der Objekte dieser Seite. In meta steht unter anderem totalCount, die Zahl aller Treffer über alle Seiten. Die Antwort ist gekürzt, siehe Blättern und Trefferzahl für alle Angaben in meta.
Was auf dem Weg passiert
-
1Client→CDMSschickt
responseundparameter -
2CDMSlöst die
responsein Felder auf. Fehlt sie → 400 -
3CDMSprüft die Leserolle von
customer. Fehlt sie → 403missing-permission|customer-read -
4CDMShängt deinen Filterbaum mit UND an die Filter, die immer mitlaufen: eigene Daten, Attributfilter, Pflichtfilter
-
5CDMS→Datenbankzählt die Treffer, bestimmt die Seite und liest die angeforderten Spalten
-
6CDMS→Clientliefert
dataundmeta
Die Suche braucht dieselbe Leserolle wie das Lesen eines einzelnen Objekts. Den Endpunkt gibt es nur, wenn das Modell ihn freigibt, siehe Endpunkte.
Alle Ausprägungen
Wann: Du willst alles sehen, etwa zum Ausprobieren.
{ "response": ["id", "name"] } liefert alle sichtbaren Objekte, unsortiert, ohne Seiten.
Ergebnis: Alle Treffer auf einmal. Für große Tabellen ungeeignet.
Wann: Du suchst bestimmte Objekte.
"parameter": { "query": { "type": "AND", "filter": [{ "key": "city", "value": "Köln", "param": "EQ" }] } }
Ergebnis: Nur die Kunden aus Köln.
Wann: Die Reihenfolge zählt, etwa in einer Tabelle.
"order": [{ "field": "name", "order": "ASC" }]
Ergebnis: Alphabetisch nach Namen.
Wann: Eine Tabelle zeigt 25 Zeilen pro Seite.
"page": 0, "limit": 25 für die erste Seite, "page": 1 für die zweite.
Ergebnis: Höchstens 25 Objekte, dazu totalCount für die Seitenleiste.
Wann: Produktion.
Filter mit ausdrücklichem type, Sortierung, page und limit, und in response nur die Felder, die die Oberfläche zeigt.
Ergebnis: Stabil, schnell und vorhersehbar.