古い 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 人のサブスクライバーに送信されると表示されます。
これについて何か考えはありますか?