何时以及如何在Omniture中使用s.clearVars?

时间:2015-01-20 15:11:01

标签: adobe-analytics

我想了解DTM在哪里可以使用s.clearVars?将它放在全局配置下的“自定义页面代码”下或“规则”自定义页面代码下?

清除所有变量的缺点是什么?我还要清除内置的Omniture变量(例如Campaign ID)吗?或者在DTM中清除所有自定义(evar,道具和事件 - 我设置的东西)的最佳方法是什么?

我的Ajax应用程序似乎是从调用到调用缓存数据。我遇到了以下问题。

http://trackingfirst.com/omniture-ajax-cache-issues/

热衷于了解s.clearVars如何在DTM中使用它。感谢。

2 个答案:

答案 0 :(得分:2)

我不确定如果不能完全评估您的DTM设置,我可以给出最佳解决方案的明确答案,但有一件事可以尝试:

在您最终进行s.ts.tl来电的规则中,请执行以下操作:

条件部分的规则条件下,选择数据>自定义,然后点击“添加条件”按钮。

然后在代码框中输入:

var s = _satellite.getToolsByType('sc')[0].getS();
s.clearVars();
return true;

更新:您评论了以下内容:

  

感谢您的回答。不幸的是,我的规则都是直接呼叫规则,DTM中似乎没有“条件”选项。我有   添加了上面的代码 - “自定义页面代码” - 分析工具   设置 - 但有趣的是“自定义页面代码”无法调用   直接通话规则。我将尝试通过“javascript / 3rd”运行它   派对标签“看看会发生什么。我可以尝试其他想法吗?谢谢

你说得对,Direct Call规则只有一个条件,那就是_satellite.track('string')调用中传递的字符串。老实说,我不知道为什么Adobe这样做。也许有一天Adobe会扩展它以允许您为直接调用规则设置其他条件,并且基本上只是将“字符串”条件重新标记为直接调用规则标识符以指定要调用的那个。基本上,他们应该像处理页面加载和基于事件的规则一样对待它,除了你只是用那个“字符串”调用它。顺便提一下,这就是如何在内核中调用规则,在核心代码中(甚至是基于页面加载和基于事件的规则),因此对于Adobe来说,扩展直接调用并不是 规则。

此外,您是对的,将代码添加到工具设置中的“自定义页面代码”部分也不起作用。该块代码仅在DTM库的初始加载时执行。说到在自定义页面代码部分设置内容..如果您在那里设置其他Omniture变量,还应该注意其他“错误”。简而言之,DTM不仅在第一次加载时创建s对象,然后在规则期间引用它;它会在触发规则时创建一个全新的s对象。因此,如果您在这些工具配置自定义代码框中设置任何内容(例如,手动设置linkTrackVars或更常见,使用s_doPlugins,这也明显缺少融入DTM ......)他们将不能保留直接规则调用! (但是,它确实保持直接呼叫直接呼叫。我知道......令人困惑和不一致,对吗?)

因此,这可以为您提供解决方案..基本上,您需要禁用让DTM触发s.ts.tl来电。只需将Adobe Anlytics部分中的单选按钮设置为“已禁用”,然后在 Javascript /第三方标记部分的代码框中设置您需要手动设置的所有内容。在那里,您可以放置​​该代码,然后设置您需要设置的任何其他Omniture变量。如果您需要引用数据元素,则可以使用_satellite.getVar('element_name')来获取它们,而不是使用您在Adobe Analytics部分中使用的%element_name%占位符。然后,自己结束s.t()s.tl()电话。换句话说,将其视为普通的Omniture实现,其中代码恰好在DTM中托管,而不是使用DTM内置的任何内容。

更新:AppMeasurement 1.8.0

AppMeasurement Release Notes(向下滚动到 JavaScript 1.8.0

Adob​​e推出了两个可以将回调函数注册到的事件:

s.registerPreTrackCallback
s.registerPostTrackCallback

有了这个,您可以注册一个触发s.clearVars()

的回调函数

示例

s.registerPreTrackCallback(function() {
  s.clearVars();
});

答案 1 :(得分:0)

我提出了一个非常简单的实现clearVars的解决方案,它只需要在每次调用后重写s.t()来触发clearVars。

您希望全局定义此项,例如在DTM中的全局自定义代码中,以便它只运行一次:

// override s.t() to trigger clearVars after every call to it
var t_orig = s.t;
s.t = function(){ 
  t_orig.apply(this, arguments);
  try {
    s.clearVars();
  } catch(e){}
}

使用此解决方案,您无需担心意外清除自定义脚本或基于事件的规则设置的变量。

第二种情况是当你在一个应用程序中有多个s.tl()调用,并且你想在一个事件和另一个事件之间清除var()以避免在下一个s.tl中发送相同的变量( )。

为此,请在调用s.tl()之前在自定义脚本中使用以下代码,或者在基于事件的DTM规则中的自定义条件块顶部使用以下代码:

// clear pre-existing variables here, before anything new gets set
var s = _satellite.getToolsByType('sc')[0].getS(); // this line is optional and for use in DTM only; not necessary if you are sure your "s" object is already set to the correct reference.
s.clearVars();

<强>更新

正如@CrayonViolent所提到的,自从AM 1.8.0起,Adobe就为此目的引入了回调方法:s.registerPreTrackCallback和s.registerPostTrackCallback。

我将把原来的答案留在这里作为替代方法,因为使用内置函数和覆盖函数之间仍然存在差异,并且对事物的时序进行更细粒度的控制可能会派上用场(例如,你想保证你的代码在任何其他注册的回调后触发。)

我在第二个场景中概述的方法仍然有效,并且与使用s.registerPreTrackCallback不同,因为您可以根据自定义事件控制时间。