Daten ändern
Um in einer flexiblen Umgebung, wie der von SodaSync Daten, in unbekannten Systemen zu aktualisieren, bedarf es gewisser Regeln und Grundsätze.
Dieses Dokument verwendet ein Beispiel, welches PatchOrdersRequest verwendet, um Daten einer Bestellung zu ändern.
Filter
Das Abfragen von Daten geschieht zum Beispiel über generische Filter, das Ändern von Daten folgt einem ähnlichen Ansatz.
Im PatchOrdersRequest
-Modell gibt es eine filters
Eigenschaft, welche die zu ändernden Bestellungen einschränkt.
(Mehr zu Filtern unter "Filter")
Wichtig hierbei ist, dass die angegebenen Filter mit einem logischen UND verknüpft werden.
Beispiel
- Erster Filter: status = OPEN
- Zweiter Filter: orderDate >= 2023-01-01
Diese Konstellation bewirkt, dass alle Bestellungen mit dem Status OPEN mit einem Bestelldatum ab dem 1.1.2023 herangezogen werden.
Damit nicht ungewollt alle Daten aktualisiert werden können, verhindert SodaSync grundsätzlich Änderungsanfragen ohne Filter.
Um gewollt alle Daten aktualisieren zu können, muss ein Filter angeben werden, welcher bewirkt, dass alle Datensätze gefunden werden. Im Beispiel einer Bestellung wäre das z.B. id ungleich leer.
Felder
Zusätzlich zu den Filtern gibt es noch eine Liste mit Feldern (fields
). In dieser Liste befinden sich alle Änderungen
für die jeweiligen Datensätze. Es gibt verschiedene Arten von Änderungen. Bspw. Set
(Setzen / Überschreiben; Standard) oder
Remove
(Wert entfernen). Die Art der Änderung ist im Feld op
(Operation) anzugeben.
Da die Feldreferenz nicht vorausgesehen oder abgeleitet werden kann, liegt für den Feldwert keine Typisierung vor.
Es wird daher strikt empfohlen, die enforce<T>(T)
Methode aus dem @soda-sync/app-sdk
zu verwenden.
Beispiel
const fields = [
{field: 'status', value: enforce<OrderStatus>('OPEN')}, // Setzt den Status auf OPEN
{field: 'status', value: enforce<OrderStatus>('OPEN'), op: PatchOperation.Set}, // Setzt ebenfalls den Status auf OPEN
{field: 'customer.vatId', op: PatchOperation.Remove}, // Entfernt die USt. ID beim Kunden
]
Sofern es sich um einfache Objekte handelt, darf in dem Feldnamen ein verschachtelter Pfad stehen.
Listen
Für Eigenschaften, welche Listen beinhalten (z.B. OrderDto.transactions
), liegen folgende Einschränkungen vor:
- Es kann nur die gesamte Liste überschrieben werden (
PatchOperation.Set
) - Neue Einträge können der Liste hinzugefügt werden (
PatchOperation.Append
) - Vorhandene Einträge können weder bearbeitet noch entfernt werden.
Einschränkung 3 kann durch die Implementierung anderer Contracts abgeschwächt werden.