我正在努力将旧的Sitecore(< 8)代码转换为使用Sitecore EXM。我很难从代码中将用户添加到收件人列表中。这篇文章中的答案:Sitecore 8 EXM add a contact to list from listmanager没有完全回答我的问题,因为我无法发表评论,所以我决定开始一个新话题。
我的第一个问题是我的EcmFactory.GetDefaultFactory().Bl.RecipientCollectionRepository.GetEditableRecipientCollection(recipientListId)
在RecipientCollectionRepository
上给出了编译错误,它说它不存在。所以我使用了稍微不同的代码。我现在的代码如下:
var contactRepository = new ContactRepository();
var contactName = this.Email.Text;
var contact = contactRepository.LoadContactReadOnly(contactName);
contact = contactRepository.CreateContact(Sitecore.Data.ID.NewID);
contact.Identifiers.AuthenticationLevel = Sitecore.Analytics.Model.AuthenticationLevel.None;
contact.System.Classification = 0;
contact.ContactSaveMode = ContactSaveMode.AlwaysSave;
contact.Identifiers.Identifier = contactName;
contact.System.OverrideClassification = 0;
contact.System.Value = 0;
contact.System.VisitCount = 0;
var contactPreferences = contact.GetFacet<IContactPreferences>("Preferences");
contactPreferences.Language = "nl-NL";
var contactEmailAddresses = contact.GetFacet<IContactEmailAddresses>("Emails");
contactEmailAddresses.Entries.Create("test").SmtpAddress = this.Email.Text;
contactEmailAddresses.Preferred = "test";
var contactPersonalInfo = contact.GetFacet<IContactPersonalInfo>("Personal");
contactPersonalInfo.FirstName = contactName;
contactPersonalInfo.Surname = "recipient";
if (recipientList != null)
{
var xdbContact = new XdbContactId(contact.ContactId);
if (!recipientList.Contains(xdbContact, true).Value)
{
recipientList.AddRecipient(xdbContact);
}
contactRepository.SaveContact(contact, new ContactSaveOptions(true, null));
}
所以找到recipientList
,并且第一次添加联系人时,它会增加&#34;收件人&#34;为1(使用/sitecore/system/List Manager/All Lists/E-mail Campaign Manager/Custom/RecipientList
检查)。
我还有一条消息,其中包含此选择加入收件人列表,但当我检查该消息时,它会将其发送给0个订阅者。
对此有何想法?
答案 0 :(得分:0)
请参阅此文章,列出Sitecore EXM中的已知问题: https://kb.sitecore.net/articles/149565
“收件人订阅列表后收件人列表显示”0“总收件人。(62217)”
通过在邮件中添加一个简单的列表(来自csv,一个联系人),我在沙盒环境中解决了这个问题。这使得总收件人数从0增加到1,从而允许激活邮件。复合列表中的所有收件人都收到了一条消息。
答案 1 :(得分:0)
您是否拥有分布式环境?如果是这样,RecipientCollectionRepository将无法工作,因为它仅在Content Management服务器上可用。您可以尝试使用ClientApi:
ClientApi.UpdateSubscriptions(RecipientId recipientId, string[] listsToSubscribe, string[] listsToUnsubscribe, string managerRootId, bool confirmSubscription)
只需在第一个字符串数组中添加您要订阅人员的列表的ID。
使用此选项快速注释,listToUnsubscribe实际上并未从列表中删除联系人。您打算通过选择退出列表的ID。这基本上将他们从以后的任何电子邮件中排除。一个缺点是您将无法再重新订阅它们。
如果这对您不起作用,则需要在CD服务器和CM服务器之间创建自己的API,其中CM服务器使用recipientCollectionRepository订阅和取消订阅