EXM订阅列表C#

时间:2015-10-27 10:25:02

标签: sitecore sitecore8 sitecore-exm

我正在努力将旧的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个订阅者。

对此有何想法?

2 个答案:

答案 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订阅和取消订阅