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:
null oder undefinedBeispielsweise ä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"]
["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:
Date Objekt{}). Daten als Zeichenfolgen speichern, z. B. new Date().toISOString() oder als Zahlen.{}).Map oder Set{}).0 und falseNur 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.