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

分散環境はありますか? その場合、RecipientCollectionRepository は Content Management サーバーでしか利用できないため機能しません。ClientApi を使用してみることができます。

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

最初の文字列配列に、購読したいリストの ID を追加するだけです。

このオプションの簡単な注意点として、listToUnsubscribe は実際にはリストから連絡先を削除しません。オプトアウト リストの ID を渡す必要があります。これにより、基本的に今後のメールからそれらが除外されます。欠点の 1 つは、再サブスクライブできなくなることです。

これがうまくいかない場合は、CD サーバーと CM サーバーの間に独自の API を作成する必要があります。CM サーバーは、recipientCollectionRepository を使用してサブスクライブおよびサブスクライブ解除します。

于 2016-05-27T06:56:10.687 に答える
0

Sitecore EXM の既知の問題をリストしたこの記事を参照してください: https://kb.sitecore.net/articles/149565

「受信者がリストに登録された後、受信者リストに総受信者が「0」と表示されます。(62217)」

単純なリスト (csv から、1 つの連絡先) をメッセージに追加することで、サンドボックス環境でこれを回避しました。これにより、合計受信者数が 0 から 1 に増え、メッセージをアクティブ化できるようになりました。複合リスト内のすべての受信者にメッセージが送信されました。

于 2016-04-14T14:40:27.520 に答える