我正在使用以下代码将用户添加到计划参与计划中:
VisitorManager.AddVisitor("salesforce\\fred.smith","{67F395B9-2C29-4B73-9382-69E0FCB6A546}");
这很好用,但我还需要为访问存储自定义值。关于如何做到这一点的任何想法?
我无法设置vistor.CurrentVisit.Profiles
,因为没有可用的setter,也没有可用的方法可以添加。
我可以使用以下代码添加标签
vistor.Tags.Add("opportunityId", "006M0000004xnLh");
但是,当我尝试从自定义自动化操作中检索它们时,返回的值为null。我猜是因为它是以programmaticaly设置的,并且是从不同的会话中检索的?我用来检索标签的代码是:
var opportunityTagRow = visitorTags.Find("opportunityId");
还有:
var allOpportunityRows = visitorTags.GetAll("opportunityId");
关于如何最好地保留访问数据的任何想法?
答案 0 :(得分:3)
我认为你在Sitecore中混淆了“访问者”和“用户”的概念。在Sitecore DMS中,“访客”本质上是机器上的cookie,它映射到分析数据库的访客表中的条目。命名用户是登录Sitecore并存储在核心数据库的.NET成员资格表中的用户。向访问者添加标记时,会向VisitorTags表添加一个条目,该表基本上只是一个名称 - 值对,它映射到Visitors表中的访问者条目。在您的情况下,“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"];
答案 1 :(得分:1)
所有访问数据都存储在Sitecore Analytics数据库中 - 请参阅访问者标记表。访问者标记具有可用于查找访问者的VisitorId。您有两种方法可以获取此数据(以及其他其他Google 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
}