我正在使用启用了xDB的Sitecore 8.1(MongoDB)。我想将访问用户的用户角色存储在xDB中,因此我可以在报告中汇总这些数据。这些角色可能会随着时间的推移而发生变化,因此一个用户可以在某个时间点拥有一组角色,而在以后可以拥有另一组角色。
我可以将这些用户角色作为自定义构面存储在Contact
实体上,但是因为它们可能会因访问访问而改变,所以如果更新构面中的数据,我将丢失历史数据每次用户登录时(fx。在某次访问时,我都无法确定给定用户的角色)。
相反,我可以为我的facet数据创建一个自定义IElement
,并存储角色以及一个时间戳,说明给定角色何时注册,但在报告阶段这个模型可能很难处理每次生成报告时,我都需要根据时间戳将交互数据与角色数据相关联。
是否可以将这些自定义数据存储在xDB中而不是Contact集合中?我可以在Interactions集合中存储自定义数据吗?有一个名为Tracker.Current.Session.Interaction.CustomValues
的属性听起来像我需要的,但如果我在这里存储数据,我能否对数据进行适当的聚合/报告?还有其他我想过的方法吗?
答案 0 :(得分:1)
是的,CustomValues
字典是我在你的情况下会使用的字典。这个字典将被序列化为MongoDB,作为每次交互的嵌套文档(除非字典为空)。
另请注意,由于CustomValues
是基类Sitecore.Analytics.Model.Entity
的成员,因此该字典可用于xDB的许多其他数据类。例如,您可以在PageData
和PageEventData
个对象中存储自定义值。
由于CustomValues
接受任何类的对象,因此您的自定义数据类需要一些额外的东西才能成功保存到MongoDB并随后从MongoDB加载:
[Serializable]
。需要在MongoDB驱动程序中注册,如下所示:
using Sitecore.Analytics.Data.DataAccess.MongoDb;
// [...]
MongoDbObjectMapper.Instance.RegisterModelExtension<YourCustomClassName>();
每个应用程序生命周期只需执行一次 - 例如,在initialize
管道处理器中。
当然,您不必使用Sitecore的API来存储您的自定义数据。因此,替代方法是手动将数据保存到自定义MongoDB集合或SQL表。然后,您可以在聚合处理器中读取该数据,并通过当前处理的交互的ID找到它。
这种方法的好处是您可以决定数据的存储位置和方式。缺点是实现和维护这种数据存储的额外工作。