我们正在使用来自W3(http://www.w3.org/2013/12/cedd ...的数据层规范,它将事件数据定义为一个事件数组。对于访问数组中最后一项的数据元素来说,这不是问题。问题在于快速进入多个事件。现在当DTM去收集事件数据时,数组中的最后一个事件对象可能不是正确的,如果快速发送两个事件,则跳过第一个事件的数据对象和最后一个事件的数据对象使用了两次。
状态1 : 创建许多直接调用规则,每个可能的事件数量一个,以及访问数组中该项目的每个规则的数据元素: _satillite.track( 'event_0') _satillite.track( 'event_1')...
设置不是很有趣,仍然遇到可能设置了足够规则的问题,并且不干净。
策略2 : 在直接调用条件下还可以使用数据元素: event_%event_number%
不确定如何在条件字符串中使用数据元素。
策略3 使用FIFO队列来保存事件顺序的键以及事件所在的数据层中事件的对象。
var order_of_events = ['asdf', '1234'];
var events_number = {
'asdf': 1,
'1234': 2
};
然后发送直接呼叫事件规则:
_satillite.track('event');
然后在标签中使用Data Evements查询正确的事件数据:
// Data Element code
// %next_eventName%
var event_key = getKey(); // returns first key in array
event_number = getValue(asdf); // returns 1
getEventName(event_number); // returns "Event Name"
如何通过事件详细信息通知队列标记完成并将密钥移出队列?
可以使用什么策略来确保数据元素使用正确的事件数据对象,上述任何一个,还是已经解决了这个问题?
答案 0 :(得分:0)
一种可能的解决方案: 使用事件对象的eventInfo.eventAction键值。在阵列中添加事件时,可以调用通用_satllite.track(' event_added')直接调用规则。在直接调用规则中,您可以将事件从digitalData.events中拉出来,循环遍历它们并在直接调用规则中调用相应的方法。
var eventActions={
method1:function(event){
//_satellite.track('method1');
//or s.tl(event.eventInfo.eventName, true, 'hello world');
//handle each event however you may like for analytics, testing, page manipulation etc.
}
}
digitalData.events.forEach(function(item,index,arr){
eventActions[item.eventInfo.eventAction](item);
});
这是我计划做的事情,但可能无法满足您的需求。