Données et état calculé
La couche de données client Adobe (ACDL) fusionne chaque objet de données que vous poussez dans un seul objet appelé état calculé. Tout script peut lire l’état calculé à tout moment avec getState(). Vous pouvez transmettre toutes vos données en une seule fois ou dans de nombreuses petites transmissions à partir de différents scripts. L’état calculé est le même dans les deux cas.
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" } });
Après ces notifications push, adobeDataLayer.getState() renvoie l’objet suivant :
{
"page": {
"title": "Getting started",
"language": "en"
},
"component": {
"hero-1": {
"title": "Learn more",
"link": "learn-more.html"
}
}
}
Les objets Événement peuvent également transporter des données. L’ACDL fusionne chaque clé d’un objet événement, à l’exception de event et eventInfo, qui ne sont jamais stockés à l’état calculé. Voir Événements.
Règles de fusion merge-rules
Lorsque vous poussez des données, ACDL compare chaque clé de l’objet poussé à l’état calculé :
null ou undefined.Par exemple, la deuxième notification push ci-dessous modifie uniquement page.title. La clé page.language conserve sa valeur :
adobeDataLayer.push({ page: { title: "Home", language: "en" } });
adobeDataLayer.push({ page: { title: "Products" } });
adobeDataLayer.getState("page");
// { title: "Products", language: "en" }
Supprimer les données delete
Pour supprimer une clé, appuyez sur null ou undefined comme valeur :
adobeDataLayer.push({ page: { title: "Products", language: "en" }, user: { id: "123" } });
adobeDataLayer.push({ page: { language: null }, user: null });
adobeDataLayer.getState();
// { page: { title: "Products" } }
La suppression de la dernière clé dans un objet laisse un objet vide. Pour supprimer également l’objet , appuyez sur null pour l’objet lui-même.
adobeDataLayer.push({ page: { title: null } });
adobeDataLayer.getState();
// { page: {} }
Les listeners qui utilisent l’option path sont appelés lorsque vous supprimez la clé de ce chemin d’accès ou de tout objet qui la contient.
Tableaux arrays
Un tableau est stocké en tant que valeur unique. Lorsque vous poussez un tableau vers une clé qui en contient déjà un, ACDL remplace l’ensemble du tableau. Pour ajouter un élément, poussez le tableau complet avec le nouvel élément :
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 supprime les entrées null et undefined des tableaux que vous poussez :
adobeDataLayer.push({ cart: { skus: ["a-100", null, "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "c-300"]
["c"] sur ["a", "b"] entraîne ["c", "b"]. Pour obtenir le même résultat dans les deux versions, utilisez toujours le tableau complet.Modification du type d’une valeur change-type
Vous pouvez remplacer un objet par une chaîne, un nombre, une valeur booléenne ou un tableau. Cependant, dans ACDL 3.x, le fait de pousser un objet vers une clé qui contient actuellement une chaîne, un nombre, une valeur booléenne ou un tableau ne remplace pas la valeur. Si la valeur actuelle est 0, false ou une chaîne vide, la clé est supprimée à la place.
Pour modifier une valeur en objet, supprimez d’abord la clé, puis appuyez sur l’objet :
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 }
La meilleure façon d’éviter cette situation est de conserver la cohérence du type de chaque clé dans la conception de votre couche de données.
Types de valeur value-types
Utilisez des valeurs compatibles JSON dans la couche de données : chaînes, nombres, booléens, null, objets simples et tableaux. ACDL convertit d’autres types d’objets lors de leur fusion :
Date objet{}). Stocker les dates sous forme de chaînes, telles que new Date().toISOString(), ou de nombres.{}).Map ou Set.{}).0 et falseIntégrez uniquement les objets simples. L’ACDL rejette d’autres valeurs, telles que des chaînes, des nombres et des tableaux, lorsque vous les poussez directement. Voir push().
Copies, et non références copies
L’état calculé est indépendant des objets que vous poussez. La modification d’un objet après l’avoir poussé ne modifie pas l’état calculé :
const page = { title: "Home" };
adobeDataLayer.push({ page: page });
page.title = "Changed";
adobeDataLayer.getState("page.title");
// "Home"
De même, getState() renvoie une copie. La modification de l’objet renvoyé ne modifie pas la couche de données. Pour modifier l’état calculé, effectuez toujours la modification.