Dati e stato calcolato
Adobe Client Data Layer (ACDL) unisce ogni oggetto dati inviato in un singolo oggetto denominato stato calcolato. Qualsiasi script può leggere lo stato calcolato in qualsiasi momento con getState(). Puoi inviare tutti i dati contemporaneamente o in molti piccoli messaggi push da script diversi. Lo stato calcolato è lo stesso in entrambi i casi.
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" } });
Dopo questi push, adobeDataLayer.getState() restituisce il seguente oggetto:
{
"page": {
"title": "Getting started",
"language": "en"
},
"component": {
"hero-1": {
"title": "Learn more",
"link": "learn-more.html"
}
}
}
Anche gli oggetti evento possono contenere dati. ACDL unisce ogni chiave in un oggetto evento ad eccezione di event e eventInfo, che non vengono mai archiviati nello stato calcolato. Vedi Eventi.
Regole di unione merge-rules
Quando si inviano i dati, ACDL confronta ogni chiave nell’oggetto inviato con lo stato calcolato:
null o undefinedAd esempio, il secondo push seguente cambia solo page.title. La chiave page.language mantiene il valore:
adobeDataLayer.push({ page: { title: "Home", language: "en" } });
adobeDataLayer.push({ page: { title: "Products" } });
adobeDataLayer.getState("page");
// { title: "Products", language: "en" }
Elimina dati delete
Per eliminare una chiave, invia null o undefined come valore:
adobeDataLayer.push({ page: { title: "Products", language: "en" }, user: { id: "123" } });
adobeDataLayer.push({ page: { language: null }, user: null });
adobeDataLayer.getState();
// { page: { title: "Products" } }
L’eliminazione dell’ultima chiave all’interno di un oggetto lascia un oggetto vuoto. Per eliminare anche l’oggetto, invia null per l’oggetto stesso.
adobeDataLayer.push({ page: { title: null } });
adobeDataLayer.getState();
// { page: {} }
I listener che utilizzano l’opzione path vengono chiamati quando si elimina la chiave nel percorso specificato o in qualsiasi oggetto che la contiene.
Array arrays
Un array viene memorizzato come valore singolo. Quando si preme un array su una chiave che contiene già un array, ACDL sostituisce l’intero array. Per aggiungere un elemento, premi l’array completo con il nuovo elemento:
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 rimuove null e undefined voci dagli array inviati:
adobeDataLayer.push({ cart: { skus: ["a-100", null, "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "c-300"]
["c"] su ["a", "b"] si ottiene ["c", "b"]. Per ottenere lo stesso risultato in entrambe le versioni, invia sempre l’array completo.Modificare il tipo di un valore change-type
È possibile sostituire un oggetto con una stringa, un numero, un valore booleano o una matrice. Tuttavia, in ACDL 3.x, il push di un oggetto a una chiave che al momento contiene una stringa, un numero, un valore booleano o un array non sostituisce il valore. Se il valore corrente è 0, false o una stringa vuota, la chiave viene eliminata.
Per modificare un valore in un oggetto, elimina prima la chiave, quindi invia l’oggetto:
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 }
Il modo migliore per evitare questa situazione è mantenere coerente il tipo di ogni chiave nella progettazione del livello dati.
Tipi di valore value-types
Utilizza valori compatibili con JSON nel livello dati: stringhe, numeri, booleani, null, oggetti semplici e array. ACDL converte altri tipi di oggetti durante l’unione:
Date oggetto{}). Memorizzare le date come stringhe, ad esempio new Date().toISOString(), o come numeri.{}).Map o Set{}).0 e falseEffettua il push solo di oggetti semplici. ACDL rifiuta altri valori, come stringhe, numeri e array, quando li si invia direttamente. Vedere push().
Copie, non riferimenti copies
Lo stato calcolato è indipendente dagli oggetti inviati. La modifica di un oggetto dopo il push non modifica lo stato calcolato:
const page = { title: "Home" };
adobeDataLayer.push({ page: page });
page.title = "Changed";
adobeDataLayer.getState("page.title");
// "Home"
Analogamente, getState() restituisce una copia. La modifica dell’oggetto restituito non modifica il livello dati. Per modificare lo stato calcolato, invia sempre la modifica.