Sitecore 8 EXM将联系人从ListManager添加到列表 [英] Sitecore 8 EXM add a contact to list from listmanager
本文介绍了Sitecore 8 EXM将联系人从ListManager添加到列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是Sitecore 8和新的电子邮件体验管理器模块。 我已经使用来自ListManager的空列表配置了一封时事通讯电子邮件作为收件人。
通过自制表单订阅时事通讯时,我会收到一个电子邮件地址和一个姓名。 现在,我想使用此邮件和姓名创建一个新联系人,并通过代码将其添加到我的ListManager中的列表中。
是否可以通过API调用此列表并向其中添加联系人?
推荐答案
我遇到过完全相同的问题,即列表管理器在将联系人添加到收件人列表后报告0个联系人。
我仔细调查过这个问题,发现将联系人添加到收件人列表实际上只是在"Sitecore_analytics_index"索引中设置了联系人上的一个字段(假设您使用Mongo/XDB作为底层存储)。具体地说,Sitecore应该使用值"ContactLists:{recipentListGuid}"更新联系人文档上的"contact.tag"字段。我尝试使用Luke打开索引,以验证索引中确实没有设置此字段。索引位于C:inetpubwwwroot[Sitename]Dataindexessitecore_analytics_index.
中这使我得出结论,您必须在将联系人添加到收件人列表后保存该联系人。
总而言之,以下代码适用于我:
var ecm = EcmFactory.GetDefaultFactory();
XdbContactId contactId = /* some valid contact id */;
LeaseOwner leaseOwner = new LeaseOwner("UpdateContact-" + Guid.NewGuid().ToString(), LeaseOwnerType.OutOfRequestWorker);
Sitecore.Analytics.Tracking.Contact contact;
string webClusterName;
var status = ecm.Gateways.AnalyticsGateway.TryGetContactForUpdate(contactId.Value,
leaseOwner,
TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(5),
out contact, out webClusterName);
var recipientList = ecm.Bl.RecipientCollectionRepository.GetEditableRecipientCollection(recipientListId);
if (recipientList != null)
{
if (!recipientList.Contains(contactId, true).Value)
{
recipientList.AddRecipient(contactId);
}
}
contact.ContactSaveMode = ContactSaveMode.AlwaysSave;
var contactRepository = new ContactRepository();
var success = contactRepository.SaveContact(contact, new ContactSaveOptions(true, leaseOwner));
注意,上面的代码用于更新场景。在您的情况下,我想您只需移动以下代码:
contactRepository.SaveContact(contact, new ContactSaveOptions(true, null));
之后:
var recipientList = EcmFactory.GetDefaultFactory().Bl.RecipientCollectionRepository.GetEditableRecipientCollection(recipientListId);
if (recipientList != null)
{
var xdbContact = new XdbContactId(contactId);
if (!recipientList.Contains(xdbContact, true).Value)
{
recipientList.AddRecipient(xdbContact);
}
}
更新:实际上,仅当保存的联系人是Sitecore Analytics当前跟踪的联系人时,上述操作才有效。
这篇关于Sitecore 8 EXM将联系人从ListManager添加到列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文