Skip to content

18.3 Beispiele

Nachfolgend finden Sie einige Beispiele, die sich mit Velocity Skript realisieren lassen.

18.3.1 Abmeldeskript automatisch über alle Mailinglisten

Verwendung: Mit diesem Skript kann sich ein Empfänger mit einem Klick von allen aktiven Mailinglisten abmelden.

Der Datensatz wird auf Basis der E-Mail-Adresse ermittelt. Anschließend werden alle Bindings (Zugehörigkeiten zu Mailinglisten) des Datensatzes geladen und geprüft, bei welchem Binding ein User Status 1 (= aktiv) ermittelt wird. In diesem Fall wird der Datensatz für diese Mailingliste abgemeldet, neuer Status des Datensatzes ist 3.

Durch die Verwendung von loadAllListBindings werden auch Mailinglisten, die zum Zeitpunkt der Skript-Erstellung noch nicht existieren, zukünftig berücksichtigt!

Im Skript ist in der markierten Zeile noch die entsprechende CompanyID einzugeben.

#set($customerID=$Customer.findByKeyColumn("EMAIL", $requestParameters.EMAIL.toLowerCase()))
#set($company_id = <cid>)
#if($customerID!=0)
$Customer.setCustomerID($customerID)
$Cutomer.loadCustDBStructure()
$Customer.getCustomerDataFromDb()
    #set($allMailingLists=$Customer.loadAllListBindings())
    #foreach($mailingList in $allMailingLists)
        #foreach($list in $mailingList)
            #set($mlist="$list.getMailinglistID()")
            #set($int_mlist=$ScriptHelper.parseInt($mlist))
            $BindingEntry.setMailinglistID($int_mlist)
            $BindingEntry.setCustomerID($customerID)
            #if($BindingEntry.getUserBindingFromDB($company_id) == true)
                #if($BindingEntry.getUserStatus() == 1)
                    $BindingEntry.setUserStatus(4)
                    $BindingEntry.setUserRemark("Opt-out by User")
                    $BindingEntry.updateStatusInDB($company_id)
                #end
            #end
        #end
    #end
#end

18.3.2 Aktivierung des User Status auf mehreren definierten Mailinglisten

Verwendung: Mit diesem Skript kann ein Empfänger das Double Opt-in mit einem Klick für mehrere Mailinglisten bestätigen.

Auf Basis der E-Mail-Adresse wird geprüft, ob für den Datensatz eine CustomerID existiert. Kann eine CustomerID ermittelt werden, wird ein Wert größer 0 ausgegeben. Anschließend werden die Bindings (Zugehörigkeiten zu Mailinglisten) des Datensatzes zu den gelisteten Mailinglisten (Zeile 5) geladen und geprüft, ob der Status „Wartet auf Bestätigung“ (= 5) vorliegt.

Wird ein Treffer für die CustomerID auf einer der genannten Mailinglisten gefunden, dann wird der Status von 5 auf 1 (= aktiv) geändert. Bei einem Status abweichend von 5 verändert sich für den Datensatz nichts auf der jeweiligen Mailingliste.

Im Skript sind in den markierten Zeilen noch die entsprechende CompanyID sowie die gewünschten MailinglistenIDs einzugeben.

#set($customerID = $Customer.findByKeyColumn("EMAIL", $requestParameters.EMAIL))
#set($lang = $requestParameters.language)
#set($companyID = <cid>)
#set($allMailingLists = [<ml1_id>,<ml2_id>,<ml3_id>,<ml4_id>])
#if($customerID!=0)
    $Customer.setCustomerID($customerID)
    $Customer.setCompanyID($companyID)
    $Customer.loadCustDBStructure()
    $Customer.importRequestParameters($requestParameters, null);
    $Customer.updateInDB();
    #foreach($mailingList in $allMailingLists)
        $BindingEntry.setMailinglistID($mailingList)
        $BindingEntry.setCustomerID($customerID)
        #if($BindingEntry.getUserBindingFromDB($companyID) == true)
            #if($BindingEntry.getUserStatus() == 5)
                $BindingEntry.setUserStatus(1)
                $BindingEntry.setUserRemark("Opt-in by User")
                $BindingEntry.updateStatusInDB($companyID)
            #end
        #end
    #end
#end
#set($scriptResult = "1")

