0

我正在使用以下代码以编程方式将用户添加到参与计划中:

VisitorManager.AddVisitor("salesforce\\fred.smith","{67F395B9-2C29-4B73-9382-69E0FCB6A546}");

这很好用,但我还需要针对访问存储自定义值。关于如何做到这一点的任何想法?

我无法设置vistor.CurrentVisit.Profiles,因为没有可用的 setter,也没有可添加的方法。

我可以使用以下代码添加标签

vistor.Tags.Add("opportunityId", "006M0000004xnLh");

但是,当我尝试从自定义自动化操作中检索它们时,返回的值为 null。我猜是因为它是通过编程方式设置的并且是从不同的会话中检索的?我用来检索标签的代码是:

var opportunityTagRow = visitorTags.Find("opportunityId");

并且:

var allOpportunityRows = visitorTags.GetAll("opportunityId");

关于如何最好地保存访问数据的任何想法?

4

2 回答 2

3

我认为您混淆了 Sitecore 中“访问者”和“用户”的概念。在 Sitecore DMS 中,“访客”本质上是机器上的一个 cookie,它映射到分析数据库的访客表中的一个条目。命名用户是登录到 Sitecore 并存储在核心数据库的 .NET 成员表中的人。当您向访问者添加标签时,这会在 VisitorTags 表中添加一个条目,该表基本上只是映射到访问者表中的访问者条目的名称-值对。在您的情况下,“salesforce\fred.smith”不是访客而是用户。您可以使用 Sitecore.Analytics.Tracker.Visitor 检索当前访问者,也可以使用 VisitorFactory 按 ID 检索不同的访问者。如果您确实想针对用户保留数据,您可以使用用户配置文件,这又不同于 DMS 和访问者配置文件。您将在 Sitecore.Security 下找到 Sitecore 用户的相关类。

编辑:我会通过以下方式做你想做的事:

//Enroll user in plan
VisitorManager.AddVisitor("salesforce\\fred.smith", new ID("{67F395B9-2C29-4B73-9382-69E0FCB6A546}"));
//Add data to USER profile not visitor
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName("salesforce\\fred.smith", true);
user.Profile["opportunityId"] = "006M0000004xnLh";

//Get user from automation action parameter and get data from profile 
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(automationStatesRow.UserName, true);
string data = user.Profile["opportunityId"];
于 2013-05-22T21:17:33.753 回答
1

所有访问数据都存储在 Sitecore Analytics 数据库中 - 请参阅访问者标签表。访问者标签具有可用于查找访问者的访问者 ID。您有两种选择来获取此数据(以及其他 Analytics 数据) - 使用 Sitecore Analytics API(推荐)或通过构建自定义 sql 调用来检索您想要的数据(可能会变得混乱)。以下是我使用分析 API 在参与操作中​​执行类似操作的方法:

 public override AutomationActionResult Execute(VisitorDataSet.AutomationStatesRow automationStatesRow, Item action, bool isBackgroundThread)
 {
        Visitor visitor = VisitorFactory.GetVisitor();
        string tagValue = visitor.Tags["myTag"]
        //Do stuff
}
于 2013-04-19T05:00:26.227 回答