Daten und der berechnete Status

Die Adobe Client-Datenschicht (ACDL) führt jedes Datenobjekt, das Sie per Push übertragen, in einem einzigen Objekt zusammen, das als "" bezeichnet. Jedes Skript kann den berechneten Status jederzeit mit getState() lesen. Sie können alle Ihre Daten auf einmal oder in vielen kleinen Push-Benachrichtigungen aus verschiedenen Skripten übertragen. Der berechnete Status ist in beiden Fällen gleich.

window.adobeDataLayer = window.adobeDataLayer || [];
window.adobeDataLayer.push({ page: { title: "Getting started" } });
window.adobeDataLayer.push({ component: { "hero-1": { title: "Learn more", link: "learn-more.html" } } });
window.adobeDataLayer.push({ page: { language: "en" } });

Nach diesen Push-Vorgängen gibt adobeDataLayer.getState() das folgende Objekt zurück:

{
  "page": {
    "title": "Getting started",
    "language": "en"
  },
  "component": {
    "hero-1": {
      "title": "Learn more",
      "link": "learn-more.html"
    }
  }
}

Ereignisobjekte können auch Daten enthalten. ACDL führt alle Schlüssel in einem Ereignisobjekt zusammen, mit Ausnahme von event und eventInfo, die nie im berechneten Status gespeichert werden. Siehe Ereignisse.

Regeln zusammenführen merge-rules

Wenn Sie Daten per Push übertragen, vergleicht ACDL jede Taste des gepushten Objekts mit dem berechneten Status:

Wert per Push übertragen
Ergebnis im berechneten Status
Ein Schlüssel, der im berechneten Status nicht vorhanden ist
Fügt den Schlüssel und seinen Wert hinzu.
Ein Objekt, bei dem der berechnete Status auch ein Objekt enthält
Führt die beiden Objekte zusammen. Schlüssel, die Sie nicht drücken, behalten ihre aktuellen Werte bei. Diese Regel gilt für alle Verschachtelungsebenen.
Eine Zeichenfolge, eine Zahl oder ein boolescher Wert
Ersetzt den aktuellen Wert.
Als Array
Ersetzt den aktuellen Wert. Siehe Arrays.
null oder undefined
Löscht den Schlüssel. Siehe Daten löschen.

Beispielsweise ändert sich mit der zweiten Push-Benachrichtigung nur page.title. Der page.language-Schlüssel behält seinen Wert:

adobeDataLayer.push({ page: { title: "Home", language: "en" } });
adobeDataLayer.push({ page: { title: "Products" } });
adobeDataLayer.getState("page");
// { title: "Products", language: "en" }

Daten löschen delete

Um einen Schlüssel zu löschen, drücken Sie null oder undefined als Wert:

adobeDataLayer.push({ page: { title: "Products", language: "en" }, user: { id: "123" } });
adobeDataLayer.push({ page: { language: null }, user: null });
adobeDataLayer.getState();
// { page: { title: "Products" } }

Wenn Sie den letzten Schlüssel in einem -Objekt löschen, bleibt das -Objekt leer. Um auch das -Objekt zu löschen, drücken Sie null für das -Objekt selbst.

adobeDataLayer.push({ page: { title: null } });
adobeDataLayer.getState();
// { page: {} }

Listener, die die Option path verwenden, werden aufgerufen, wenn Sie den Schlüssel unter diesem Pfad oder ein beliebiges Objekt, das ihn enthält, löschen.

Arrays arrays

Ein Array wird als einzelner Wert gespeichert. Wenn Sie ein Array auf einen Schlüssel pushen, der bereits ein Array enthält, ersetzt ACDL das gesamte Array. Um ein Element hinzuzufügen, übergeben Sie das vollständige Array mit dem neuen Element:

adobeDataLayer.push({ cart: { skus: ["a-100", "b-200"] } });
adobeDataLayer.push({ cart: { skus: ["a-100", "b-200", "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "b-200", "c-300"]

ACDL entfernt null- und undefined-Einträge aus Arrays, die Sie per Push übertragen:

adobeDataLayer.push({ cart: { skus: ["a-100", null, "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "c-300"]
NOTE
ACDL 2.x führt Arrays nach Position zusammen, anstatt sie zu ersetzen. In 2.x führt das Überschieben von ["c"] über ["a", "b"] zu ["c", "b"]. Um in beiden Versionen dasselbe Ergebnis zu erhalten, senden Sie immer das vollständige Array.

Typ eines Werts ändern change-type

Sie können ein Objekt durch eine Zeichenfolge, eine Zahl, einen booleschen Wert oder ein Array ersetzen. In ACDL 3.x ersetzt jedoch das Pushen eines -Objekts auf einen Schlüssel, der derzeit eine Zeichenfolge, eine Zahl, einen booleschen Wert oder ein Array enthält, nicht den Wert . Wenn der aktuelle Wert 0, false oder eine leere Zeichenfolge ist, wird stattdessen der Schlüssel gelöscht.

Um einen Wert in ein -Objekt zu ändern, löschen Sie zuerst den Schlüssel und drücken dann das -Objekt:

adobeDataLayer.push({ product: "a-100" });
adobeDataLayer.push({ product: null });
adobeDataLayer.push({ product: { sku: "a-100", price: 25 } });
adobeDataLayer.getState("product");
// { sku: "a-100", price: 25 }

Die beste Möglichkeit, diese Situation zu vermeiden, besteht darin, den Typ jedes Schlüssels in Ihrem Datenschichtdesign konsistent zu halten.

Werttypen value-types

Verwenden Sie JSON-kompatible Werte in der Datenschicht: Zeichenfolgen, Zahlen, boolesche Werte, null, einfache Objekte und Arrays. ACDL konvertiert andere Arten von Objekten, während es sie zusammenführt:

Wert
Gespeichert als
Date Objekt
Ein leeres Objekt ({}). Daten als Zeichenfolgen speichern, z. B. new Date().toISOString() oder als Zahlen.
Funktion
Ein leeres Objekt ({}).
Map oder Set
Ein leeres Objekt ({}).
Eine Instanz einer Klasse
Ein einfaches -Objekt, das nur die eigenen aufzählbaren Eigenschaften der Instanz enthält.
Leere Objekte, leere Arrays, leere Zeichenfolgen, 0 und false
Unverändert gespeichert.

Nur einfache Objekte per Push übertragen. ACDL lehnt andere Werte wie Zeichenfolgen, Zahlen und Arrays ab, wenn Sie sie direkt übertragen. Siehe push().

Kopien, keine Verweise copies

Der berechnete Status ist unabhängig von den Objekten, die Sie per Push übertragen. Wenn Sie ein Objekt nach dem Pushen ändern, ändert sich der berechnete Status nicht:

const page = { title: "Home" };
adobeDataLayer.push({ page: page });
page.title = "Changed";
adobeDataLayer.getState("page.title");
// "Home"

In ähnlicher Weise gibt getState() eine Kopie zurück. Durch Ändern des zurückgegebenen -Objekts wird die Datenschicht nicht geändert. Um den berechneten Status zu ändern, drücken Sie immer die Änderung.

recommendation-more-help
experience-platform-help-collection