1

我正在将我的旧 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找到了,当我第一次向它添加联系人时,它会将“收件人”增加到 1(使用 进行检查/sitecore/system/List Manager/All Lists/E-mail Campaign Manager/Custom/RecipientList)。

我还有一条包含此选择加入收件人列表的消息,但是当我检查该消息时,它说它将被发送给 0 个订阅者。

对此有什么想法吗?

4

2 回答 2

0

请参阅这篇文章,列出 Sitecore EXM 中的已知问题: https ://kb.sitecore.net/articles/149565

“收件人列表在收件人订阅列表后显示“0”个收件人总数。(62217)

我通过在消息中添加一个简单列表(来自 csv,一个联系人)在沙盒环境中解决了这个问题。这将总收件人计数从 0 增加到 1,从而允许激活消息。复合列表中的所有收件人都收到了一条消息。

于 2016-04-14T14:40:27.520 回答
0

你有分布式环境吗?如果是这样,RecipientCollectionRepository 将无法工作,因为它仅在内容管理服务器上可用。您可以尝试使用 ClientApi:

ClientApi.UpdateSubscriptions(RecipientId recipientId, string[] listsToSubscribe, string[] listsToUnsubscribe, string managerRootId, bool confirmSubscription)

并且只需在第一个字符串数组中添加您想要订阅人们的列表的 ID。

只是这个选项的快速说明,listToUnsubscribe 实际上并没有从列表中删除联系人。您应该通过退出列表的 ID。这基本上将它们排除在任何未来的电子邮件之外。一个缺点是您将无法重新订阅它们。

如果这对您不起作用,您将需要在您的 CD 服务器和您的 CM 服务器之间创建您自己的 API,CM 服务器使用 recipientCollectionRepository 订阅和取消订阅

于 2016-05-27T06:56:10.687 回答