18.3.3 Letzten versendeten Newsletter zustellen

(getLastSentWorldMailingIDByCompanyAndMailinglist)

Verwendung: Mit diesem Skript kann man einem Empfänger direkt nach der Bestätigung des Double Opt-ins (durch Klick auf den Aktivierungslink) den zuletzt versendeten Newsletter für die jeweilige Mailingliste zukommen lassen.

Üblicherweise führt der Klick auf den Aktivierungslink auf eine EMM-Willkommensseite. Dieser Seite wird eine Aktion zugeordnet, die folgenden Aufbau hat (unter Trigger-Verwaltung definieren):

Schritt 1: „Double opt-in confirmation“ (Double-Opt-in-Bestätigung), um den Empfänger auf der Mailingliste zu aktivieren (User Status = 1)

Schritt 2: „Load recipient data“ (Empfängerdaten laden) – damit werden die Daten des Datensatzes geladen, hiervon benötigen wir im folgenden Skript nur die $customerID

Schritt 3: „Script-action“ (Skript-Aktion), mit folgendem Velocity-Skript (anzupassen sind lediglich für die Company_ID und für die Mailinglist_ID):

## Parameter setzen ( z.B. $companyID = 15 )
#set($companyID = <cid>)
#set($mailingListID = <ml_id>)
  • *
## zuletzt versendetes Mailing ermitteln 
#set($lastSentMailingID=$ScriptHelper.getLastSentWorldMailingIDByCompanyAndMailinglist($companyID, $mailingListID))
  • *
## Newsletter senden
#set($mailing=$MailingDao.getMailing($lastSentMailingID, $companyID))
## customerID aus "Load recipient data"
$ScriptHelper.sendEventMailing($mailing, $customerID, 0, "1", null)
  • *
#set($scriptResult="1")

18.3.4 Bei Anmeldung auf Status prüfen

Verwendung: Beschrieben wird hier die Möglichkeit, einen Empfänger bei existierendem aktivem Binding abzuweisen, bzw. über den Status zu informieren.

Die Anmeldseite (z.B. DOI-1) sendet die Formulardaten an das Confirm-Formular (z.B. DOI-2). Bei dem DOI-2 wird nun eine eingängliche Skript-Aktion erstellt:

Schritt 1: Skript-Aktion (Velocity-Skript mit der notwendigen „Weiche“)

##feststellen, ob schon eine "Customer_ID" auf Basis der E-Mail existiert
#set($customerID = $Customer.findByKeyColumn("EMAIL", $requestParameters.email))
  • *
## Die Parameter für CompanyID und Mailingliste sollen aus dem Request übernommen werden.
#set($ci = $ScriptHelper.parseInt($!requestParameters.agnCI))
#set($mid = $ScriptHelper.parseInt($!requestParameters.agnMAILINGLIST))
## Der Formular-Aufruf wird per default auf erfolgreich gesetzt
#set($scriptResult = "1")
  • *
#if($customerID != 0)
$BindingEntry.setMailinglistID($mid)
$BindingEntry.setCustomerID($customerID)
  • *
   ## ein Datensatz wurde gefunden, es folgt die Prüfung auf ein Binding
   #if($BindingEntry.getUserBindingFromDB($ci) == true)
  • *
        ## ein Binding wurde gefunden, geprüft wird auf Status 1 = active
        #if($BindingEntry.getUserStatus() == 1)
  • *
           ## die Anmeldung wird abgebrochen, die Fehlerseite soll angezeigt werden
           #set($scriptResult = "0")
           #set($status = "Sie sind bereits angemeldet!")
        #end
  • *
        ## geprüft wird auf Status 3 = opt-out by user
        #if($BindingEntry.getUserStatus() == 3)
  • *
           ## die Anmeldung wird fortgesetzt
           #set($scriptResult = "0")
        #end
   #end
#end

Schritt 2: Datensätze hinzufügen / aktualisieren (am besten mit Doubletten-Abgleich und Double-Opt-In)

Schritt 3: Aktionsbasiertes Mailing versenden (zur Verifizierung des DOI durch den Adress-Eigner)

Auf der Fehlerseite kann nun im HTML-Code die Information des Status eingesetzt werden:

<p>Die Anmeldung konnte nicht fortgesetzt werden.<br />Ursache: $status</p>