Es gibt zwei Möglichkeiten, eine Personalisierung mit Attributen anzulegen: mit Platzhaltern oder mit Personalisierungsregeln. Mit beiden Möglichkeiten kann ein erweiterter Datenpool in eine Nachricht eingefügt werden.

  1. Ein Platzhalter ermöglicht es, individuelle Daten in eine Nachricht einzufügen. Dies ist auch unter Verwendung der in Pool-Containern gespeicherten Daten möglich (siehe Daten aus einem Pool-Container in eine Nachricht einfügen​).
  2. Daten aus Pool-Containern können auch in Personalisierungsregeln genutzt werden. Dies erfolgt durch Funktionen (siehe Funktionen zum Filtern von Pool-Containern​).

Es ist nicht möglich, über den Personalisierungs-Builder (Slider)​ auf einen erweiterten Datenpool zuzugreifen, um über die Benutzeroberfläche eine Personalisierung anzulegen. Die Personalisierung muss manuell angelegt werden. Die Syntax für eine Personalisierung mit dem erweiterten Datenpool unterscheidet sich von der Syntax für eine Personalisierung mit Attributen. Die Personalisierungsregeln können jedoch in der Code-Ansicht des Personalisierungs-Builders gespeichert werden, damit sie auf einfache Weise wiederverwendet werden können.

Aufbau einer Personalisierungs-Regel (InsertIf)​

<%InsertIf expression="${Function}"%>Text<%/InsertIf%>

  • Die InsertIf Tags definieren den Anfang und das Ende der Personalisierung

  • expression="": Dies beinhaltet die Regel für die Personalisierung.

  • Function: Dieses Element wird durch eine Funktion ersetzt. Die Funktion entspricht den Regeln, die festlegen, wann der Inhalt in die Nachricht eingefügt werden soll. Das Resultat des Filters bzw. der Funktion muss ein Boolescher Wert (True oder False) sein. Wenn die Funktion selbst keinen Booleschen Wert ergibt, muss eine zusätzliche CountMapElement Funktion genutzt werden, um einen Booleschen Wert aus der eigentlichen Funktion zu erzeugen (siehe Beispiel 1).

Alternative zur vorangegangenen Personalisierungs-Regel (InsertElse)​

<%InsertElse expression="${Function}"%>Text<%/InsertElse%>

Die InsertElse Tags definieren den personalisierten Inhalt und stellen die Alternative zur vorangegangenen InsertIf-Regel dar. Wenn die erste Personalisierungs-Regel (das InsertIf-Tag) zutrifft, wird die InsertElse-Personalisierung nicht berücksichtigt. Der Aufbau des InsertElse Tags ist identisch mit dem Aufbau des InsertIf Tags.

Standardinhalt, wenn die vorangegangenen Personalisierungsregeln nicht zutreffen:

<%InsertElse%>Text<%/InsertElse%>

Ein InsertElse Tag, der keine Regel enthält, entspricht dem Standardinhalt; d.h., dieser Inhalt wird angezeigt, wenn keine der bisher definierten Personalisierungsregeln (InsertIf oder InsertElse) zutrifft.

Beispiele​

Einkäufe der Kunden sind in einem Pool-Container mit dem Namen ​Einkäufe​ gespeichert. Der Schlüssel dieses Pool-Containers ist die Kunden-ID. Einkäufe beinhaltet eine Datenspalte ​Artikelart​, die die Warenkategorie eines bestimmten Einkaufs beinhaltet. Der Pool-Container ist mit einem Attribut verknüpft, das ebenfalls die Kunden-ID enthält. Einkäufe lassen sich daher anhand der Kunden-ID eindeutig dem jeweiligen Kunden zuordnen.

  1. Es soll nun ein spezielles Angebot an alle Kunden versendet werden, die Schuhe gekauft haben.
    Der InsertIf-Ausdruck setzt sich wie folgt zusammen:


    <%InsertIf expression="${ecm:countMapElements(ecx:filter(user.RelatedAttribute['Einkäufe'], 'Artikelart', '==', 'Schuhe'))>0}"%> Text <%/InsertIf%>
    CODE

    ecx:filter filtert nach einem speziellen Eintrag (siehe ecx:filter​). Das Ergebnis des Filters sind alle Einträge mit dem Wert Schuhe.
    Der Filter liefert zwar alle Einträge mit dem Wert Schuhe, es wird jedoch ein Boolescher Wert benötigt. Daher wird die Zusatzfunktion ecm:countMapElements hinzugefügt, um Boolesche Werte zu erzeugen (siehe ecm:countMapElements​).
    Als Ergebnis wird der Text des Angebots nur dann in der Nachricht angezeigt, wenn der Filter in den bisherigen Einkäufen des Empfängers den Wert Schuhe findet.

  2. Zusätzlich zu dem Angebot für Schuhkäufer (Beispiel 1) soll nun ein weiteres Angebot an alle Kunden versendet werden, die im letzten Monat einen Einkauf getätigt haben. Das Kaufdatum ist in der Datenspalte Einkäufe im Pool-Container gespeichert. Um jedem Kunden das passendste Angebot anzuzeigen, setzt sich die Personalisierungsregel wie folgt zusammen:

    <%InsertIf expression="${ecm:countMapElements(ecx:filter(user.RelatedAttribute['Einkäufe'], 'Artikelart', '==', 'Schuhe'))>0}"%> Text1 <%/InsertIf%>
    
    <%InsertElse expression="${ecm:countMapElements(ecx:filter(user.RelatedAttribute['nonuniquelinked'], 'Datum', '<=', ecx:formatDate(ecm:addInterval(date.today, '-1m'), 'JJJJ-MM-TT', ecm:timeZone('Europa/London'), '', false)))>0}"%> Text2 <% /InsertElse%>
    CODE


    Zunächst wird der InsertIf-Ausdruck aus Beispiel 1 eingefügt.
    Der InsertElse-Ausdruck definiert die Regeln für das alternative Angebot, d. h. den Zeitraum, in dem der Einkauf getätigt wurde (ecx:formatDate​). Da auch diese Funktion keinen Booleschen Wert erzeugt, muss erneut eine ecm:countMapElements Funktion verwendet werden.

  3. Ein drittes Angebot soll allen Kunden angezeigt werden, auf die keine der vorangegangenen Regeln zutreffen. Da die Standardalternative ohne Angabe einer Regel erzeugt wird, muss keine Funktion verwendet werden.

    Daher lautet der gesamte Ausdruck (mit den Personalisierungsregeln aus den Beispielen 1 und 2) wie folgt:

    <%InsertIf expression="${ecm:countMapElements(ecx:filter(user.RelatedAttribute['Einkäufe'], 'Artikelart', '==', 'Schuhe'))>0}"%> Text1 <%/InsertIf%>
    
    <%InsertElse expression="${ecm:countMapElements(ecx:filter(user.RelatedAttribute['nonuniquelinked'], 'Datum', '<=', ecx:formatDate(ecm:addInterval(date.today, '-1m'), 'JJJJ-MM-TT', ecm:timeZone('Europa/London'), '', false)))>0}"%> Text2 <% /InsertElse%>
    
    <%InsertElse%>Text3<%/InsertElse%>
    CODE