Workflow-Designer
Aus Melin WebHelp
Workflows sind das zentrale Element der Melin 2 Plattform. Die Workflow-Verwaltung erreicht man vom Hauptmenü über den Menüpunkt "Workflow".
Die Grundidee basiert auf der Erkenntnis, daß sich alle Prozesse rund um das Thema Information Management (Email Messaging, Content Management, Statistik-Generierung, Verwalten von Userdaten) in einzelne Teilschritte (Plug-Ins) zerlegen lassen.
Beispiele für Plug-Ins
Email Versenden XML-Datei einlesen Anzahl Abonennten ermitteln
Die Teilschritte werden auf dem sogenannten Workflow-Grid (eine grafische Drag-and-Drop Oberfläche) logisch miteinander verbunden und bilden so eine Funktionseinheit.
Der große Vorteil dieser Herangehensweise ist die enorme Flexibilität, da jeder einzelne Workflow-Schritt individuell angepasst werden kann. Es ist kein Problem an eine beliebige Stelle des Workflows Inhalte aus externen Datenquellen einzufügen, Inhalte abzugleichen oder Benachrichtigungen abzusetzen.
Im folgenden soll nun ein einfacher Workflow entwickelt werden um das Prinzip der Workflow-Idee zu verdeutlichen. Wechseln Sie also vom Hauptmenü in den Menüpunkt "Workflow". Nach der Installation befindet sich dort bereits ein vorkonfigurierter Workflow, später können hier weitere Workflows hinzukommen. Je nach Nutzungslizenz können unterschiedlich viele Workflows parallel aktiviert werden.
Am Fuß der Seite gibt es links die Möglichkeit neue leereWorkflow-Grids zu erzeugen, rechts kann man sich eine Liste der installierten Plug-Ins anzeigen und auch neue Installieren.
Die Liste der installierten Plug-Ins ist insbesondere hilfreich da Sie dort zu jedem Plug-In eine ausführliche Dokumentation im PDF-Format erhalten. Im Paket ist auch ein Software Development Kit enthalten um selber eigene Plug-Ins zu entwickeln.
Unter http://www.melin.de/downloads erhalten sie über 50 weitere Plug-Ins um die Workflow-Engine zu erweitern.
In der Liste der Workflows befindet sich ein Muster-Workflow "samplegrid". Daneben gibt es verschiedene Buttons um diesen Workflow zu bearbeiten, zu duplizieren, zu löschen oder umzubenennen.
10. Der Workflow-Editor
Ein Klick auf "Bearbeiten" öffnet ein neues Fenster mit einem Java-Applet, dem Worfklow-Editor:
Sollte der Workflow-Editor bei Ihnen nicht erscheinen ist wahrscheinlich die Java-Installation auf Ihrem Rechner nicht auf dem aktuellen Stand. Unter http://www.java.com erhalten Sie die aktuelle Version (mindestens 1.4) des Java-Browser-Plug-Ins.
In der linken Häfte des Workflow-Editors finden Sie die zur Verfügung stehenden Plug-Ins nach Kategorien geordnet. Rechts ist das eigentliche Grid zu sehen. Plug-Ins können von links per Drag and Drop auf das Grid bewegt werden. Zum löschen zieht man ein Plug-In-Icon von rechts nach links über die Kategorieliste.
Unten befinden sich einige Steuerelemente: ganz links ist der Umschalter um zwischen der Status- und Editieransicht zu wechseln. Im laufenden Betrieb gibt die Status-Ansicht wichtige Informationen über die Auslastung der einzelnen Plug-Ins, die Wege einzelner Datenpakete durch die Workflows lassen sich exakt nachverfolgen.
Das Diskettensymbol dient zum abspeichern der aktuellen Workflow-Konfiguration.
Mit dem Play/Pause-Button kann der Hintergrund-Demon und damit die Ausführung des Grids kurzzeitig angehalten werden
Daneben befindet sich ein Statusfenster und ein Schieberegler um die Skalierung der Anzeige zu verändern.
Gerade bei sehr umfangreichen Grids ist es manchmal hilfreich die Anzeige zu verkleinern. Bei einer Skalierung auf weniger als 15% werden die Erklärungstexte ausgeblendet um die Übersichtlichkeit zu erhalten.
Das Fadenkreuz dient zur Zentrierung der Anzeige
Einige der Plug-Ins verfügen über eigene Konfigurationsoptionen die durch einen Doppelklick auf das Plug-In Icon bearbeitet werden können.
11. Plug-Ins
Jedes Plug-In hat maximal zwei Ein- und Ausgänge.
Die Eingänge sind links und oben (im folgenden mit West und Nord bezeichnet), die Ausgänge sind rechts und unten (im folgenden Ost und Süd). Da nicht jedes Plug-In alle Ein- und Ausgänge verwendet werden die verwendeten Konnektoren im Grid durch Pfeile markiert.
Im folgenden wird nun der "samplegrid"-Workflow weiter analyisert. Dieser übernimmt Inhalte aus dem integrierten NanoCMS und verschickt diese per Mail. Der erfahrene Anwender ist sicher in der Lage die geschilderte Aufgabe in weniger Schritten zu lösen, jedoch dient dieses Dokument dazu auch einen Überblick über die vorhandenen Plug-Ins zu geben.
Ein Klick auf das XML Import-Plug-In (links oben im Grid des "samplegrid"-Workflows, mit dem Beschreibungstext "NanoCMS Import") öffnet die Konfigurationsmaske für diesen Workflow-Schritt:
Das XML Import-Plug-In überwacht ein wählbares Verzeichnis (in diesem Fall "SITE-DIR/msite/export", der Bezeichner SITE-DIR wird zur Laufzeit ersetzt durch den plattformabhängigen Wert - z.B. "/home/melin/msite", der Vorteil von SITE-DIR ist daß man systemunabhängige Grids enwickeln kann).
Es werden alle Dateien eingelesen die dem Namensmuster "*.xml" entsprechen, wird kein Wert angegeben, werden alle Dateien eingelesen die in diesem Verzeichnis gefunden werden.
Die "Wait Time" gibt einen Pausenwert in Sekunden an die zwischen zwei Prüfungen ob neue Dateien im angegebenen Ordner sind gewartet wird. Höhere Werte schonen die Systemressourcen, unter Umständen dauert es länger bis ein neuer Datensatz vom System erfasst wird.
Sobald eine XML-Datei gefunden wird erzeugt das XML Import-Plug-In ein neues Datenobjekt das mit den gefundenen Inhalten befüllt wird. Anschließend wird dieses Datenobjekt an den nächsten Workflow-Schritt übergeben.
Jedes Datenobjekt besteht aus drei Blöcken: HASH, CODE und LISTE die jeweils unabhängig voneinander verändert werden können. Die meisten Plug-Ins nutzen nur einen der drei Blöcke, es gibt jedoch Plug-Ins (z.B. EmailSender) die alle drei benötigen.
Jeder Block in einem Dateobjekt kann unterschiedliche Daten aufnehmen:
HASH
Im Hash können beliebig viele Key/Value-Paare abgelegt werden, zum Beispiel "NAME=John". Der XML-Reader legt die Werte im Hash ab.
CODE Der Code speichert eine Textdatei, zum Beispiel ein Template
LISTE Die Liste speichert Informationen zeilenweise ("Array"), z.B. eine Liste von Emailadressen.
Die Bedeutung der einzelnen Felder wird klar wenn man den "samplegrid"-Workflow weiter betrachtet:
Im nächsten Schritt des Workflows wird eine Vorlage für ein Newsletter-Mailing eingelesen ("ReadTemplate" mit dem CodeReader-Plug-In). Ein Klick auf das CodeReader-Plug-In enthüllt die genaue Position der Textvorlage:
DOCUMENT-ROOT/melin/examples/sample_template.txt
Wichtig am CodeReader ist, daß der Inhalt der Datei in den "CODE"-Block eingelesen wird. Die Daten des XML-Readers im HASH des Datenobjekts sind hiervon also nicht betroffen.
Der nächste Schritt im Workflow ist das "Unicode2Ascii"-Plug-In. Es wird benötigt da die meisten Email-Clients keine Unicode-Zeichen verarbeiten können, das XML von Melin jedoch generell mit Unicode arbeitet. Das Plug-In entfernt Unicode-Zeichen aus allen Hash-Werten. Das Plug-In wird nicht benötigt wenn Dateien aus anderen CMS-Systemen übernommen werden da diese meist ASCII exportieren.
Anschließend wird dreimal dasselbe Plug-in eingesetzt, jedoch mit unterschiedlichen Parametern: das SetHashField-Plug-In setzt einen zusätzlichen Wert im Hash des Datenobjekts. In diesem Fall wird das Feld SUBJECT (später die Betreffzeile der Mail), das Feld FROM (Absender-Email) und das Feld M_SENDER (Klartextname des Absenders) gesetzt. Die genauen Werte kann man einsehen wenn man auf das jeweilige Icon klickt.
Der nächste Schritt im Workflow ist eine Verzweigung.
Bei einer Verzweigung wird das Datenobjekt verdoppelt und läuft parallel beide Workflowstränge weiter.
Im oberen Strang wird mit M_RECEIVER noch die Empfängeradresse gesetzt und anschließend eine Mail verschickt. Diese Mail dient in diesem Beispiel als Vorschau-Mail auf das eigentliche Mailing. Wenn Sie dieses Workflow-Grid testen wollen müssen Sie auf das EmailSender-Plug-In klicken und dort die Zugangsdaten zu einem SMTP-Server angeben. Das EmailSender-Plugin wird im folgenden Abschnitt ausführlich beschrieben da es sich um eine zentrale Eigenschaft des Systems handelt.
12. Der Schreibtisch
Parallel wird die Kopie auf den Schreibtisch gelegt. Der Schreibtisch ist ein Menüpunkt in Melin auf dem ein Anwender die Möglichkeit hat ein Datenobjekt zu genehmigen (z.B. Freigabe eines Mailings).
Zu jedem Objekt auf dem Schreibtisch gibt es vier Optionen:
Löschen Entfernt das Datenobjekt direkt aus dem Workflow.
Ablehnen Das Datenobjekt wird an den Süd-Ausgang des Workflow-Grids geleitet. Meist hast dies denselben Effekt wie das Löschen, jedoch lassen sch hier ggf. noch Benachrichtigungen an den Erzeuger im Workflow vorsehen.
Ansehen Zeit den HASH des Datenobjekts an. Diese Darstellung kann auch hilfreich sein um einen korrekten Datenimport zu kontrollieren.
Genehmigen Das Datenobjekt wird an den Ost-Ausgang des Workflow-Grids geleitet.
Wir das Dokument auf dem Schreibtisch genehmigt wird das Plug-In "UserDB_getEmails" aktiviert daß alle Abonnenten aus der Abonnentendatenbank einliest und in den LISTE-Block des Datenobejkts einfügt.
Anschließend wird der komplette Datensatz an das EmailSender-Plug-In übergeben, das aus den Gesamtdaten ein Mailing erzeugt. Hierbei wird die Vorlage aus dem CODE-Block pro Empfänger geparst und ggf. empfängerabhängige Veränderungen vorgenommen (Einsetzen des Namens oder anderer Profilfelder).
Das Mailing wird an alle Abonnenten versandt die im LISTE-Block gelistet sind.
13. Email Sender Plug-In
Das Email Sender Plug-In ist ist einiges der wesentlichen Plug-Ins des Melin-Systems.
Es verschickt Emails über einen definierbaren SMTP-Server an eine Liste von Empfängern. Als Vorlage dient der Code im CodeArray des Datenobjekts ein Template das durch das das Hash-Feld M_TEMPLATE definiert wird.
M_TEMPLATE gibt den vollständigen Pfad zum Template auf dem Server an (SITE-DIR bezw. DOCUMENT-ROOT können zur Vereinfachung verwendet werden). Wenn das Feld M_TEMPLATE definiert ist geniesst es eine höhere Priorität als der Inhalt des CODE-Arrays.
Der Name des Absenders und das Subject der Mail ergibt sich aus den HASH-Felder "FROM" und "SUBJECT". Um den Namen des Mail-Empfängers in die Mail einzusetzen wird folgende Sytax benutzt: $UD[HASHFELD]. Die Zahl der Einträge in der LISTE (Empfängerzahl des Mailings) kann über die Variable $$LISTSIZE angezeigt werden.
Je nach Template sind die Mails vom Typ text/plain oder text/html. Die Erkennung erfolgt automatisch (durch Inhaltsabschätzung). Wenn das Feld M_CONTENTYPE gesetzt ist, wird der Versand mit dem definierten Wert erfolgen. Ist das Feld nicht gesetzt wird der Typ autmatisch bestimmt.
Es können Attachements an die versendeten Mails angehängt werden. Sie werden durch ein Hashfeld, das mit M_ATTACHEMENT beginnt definiert. Z.B.: M_ATTACHEMENT415, VALUE: /melina/handbuch/installation.doc. Der Pfad zur angebenen Datei ist relativ zum DOCUMENT-ROOT.
Wenn eine HTML-Seite geschickt wird werden alle Grafiken mitgeschickt die zum korrekten Anzeigen der Seite notwendig sind (Inline images). Es wird davon ausgegangen, daß alle Grafik-URLS im Template absolut vom DOCUMENT-ROOT der Melin-Installation angegeben sind.
Es ist möglich in der versendeten Mail Datum und Uhrzeit einzubauen. Zu diesem Zweck existiert das folgende TagSet:
$DF[day] Tag (1..31) $DF[mon] Monat (1..12) $DF[year] Jahr (YYYY, 2000..2078) $DF[hour] Stunde (00-23) $DF[min] Minute (00-59) $DF[sec] Sekunde (00-59) $DF[wday] Wochentag (0..6, 0 = Sonntag) $DF[week] Kalenderwoche(1..52)
Die Werte entsprechen der Zeit, an der die Mail versendet wird. Zudem gibt es noch zwei Klartextparameter.
$DF[DE-wday] Wochentag im Klartext (Sonntag...Samstag) $DF[DE-mon] Monat im Klartext (Januar...Dezember)
Auf alle Werte im Hash kann mit %KEY% zugegrifen werden, wobei KEY für den Bezeichner des Hashfelds steht.
14. Robinson-Liste
Das EmailSender Plug-In verfügt ber eine interne Robinson-Funktion. Diese verhindert den Versand an vorher festgelegte Emailadressen, auch wenn diese als gültige Abonnenten eingetragen sind.
Die Robinson-Liste wird über das Menü "Robinson-Liste" gepflegt.
In die Textbox kann eine Liste von Emailadressen eingegeben werden die fortan für den Mailversand gesperrt sind. Die Liste hat keinen Einfluß auf die Abonnentendatenbank an sich.
Wenn die Sperrliste größer wird ist zu empfehlen eine eigene Tabelle in einer Datenbank anzulegen. Ein Beispiel hierzu findet sich in der Plug-In Beschreibung „SQL Filter“.
15. Emails Empfangen
Das Gegenstück zum Email Sender ist das Email Listener. Plug-In. Es prüft in zyklischen Abständen einen POP3-Server auf neue Mails ab. Anschließend wird ein neues Datenobjekt erzeugt.
Beipiel für den Inhalt einer Mail die über den Email Listener abgerufen wurde:
Felder einer Beispielmail:
<FROM>=?ISO-8859-1?Q?Sebastian_B=F6ttger?= <imperia@mac.com></FROM> <X-MAILER>Apple Mail (2.553)</X-MAILER> <M_BIRTHTIME>1070802546</M_BIRTHTIME> <MIME-VERSION>1.0 (Apple Message framework v553)</MIME-VERSION> <DATE>Sun, 7 Dec 2003 14:08:55 +0100</DATE> <EMAIL>imperia@mac.com</EMAIL> <CONTENT-TRANSFER-ENCODING>7bit</CONTENT-TRANSFER-ENCODING> <M_LIFECYCLE>0</M_LIFECYCLE> <X-LOOP-DETECT>1</X-LOOP-DETECT> <M_ID>212</M_ID> <RECEIVED>from mac.com</RECEIVED> <REPLY-TO>imperia@mac.com</REPLY-TO> <SENDER_NAME>login</SENDER_NAME> <BODY>Simple test for simple examples</BODY> <CONTENT-TYPE>text/plain</CONTENT-TYPE> <SUBJECT>test</SUBJECT> <TO>account@iforp.com</TO> <MESSAGE-ID><82D2ABE0-28B6-11D8-BEF3-000393CC1EB2@mac.com></MESSAGE-ID>
Hinweis: die obige Datei wurde mit einem einfachen Workflow erzeugt:
Der Email Listener kann für mehere Einsatzbereiche verwendet werden, z.B.
• Abrufen von Mails an Sammeladressen und Routing abhängig von Schlagworten • Abrufen der Rückläufer eines Mailings (Bounce Mails)
16. Bounce Mails
Jedes Mailing erzeugt Rückläufer. Um diese Rückläufer effizient verarbeiten zu können gibt es zwei Plug-Ins:
• SMTP ErrorCheck wertet die Fehlercodes der Mailserver aus • BounceFilter verarbeitet den Inhalt der Mails abhängig von Schlüsselwörtern
Die Schlüsselworte selbst werden im Menüpunkt "Bounce Mails" definiert.
Es können Kriterien für drei Fälle definiert werden:
• Abmeldungen (Unsubscribe) • Urlaubsrückläufer (Vacation) • Anfrage (Request)
Für jeden dieser Fälle kann eine Liste von Schlüsselworten jeweils für die Betreffzeile (Subject) als auch für den Mailinhalt (Body) angegeben werden. Tritt eines dieser Schlüsselworte im jeweiligen Feld auf wird das Datenobjekt an den Ost-Ausgang weitergeleitet, ansonsten nach Süden.
In der Konfiguration des Plug-Ins kann gewählt werden welcher Fall ausgewertet werden soll (Unsubscribe, Vacation, Request)
Die Liste der Schlüsselworte wird zeilenweise verarbeitet und mit dem Inhalt des durchlaufenden Datenpakets verglichen. Ein Treffer entweder im Subject- oder im Body-Feld reicht aus um ein Routing an den Ost-Ausgang zu veranlassen.
Die Schlüsselworte können Regular Expressions beinhalten um das Matching zu optimieren.
Beispiele die ein Routing nach Osten auslösen bei einer Betreff-Zeile
"Out of office reply: Bin vom 18. bis 22. Juni im Urlaub"
Matchline Begründung
Out of office Ist komplett enthalten in der Betreffzeile
Urlaub Ist komplett enthalten in der Betreffzeile
Bin vom .* Urlaub Regular Expression. Der Ausdruck ".*" steht für eine beliebige Zeichenkette.
Regular Expressions sind ein sehr leistungsfähiges Werkzeug zur Behandlung von Matchings. Eine komplette Beschreibung würde den Rahmen dieser Dokumentation sprengen. Die wichtigsten Platzhalter sind:
\\d Eine beliebige Dezimalzahl (eine Stelle)
\\d+ Mindestens eine beliebige Dezimalzahl (mindestens eine Stelle)
\\d\\d\\d Eine dreistellige Dezimalzahl
\\s Ein Leerzeichen
\\s+ Mindestens ein Leerzeichen
\\s* Möglicherweise ein oder mehrere Leerzeichen
[^:] Alles ausser einem Doppelpunkt
. Punkt. Ein beliebiges Zeichen
.* Beliebig viele Zeichen
\\. Ein Punkt
Urlaub.* Ein String der mit Urlaub beginnt, z.B. "Urlaubsantrag", "Urlaub ist schön", "Urlaubsvertretung"
Urlaub\\s.* Das Wort Urlaub gefolgt von einem Leerzeichen, anschliessend ein bliebiger Resttext (z.B. "Urlaub ist schön", nicht aber "Urlaubsantrag".
Beispiel-Workflow
Das BounceMail-Plugin kann an beliebiger Stelle im Workflow verwendet werden und reagiert auf die Felder SUBJECT und BODY die vom EmailListener automatisch angelegt werden.
Je nach Einstellung wird das Datenobejkt mit einem der drei BounceMail-Kriterienfelder abgeglichen.
17. SMTP Fehler
Wenn eine Mail nicht an den Empfänger zugestellt werden kann senden die meisten Mailserver die Mail wieder mit einer entsprechenden Fehlerkennung zurück (Bounce Mail Error Code).
Das SMTP ErrorCheck scannt die eingehenden Mails auf bekannte Antwortcodes und verzweigt daraufhin im Workflow.
Abb: Implementirungsbeispiel SMTP ErrorCheck
Im Konfigurationsfenster können entweder Antwortcode-Gruppen behandelt werden oder Einzelcodes:
Antwortcodes (Gruppen)
• 2xx Success (Email konnte zugestellt werden, die Bouncemail kann eine Antwort zu sein) • 4xx Temporary Error (Vorübergehender Fehler) • 5xx Fatal Error (Schwerer Fehler)
Antwortcodes (Einzelliste)
• 214 Help Message (Hilfetext) • 220 The server is ready (Server ist bereit) • 221 The server is ending the conversation (Server hat Kommunikation beendet) • 250 The requested action was completed (Operation beendet)
Auf Abonnentenseite auftretende Fehler die behebbar sind
• 421 The mail server will be shutdown. Save the mail message and try again later. • 450 The mailbox that you are trying to reach is busy. Wait a little while and try again. • 451 The requested action was not done. Some error occured in the mail server. • 452 The requested action was not done. The mail server ran out of system storage.
Schwere Fehler die bei wiederholtem Auftreten zum entfernen des Abonnenten aus der Abonnentendatenbank führen sollten:
• 500 The last command contained a syntax error or the command line was too long. • 501 The parameters or arguments in the last command contained a syntax error. • 502 The mail server has not implemented the last command. • 503 The last command was sent out of sequence. For example, you might have sent DATA before sending RECV. • 504 One of the parameters of the last command has not been implemented by the server. • 550 The mailbox that you are trying to reach can't be found or you don't have access rights. • 551 The specied user is not local, part of the text of the message will contain a forwarding address. • 552 The mailbox that you are trying to reach has run out of space. Store the message and try again tomorrow or in a few days - after the user gets a chance to delete some messages. • 553 The mail address that you specified was not syntactically correct. • 554 The mail transaction has failed for unknown causes.