Anti-Pattern §25 + DOJO §5 Warnung: conditionType ist Pflicht
POST /rest/orders/search ignoriert den fields-Array komplett wenn
conditionType ('and' oder 'or') fehlt. Kein Fehler, HTTP 200, stille
Verschluckung — die Suche liefert dann den vollen Auftragsbestand.
Entdeckt 2026-06-01 beim Fulfilment-Sync-Umbau (ServerShop24, PID 7843):
sechs verschiedene statusId-Filter-Schreibweisen gaben alle 496.410
Treffer zurück. Nach Ergänzung von conditionType:'and' wirkten alle
korrekt (1-7744 Treffer je nach Bedingung).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -374,3 +374,52 @@ const rows = Array.isArray(data) ? data
|
|||||||
Oder einen `findFirstArray()`-Helper. **Siehe DOJO #37, #38**
|
Oder einen `findFirstArray()`-Helper. **Siehe DOJO #37, #38**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 25. `POST /rest/orders/search` ohne `conditionType` aufrufen
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// FALSCH — wirkt wie KEIN Filter, gibt alle 500.000+ Aufträge zurück
|
||||||
|
const data = await api.search('/rest/orders/search', {
|
||||||
|
page: 1, itemsPerPage: 250,
|
||||||
|
fields: [{ field: 'statusId', operator: 'eq', value: 5.1 }],
|
||||||
|
});
|
||||||
|
// → totalsCount: 496410 (kompletter Bestand!)
|
||||||
|
|
||||||
|
// RICHTIG — Filter werden korrekt AND-verknüpft angewendet
|
||||||
|
const data = await api.search('/rest/orders/search', {
|
||||||
|
page: 1, itemsPerPage: 250,
|
||||||
|
conditionType: 'and', // ⚠️ PFLICHT — sonst werden fields ignoriert
|
||||||
|
fields: [{ field: 'statusId', operator: 'eq', value: 5.1 }],
|
||||||
|
});
|
||||||
|
// → totalsCount: 1 (korrekt gefiltert)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Problem:** Ohne `conditionType: 'and'` (oder `'or'`) wird der gesamte
|
||||||
|
`fields`-Array von Plenty **stumm ignoriert**. Kein Fehler, HTTP 200, kein
|
||||||
|
Hinweis in der Response — nur das Filterergebnis ist falsch. Symptom: jede
|
||||||
|
Pagination zieht die kompletten 1.578 Seiten Auftragshistorie statt der
|
||||||
|
erwarteten Treffer.
|
||||||
|
|
||||||
|
**Beweis:** Sechs Filtervarianten (eq/lt/in/Range) ergaben alle dieselben
|
||||||
|
496.410 Treffer wie ein Call ganz ohne Filter. Sobald `conditionType: 'and'`
|
||||||
|
ergänzt wurde, wirkten die Filter korrekt (1, 3, 91, 7.744 Treffer je nach
|
||||||
|
Bedingung).
|
||||||
|
|
||||||
|
**Fix:** Immer `conditionType` setzen, selbst bei nur einem Filter. Beim
|
||||||
|
Erstellen eines Search-Bodys folgendes Pattern verwenden:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const body = {
|
||||||
|
page: 1, itemsPerPage: 250,
|
||||||
|
conditionType: 'and', // immer setzen, nicht vergessen
|
||||||
|
fields: [...],
|
||||||
|
with: [...],
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Entdeckt:** 2026-06-01 beim Aufbau eines doppelten Boden-Syncs für
|
||||||
|
Fulfilment (ServerShop24, PID 7843). Erste Smoke-Tests deuteten auf einen
|
||||||
|
kaputten Filter — der echte Bug war das fehlende `conditionType`.
|
||||||
|
**Siehe DOJO.md §5.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
@@ -148,6 +148,15 @@ const data = await client.search('/rest/orders/search', {
|
|||||||
|
|
||||||
**Operatoren:** `gte` (>=), `gt` (>), `lte` (<=), `lt` (<), `eq` (=), `in` (in Array).
|
**Operatoren:** `gte` (>=), `gt` (>), `lte` (<=), `lt` (<), `eq` (=), `in` (in Array).
|
||||||
|
|
||||||
|
**⚠️ Achtung — `conditionType` darf nicht fehlen:** Ohne `conditionType: 'and'`
|
||||||
|
(oder `'or'`) wird der **gesamte `fields`-Array stumm ignoriert**. Plenty
|
||||||
|
antwortet mit HTTP 200, ohne Fehler, ohne Warnung — aber die Suche liefert
|
||||||
|
alle Aufträge, als wäre kein Filter gesetzt. Siehe **ANTI-PATTERNS.md §25**.
|
||||||
|
|
||||||
|
Status-Filter sind besonders davon betroffen, weil das Symptom („Suche
|
||||||
|
gibt zu viele Treffer") leicht als „Filter funktioniert nicht" fehlinterpretiert
|
||||||
|
wird — der wahre Bug ist eine Zeile höher.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. With-Parameter: Was man wirklich braucht
|
## 6. With-Parameter: Was man wirklich braucht
|
||||||
|
|||||||
Reference in New Issue
Block a user