如何使用名称中的点设置上下文变量?

时间:2018-09-13 07:29:41

标签: analytics adobe-analytics

我正在尝试添加上下文数据变量(CDV),其名称中带有一个点。根据{{​​3}},这是正确的:

s.contextData['myco.rsid'] = 'value'

不幸的是,在调用s.t()之后,该变量被分为两个或多个:

Context Variables
myco.:  
rsid: value 
.myco:  

如何设置变量并防止将其拆分成多个部分?

1 个答案:

答案 0 :(得分:2)

您已经正确设置了。如果您指的是在请求URL中看到的内容,那就是Adobe库发送它的方式。在您的示例中,“ myco”是一个名称空间,而“ rsid”是该名称空间中的变量。您可以在该命名空间中包含其他变量。例如,如果您有

s.contextData['myco.rsid1'] = 'value';
s.contextData['myco.rsid2'] = 'value';

您会在AA请求网址中看到(仅显示相关部分):

c.&myco.&rsid1=value&rsid2=value&.myco&.c

我假设您是在问,因为您想更轻松地从浏览器网络标签,扩展程序或某些单元测试器中解析/确认AA收集请求网址?当在变量中使用点语法(命名空间)时,没有办法强制AA不能表现出这种行为。

但是,对于contextData变量使用名称空间并没有什么特别的地方。如果您选择,它就在您自己的组织中。因此,如果您希望所有变量都是“顶级”变量,并在请求URL中显示全名,则不要使用点语法。

如果您仍然希望对组织/层次结构有所了解,建议您使用下划线_

s.contextData['myco_rsid1'] = 'value';
s.contextData['myco_rsid2'] = 'value';

哪个会给你:

c.&myco_rsid1=value&myco_rsid2=value&.c

侧面注::您不能使用s.contextData做完整的对象/点表示法语法,例如

s.contextData = {
    foo:'bar',     // <--- this will properly parse
    myco:{         // this will not properly parse
      rsid:'value' // 
    }              //
};

AA库无法正确解析它;它仅在构建请求URL时循环遍历contextData的顶级属性。因此,如果您像上面那样使用完整的对象语法,则最终会得到:

c.&foo=bar&myco=%5Bobject%20Object%5D&&.c

foo可以,但是最后只剩下myco,并以“ [object Object]”作为记录值。为什么Adobe不允许完整的对象语法,而只允许JSON.stringify(s.contextData)¯\_(ツ)_/¯