Zum Hauptinhalt springen

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.

Fehlende Filter

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.

Feldwert

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
]
Verschachtelung

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:

  1. Es kann nur die gesamte Liste überschrieben werden (PatchOperation.Set)
  2. Neue Einträge können der Liste hinzugefügt werden (PatchOperation.Append)
  3. Vorhandene Einträge können weder bearbeitet noch entfernt werden.

Einschränkung 3 kann durch die Implementierung anderer Contracts abgeschwächt werden.