Sitecore 8 EXM将联系人从ListManager添加到列表 [英] Sitecore 8 EXM add a contact to list from listmanager

查看:18
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