Blog_Sitecore_Segment.jpg

Sitecore Marketing Kategorie-Abonnement: Teil 4 – Benutzerdefiniertes Feld zur Identifizierung von Kontakten

06.11.2019
Lesezeit: 2 Min

Ich kann nun einen Kontakt identifizieren und seine Präferenzen speichern, wie in Teil 3 – Übermittlung der benutzerdefinierten Marketingpräferenzen – beschrieben.

Dieses Thema ist so etwas wie die Kirsche auf dem Sahnehäubchen des Konzepts. Da ich jetzt in der Lage bin, den Kontakt zu identifizieren und mit seinen Einstellungen herumzuspielen, warum nicht etwas Ähnliches tun wie das Einstellungszentrum?

Die Links im Newsletter sind für den Kontakt personalisiert, und wenn ein Kontakt den Link zur Aktualisierung seiner Präferenzen anklickt, werden seine aktuellen Präferenzen im Marketing Preference Center ausgewählt.

DAS MÖCHTE ICH AUCH HABEN!

Die Auswahl der Einstellungen des Kontakts erfolgt bereits im Ansichtsmodell für Felder:

var knownContact = _exmContactService.GetKnownXConnectContactByEmailAddress();
var marketingPreferences = new List<MarketingPreference>();
if (knownContact != null)
{
    marketingPreferences = _marketingPreferencesService.GetPreferences(knownContact, managerRoot.Id);
}

var marketingCategoryGroups = managerRoot.Settings.MarketingCategoryGroups.Select(database.GetItem).ToList();
if (!marketingCategoryGroups.Any())
{
    _logger.LogWarn("no marketing groups are associated to the manager root!");
    return;
}

foreach (var marketingCategoryGroup in marketingCategoryGroups)
{
    var marketingCategories = marketingCategoryGroup.Children;
    foreach (Item marketingCategory in marketingCategories)
    {
        var categoryListItem = new ListFieldItem();
        categoryListItem.ItemId = categoryListItem.Value = marketingCategory.ID.ToString();
        categoryListItem.Text = marketingCategory.DisplayName;
        categoryListItem.Selected = IsSelected(marketingPreferences, marketingCategory);
        Items.Add(categoryListItem);
    }
}

using (new SecurityDisabler())
{
    base.UpdateDataSourceSettings(item);
}

Aber ich habe nur ein Formular und ich möchte nicht die Möglichkeit haben, die Einstellungen des Kontakts zu manipulieren, indem ich einfach eine E-Mail-Adresse eingebe. Das wäre eine große Sicherheitslücke!

Hey! Sitecore Forms hat die Möglichkeit, Bedingungen zu verwenden! Juhu!

Ich habe ein weiteres benutzerdefiniertes Feld erstellt, das einen Wert zurückgibt, wenn der Kontakt ein bekannter Kontakt ist:

public class IsKnownExmContactViewModel : InputViewModel<string>
{
    private readonly IExmContactService _exmContactService;

    public IsKnownExmContactViewModel() : this(ServiceLocator.ServiceProvider.GetService<IExmContactService>())
    {
    }

    public IsKnownExmContactViewModel(IExmContactService exmContactService)
    {
        Condition.Requires(exmContactService, nameof(exmContactService)).IsNotNull();
        _exmContactService = exmContactService;
    }

    protected override void InitializeValue(object value)
    {
        var str = value?.ToString();
        Value = str;
    }

    protected override void InitItemProperties(Item item)
    {
        base.InitItemProperties(item);
        Value = IsKnownContact().ToString();
    }

    private bool IsKnownContact()
    {
        return _exmContactService.GetKnownXConnectContactByEmailAddress() != null;
    }

    protected override void UpdateItemFields(Item item)
    {
        base.UpdateItemFields(item);
        var field = item.Fields["Default Value"];
        field?.SetValue(Value, true);
    }
}

Um Bedingungen und Aktionen zu verwenden, müssen Sie Ihr benutzerdefiniertes Feld zu den Operatoren und Aktionen hinzufügen, die Sie verwenden möchten.
Diese befinden sich unter „/sitecore/system/Einstellungen/Formulare/Metadaten/Bedingungen/Operatoren“ und „/sitecore/system/Einstellungen/Formulare/Metadaten/Bedingungen/Aktionstypen“.

In meinem Fall möchte ich einen Abschnitt ausblenden, was bereits mit der Aktion „Ausblenden“ möglich ist. Aber ich muss vergleichen, ob mein benutzerdefiniertes Feld einen booleschen Wert hat, also muss ich mein Feld in den „Editor Settings“ des „is equal to“-Operators hinzufügen.

Is equal operator

Heiliger Strohsack! Jetzt wird es episch!

Now we have to put it all together. ContinJetzt müssen wir alles zusammenfügen. Setzen Sie unser Abenteuer hier fort: Teil 5 – Das „magische“ Abonnementformular.

Happy Identifizieren!
Dirk

Sie benötigen Sitecore-Support? – Kein Problem für unsere Sitecore-Expert:innen!

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