2016-09-22 46 views
0

我有 ContactForm與複選框訂閱通訊。Sitecore 8.1 EXM 3.2:如何以編程方式將聯繫人添加到列表管理器中的列表?

我需要檢查訂閱者是否已經是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的列表中看到我的新聯繫人?

+0

它需要時間重新索引新添加的聯繫人 – Anton

+0

是的,過了一段時間我可以看到添加聯繫人,但發生了另一個問題:列表視圖中的收件人數爲0 –

回答

0

只有在會話結束後纔會被添加。

這是限制MongoDB調用的默認行爲。

也EXM 3.2版本,有聯繫人列表收件人數問題。您可能需要檢查sitecore對hotfix的支持。或者您可以升級到EXM 3.3

相關問題