Blog_Sitecore_Segment.jpg

Sitecore Marketing-Kategorie-Abonnement: Teil 2 – Benutzerdefiniertes Feld zum Abrufen der Marketingpräferenzen und der Kontaktliste

31.10.2019
Lesezeit: 4 Min

Eine Artikelserie von Dirk Schäfauer.

In meinem letzten Blogbeitrag Teil 1 – Das Konzept habe ich erklärt, was ich erreichen wollte.

In diesem Beitrag werde ich mich auf die Marketingkategorien konzentrieren, die zu einem Managerstamm hinzugefügt werden können. Beachten Sie auch, dass es sich bei diesem Feld um eine Baumliste handelt, so dass mehrere Marketingkategoriegruppen zu einem Managerstamm hinzugefügt werden können.

Es ist klar, welche Art von Feld es sein sollte, eine Checkbox-Liste, genau wie im Einstellungscenter. Aber wie soll ich die Manager-Stammdaten bekommen? In einer Umgebung mit mehreren Websites kann es mehrere Manager-Roots geben, die je nach Struktur der Seiten auch verschachtelt sein können!

Wichtig: Bitte beachten Sie das! Ich kenne die Struktur Ihrer Seiten nicht, Sie müssen die erlaubten Vorlagen, die im Backend des Feldes angezeigt werden, manuell anpassen!

IIch wollte den Feldwert des Stammlistenelements als Datenquelle für die Baumliste festlegen, was die Dinge viel einfacher machen würde! Aber der Support sagt:

Das von Ihnen gemeldete Verhalten wurde jedoch als Fehler in unserem Fehlerverfolgungssystem registriert. Vielen Dank, dass Sie das Problem gemeldet haben.
Um den zukünftigen Status dieses Fehlerberichts zu verfolgen, verwenden Sie bitte die Referenznummer 357987. Weitere Informationen über öffentliche Referenznummern finden Sie hier: https://kb.sitecore.net/articles/853187

Festlegen der Basisvorlagen, die in der TreeList angezeigt werden sollen

  1. Navigieren Sie zu “/sitecore/client/Applications/FormsBuilder/Components/Layouts/PropertyGridForm/PageSettings/Settings/Marketing Preferences/Exm Options/Manager Root Id” in der Kern-Datenbank
  2. Wechseln Sie zu “Raw Values” im “View”-Tab
  3. Geben Sie eine durch Pipes getrennte Liste von IDs ein, die Sie zu den Wurzeln Ihres Managers bringen müssen.
  4. Die Template ID “CF9C8A2A-2794-4FEA-980A-EF8426F3D6C3” sollte beibehalten werden, da es sich um die Vorlage der Manager-Root selbst handelt!
  5. Defekte Links werden hier erwartet, weil ich die ContentDatabase verwende, die in diesem Fall die Master-Datenbank ist.

Das ist also nur ein Workaround, um die Vorlagen manuell einzustellen, ich hoffe, dass ich das in zukünftigen Versionen beheben kann.

Das benutzerdefinierte Feld

Da wir nun die Vorlagen, die in der Baumliste angezeigt werden können, angepasst haben, habe ich ein benutzerdefiniertes Feld erstellt, wie in der Dokumentation beschrieben: Walkthrough: Create a custom form element

Das benutzerdefinierte Feld sieht in etwa so aus:

Preferences

Wie Sie sehen können, gibt es auch eine Baumliste zur Auswahl einer Kontaktliste. Diese Kontaktliste sollte als Quelle für die segmentierten Listen verwendet werden. Ich persönlich ziehe es vor, mehr Kontrolle über die ausgewählten Kontakte zu haben, anstatt einfach alle Kontakte zu erhalten!

Die öffentliche Klasse des Sitecore SubscriptionManager erlaubt nur das Abonnieren von Nachrichten und der Liste, die an die Nachricht angehängt ist, aber ich möchte die globale Kontaktliste abonnieren. Diese Methode existiert, aber sie war privat. Sie entspricht genau meinen Bedürfnissen und war der Anlass, meinen eigenen SubscriptionManager zu entwickeln:

        // Original code for this method was taken from Sitecore.EmailCampaign.Cm.SubscriptionManager,
        // this method was previously private but does exactly what we need.
        // We do not want to subscribe via a message, because contact, recipientListId, managerRoot are known
        public bool Subscribe(Contact contact, Guid recipientListId, ManagerRoot managerRoot, bool subscriptionConfirmation)
        {
            Assert.ArgumentNotNull(contact, nameof(contact));
            Assert.ArgumentNotNull(contact.Id, "Id");
            Condition.Requires(recipientListId, nameof(recipientListId)).IsNotEmptyGuid();
            Assert.ArgumentNotNull(managerRoot, nameof(managerRoot));
            var byId = _listManagerWrapper.FindById(recipientListId);
            if (byId == null)
            {
                return false;
            }

            // ToDo: Should a contact get another Subscription confirmation, if he is subscribed to the same preference again, added to other preferences and already added to the main list?
            var flag1 = _listManagerWrapper.IsSubscribed(recipientListId, contact);
            if (flag1 && !managerRoot.GlobalSubscription.IsInDefaultExcludeCollection(contact))
            {
                return true;
            }

            if (subscriptionConfirmation)
            {
                return SendConfirmationMessage(contact, recipientListId, managerRoot);
            }

            var flag2 = true;
            if (!flag1)
            {
                flag2 = _listManagerWrapper.SubscribeContact(recipientListId, contact);
            }

            if (!SendSubscriptionNotification(managerRoot, contact))
            {
                var alias = contact.GetAlias();
                var message = $"Failed to send subscription notification to {alias?.ToLogFile()}";
                _logger.LogError(message);
            }

            if (managerRoot.GlobalSubscription.IsInDefaultExcludeCollection(contact) && !RemoveContactFromList(contact, managerRoot.GlobalSubscription.GetGlobalOptOutListId()))
            {
                var alias = contact.GetAlias();
                var message = $"Failed to remove {alias?.ToLogFile()} from global opt out list";
                _logger.LogError(message);
            }

            return flag2;
        }

Das Modell für das Feld ist irgendwie mächtig, denn wenn Sie ein bekannter Kontakt sind, wird es die Kästchen ankreuzen, die Ihren ausgewählten Marketingpräferenzen entsprechen! Wenn Sie wollen, können Sie das überspringen und mehr darüber lesen in Teil 4 – Benutzerdefiniertes Feld zur Identifizierung von Kontakten.

Wichtig: Ich muss den Tracker manuell starten, um den Kontakt zu identifizieren, denn der Tracker wird auch gestartet, wenn das Formular abgeschickt wird!

Categories

Wow, cool! Das sieht ja fast aus wie das Präferenzzentrum!

IIch habe nur das Kontrollkästchen für die Abmeldung von allen vermisst, aber das tut es auch, wenn man alle Kontrollkästchen abhakt 😉

Aber, um das Aussehen und das Gefühl des Einstellungszentrums zu haben, sollte das Formular auch irgendwie mächtig sein? Lesen Sie mehr darüber in meinem späteren Blogpost Teil 5 – Das “magische” Abonnementformular.

Aber zuerst wollen wir uns der Einreichungsaktion nähern, wo die eigentliche Magie stattfindet Teil 3 – Benutzerdefinierte Marketingpräferenz-Übermittlungsaktion.

Fröhliches Präferieren,
Dirk

Der Autor
Software-Entwickler
Dirk
Schäfauer
Dirk ist Software-Entwickler bei mmmake und absoluter Sitecore-Experte.
Kontakt
mmmake-autor-dirk-schaefauer