Sitecore 8.1 EXM 3.2:如何以编程方式将联系人添加到列表管理器中的列表?

时间:2016-09-22 09:13:54

标签: c# sitecore sitecore8 sitecore-ecm

我有 ContactForm with checkbox to订阅时事通讯。

我需要检查订阅者是否已经是sitecore联系人,更新此人的数据并将联系人添加到列表管理器中的RecipientsList。

这是我的代码:

var recipientCollectionRepository = RecipientCollectionRepository.GetDefaultInstance();
var list = recipientCollectionRepository.GetEditableRecipientCollection(listId);

var contactRepository = new ContactRepository();
var contact = contactRepository.LoadContactReadOnly(ContactEmail);
if (contact != null)
{
    if (list != null)
    {
        var xdbContact = new XdbContactId(contact.ContactId);
        if (!list.Contains(xdbContact, true).Value)
        {
            list.AddRecipient(xdbContact);
        }
    }
}
else
{
    contact = contactRepository.CreateContact(Sitecore.Data.ID.NewID);
    contact.Identifiers.AuthenticationLevel = Sitecore.Analytics.Model.AuthenticationLevel.None;
    contact.Identifiers.Identifier = ContactEmail;

    contact.Tags.Add("ContactLists",listId);

    var contactEmailAddresses = contact.GetFacet<IContactEmailAddresses>("Emails");

    if (!contactEmailAddresses.Entries.Contains("Email"))
    {
        contactEmailAddresses.Entries.Create("Email").SmtpAddress = ContactEmail;
        contactEmailAddresses.Preferred = "Email";
    }
    var contactPersonalInfo = contact.GetFacet<IContactPersonalInfo>("Personal");
    contactPersonalInfo.FirstName = ContactFirstName;
    contactPersonalInfo.Surname = ContactSurname;

    if (list != null)
    {
    var xdbContact = new XdbContactId(contact.ContactId);

    if (!list.Contains(xdbContact, true).Value)
    {
        list.AddRecipient(xdbContact);
    }

    contactRepository.SaveContact(contact, new ContactSaveOptions(true, null));
}

}

虽然我可以在mongoDB中找到它 screen here 我在ListManager的列表中看不到它。

我还需要做些什么才能在ListManager的列表中看到我的新联系人?

1 个答案:

答案 0 :(得分:0)

仅在会话结束之后才会添加。

这是限制MongoDB调用的默认行为。

同样是EXM 3.2版本,联系人列表收件人数也存在问题。您可能需要检查sitecore支持以进行热修复。或者您可以升级到EXM 3.3