2016-06-01 59 views
3

我正嘗試將現有sitecore用戶添加到收件人列表中。我使用列表管理器創建了空的收件人列表。以下是我的代碼。Sitecore 8.1 EXM無法將Sitecore Extranet用戶添加到收件人列表中

RecipientId recipient = new SitecoreUserName(userProfile.UserName); 
    var listRepository = new ListManagerCollectionRepository(); 
     var newsRecipientList = listRepository.GetEditableRecipientCollection("{list-id}"); 
    if (!newsRecipientList.Contains(recipient).Value) 
    { 
      newsRecipientList.AddRecipient(recipient); 
    } 

但是,當我看到收件人列表時,它總是空的。請幫忙。

回答

3

Sitecore電子郵件體驗管理器與列表管理器一起工作。列表管理器與聯繫實體,而不是用戶實體。這就是爲什麼用戶可以在Sitecore中出現的原因,但是將他添加到列表中可能會遇到問題:聯繫人可能不在。我也不確定RecipientId列表可能從獲得SitecoreUserName,因爲它在你的例子。

可能導致此問題的其他問題:Sitecore不會立即將聯繫人寫入數據庫。你可以在內存中有聯繫人(例如Tracker.Current.Session.Contact),但是隻有在會話結束後才能訪問其他人,當它被添加到數據庫並解鎖時。

您可以使用Brian Pedersen approach來解決您的問題。這個對我有用。

var repository = new ExtendedContactRepository(); 
var contact = Repository.GetOrCreateContact(userEmail); 
recipientList.AddRecipient(contact.ContactId.ToID()); 
+0

此代碼在cM和CD都相同的環境中工作正常。但在縮放環境中拋出異常。它無法獲得收件人列表。 newsRecipientList = listRepository.GetEditableRecipientCollection(「{my id}」);任何你能想到的理由? –

+0

@MohitDharmadhikari如果沒有關於例外的細節,很難說。你配置了「default-cd-cluster」嗎? – Anton

+0

是的我已經配置了默認-cd集羣「作爲IIS服務器名稱(即機器名稱),而不是網站域名。是好的還是我需要配置它其他方式 –