agorum core Workflow Development Guide Version 6.4.9
Transcrição
agorum core Workflow Development Guide Version 6.4.9
agorum core Workflow Development Guide Version 6.4.9 Copyright 2010, agorum Software GmbH 10.03.2011, Dokumentenversion 1.0.8 Inhaltsverzeichnis 1. Einleitung 1.1. Was bietet die Workflowkomponente . . . . . . . . . . . . . . . . . 1.2. Für wen ist dieses Handbuch . . . . . . . . . . . . . . . . . . . . . . 1.3. Wie ist dieses Handbuch zu lesen . . . . . . . . . . . . . . . . . . . 5 5 5 6 2. Installation der Entwicklungsumgebung 2.1. Vorbereitung . . . . . . . . . . . . . . 2.2. Eclipse + jBPM . . . . . . . . . . . . . 2.2.1. Eclipse manuell installieren . . 2.2.2. Vordefinierte Eclipse Umgebung . . . . 7 7 7 7 8 . . . . . . . . . . . . . . . . . . 9 9 9 9 12 14 15 18 18 20 23 27 28 29 29 35 37 38 39 . . . . . . . . . . . . . . . . . . verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Tutorial 3.1. Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Anlegen des Workflow-Projektes mit dem agorum Eclipse-Plugin . 3.2.1. Anlegen der Projektstruktur . . . . . . . . . . . . . . . . . 3.2.2. Einfügen der benötigten Workflow-Libraries in das Projekt 3.2.3. Hinzufügen von weiteren Libraries zum Projekt . . . . . . 3.2.4. Anlegen der Process Definition . . . . . . . . . . . . . . . 3.3. Definieren des Test-Workflows . . . . . . . . . . . . . . . . . . . . 3.3.1. Definieren von Start und Ende . . . . . . . . . . . . . . . . 3.3.2. Erzeugen einer Maske . . . . . . . . . . . . . . . . . . . . . 3.3.3. Erstellen eines Action-Handlers . . . . . . . . . . . . . . . 3.3.4. Verbinden der Workflow-Knoten . . . . . . . . . . . . . . . 3.3.5. Deployment des Workflows . . . . . . . . . . . . . . . . . . 3.4. Definieren der Masken . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1. Anlegen einer Maske . . . . . . . . . . . . . . . . . . . . . 3.4.2. Installieren der Masken . . . . . . . . . . . . . . . . . . . . 3.4.3. Test des Workflows . . . . . . . . . . . . . . . . . . . . . . 3.4.4. Anzeige der Log-Informationen . . . . . . . . . . . . . . . 3.5. Tutorial-Ende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Erweiterte Themen 40 4.1. Weitere Funktionen des agorum Workflow Eclipse-Plugins . . . . . . 40 4.1.1. Erzeugen eines Installationspakets und dessen Installation auf dem Server . . . . . . . . . . . . . . . . . . . . . . . . . 40 2 Inhaltsverzeichnis 4.2. 4.3. 4.4. 4.5. 4.6. 4.1.2. Erzeugen eines Timephased Action Scripts . . . . . . . . . . 4.1.3. Projekt umbenennen . . . . . . . . . . . . . . . . . . . . . . 4.1.4. EA-Designer-Maske importieren . . . . . . . . . . . . . . . . 4.1.5. Konvertieren einer *.def-Datei in eine *.xml-Datei . . . . . . Mehrsprachigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1. Übersetzungsschlüssel in den Masken und Workflows . . . . 4.2.2. Übersetzung von Variablenamen und Werten . . . . . . . . . 4.2.3. Zum Schluss . . . . . . . . . . . . . . . . . . . . . . . . . . . Möglichkeiten der Maskengestaltung . . . . . . . . . . . . . . . . . 4.3.1. Text-Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Eingabe-Feld, Einzeilig . . . . . . . . . . . . . . . . . . . . . 4.3.3. Eingabe-Feld, Mehrzeilig . . . . . . . . . . . . . . . . . . . . 4.3.4. Datum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.5. Drop-Down-Box . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.6. Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.7. EADesigner . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.8. Abstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.9. Horizontale Linie . . . . . . . . . . . . . . . . . . . . . . . . 4.3.10. Knöpfe für Transitions . . . . . . . . . . . . . . . . . . . . . 4.3.11. Benutzersuche . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.12. Spezial-Ordner-Suche . . . . . . . . . . . . . . . . . . . . . . 4.3.13. Liste der Aktivitäten anzeigen . . . . . . . . . . . . . . . . . 4.3.14. Nach oben springen . . . . . . . . . . . . . . . . . . . . . . . 4.3.15. Zu Aktivitäten springen . . . . . . . . . . . . . . . . . . . . 4.3.16. Zu Anhängen springen . . . . . . . . . . . . . . . . . . . . . 4.3.17. Zu Anhänge-Liste springen . . . . . . . . . . . . . . . . . . . 4.3.18. Anhangs-Liste darstellen . . . . . . . . . . . . . . . . . . . . 4.3.19. Anhang-Schnellansicht (Einzelelement) . . . . . . . . . . . . 4.3.20. Anhang-Schnellansicht (Alle) . . . . . . . . . . . . . . . . . 4.3.21. Untere Buttonleiste ändern . . . . . . . . . . . . . . . . . . Erstellen eines Parameters zur direkten Ansteuerung von Workflows Was Sie sonst noch wissen sollten . . . . . . . . . . . . . . . . . . . 4.5.1. Die ParameterController.xml und EditMaskController.xml . 4.5.2. Vordefinierte Variablen . . . . . . . . . . . . . . . . . . . . . 4.5.3. Hidden-Variablen . . . . . . . . . . . . . . . . . . . . . . . . 4.5.4. Löschen einer Variable . . . . . . . . . . . . . . . . . . . . . 4.5.5. Suche nach Variablen . . . . . . . . . . . . . . . . . . . . . . 4.5.6. Timer-Nutzung für Zeitbasierte Workflows . . . . . . . . . . 4.5.7. Weitere Beispiel-Workflows . . . . . . . . . . . . . . . . . . . Workflow-Versionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1. Automatische Workflow-Versionierung . . . . . . . . . . . . 4.6.2. Manuelle Workflow-Versionierung . . . . . . . . . . . . . . . 4.6.3. Ändern der Workflow-Version . . . . . . . . . . . . . . . . . 43 44 45 46 47 47 49 51 51 51 51 52 52 53 53 54 54 54 54 55 55 56 56 56 56 57 57 57 58 58 58 60 60 64 65 65 66 66 68 68 68 68 68 3 Inhaltsverzeichnis 5. Schlusswort 70 Abbildungsverzeichnis 71 A. Anhang 73 A.1. Versions-Historie dieses Dokumentes . . . . . . . . . . . . . . . . . 73 A.2. Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4 Kapitel 1. Einleitung 1.1. Was bietet die Workflowkomponente Die Workflowkomponente von agorum core basiert auf jBPM von JBoss. Damit steht eine leistungsstarke Workflow-Basis zur Verfügung. jBPM ist dabei perfekt und nahtlos in die agorum core Komponenten integriert: agorum desk 4web, Windows Client Explorer-Integration, Suche, Mitteilungssystem, DMS-Laufwerk, etc... Dieses Dokument setzt voraus, dass Sie vertraut sind mit der Arbeitsweise und Integration der Workflowkomponente in agorum core. Wenn nicht, sollten Sie zuerst das Benutzer und Administrationshandbuch zum agorum core Workflow lesen. 1.2. Für wen ist dieses Handbuch Wenn Sie gerne eigene Workflows für agorum core entwickeln möchten und bereits ein wenig Programmiererfahrung mitbringen, dann sind Sie hier genau richtig. Dieses Dokument zeigt Ihnen, wie Sie... • ...die Notwendige Entwicklungsumgebung aufsetzen • ...einen Basis-Workflow definieren • ...Masken für diesen Workflow definieren • ...den Workflow in agorum core installieren (Deployment) 5 Kapitel 1. Einleitung • ...Wissenswertes rund um die Workflow-Komponente 1.3. Wie ist dieses Handbuch zu lesen Die Kapitel dieses Dokumentes bauen aufeinander auf. Die einzelnen Schritte von der Installation bis hin zum fertig verwendbaren Beispiel-Workflow sind als Tutorial aufgebaut. In den einzelnen Schritten wird alles Wissenswerte zu den jeweiligen Themen erklärt. Für ein komplettes Verständnis sollten Sie daher das Dokument komplett durcharbeiten. 6 Kapitel 2. Installation der Entwicklungsumgebung 2.1. Vorbereitung Um einen entwickelten Workflow auch testen zu können, benötigen Sie ein funktionierendes agorum core System mit installierter Workflow-Komponente. 2.2. Eclipse + jBPM 2.2.1. Eclipse manuell installieren Wenn Sie selber eine Eclipse Umgebung aufsetzen möchten oder gerne Ihre eigene verwenden möchten, dann wird hier beschrieben, was für Einzel-Komponenten Sie benötigen, bzw. nachinstallieren müssen. Sie können allerdings auch unser PreBuild-Eclipse-Bundle herunterladen, das bereits alles vorkonfiguriert enthält. (Siehe Kapitel 2.2.2). Sie benötigen folgende Komponenenten um einen agorum core Workflow entwickeln zu können: • Eclipse IDE for Java Developers, ab Version 3.5 (http://www.eclipse.org/ downloads) • jBPM Process Designer ab Version 3.1.7 (http://www.jboss.org/jbossjbpm/ jbpm_downloads, oder direkt: http://sourceforge.net/project/showfiles. 7 Kapitel 2. Installation der Entwicklungsumgebung php?group_id=70542) • Das agorum Workflow Eclipse-Plugin • Ein Java Runtime Environment oder ein Java SE Development Kit mindestens in der Version 1.5(http://www.oracle.com/technetwork/ java/javase/downloads/index.html. Wie Sie die jeweiligen Komponenten installieren, erfahren Sie auf den Webseiten der jeweiligen Hersteller. 2.2.2. Vordefinierte Eclipse Umgebung verwenden Als Alternative zur manuellen Installation bieten wir Ihnen ein komplett vorkonfiguriertes Eclipse-Paket für Windows an, das alles beinhaltet, was Sie zum Loslegen benötigen. Um das Paket zu erhalten, fragen Sie bei uns nach. Das Paket hat den Namen: agorum-workflow-devbundle.zip Entpacken Sie dieses Paket an einen beliebigen Ort und starten Sie Eclipse mit eclipse.bat aus dem eclipse Verzeichnis. 8 Kapitel 3. Tutorial 3.1. Einleitung Dieses Tutorial zeigt Ihnen Schritt für Schritt, wie Sie einen ersten einfachen Workflow selbst gestalten und verwenden können. Es vermittelt dabei alles Wissenswerte rund um die Workflow-Komponente von agorum core. 3.2. Anlegen des Workflow-Projektes mit dem agorum Eclipse-Plugin 3.2.1. Anlegen der Projektstruktur Öffnen Sie Ihre Eclipse-Entwicklungsumgebung. Wählen Sie im Eclipse Menü File → New → Other... → agorum Workflow → agorum Workflow Project (Abb. 3.1). Alternativ dazu klicken Sie mit der rechten Maustaste im Package Explorer von Eclipse in einen leeren Bereich und wählen im Kontextmenü agorum workflow → New agorum Workflow Project. Es erscheint der Wizard aus Abb. 3.2. Geben Sie einen Namen im Feld Project Name ein: TestWorkflow. Wählen Sie im nächsten Feld Base path of project das Verzeichnis aus, in dem das neue Workflowprojekt angelegt werden soll. Im Feld Module name wird Ihnen für den Modulnamen ein Vorschlag gemacht, den sie in aller Regel so belassen sollten, der aber von Ihnen beliebig abgeändert werden kann. Haben Sie alle Eingaben getätigt klicken Sie auf Finish. Es wird nun das Projekt TestWorkflow mit der kompletten Projektstruktur, wie sie für agorum Workflow-Projekte benötigt wird, im Eclipse Package Explorer angelegt (siehe Abb. 3.3). 9 Kapitel 3. Tutorial Abbildung 3.1.: Anlegen eines neuen Workflow-Projektes in Eclipse Abbildung 3.2.: Der Wizard zum Anlegen eines Workflow-Projektes in Eclipse 10 Kapitel 3. Tutorial Abbildung 3.3.: Projektstruktur des neuangelegten Workflow-Projektes in Eclipse Besonders wichtig ist, dass Sie für Java 1.4 kompatibel entwickeln. Prüfen Sie das, indem Sie im Package Explorer mit einem Rechtsklick der Maus auf das Projekt das Kontextmenü öffnen und dort den Menüeintrag Properties auswählen. Dort klicken Sie links auf Java Compiler. Rechts erscheint dann eine neue Ansicht. Bei Compiler compliance level muss 1.4 stehen. Falls nicht, haken Sie Enable project specific settings an und wählen Sie 1.4 aus (Abbildung 3.4). Klicken Sie dann auf OK 11 Kapitel 3. Tutorial Abbildung 3.4.: Einstellung des Java-Compilers in Eclipse 3.2.2. Einfügen der benötigten Workflow-Libraries in das Projekt Um die benötigten Libraries für die Workflow-Entwicklung hinzuzufügen, wählen Sie das gerade erzeugte Projekt im Package Explorer aus und zeigen durch Klick mit der rechten Maustaste auf dieses Projekt das Kontextmenü an. Im Kontextmenü wählen Sie agorum workflow → Add agorum workflow standard libs to project (Abb. 3.5). 12 Kapitel 3. Tutorial Abbildung 3.5.: Menü zum hinzufügen der agorum Standard Workflow Libraries Im nun erscheinenden Wizard (Abb. 3.6) belassen Sie die beiden Einträge in den Feldern Workflow project base path und Workflow name so wie sie sind und navigieren durch Klick auf die Browse...-Schaltfläche hinter dem Feld Installation directory of agorum core in das Verzeichnis in dem sich die Basis-Installation von agorum core befindet (z.B. C:\Programme\agorum) (siehe Abbildungen 3.5 und 3.6). Beenden Sie den Wizard mit Klick auf die Schaltfläche Finish. Die benötigten Libraries werden in das Unterverzeichnis ../libs des Projektes kopiert und die Klassenpfadeinträge werden automatisch angelegt. Wählen Sie mit der Maus den Projektordner aus und drücken Sie die F5 -Taste. Nach dem Refresh des Projektes sehen Sie den zusätzlichen Eintrag Referenced Libraries, der die Klassenpfad-Referenzen auf die gerade hinzugefügten Libraries enthält (siehe Abbildung 3.7). 13 Kapitel 3. Tutorial Abbildung 3.6.: Wizard zum Hinzufügen der Standard-Libraries zum Projekt Abbildung 3.7.: Hinzugefügte Libraries 3.2.3. Hinzufügen von weiteren Libraries zum Projekt Hierzu wählen Sie durch Rechtsklick mit der Maus auf das Projekt im Kontextmenü den Menüpunkt agorum workflow → Add libs to project aus. Im nun erscheinenden Wizard (Abb. 3.8) belassen Sie die Einträge in den Feldern Workflow project base path und Workflow name so wie sie sind. Mit der Schaltfläche Browse... hinter dem Feld agorum workflow libs öffnen Sie einen Datei-Dialog mit dem sie die entsprechenden Libraries auswählen können (Sie können auch mehrere Library-Dateien auswählen). Die Pfade der ausgewählten Dateien werden im 14 Kapitel 3. Tutorial Feld agorum Workflow libs angezeigt. Klicken Sie auf Finish. Wie schon beim Hinzufügen der agorum Standard-Libraries werden die *.jar-Dateien ins ../libs Verzeichnis kopiert und die Klassenpfadeinträge entsprechend angepasst. Durch Drücken der F5 -Taste auf das augewählte Projekt wird dies dann sichtbar. Abbildung 3.8.: Wizard zum Hinzufügen der Standard-Libraries zum Projekt 3.2.4. Anlegen der Process Definition Klicken Sie nun auf den Ordner src jpdl und wählen Sie im Menü File → New → Other. Es erscheint ein neues Fenster. Wählen Sie dort JBoss jBPM/Process Definition und klicken Sie auf den Knopf Next. Im darauffolgenden Fenster geben Sie bei Process Name TestWorkflow ein. Der Process Name sollte immer dem Projektnamen entsprechen. Bei Source Folder sollte TestWorkflow/src jpdl bereits ausgefüllt stehen. (siehe Abbildung 3.9) 15 Kapitel 3. Tutorial Abbildung 3.9.: Erstellen einer Workflow-Definition Klicken Sie nun auf den Knopf Finish. Es sollte nun eine Prozessdefintion mit dem Namen processdefinition.xml im Package Explorer vorhanden sein. Wenn Sie diese doppelklicken dann öffnet sich der jBPM Designer auf der rechten Seite. Achten Sie darauf, dass im unteren Bereich die Ansicht Properties vorhanden ist. Falls nicht, machen Sie folgendes: Gehen Sie im Menü auf Windows/Show View/Other und wählen Sie dort General/Properties aus (siehe Abbildung 3.10). Wenn alles korrekt eingestellt ist, dann sollte Eclipse in etwa so aussehen, wie in Abbildung 3.11 gezeigt. 16 Kapitel 3. Tutorial Abbildung 3.10.: Anzeigen des Reiters properties 17 Kapitel 3. Tutorial Abbildung 3.11.: Fertige Ansicht mit geöffnetem Workflow-Designer 3.3. Definieren des Test-Workflows 3.3.1. Definieren von Start und Ende Als erstes wird dem Workflow selbst ein Name und eine Beschreibung vergeben. Klicken Sie dazu auf eine freie Fläche im Workflow-Designer. Im unteren Bereich sollte dann im Reiter Properties die Process Definition erscheinen. Bei Name sollte bereits das zuvor eingegebene TestWorkflow stehen (die korrekte Schreibweise ist hier sehr wichtig, weil später in den Maskendefinitionen darauf verwiesen wird). Bei Description tragen Sie bitte eine Beschreibung für diesen Workflow ein. Diese kann entweder Klartext sein, zum Beispiel Testworkflow oder auch ein Textschlüssel, der in einer der Message-Dateien definiert wird, damit die Beschreibung Mehrsprachig sein kann (dazu jedoch später mehr). Diese Beschreibung wird dann später im Webportal angezeigt. Tragen Sie nun eine Beschreibung in dieses Feld ein. (siehe Abbildung 3.12) 18 Kapitel 3. Tutorial Abbildung 3.12.: Eintragen der Workflow-Beschreibung Erzeugen Sie nun einen Start-Knoten, indem Sie auf Start klicken im linken Menü des Workflow-Designers. Platzieren Sie diesen Knoten mit einem Klick auf die freie Fläche rechts neben dem Menü. Benennen Sie diesen Knoten um in start und vergeben Sie eine Beschreibung. Diese ist nur für interne Zwecke und dient lediglich Ihrer Übersicht. (siehe Abbildung 3.13) Abbildung 3.13.: Erzeugen des Start-Knotens 19 Kapitel 3. Tutorial Auf die gleiche Art und Weise erzeugen Sie einen End-Knoten und Vergeben auch hier den Namen end und eine Beschreibung. Die Namen start und end sind dabei unwichtig, die Knoten können auch anders benannt werden. (siehe Abbildung 3.14) Abbildung 3.14.: Erzeugen des Endknotens 3.3.2. Erzeugen einer Maske In diesem Beispiel soll eine Eingabe-Maske definiert werden, bei der ein Benutzer einen Wert eingeben kann. Erzeugen Sie dazu einen Task Node und platzieren Sie diesen zwischen dem Start und dem End-Knoten. Vergeben Sie nun einen Namen für diesen Knoten. Der Name ist sehr wichtig für die Masken, die später definiert werden, merken Sie sich also diesen Namen. In unserem Beispiel nennen Sie diese Maske nun MyFirstTask. Die Schreibweise des Namens (Groß-Klein!) ist auch hier sehr wichtig, weil im späteren Verlauf wieder darauf verwiesen wird. Und als Beschreibung geben Sie zum Beispiel Meine erste Maske ein. (siehe Abbildung 3.15) 20 Kapitel 3. Tutorial Abbildung 3.15.: Definieren des Masken-Knotens Bis jetzt wurde nur der Knoten für die Maske erzeugt, für die eigentliche Maskendefinition klicken Sie nun im Properties-Bereich (während Sie den Task-Knoten noch ausgewählt haben) auf den Bereich Tasks. Klicken Sie dann dort in dem leeren Kasten mit der Rechten Maustaste und wählen Sie New Task. Es erscheinen weitere Eingabe-Möglichkeiten. Bei Name tragen Sie EXAKT dasselbe ein, wie auch schon beim Knoten, also MyFirstTask. Im Feld Beschreibung tragen Sie zum Beispiel Meine erste Maske ein. Die Beschreibung kann hier auch wieder ein Textschlüssel für die Übersetzung sein. Diese Beschreibung wird später in der Weboberfläche für die jeweilige Maske angezeigt. (siehe Abbildung 3.16) 21 Kapitel 3. Tutorial Abbildung 3.16.: Definieren der eigentlichen Maske Nun muss noch definiert werden, wer diese Maske eigentlich angezeigt bekommen soll, dazu klicken Sie auf den Reiter Assignment. Das kann zum Beispiel direkt ein Benutzername sein, eine Gruppe, eine Swimlane oder ein Platzhalter. Folgend eine Aufzählung möglicher Werte: Swimlane Wenn Sie als Assignment swimlane wählen, dann können Sie eine zuvor definierte Swimlane dort eintragen (dies können Sie bei den Eigenschaften des Workflows definieren, wenn Sie auf eine freie Fläche im Editor klicken). Swimlanes sind im Prinzip Gruppen zugeordnet. Sobald ein Benutzer dieser Gruppe die Maske angenommen hat, werden alle weiteren Masken, die dieser Swimlane zugeteilt sind, direkt diesem Benutzer zugeteilt im Laufe eines Prozesses. Actor Wählen Sie Actor aus, dann können Sie direkt einen Benutzernamen aus agorum core eintragen. Sie können auch einen Platzhalter verwenden, ein gängiges Beispiel ist: #{ac initialPerformer}. Diese Variable ist standardmäßig definiert und entspricht der Person, die den Workflow gestartet hat. Das ist zum Beispiel dann sinnvoll, wenn direkt Eingaben nach dem Start getätigt werden sollen, also eine Maske direkt dem Starter gegeben werden soll. Handler Wenn Sie hier den Handler agorum. workflow. ejb. jbpm. handler. AgorumPooledActorAssignmentHandler bei Class name eintragen, dann können Sie in der Config Info einen groupName aus agorum core ver- 22 Kapitel 3. Tutorial geben. Dies bedeutet, dass diese Maske immer dieser Gruppe zugeteilt wird und dann eine Person dieser Gruppe diese Maske annehmen kann. In diesem Beispiel werden wir die Maske der Gruppe GRP Demo zuteilen. Bitte achten Sie darauf, dass diese Gruppe in agorum core vorhanden ist! Wählen Sie dazu Handler aus der Drop-Down-Box aus und geben Sie als Class name agorum. workflow. ejb. jbpm. handler. AgorumPooledActorAssignmentHandler ein (Sie können auch dannach suchen). Haken Sie dann groupName an und geben Sie als Wert GRP Demo ein. (siehe Abbildung 3.17) Abbildung 3.17.: Auswahl der Personen, die die Maske erhalten sollen 3.3.3. Erstellen eines Action-Handlers Um ein möglichst umfangreiches Beispiel zu erstellen, wird nun noch folgendes gemacht. Wir möchten, bevor die Maske geöffnet wird, eine Variable, die später in der Maske angezeigt wird, mit einem Wert belegen. Klicken Sie dazu (immer noch der Task-Knoten ausgewählt) auf Events. Im freien Feld danneben, klicken Sie mit der rechten Maustaste und wählen Sie New Event. Bei Event Type wählen Sie node-enter (bedeutet, sobald dieser Knoten betreten wird). Klicken Sie nun mit der rechten Maustaste auf node-enter im linken Feld und wählen Sie New Action. Wählen Sie die Aktion action aus. Vergeben Sie einen Namen, zum Beispiel TestAction und klicken Sie auf den Reiter Details in der Auswahlbox wählen Sie Handler. Jetzt muss bei Class name die Klasse eingetragen werden, die die gewünschte Operation durchführt, das werden wir gleich tun. Diese Klasse muss 23 Kapitel 3. Tutorial aber erst definiert werden. Tragen Sie vorab folgendes ein agorum.test.TestAction1 (siehe Abbildung 3.18) Abbildung 3.18.: Erstellen einer Aktion, die ausgeführt wird, bevor die Maske geladen wird Nun muss erstmal der Handler erzeugt werden, der ausgeführt werden sollen, wenn der Knoten betreten wird. Klicken Sie dazu im Package Explorer auf den Ordner src java mit der rechten Maustaste und wählen Sie New/Class. Bei Source Folder sollte bereits TestWorkflow/src java eingetragen sein. Geben Sie bei Package agorum.test ein und bei Name TestAction1, genau so, wie im Abschnitt vorher definiert. Bei Superclass tragen Sie agorum. workflow. ejb. jbpm. handler. AgorumBaseActionHandler ein. Klicken Sie auf Finish. (siehe Abbildung 3.19) 24 Kapitel 3. Tutorial Abbildung 3.19.: Definieren eines Test-Aktions-Handlers Es wurde nun eine Java-Klasse als Hülle angelegt, in der Sie nun die gewünschte Aktion integrieren können. Wir möchten nun folgendes machen: setzen eines Wertes für die Variable testVariable1 (diese wird dann später in der Maske dargestellt). Dazu tragen Sie folgenden Code in der Funktion executeInternal ein: 1 2 3 4 5 6 ... public void executeInternal ( ExecutionContext arg0 ) throws Exception { arg0 . setVariable ( " testVariable1 " , " Ein Test Wert " ) ; log ( " Testausgabe , es wurde die Variable testVariable1 belegt " ) ; } ... In Zeile 3 wird die Variable testVariable1 mit dem Wert Ein Test Wert belegt. In der Zeile 4 wird ein log-Eintrag gemacht (dieser erscheint dann nachher in 25 Kapitel 3. Tutorial der Ansichts-Maske des Workflows und kann zur Fehlersuche oder Protokollierung verwendet werden.) Eventuell müssen Sie noch ein @override löschen (das macht Eclipse automatisch hin, um darauf hinzuweisen, dass Sie die Funktion implementieren müssen). Der komplette Code sieht dann so aus: 1 2 3 4 5 6 7 8 9 package agorum . test ; import org . jbpm . graph . exe . ExecutionContext ; import agorum . workflow . ejb . jbpm . handler . A go r u m B a s e A c t i o n H a n d l e r ; public class TestAction1 extends A g o r u m B a s e A c t i o n H a n d l e r { private static final long serialVersionUID = 1 L ; 10 11 12 13 14 } public void executeInternal ( ExecutionContext arg0 ) throws Exception { arg0 . setVariable ( " testVariable1 " , " Ein Test Wert " ) ; log ( " Testausgabe , es wurde die Variable testVariable1 belegt " ) ; } Der Code, den Sie hier definieren wird später mit dem Workflow im Deployment Prozess automatisch in agorum core installiert. Hier sehen Sie das ganze nochmal als Abbildung 3.20. Für tiefergehende Beispiele schauen Sie sich bitte die Dokumentation von jBPM an. 26 Kapitel 3. Tutorial Abbildung 3.20.: Erstellen der Test-Klasse TestAction1 3.3.4. Verbinden der Workflow-Knoten Wechseln Sie wieder zurück zum Workflow-Designer (Doppelklick auf processdefinition.xml links im Package Explorer. Wählen Sie im Workflow-Designer-Menü Transition aus und Klicken Sie auf den Start-Knoten und ziehen Sie einen Pfeil auf den Task-Knoten. Dasselbe wiederholen Sie vom Task-Knoten auf den EndKnoten. Vergeben Sie für die Knoten Namen (das ist nachher wichtig für die Administrations-Maske, dort werden die Namen dargestellt). Der erste Übergang (Transition) wurde toMyFirstTask und der zweite toEnd benannt. (siehe Abbildung 3.21) 27 Kapitel 3. Tutorial Abbildung 3.21.: Erzeugen der Verbindungen zwischen den Knoten Die einzelnen Übergänge definieren die Möglichkeiten, wie von einer Aktion zur nächsten gelangt werden kann. Falls es mehrere Übergänge von einer Maske zu mehreren anderen gibt, dann können die jeweiligen Namen der Übergänge dazu genutzt werden, das zu steuern. Die Namen werden dann den Knöpfen, die in einer Workflow-Maske definiert sind angegeben. Je nachdem, welchen Knopf der Benutzer drückt, geht der Workflow einen anderen Weg. (in den StandardBeispielworkflows sind dies zum Beispiel beim Freigabeworkflow die Übergänge: Freigeben, Überarbeiten und Ablehnen). 3.3.5. Deployment des Workflows Damit wäre die Definition des Workflows für dieses Beispiel abgeschlossen und Sie können Ihn nun in agorum core installieren. Dazu klicken Sie am unteren Bereich des Workflow-Designers auf Deployment. Es erscheint eine neue Ansicht. Achten Sie darauf, dass rechts oben bei Java Classes and Resources src java angehakt ist (nur das ist nötig, die anderen Elemente nicht). Tragen Sie bei Deployment Server Settings die Daten für Ihre agorum core Installation ein. Sobald Sie auf Deploy klicken fragt Sie das Programm nach Zugangsdaten, geben Sie hier die Zugangsdaten für Ihren roi Benutzer ein. (wie in Abbildung 3.22) Erklärung der Werte für Deployment: 28 Kapitel 3. Tutorial Server Name: tragen Sie hier die IP oder Adresse des agorum core Servers ein, auf den der Workflow installiert werden soll, zum Beispiel localhost. Server Port: tragen Sie hier den Port der http-Verbindung Ihres agorum core Servers ein. Sie erfahren diesen Wert aus Ihrem Datenblatt. Im Standard ist dies 8080. Server Deployer: tragen Sie hier /roiwebui/ProcessUpload ein. Abbildung 3.22.: Deployment des Workflows 3.4. Definieren der Masken Der Ablauf des Workflows wurde nun definiert und installiert. Was jetzt noch fehlt sind die Masken-Komponenten für agorum desk 4web. 3.4.1. Anlegen einer Maske Für das Anlegen einer Maske gehen Sie wie folgt vor: Es wird davon ausgegangen, dass Sie die Prozess-Definition processdefinition.xml nach obiger Beschreibung angelegt und den dort beschriebenen Task MyFirstTask 29 Kapitel 3. Tutorial erzeugt haben. Um eine Maske über das agorum Workflow Plugin zu erstellen, gehen Sie wie folgt vor: Öffnen Sie mit einem Rechtsklick mit der Maus auf den Projektordner TestWorkflow im Package Explorer das Kontextmenü und wählen agorum Workflow → Base jsp for task aus (siehe Abb. 3.23). Abbildung 3.23.: Aufruf zum Hinzufügen einer Maske zum Workflow Es wird nun der Wizard für die Maske angezeigt (Abb. 3.24). Belassen Sie die Einträge im Feld Project base directory und im Feld Project name so wie er ist. Tragen Sie in das Feld Task name den Namen MyFirstTask ein. Im Feld JSP name wird Ihnen der Vorschlag TileMyFirstTaskMainTab.jsp gemacht, belassen Sie diesen ebenfalls so. Im Feld EA-Designer mask name können Maskendefinitionen, die Sie im EA-Designer erstellt haben (siehe Administrationshandbuch EADesigner - Masken für Erweiterte Attribute , durch Angabe des Definitionsnamens, in die Maske mit eingebunden werden. In diesem Beispiel lassen Sie dieses Feld frei. Im Feld Title text key kann eine Beschreibung als Überschrift in der Maske angegeben werden. Lassen Sie dieses Feld ebenfalls frei, da es in diesem Beispiel von Hand eingefügt wird. Klicken Sie nun auf Next. 30 Kapitel 3. Tutorial Abbildung 3.24.: Einträge für die Maske In diesem Wizard werden die Eintragungen für die Konfigurationsdateien ParameterController.xml und EditMaskController.xml vorgenommen (Abb. 3.25). Belassen Sie den Pfadeintrag im Feld Path to controller xml files wie er ist. Im Feld Text key of tab tile (EditMaskController.xml) geben Sie Task Nummer 1 ein. Dies ist der Text der nachher im Reiter der Maske angezeigt wird Setzen Sie im Feld Add attachment tab (EditMaskController.xml das Häkchen. Dies bewirkt, dass eventuelle Anhänge an den Workflow, wie Dateien oder Mails in zusätzlichen Reitern angezeigt werden. Geben Sie ins Feld Window description text key (ParameterController.xml) den Text Mein erster Task ein. Dieser Text wird in dem Fenster, in dem sich unsere Maske befindet als Überschrift angezeigt. Ins Feld Tab description text key (ParameterController.xml) geben Sie den Text Task 1 ein. Dieser Text wird im Hauptreiter in der Weboberfläche angezeigt. Abbildung 3.25.: Einträge für die Konfigurationsdateien ParameterController.xml und EditMaskController.xml 31 Kapitel 3. Tutorial Klicken Sie nun auf Finish. Es wird eine Vorlage für die Maske erzeugt, und automatisch die betreffenden Konfigurationen in die ParameterController.xml und EditMaskController.xml eingetragen. Nun müssen noch Ergänzungen in der Datei ..web/testworkflow module/editmasks/testworkflow/TileMyFirstTaskMainTab.jsp vorgenommen werden. Abb. 3.26 zeigt dies beispielhaft: Abbildung 3.26.: Zusätzliche Eintragungen in TileMyFirstTaskMainTab.jsp Fügen Sie also den Code der beiden oberen, rot umrandeten Bereiche in die JSP ein. Ersetzen Sie {ButtonTextKey} durch Weiter und {transitionName} durch toEnd. Der Code der Seite müsste dann wie folgt aussehen (ohne die Workflow-StandardButtons, die am Ende noch eingefügt werden): 1 2 3 4 5 6 <% @ <% @ <% @ <% @ <% @ taglib taglib taglib taglib taglib uri = " / WEB - INF / struts - bean . tld " prefix = " bean " % > uri = " / WEB - INF / struts - html . tld " prefix = " html " % > uri = " / WEB - INF / struts - logic . tld " prefix = " logic " % > uri = " / WEB - INF / struts - tiles . tld " prefix = " tiles " % > uri = " / WEB - INF / agorum . tld " prefix = " agorum " % > 32 Kapitel 3. Tutorial 7 < ti les : i m p o r t A t t r i b u t e / > 8 < tiles:insert page = " / workflow_module / editmasks / common / T i l e W o r k f l o w M a i n S t a r t T a b . jsp " / > 9 10 <% -- Definieren eines Textes als Beschreibung --% > 11 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileText . jsp " > 12 < tiles:put name = " Description " > Erklärung: </ tiles:put > 13 < tiles:put name = " Text " > Dies ist eine Testmaske , dieser Text kann zum Beispiel die Aktion innerhalb einer Maske beschreiben ... </ tiles:put > 14 </ tiles:insert > 15 16 <% -- Abstand --% > 17 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileSpacer . jsp " / > 18 19 <% -- die Variable test testVariable1 zur Eingabe , als String --% > 20 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileInputField . jsp " > 21 < tiles:put name = " Description " > Variable 1 </ tiles:put > 22 < tiles:put name = " Attribute " > attribute ( wf_testVariable1 ) </ tiles:put > 23 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_testVariable1 ) " / > 24 < tiles:put name = " Required " > true </ tiles:put > 25 </ tiles:insert > 26 27 <% -- die Variable test testVariable2 zur Eingabe , nur Zahlen zulassen und als Long speichern --% > 28 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileInputField . jsp " > 29 < tiles:put name = " Description " > Variable 2 </ tiles:put > 30 < tiles:put name = " Attribute " > attribute ( wf_testVariable2 ) </ tiles:put > 31 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_testVariable2 ) " / > 32 < tiles:put name = " Required " > true </ tiles:put > 33 < tiles:put name = " ValidateRegExp " > /^\ d *$/ </ tiles:put > 34 < tiles:put name = " DataType " > Long </ tiles:put > 35 </ tiles:insert > 36 37 <% -- Abstand --% > 33 Kapitel 3. Tutorial 38 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileSpacer . jsp " / > 39 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileSpacer . jsp " / > 40 41 <% -- die Knoepfe --% > 42 < tiles:insert page = " / workflow_module / editmasks / tiles / T i l e S t a r t W o r k f l o w B u t t o n s . jsp " / > 43 < tiles:insert page = " / workflow_module / buttons / T i l e W o r k f l o w B u t t o n L e f t . jsp " > 44 < tiles:put name = " ButtonTextKey " > Weiter </ tiles:put > 45 < tiles:put name = " TransitionName " value = " toEnd " / > 46 < tiles:put name = " Validate " > true </ tiles:put > 47 </ tiles:insert > 48 49 < tiles:insert page = " / workflow_module / editmasks / tiles / Ti l e E n d W o r k f l o w B u t t o n s . jsp " / > 50 51 < tiles:insert page = " / workflow_module / editmasks / common / Ti l e W o r k f l o w M a i n E n d T a b . jsp " / > In dieser Maske wird ein Textfeld definiert, welches eine kleine Beschreibung enthält [Zeile 10-14]. Dann ein Eingabe-Feld für die Variable testVariable1 (das ist die Variable, die zuvor per Aktion gesetzt werden soll). [Zeile 18-25]. Zusätzlich wird noch eine zweite Variable definiert testVariable2. Diese soll vom Datentyp Long sein und nur die Eingabe von Zahlen zulassen (gesteuert über die Regular-Expression). [Zeile 27-35]. Zum Schluss wird noch ein Knopf definiert für die Steuerung des Workflows (Weiter -Knopf) [Zeile 42-49]. Hier können mehrere Knöpfe definiert werden, jeder für eine andere im Workflow definierte Transition. Der Name der zu verwendenden Transition ist hier toEnd. 34 Kapitel 3. Tutorial 3.4.2. Installieren der Masken Mit dem agorum Workflow Eclipse-Plugin können Sie das Überspielen dieser Dateien auf den Server einfach über die Web-Deploy-Funktionalität durchführen: Hinweis: Die Funktion des direkten Überspielens der Dateien in die entsprechenden Verzeichnisse des Application-Servers ist nur verfügbar, wenn der JBoss-Server in Betrieb ist. Für die Installation der erzeugten Masken, sowie der Konfigurationsdateien ParameterController.xml und EditMaskController.xml und den Messages xx.properties-Dateien klicken Sie mit der rechten Maustaste auf den Projektordner und wählen im Kontextmenü den Eintrag agorum workflow → Deploy web part. Im nun erscheinenden Wizard (Abb. 3.27) belassen Sie die Felder Workflow project base dir, Available projects und Workflow name so wie sie sind. Im Verzeichnisbaum im Feld Select files to deploy können Sie auswählen, welche Teile auf dem Server installiert werden sollen. Wenn Sie den gesamten Webteil mit allen Masken, Konfigurationsdateien und Messages xx.properties Dateien installieren wollen, belassen sie die Haken an dem Verzeichnisbaum, wie vorgegeben. • Im Feld Server Name geben Sie den Namen oder die IP-Adresse des JBossServers an (in diesem Beispiel localhost). • Im Feld Server Port geben Sie den Web-Port an (in diesem Beispiel 8080). Wird diese Angabe weggelassen versucht die Installer-Funktion eine Verbindung mit http://<IHR-SERVERNAME>/roiwebui/WebmaskUpload herzustellen, im anderen Fall mit http://<IHR-SERVERNAME>:<PORT>/roiwebui/ WebmaskUpload. • Die Angabe im Feld Server Deployer sollte verändert werden. Führen Sie eine Installation zum ersten mal aus, erscheint nach Klick auf die Schaltfläche Finish eine Eingabeaufforderung (siehe Abb. 3.28), in der Sie sich als roi-Benutzer anmelden müssen. Dies dient zur Feststellung, ob Sie berechtigt sind, Dateien in die JBoss-Server-Verzeichnisse zu laden. Nach der Authentifizierung in dieser Eingabeaufforderung sollten Sie die Meldung The web files were deployed successfully erhalten. Bei allen weiteren Installationsvorgängen während dieser Server-Session erscheint diese Eingabeaufforderung nicht mehr. 35 Kapitel 3. Tutorial Abbildung 3.27.: Installieren des web-Teils des Projekts auf dem Server Abbildung 3.28.: Installieren des web-Teils, Login Wenn Sie das Ganze von Hand durchführen wollen, kopieren Sie die beiden Verzeichnisse unterhalb von web (also WEB-INF und testworkflow module) nach INSTALLATIONS- VERZEICHNIS- AGORUM- CORE/ jboss/ server/ default/ deploy/ roi.ear/ roiwebui.war (Zur Orientierung: dort gibt es bereits ein WEB-INF Verzeichnis, einfach darüberkopieren). 36 Kapitel 3. Tutorial 3.4.3. Test des Workflows Wenn Sie nun in agorum desk 4web die Workflows anzeigen, dann sehen Sie jetzt Ihren Workflow: Testworkflow (TestWorkflow). (siehe Abbildung 3.29) Wenn Sie als Administrator-User zum Beispiel roi angemeldet sind, dann können Sie hier auch den diversen Workflows Rechte vergeben. So können Sie steuern, wer welchen Workflow überhaupt sieht und starten kann. Abbildung 3.29.: Ihr Test Workflow Starten Sie diesen Workflow mit einem Klick auf den grünen Pfeil. Geben Sie eine Beschreibung ein, zum Beispiel Der erste Testlauf und drücken Sie auf Speichern. Daraufhin sollte in den ToDo’s oder in den Mitteilungen Ihre Maske erscheinen. Öffnen Sie sie (falls nichts passiert, schauen Sie in Ihr Server-Log-File. Vermutlich stimmt dann etwas nicht von den Namen her überein, also Definition des Workflows und der Einstellungen in den XML-Dateien). Wenn mehrere Personen in der Gruppe GRP Demo definiert sind, dann müssen Sie die Maske noch annehmen. Klicken Sie auf Annehmen. Wenn nur eine Person in GRP Demo eingetragen ist (in der Standard-Installation ist dies so), dann wird die Maske direkt angenommen und öffnet sich sofort. Sie sehen jetzt die von Ihnen gestaltete Maske, diese sollte ungefähr so wie in Abbildung 3.30 aussehen 37 Kapitel 3. Tutorial Abbildung 3.30.: Ansicht der definierten Maske Sie sehen, dass bei Variable 1 bereits der Wert aus der Aktion eingetragen ist. Bei Variable 2 sind nur Zahleneingaben möglich, tragen Sie irgendeine Zahl ein, zum Beispiel 1234 und klicken Sie auf Weiter. Da Ihr Prozess nur eine Maske definiert hatte, ist er nun bereits zu Ende. 3.4.4. Anzeige der Log-Informationen Melden Sie sich als Benutzer roi an. Wählen Sie in der Schnellsuche Workflow aus und suchen Sie nach TestWorkflow. Es sollte Ihr gerade fertig gestellter WorkfowProzess erscheinen. Klicken Sie ihn an. Es gibt nun den Reiter Protokoll. Zeigen Sie diesen an. Das Protokoll zeigt Ihnen genau, was wann passiert ist. Und wie Sie sehen können gibt es dort auch die Ausgabe aus Ihrer Test-Action: Testausgabe, es wurde die Variable testVariable1 belegt, (siehe Abbildung 3.31) 38 Kapitel 3. Tutorial Abbildung 3.31.: Protokoll des Workflows Dieses Protokoll ist besonders hilfreich, wenn Sie auf der Suche nach Fehlern sind, so können Sie ganz leicht Ausgaben in Ihre Workflow-Aktion integrieren. 3.5. Tutorial-Ende Das wars nun mit dem Tutorial, Sie können nun anfangen, das Beispiel zu erweitern. Im folgenden Abschnitt werden nun noch einige weitergehenden Themen angesprochen, wie zum Beispiel die Mehrsprachigkeit. Für Informationen zum Definieren von Workflows und zur Verwendung der diversen jBPM Elemente, schauen Sie bitte auf der jBPM Webseite von JBoss vorbei: http://www.jboss.org/jbossjbpm/docs/index.html 39 Kapitel 4. Erweiterte Themen 4.1. Weitere Funktionen des agorum Workflow Eclipse-Plugins 4.1.1. Erzeugen eines Installationspakets und dessen Installation auf dem Server Mit dem agorum Workflow Eclipse-Plugin haben Sie die Möglichkeit, für Ihren Workflow ein Installationspaket als zip-File zu erstellen, mit dem Sie durch Entpacken ins JBoss-Verzeichnis den Workflow und alle seine Komponenten komfortabel installieren können. Wichtig: Wollen Sie das erzeugte Zip-Archiv direkt auf dem Server installieren, muss der JBoss-Server in Betrieb sein! Wollen Sie den Workflow, den sie erzeugt haben (d.h. die Prozessdefinition und die erzeugten Java-Klassen) mitinstallieren, dann müssen Sie vorher eine *.jar-Datei des zu installierenden Workflows erzeugen. Gehen Sie dabei wie folgt vor: Öffnen Sie die Datei processdefintion.xml im Verzeichnis .../src jpdl mit dem jBPM-Prozessdesigner. Im Tab Deployment gehen Sie nun genau so vor wie oben beim Deployment des Workflows beschrieben, allerdings müssen Sie die Eintragungen unter Deployment Server Settings nicht machen, da das Deployment nur lokal in eine *.jar-Datei erfolgt. Haken Sie deshalb unter Java Classes and Resources nur den Ordner src java an. Unter Files and Folders haken Sie die 3 Einträge an. In der Rubrik Local Save Settings setzen Sie den Haken bei Save Process Archive Locally. Im Feld Location navigieren Sie ins Projektverzeichnis ins Verzeichnis deployment und geben hier den Namen der Archivdatei ein: Im obigen Beispiel 40 Kapitel 4. Erweiterte Themen z.B. testworkflow.jar. Klicken Sie auf die Schaltfläche Save without deploying.... Die Archivdatei befindet sich jetzt im Unterverzeichnis deployment des Projektes (vgl. Abb. 4.1). Abbildung 4.1.: Lokale Installation des Prozessarchivs Für die Installation wählen Sie dann das Projekt in Eclipse im Package Explorer aus, für das Sie das Installationspaket erstellen wollen. Mit einem Rechtsklick öffnen Sie das Kontextmenü zum Projekt und wählen dann agorum workflow → Install workflow (Abb 4.2). Im nun erscheinenden Wizard belassen Sie das Feld Project base directory und das Feld Workflow name. Im Feld Version können Sie die Version des Installationspakets angeben. Wenn Sie dieses Feld leer lassen, wird die Version 1.0.0 verwendet. Setzen Sie das Häkchen bei Install Update, wenn Sie in Ihrem Projekt eine Klasse fürs Autoupdate haben, die z.B die automatische Installation des Workflows durchführt und/oder Resourcen in das System lädt. Möchten Sie das Installationspaket nur lokal in einem Verzeichnis ablegen, dann setzen Sie das Häkchen bei Save zip file only locally (no deploy on server). Hierbei wird das Zip-Installationspaket erzeugt und in einem Verzeichnis ihrer Wahl (Auswahl im Feld Location) abgelegt, die Installation auf dem Server wird dabei automatisch gesperrt. Soll das Installationspaket direkt auf dem Server installiert werden, müssen die drei folgenden Felder unbedingt ausgefüllt sein: Im Feld Server Name geben Sie den Namen oder die IP-Adresse des JBoss-Servers an. Im Feld Server Port geben Sie den Port des Servers an (Per default 8080), was 41 Kapitel 4. Erweiterte Themen sich aber von Ihrer Server-Installation unterscheiden kann. Ist keine Portangabe nötig, lassen Sie dieses Feld einfach leer. Im Feld Server Deployer lassen Sie die Angabe so stehen, dies ist der Pfad zum Upload-Servlet. Klicken Sie auf die Schaltfläche Finish. Wenn Sie auf dem System noch nicht angemeldet waren, erscheint eine Eingabeaufforderung, in der Sie sich als Benutzer roi und dem entsprechenden Passwort anmelden müssen. Ist die Anmeldung korrekt, erhalten Sie bei erfolgreichem Installationsvorgang die Meldung The workflow was deployed successfully. Abbildung 4.2.: Menü zum Installieren des Gesamtworkflows Abbildung 4.3.: Wizard zum Installieren des Gesamtworkflows 42 Kapitel 4. Erweiterte Themen Abbildung 4.4.: Installierter Workflow, Meldung 4.1.2. Erzeugen eines Timephased Action Scripts Mit Timephased Actions können in desk4Web automatische Aktionen gestarted werden, wenn ein bestimmtes Ereignis eintritt, wie zum Beispiel der Eingang eines Dokluments in einen bestimmten Ordner. Ist die Timephased Action für einen bestimmten Workflow definiert und auf einen bestimmten Ordner gesetzt worden (geht nur als roi - Benutzer), dann wird der entsprechende Workflow, der in dieser Timephased Action definiert wurde automatisch gestartet sobald ein Objekt der in der Timphased Action definierten Objekt-Typen in den Ordner eingeht. Dabei wird das Objekt(z.B. ein Dokument) an den Workflow als Attachment angehängt. Um eine solche Timephased-Action erstellen zu können, verfügt das agorum core Eclipse-Plugin über die Funktion Create timephased action script. Diese Funktion erreichen Sie im Package Explorer über das Kontextmenü des ausgewählten Projektes über agorum workflow → Create Timephased Action Script for Workflow. Im nun erscheinenden Wizard sind die wichtigsten Felder schon vorausgefüllt (Abb. 4.5). Sie können diese Felder natürlich nach Ihrem eigenen Namensschema benennen. Im Feld Specify filename for script steht schon ein Dateinamen als Vorschlag für die zu erzeugende xml-Datei. Sie können dort natürlich auch einen eigenen Namen vergeben, achten Sie aber darauf, dass die Dateiendung *.xml ist. Geben Sie im Feld Start action Text key den Textkey aus einer Messages xx.properties oder Klartext ein. Dies ist ein Text für den internen Gebrauch. Geben Sie im Feld Set action Text key den Textkey aus einer Messages xx.properties oder Klartext ein. Dies ist der Text der z.B. beim Setzen der Action auf den betreffenden Ordner 43 Kapitel 4. Erweiterte Themen angewendet wird. D.h. wollen Sie eine Timphased Action setzen, wählen Sie bei der Bearbeitung des Ordners diesen Eintrag in der Combobox im Reiter Zeitgesteuerte Aktionen aus. Geben Sie im Feld Description of action eine Beschreibung ein, die der Workflow erhält, wenn er gestartet wird. (Enspricht der Beschreibung, die Sie eingeben, wenn der Workflow manuell aus der Workflow-Liste gestartet wird). Das Feld Class names (Comma-separated) ist schon vorausgefüllt mit den beiden am Häufigsten benutzten Klassen für Timephased Actions, FileObject und MailObject, für die der Workflow gestarted werden soll. Hier können Sie entweder andere Klassennamen eintragen oder weitere hinzufügen. Nach Klick auf die Schaltfläche Finish wird die XML-Datei erzeugt, die alle Angaben für die Timephased Action enthält. Diese Datei könen Sie nun über XMLUpload in agorum core parsen lassen, oder Sie kopieren diese Datei einfach in ein FTP-Laufwerk, das mit agorum core verbunden ist. Abbildung 4.5.: Wizard zum Anlegen eines Timephased Action Scripts 4.1.3. Projekt umbenennen Um ein Projekt umzubenennen, wählen Sie das Projekt aus und öffnen mit einem Rechtsklick mit der Maus im Package Explorer das Kontextmenü und wählen die Menüeinträge agorum Workflow → Rename project. Im folgenden Wizard (Abb. 4.6) werden die Felder Base directory of workflow und Old project name schon vorausgefüllt, diese Felder sollten Sie so belassen, wie sie sind. Tragen Sie im Feld New project name den von Ihnen gewünschten neuen Namen und im Feld New module name den neuen Modulnamen (der Namen mit denen die Verzeichnisse der Masken, der Konfigurationsdateien und der Messages xx.properties-Dateien 44 Kapitel 4. Erweiterte Themen benannt werden) des Workflows ein. Nachdem Sie mit Finish bestätigt haben, wird das Projekt, die entsprechenden Modulverzeichnisse, das Package in dem die processdefintion.xml liegt, sowie der Prozessname in der processdefinition.xml umbennannt. Abbildung 4.6.: Wizard zum Umbenennen eines Workflow-Projektes Warnung: Wenn Sie das Projekt umbenennen wollen, müssen Sie sicherstellen, dass das Projekt und seine Dateien und Verzeichnisse in keinem anderen Programm mehr geöffnet sind, andernfalls kann es zu irreparablen Datenverlusten oder zum Verlust des gesamten Projektinhaltes kommen! 4.1.4. EA-Designer-Maske importieren Hinweis:Zum EA-Designer und die Erstellung von Masken mit dem EA-Designer siehe auch im Administrationshandbuch das Kapitel EADesigner - Masken für Erweiterte Attribute. Um eine Maske zu importieren, die im EA-Designer erstellt wurde, gehen Sie auf das Projekt im Package Explorer, in das die Datei für den EA-Designer-Import eingefügt werden soll. Öffnen Sie mit einem Rechtsklick der Maus auf das Projekt das Kontextmenü und wählen Sie den Menüpunkt agorum Workflow → Import EA-Designer definition. In diesem Wizard (abb. 4.7) müssen Sie im Feld Host name or address den Namen oder die IP-Adresse, gegebenenfalls mit Angabe des Ports, des Servers auf dem agorum core läuft eintragen. In die Felder Username und Password geben Sie Ihren Benutzernamen und Ihr Passwort, mit denen Sie sich bei agorum desk4web anmelden, ein. Klicken Sie nun auf die Schaltfläche Connect. 45 Kapitel 4. Erweiterte Themen Im Listenfeld EA-Designer masks werden Ihnen alle EA-Designer-Masken angezeigt die auf dem System definiert wurden. Wählen Sie die Maskendefinition aus, die Sie in Ihr Projekt importieren möchten. Geben Sie Im Feld Filename of created def-file einen Dateinamen mit vollständigem Pfad an oder Klicken Sie auf die Schaltfläche Browse.... Der Dateiauswahl-Dialog öffnet sich automatisch im resources-Verzeichnis des entsprechenden Projektes. Geben Sie nun einen beliebigen Dateinamen mit der Endung *.def ein und klicken auf die Schaltfläche Open. Der komplette Pfad der Datei wird nun in das Feld Filename of created def-file eingetragen. Beenden Sie den Dialog mit Finish. Im von Ihnen gewählten Verzeichnis wird nun eine *.def und *.xml-Datei mit dem von Ihnen angegebenen Namen angelegt. Mit der xml-Datei können Sie durch parsen im FTP-Laufwerk oder Einzelupload die gewünschte Maske auf ihrem System erzeugen und in Ihre Masken einbinden. Abbildung 4.7.: Wizard zum Import einer EA-Designer-Maske 4.1.5. Konvertieren einer *.def-Datei in eine *.xml-Datei Der umgekehrte Weg wie oben beschrieben, ist der, eine *.def Datei von Hand zu erstellen und diese dann in eine von agorum core parsbare *.xml-Datei umzuwandeln. Öffnen Sie hierzu mit einem Rechtsklick mit der Maus auf die markierte *.def-Datei in Ihrem Projekt das Kontextmenü des Package Explorers und wählen dann agorum Workflow → Convert metadb def-file (Abb. 4.8). Im sich öffnenden Wizard sind die Felder Path of *.def-File und Path of *.xml File schon vorausgefüllt. Für die erzeugte *.xml-Datei können Sie selbstverständlich einen anderen Pfad und einen anderen Namen vergeben (Abb. 4.9). Klicken Sie nun auf Finish, wird die *.def-Datei in eine *.xml-Datei konvertiert und im Dateisystem im gewählten Verzeichnis abgelegt. 46 Kapitel 4. Erweiterte Themen Abbildung 4.8.: Menü zum Konvertieren einer *.def-Datei Abbildung 4.9.: Wizard zum Konvertieren einer *.def-Datei 4.2. Mehrsprachigkeit Die Mehrsprachigkeit dient dazu, Workflows, Masken und auch Variablen in die jeweilige Sprache, in der agorum desk 4web für den jeweils angemeldeten Benutzer läuft, zu übersetzen. 4.2.1. Übersetzungsschlüssel in den Masken und Workflows Wie bereits im Tutorial erwähnt können anstelle von Texten auch Textschlüssel verwendet werden. Tragen Sie zum Beispiel in der Beschreibung des Workflows 47 Kapitel 4. Erweiterte Themen folgenden Textschlüssel ein: agorum.workflow.testworkflow.Description(siehe Abbildung 4.10) Abbildung 4.10.: Beschreibung des Workflows als Textschlüssel eintragen Installieren (Deployment) Sie diesen geänderten Workflow wieder in agorum core. Erstellen Sie zwei Dateien unterhalb Ihres Projektes: unter ../ testworkflow/ web/ WEB-INF/ config/ messages/ testworkflow module eine Datei Messages de.properties und eine Datei Messages en.properties. Die eine für Deutsch, die andere für Englisch. Achten Sie auf Groß-/Kleinschreibung. Tragen Sie in der Messages de.properties folgendes ein: 1 agorum . workflow . testworkflow . Description = Übersetzt : der Testworkflow und in Messages en.properties 1 agorum . workflow . testworkflow . Description = Translated : the Testworkflow Kopieren Sie die gesamte Struktur mit diesen Dateien wieder in das Verzeichnis INSTALLATIONS- VERZEICHNIS- AGORUM- CORE/ jboss/ server/ default/ deploy/ roi.ear/ roiwebui.war und starten Sie agorum core neu. 48 Kapitel 4. Erweiterte Themen Wenn Sie jetzt die Workflow-Liste wieder aufrufen, dann sehen Sie je nach eingestellter Sprache die jeweilige Übersetzung. Der verwendete Textschlüssel ist hier nur ein Vorschlag. Es ist jedoch empfehlenswert, um hier nicht in Konflikt mit anderen Workflows zu geraten, den Namen des Workflows immer mit in den Schlüssel einfließen zu lassen. Das Ergebnis sollte so aussehen, wie in Abbildung 4.11: Abbildung 4.11.: Die übersetzte Workflow-Beschreibung 4.2.2. Übersetzung von Variablenamen und Werten Es ist auch möglich, die Variablennamen zu übersetzen. Das ist gerade dann sinnvoll, weil die Namen selbst eher zu technisch klingen, als dass sie für den Benutzer verständlich wären. In unserem Beispiel möchten wir die beiden Variablen aus dem Tutorial testVariable1 und testVariable2 gerne übersetzen in Variable 1 und Variable 2 Tragen Sie dazu in der Datei Messages de.properties folgendes ein: 1 2 agorum . workflow . attributes . testworkflow . testVariable1 = Variable 1 agorum . workflow . attributes . testworkflow . testVariable2 = Variable 2 und in die Englische Messages en.properties: 1 2 agorum . workflow . attributes . testworkflow . testVariable1 = Variable 1 agorum . workflow . attributes . testworkflow . testVariable2 = Variable 2 49 Kapitel 4. Erweiterte Themen Sie müssen dabei unbedingt die Namens-Konvention einhalten, also: 1 agorum . workflow . attributes . Ihr Workflowname ( alles klein ) . Variablenname Starten Sie agorum core nun neu und melden Sie sich als roi an. Suchen Sie einen Ihrer beendeten Workflows und zeigen Sie die Maske an. Im Reiter Metadaten können Sie nun schön sehen, wie die Variablen übersetzt wurden. (siehe Abbildung 4.12) Abbildung 4.12.: Übersetzte Variablen Es lassen sich sogar auch Werte übersetzen, zum Beispiel, wenn Sie irgendwelche Status-Informationen setzen. Beim Freigabe-Workflow ist das zum Beispiel so, da gibt es die Variable workflowApprovalState. Diese kann entweder den Wert approved oder rejected besitzen. Damit dieser Wert sprachabhängig übersetzt wird, wurde folgendes in die Messages de/en.properties eingetragen: 1 2 3 agorum . workflow . attributes . approvalworkflow . approvalstate . IsTranslated = true agorum . workflow . attributes . approvalworkflow . approvalstate . approved = Freigegeben agorum . workflow . attributes . approvalworkflow . approvalstate . rejected = Abgelehnt Also erstmal, dass die Variable überhaupt übersetzt werden soll (IsTranslated=true) und dann die jeweiligen Übersetzungen für die jeweiligen Werte. Der Aufbau ist dabei fest vorgegeben: 50 Kapitel 4. Erweiterte Themen 1 2 3 agorum . workflow . attributes . Ihr Workflowname ( alles klein ) . Variablenname ( alles klein ) . IsTranslated = true agorum . workflow . attributes . Ihr Workflowname ( alles klein ) . Variablenname ( alles klein ) . Wert1 = Übersetzung 1 agorum . workflow . attributes . Ihr Workflowname ( alles klein ) . Variablenname ( alles klein ) . Wert2 = Übersetzung 2 4.2.3. Zum Schluss Bei allen Elementen, bei denen es möglich ist, eine Übersetzung zu definieren, wurde dies im Tutorial erwähnt. 4.3. Möglichkeiten der Maskengestaltung Es gibt einige Elemente, mit denen Sie Ihre Masken gestalten können, diese werden nun folgend hier kurz gezeigt. Im Beispiel haben Sie ja bereits Buttons, Text und Eingabefeld kennengelernt. Im mitgelieferten Test-Workflow finden Sie im Unterverzeichnis docs eine Datei maskelements.jsp, dort sind alle Maskenelemente als listing vorhanden und Sie können Sie einfach übernehmen. 4.3.1. Text-Ausgabe 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileText . jsp " > 2 < tiles:put name = " Description " > Beschreibung: </ tiles:put > 3 < tiles:put name = " Text " > Der Text , der ausgegeben werden soll , oder ein Wert einer Variable: < agorum:writeBR name = " G e n e r i c E d i t M a s k A c t i o n F o r m " property = " attribute ( wf_testVariable1 ) " / > , oder ein Text aus der Übersetzung: < bean:message key = " agorum . workflow . attributes . testworkflow . testVariable1 " / > </ tiles:put > 4 </ tiles:insert > 4.3.2. Eingabe-Feld, Einzeilig 51 Kapitel 4. Erweiterte Themen 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileInputField . jsp " > 2 < tiles:put name = " Description " > Variable 1 </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_testVariable1 ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_testVariable1 ) " / > 5 < tiles:put name = " Required " > true </ tiles:put > 6 < tiles:put name = " ValidateRegExp " > /^\ d *$/ </ tiles:put > 7 < tiles:put name = " DataType " > Long </ tiles:put > 8 </ tiles:insert > 4.3.3. Eingabe-Feld, Mehrzeilig 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileTextArea . jsp " > 2 < tiles:put name = " Description " > Variable 1 </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_testVariable1 ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_testVariable1 ) " / > 5 < tiles:put name = " Required " > true </ tiles:put > 6 </ tiles:insert > 4.3.4. Datum 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileDate . jsp " > 2 < tiles:put name = " Description " > Datumstest: </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_dateTest ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_dateTest ) " / > 5 < tiles:put name = " Required " > true </ tiles:put > 6 </ tiles:insert > 52 Kapitel 4. Erweiterte Themen 4.3.5. Drop-Down-Box Werte direkt vorgeben: 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileDropDown . jsp " > 2 < tiles:put name = " Description " > Drop - Downtest: </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_dropDownTest ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_dropDownTest ) " / > 5 < tiles:putList name = " listValues " > 6 < tiles:add value = " 111 " / > 7 < tiles:add value = " 222 " / > 8 < tiles:add value = " 333 " / > 9 </ tiles:putList > 10 < tiles:putList name = " listTexts " > 11 < tiles:add value = " Text1 " / > 12 < tiles:add value = " Text2 " / > 13 < tiles:add value = " Text3 " / > 14 </ tiles:putList > 15 </ tiles:insert > Werte aus der MetaDB laden: 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileDropDown . jsp " > 2 < tiles:put name = " Description " > Drop - Downtest: </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_dropDownTest ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_dropDownTest ) " / > 5 < tiles:put name = " MetaDbKey " > M A I N _ M O D U L E _ M A N A G E M E N T / desk4web / address / control / C o u nt r i es O p ti o n Li s t </ tiles:put > 6 </ tiles:insert > 4.3.6. Checkbox 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileCheckBox . jsp " > 53 Kapitel 4. Erweiterte Themen 2 < tiles:put name = " Description " > Checkbox & nbsp ; Test </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( wf_checkboxTest ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_checkboxTest ) " / > 5 </ tiles:insert > 4.3.7. EADesigner Eine mit dem EADesigner entworfene Maske kann in eine Workflowmaske integriert werden: 1 < tiles:insert page = " / ea design er_mod ule / editmasks / tiles / Ti l e D e s i g n e d A t t r i b u t e s . jsp " > 2 < tiles:put name = " E A D e s i g n e r C o n f i g u r a t i o n N a m e " > EADe signer _Sampl e </ tiles:put > 3 </ tiles:insert > 4.3.8. Abstand 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileSpacer . jsp " / > 4.3.9. Horizontale Linie 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileRuler . jsp " / > 4.3.10. Knöpfe für Transitions 1 < tiles:insert page = " / workflow_module / editmasks / tiles / T i l e S t a r t W o r k f l o w B u t t o n s . jsp " / > 2 < tiles:insert page = " / workflow_module / buttons / T i l e W o r k f l o w B u t t o n L e f t . jsp " > 54 Kapitel 4. Erweiterte Themen 3 4 5 6 7 8 9 10 11 12 13 < tiles:put name = " ButtonTextKey " > Step1 </ tiles:put > < tiles:put name = " TransitionName " value = " Step1 " / > < tiles:put name = " Validate " > true </ tiles:put > </ tiles:insert > < tiles:insert page = " / workflow_module / buttons / T i l e W o r k f l o w B u t t o n L e f t . jsp " > < tiles:put name = " ButtonTextKey " > Step2 </ tiles:put > < tiles:put name = " TransitionName " value = " Step2 " / > < tiles:put name = " Validate " > true </ tiles:put > </ tiles:insert > < tiles:insert page = " / workflow_module / editmasks / tiles / Ti l e E n d W o r k f l o w B u t t o n s . jsp " / > 4.3.11. Benutzersuche 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileUserSearch . jsp " > 2 < tiles:put name = " Description " > Assign & nbsp ; User: </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( w f _ h i d d e n _ a s s i g n e d U s e r T e s t ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_hidden_assignedUserTest )"/> 5 < tiles:put name = " Required " > true </ tiles:put > 6 </ tiles:insert > 4.3.12. Spezial-Ordner-Suche 1 < tiles:insert page = " / roiwebui_module / editmasks / tiles / TileCommonSearch . jsp " > 2 < tiles:put name = " Description " > < bean:message key = " agorum . workflow . reklaworkflow . a s s ig n t op r o je c t fi l e . SearchFolder " / > </ tiles:put > 3 < tiles:put name = " Attribute " > attribute ( w f _ h i d d e n _ d e s t i n a t i o n F o l d e r I d ) </ tiles:put > 4 < tiles:put name = " Value " beanName = " G e n e r i c E d i t M a s k A c t i o n F o r m " beanProperty = " attribute ( wf_hidden_destinationFolderId )"/> 5 < tiles:put name = " SearchQuery " > ((((( a n c e s t o r s : f o l d e r o b j e c t AND ( description: (( sf8 ) $$ QUERY $$) ) ) ) ) ) ) </ tiles:put > 55 Kapitel 4. Erweiterte Themen 6 < tiles:put name = " Required " > true </ tiles:put > 7 </ tiles:insert > 4.3.13. Liste der Aktivitäten anzeigen Zeit eine Liste aller Aktivitäten zum gewählten Workflow an (wie bei der InstanzMaske) 1 <% -- Activity - Liste --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / TileActivityList . jsp " > 3 < tiles:put name = " DisplayHeight " > 300 </ tiles:put > 4 </ tiles:insert > 4.3.14. Nach oben springen Erzeut einen Link, um in der Ansichtsmaske wieder nach oben zu gelangen 1 <% -- Jump - Top --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / TileJumpTop . jsp " / > 4.3.15. Zu Aktivitäten springen Erzeut einen Link, um zur Aktivitäten Liste zu springen 1 <% -- Jump - Activities --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / Tile Ju mp Ac ti vi ti es . jsp " / > 4.3.16. Zu Anhängen springen Erzeut einen Link, um zu den Anhang-Ansichten zu gelangen 56 Kapitel 4. Erweiterte Themen 1 <% -- Jump - Attachment - Views --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / T il e J u m p A t t a c h m e n t V i e w s . jsp " / > 4.3.17. Zu Anhänge-Liste springen Erzeut einen Link, um zur Anhangs-Liste zu gelangen 1 <% -- Jump - Attachment - List --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / T il e J u m p A t t a c h m e n t s L i s t . jsp " / > 4.3.18. Anhangs-Liste darstellen Zeigt eine Liste von Anhängen zu diesem Workflow an 1 <% -- Attachment - Liste --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / Til e A tt a c hm e n t sL i s t . jsp " > 3 < tiles:put name = " DisplayHeight " > 300 </ tiles:put > 4 </ tiles:insert > 4.3.19. Anhang-Schnellansicht (Einzelelement) Zeigt den ersten anzeigbaren Anhang als Schnellansicht an (funktioniert bei Mail, Forum, Wiki und Adresse) 1 <% -- QuickView Element --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / T i l e A t t a c h m e n t s V i e w S i n g l e . jsp " > 3 < tiles:put name = " DisplayHeight " > 300 </ tiles:put > 4 < tiles:put name = " Number " >0 </ tiles:put > 5 </ tiles:insert > 57 Kapitel 4. Erweiterte Themen 4.3.20. Anhang-Schnellansicht (Alle) Zeigt alle anzeigbaren Anhänge als Schnellansicht an (funktioniert bei Mail, Forum, Wiki und Adresse) 1 <% -- QuickView Element --% > 2 < tiles:insert page = " / workflow_module / editmasks / tiles / Ti l e A t t a c h m e n t s V i e w A l l . jsp " > 3 < tiles:put name = " DisplayHeight " > 300 </ tiles:put > 4 </ tiles:insert > 4.3.21. Untere Buttonleiste ändern In der EditMaskController.xml (siehe Kapitel 4.5.1) können Sie für jede Maske über das Tag <ButtonTile> die untere Buttonleiste der Maske ändern. Folgende Tiles stehen zur Verfügung: • /workflow_module/editmasks/common/TileWorkflowButtons.jsp: Button-Tile mit den Buttons für Workflow annehmen (links), Workflow abgeben (links), Workflow zwischenspeichern (links) und Abbrechen (rechts) • /workflow_module/editmasks/common/TileWorkflowButtonsAbort.jsp: Button-Tile mit dem Button für Abbrechen (rechts) • /workflow_module/editmasks/common/TileWorkflowButtonsControl.jsp: Button-Tile mit den Buttons für Workflow annehmen (links), Workflow abgeben (links) und Workflow zwischenspeichern (links) • /workflow_module/editmasks/common/TileWorkflowButtonsNone.jsp: Button-Tile mit keinen Buttons 4.4. Erstellen eines Parameters zur direkten Ansteuerung von Workflows Über einen ParameterController Eintrag kann ein Workflow direkt aus einem Menü oder einem Wiki gestartet werden. Dazu muss ein Eintrag in der ParameterController.xml für des Workflows angelegt werden. Folgend ein Beispiel: 58 Kapitel 4. Erweiterte Themen 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 < Par a m et e r Co n t ro l l er > < Identifier > parameter . workflow . St artTes tWorkf low </ Identifier > < Action > B a c k g r o u n d P r o c e s s A c t i o n </ Action > < Parameters > < Parameter > < Name > FolderAccess </ Name > < Value > AddItem </ Value > </ Parameter > < Parameter > < Name > WithoutObjectId </ Name > < Value > true </ Value > </ Parameter > < Parameter > < Name > Mes sageWi ndowT ext </ Name > < Value > Workflow wird gestartet , moment bitte ... </ Value > </ Parameter > < Parameter > < Name > Action </ Name > < Value >/ workflow_module / a u t o S t a r t W o r k f l o w A c t i o n . do </ Value > </ Parameter > </ Parameters > < TransParameters > < Parameter > < Name > defName </ Name > < Value > TestWorkflow </ Value > </ Parameter > < Parameter > < Name > description </ Name > < Value > TestWorkflow gestartet mit Parameter </ Value > </ Parameter > </ TransParameters > </ Par a m et e r Co n t ro l l er > Der Eintrag bedeutet, dass, wenn der Befehl parameter.workflow.StartTestWorkflow über zum Beispiel ein Menü (oder auch ein Wiki) aufgerufen wird, dann wird der Workflow TestWorkflow mit der Beschreibung TestWorkflow gestartet mit Parameter gestartet. Als Ergebnis erhält man, wenn man den Workflow auf diese Weise startet, die erste Maske des Workflows. Der Workflow ist dann bereits im gestarteten Zustand. Man überspring somit die Auswahl des Workflows, sowie die Eingabe der Beschreibung (diese sind durch die Angaben in der XML vorgegeben). 59 Kapitel 4. Erweiterte Themen Um jetzt Beispielsweise den oben genannten Workflow direkt aus einem Wiki zu starten kann folgendes in das Wiki eingetragen werden: 1 < NoWiki > 2 <a href = " Jav aScrip t:pare nt . frames [ ’ controlFrame ’]. executeWithParam ( ’ parameter . workflow . StartTestWorkflow ’ , ’ ’) " > Klick , um TestWorkflow zu starten </ a > 3 </ NoWiki > Klickt man nun auf den Link im Wiki, wird der angegebene Workflow gestartet und sofort die erste Maske angezeigt. 4.5. Was Sie sonst noch wissen sollten 4.5.1. Die ParameterController.xml und EditMaskController.xml Legen Sie eine neue Maskendefinition an, werden die folgenden Eintragungen in die ParameterController.xml und EditMaskController.xml vorgenommen. Die ParameterController.xml 1 <? xml version = " 1.0 " encoding = " UTF -8 " ? > 2 3 < Co n tr o l l e r C o n f i g u r a t i o n > 4 < Man da to rI de nt if ie r > </ Man da to rI de nt if ie r > 5 6 < Par a m et e r Co n t ro l l er > 7 < Identifier > parameter . workflow . mask . TestWorkflow . MyFirstTask </ Identifier > 8 < Action > OpenTabAction </ Action > 9 < Parameters > 10 < Parameter > 11 < Name > Action </ Name > 12 < Value >/ roiwebui_module / g e n e r i c E d i t M a s k L o a d A c t i o n . do </ Value > 13 </ Parameter > 14 < Parameter > 15 < Name > ObjectIdRequired </ Name > 16 < Value > false </ Value > 60 Kapitel 4. Erweiterte Themen 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 </ Parameter > < Parameter > < Name > Win dowDes cript ion </ Name > < Value > Mein erster Task </ Value > </ Parameter > < Parameter > < Name > TabDescription </ Name > < Value > Task1 </ Value > </ Parameter > < Parameter > < Name > WindowWidth </ Name > < Value > 650 </ Value > </ Parameter > < Parameter > < Name > WindowHeight </ Name > < Value > 480 </ Value > </ Parameter > < Parameter > < Name > OpenNewWindow </ Name > < Value > true </ Value > </ Parameter > </ Parameters > < TransParameters > < Parameter > < Name > editMaskName </ Name > < Value > agorum . workflow . TestWorkflow . MyFirstTask </ Value > </ Parameter > </ TransParameters > </ Par a m et e r Co n t ro l l er > 45 46 47 48 49 </ Co n t r o l l e r C o n f i g u r a t i o n > Für jede definierte Maske wird solch ein Eintrag gemacht (also zwischen den ParameterController -Blöcken). Im Feld Identifier steht der exakte Name Ihres Workflows (TestWorkflow ) [Zeile 7] und der Namen des Tasks MyFirstTask. Bei WindowDescription steht der Text für die Fensterbeschreibung [Zeile 18] dieses Tasks und bei TabDescription [Zeile 22] für den Reiter im agorum desk 4web. Sie können für diese zwei Werte auch Textkeys eintragen, welche Sie dann in den message-Dateien für Mehrsprachigkeit übersetzen können. Bei WindowWidth [Zeile 28] und WindowHeight [Zeile 32] können Sie Fenstergrößen für die Clientfenster vorgeben (falls die Masken ungewöhnlich groß sind zum Beispiel). Wichtig ist noch 61 Kapitel 4. Erweiterte Themen der Wert editMaskName [Zeile 43], hier wird ebenfalls der Name des Workflows und der Name des Tasks eingetragen. Nochmal zusammengefasst: Es wird für jede Maske ein solcher ParamterController -Block angelegt und folgende Werte eingetragen (es stehen dann mehrere solcher Blöcke in dieser XML-Datei): Identifier: parameter.workflow.mask.NameDesWorkflows.NameDesTasks 7] [Zeile WindowDescription: Beschreibung des Fensters im agorum desk 4web [Zeile 18] TabDescription: Beschreibung des Reiters im agorum desk 4web [Zeile 22] editMaskName: agorum.workflow.NameDesWorkflows.NameDesTasks [Zeile 43] Die EditMaskController.xml 1 <? xml version = " 1.0 " encoding = " UTF -8 " ? > 2 3 < Co n tr o l l e r C o n f i g u r a t i o n > 4 < Man da to rI de nt if ie r > </ Man da to rI de nt if ie r > 5 6 < Edi tM as kC on tr ol le r > 7 < Name > agorum . workflow . TestWorkflow . MyFirstTask </ Name > 8 < MainTile >/ workflow_module / editmasks / common / T i l e W o r k f l o w D e f a u l t M a i n S t a r t . jsp </ MainTile > 9 < ButtonTile >/ workflow_module / editmasks / common / T il e W or k f lo w B ut t o ns . jsp </ ButtonTile > 10 < Tabs > 11 < Tab > 12 < TextKey > Task Nummer 1 </ TextKey > 13 < TabLoadAction > agorum . workflow . editmasks . common . actions . W o r k f l o w D e f a u l t M a i n T a b L o a d A c t i o n </ TabLoadAction > 14 < TabSaveAction > agorum . workflow . editmasks . common . actions . W o r k f l o w D e f a u l t M a i n T a b S a v e A c t i o n </ TabSaveAction > 15 < TabTile >/ te s t w or k f lo w _ mo d u le / editmasks / testworkflow / T i l e M y F i r s t T a s k M a i n T a b . jsp </ TabTile > 16 < TabActive > true </ TabActive > 17 </ Tab > 18 < Tab > 62 Kapitel 4. Erweiterte Themen 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 < TextKey > agorum . workflow . editmask . att ac hm en ts ta be di t . Attachments </ TextKey > < TabLoadAction > agorum . workflow . editmasks . at ta ch me nt st ab ed it . actions . A t t a c h m e n t s T a b L o a d A c t i o n </ TabLoadAction > < TabSaveAction > agorum . workflow . editmasks . at ta ch me nt st ab ed it . actions . A t t a c h m e n t s T a b S a v e A c t i o n </ TabSaveAction > < TabTile >/ workflow_module / editmasks / at ta ch me nt st ab ed it / Ti le At ta ch me nt sT ab . jsp </ TabTile > < TabActive > false </ TabActive > </ Tab > < Tab > < TextKey > agorum . workflow . editmask . att ac hm en ts ta bv ie w . Attachments </ TextKey > < TabLoadAction > agorum . workflow . editmasks . at ta ch me nt st ab vi ew . actions . A t t a c h m e n t s T a b L o a d A c t i o n </ TabLoadAction > < TabSaveAction > agorum . workflow . editmasks . at ta ch me nt st ab vi ew . actions . A t t a c h m e n t s T a b S a v e A c t i o n </ TabSaveAction > < TabTile >/ workflow_module / editmasks / at ta ch me nt st ab vi ew / Ti le At ta ch me nt sT ab . jsp </ TabTile > < TabActive > false </ TabActive > </ Tab > </ Tabs > </ Edi tM as kC on tr ol le r > </ Co n t r o l l e r C o n f i g u r a t i o n > Auch hier gibt es für jede Maske, die Sie definieren, einen solchen EditMaskController -Eintrag. Wichtig ist hier lediglich der Name [Zeile 7], auch hier wird wieder der Name des Workflows, sowie der Maskenname angegeben. Darunter folgen die Tabs. Das sind die Reiter der einzelnen Masken, also die Haupteingabemaske, sowie die zwei Reiter für die Anhänge (zum Anhängen und zum Anzeigen). Für Sie wichtig ist nun lediglich der erste Tab-Eintrag [Zeile 1117], er definiert die Haupt-Eingabemaske, die Sie gestalten möchten. Bei TextKey [Zeile 12] wird der Text eingetragen, der bei diesem Masken-Reiter erscheinen soll. Sie können hier Freitext oder einen Text-Schlüssel für die Übersetzung eingeben. Bei TabTile [Zeile 15] wird der Pfad zu Ihrer Maske (JSPDatei) eingetragen, die angelegt wurde. In unserem Beispiel ist dies: /testworkflow module/editmasks/testworkflow/TileMyFirstTaskMainTab.jsp 63 Kapitel 4. Erweiterte Themen Nochmal zusammengefasst: Es wird für jede Maske ein solcher EditMaskController -Block angelegt und folgende Werte eingetragen (es stehen dann mehrere solcher Blöcke in dieser XML-Datei): Name: agorum.workflow.NameDesWorkflows.NameDesTasks [Zeile 7] TextKey: Beschreibung für diesen Reiter in der Maske [Zeile 12] TabTile: /Ihr-Projekt-Name module/editmasks/Ihr-Projekt-Name/TileIhrMasken-NameMainTab.jsp [Zeile 15] Die Variablennamen, in denen die Werte gespeichert werden sollen bzw. von denen die Werte geladen werden sollen, bekommen noch ein wf davor gehängt. Dieser Prefix wird nur für die Masken verwendet. Innerhalb des Workflows lautet die Variable testVariable1 bzw. testVariable2 in unserem Beispiel. Was es noch für Masken-Bausteine gibt, wird weiter oben im Dokument beschrieben (siehe Kapitel 4.3). 4.5.2. Vordefinierte Variablen Es gibt ein paar Standardvariablen, die beim Starten vom Workflow belegt werden. ac initialPerformer: hier ist der Benutzer eingetragen, der den Workflow gestartet hat ac actualPerformer: hier ist der Benutzer eingetragen, der gerade aktiv ist (also vom Knoten vorher) ac sessionController: beinhaltet den SessionController (für die agorum core API), des Users, der die Aktion gerade ausführt ac sessionControllerAdmin: beinhaltet den SessionController eines Admin-Users (i.d.R roi) ac attachmentIds: enthält eine Komma-Separierte Liste aller angehängten Attachments ac wfInstance: beinhaltet die Instanz des gerade laufenden Workflow-Objektes 64 Kapitel 4. Erweiterte Themen ac autoStart: ist true, wenn dieser Workflow über eine Timephased-Action automatisch gestartet wurde ac appointment: wenn diese Variable gesetzt wird (als Date), dann wird diese als Termin für das Activity-Objekt gespeichert und somit zum Beispiel in der Spalte Termin in der ToDo-Liste sichtbar ac activitySeverity: diese Variable kann gesetzt werden (als String), um die Farblichkeit zu steuern. 0=neutral, 1=grün, 2=gelb, 3=rot. Damit lässt sich in der ToDo-Liste schnell eine Dringlichkeit darstellen ac hideWindow: wenn true gesetzt wird, dann wird das nächste anzuzeigende Fenster nicht automatisch geöffnet (nach dem Abschließen der vorhergehenden Aktion) ac defaultAccessGroup: Standardmäßig wird ein Workflow mit Privat-ACL gestartet und alle beteiligten Benutzer bekommen während dem Lauf die nötigen Rechte zugeteilt und behalten diese auch. Wenn ein Gruppenname in ac defaultAccessGroup eingetragen ist, dann werden zusätzlich alle darin enthaltenen Benutzer ebenfalls mit zu dem Workflow berechtigt. 4.5.3. Hidden-Variablen Normalerweise werden Änderungen an Variablen gespeichert und in der Oberfläche bei der Ansicht des Workflows dargestellt und auch als Metadaten gespeichert. Manchmal gibt es allerdings Variablen, die nicht an die Oberfläche gelangen sollen, sondern lediglich technisch intern im Workflow genutzt werden sollen. Tragen Sie einfach ein hidden vor den Variablennamen, dann werden diese Variablen nicht angezeigt, also zum Beispiel: hidden testVariable1 4.5.4. Löschen einer Variable Um einer Variable aus dem laufenden Workflow zu löschen folgend ein Beispiel: 1 arg0 . g et Co nt ex tI ns ta nc e () . deleteVariable ( " VariableName " ) ; 65 Kapitel 4. Erweiterte Themen 4.5.5. Suche nach Variablen Sie können geziehlt nach den Variablen suchen, wenn Sie beim Workflow gespeichert wurden, die Suchsyntax ist dann folgende: testvariable1:Wert. Wichtig ist, dass die Variable kleingeschrieben ist. 4.5.6. Timer-Nutzung für Zeitbasierte Workflows Innerhalb von Workflows kann auch ein Timer programmiert werden. Timer funktionieren im Standard nicht 100%ig korrekt (vor allem, wenn man gerne mehr als einen Timer pro Task definieren will), daher wird folgende Vorgehensweise empfohlen: • Erstellen eines Events im Task: task-start • In diesem Event: Aufrufen einer selbsterstellten Aktion, die manuell einen/mehrere Timer erstellet (Code-Beispiel siehe unten: SetTimerAction) • soll ein Task durch ein Timer-Event beendet werden so muss das in den Action-Handler (hier im Beispiel-Listing CustomTask ) für diesen Timer eingetragen werden. 1 ... 2 public class SetTimerAction extends A g o r u m B a s e A c t i o n H a n d l e r { 3 ... 4 5 public void executeInternal ( ExecutionContext arg0 ) throws Exception { 6 ... 7 A g o r u m S e t T i m e r A c t i o n H a n d l e r handler = new A g o r u m S e t T i m e r A c t i o n H a n d l e r () ; 8 9 // create a custom action - delegation 10 Delegation delegation = new Delegation () ; 11 delegation . setClassName ( CustomTask . class . getName () ) ; 12 delegation . s e t P r o c e s s D e f i n i t i o n ( arg0 . g e t P r o c e s s D e f i n i t i o n () ) ; 13 Action timerAction = new Action () ; 14 timerAction . setName ( " CustomTask " ) ; 15 timerAction . se t A ct i o nD e l eg a t io n ( delegation ) ; 16 arg0 . g e t P r o c e s s D e f i n i t i o n () . addAction ( timerAction ) ; 66 Kapitel 4. Erweiterte Themen 17 18 19 20 21 22 23 24 25 26 27 28 29 } 30 } // create a timer Timer newT = new Timer ( arg0 . getToken () ) ; newT . setName ( " MyTimer " ) ; newT . setGraphElement ( arg0 . getEventSource () ) ; newT . setTaskInstance ( arg0 . getTaskInstance () ) ; newT . setAction ( endTaskAction ) ; // Date , when this timer should be started Date aDate = new Date () ; handler . setTimer ( aDate , " MyTimer " , newT , arg0 ) ; ... Erklärung zum Listing: Erstens ist es wichtig, dass dieses Listing über einen Event gestartet wird, in dem auch die TaskInstance bekannt ist, zum Beispiel task-start. Der erste Abschnitt in dieser Aktion definiert die Aktion (CustomTask), die ausgeführt wird, sobald der Timer startet. Der zweite Abschnitt erstellt den Timer und ordnet die Aktion zu. Das nächste Listing zeigt die CustomTask -Aktion, in diesem Beispiel wird in dieser Aktion die aktuelle Task beendet: 1 ... 2 public class CustomTask extends A g o r u m B a s e A c t i o n H a n d l e r { 3 4 public void executeInternal ( ExecutionContext arg0 ) throws Exception { 5 TaskInstance ti = arg0 . getTaskInstance () ; 6 ti . end ( " taskExpired " ) ; 7 } 8 9 } 10 ... Es wird lediglich die Task-Instance geholt und der Task über die Transition taskExpired beendet. Natürlich können hier dann beliebige Aktionen durchgeführt werden für diesen Timer... 67 Kapitel 4. Erweiterte Themen 4.5.7. Weitere Beispiel-Workflows Die zwei Standard-Workflows (TaskWorkflow und ApprovalWorkflow ) stehen als Beispiel inklusive Quellcode bereit und decken einige Funktionen der WorkflowKomponente ab: agorum-core-sample-workflows.zip 4.6. Workflow-Versionen 4.6.1. Automatische Workflow-Versionierung Innerhalb von jBPM erhält jeder Workflow, den Sie installieren, eine neue VersionsNummer. Sie können diese zum Beispiel in der Liste der Workflows sehen. Dies bedeutet, dass, wenn Sie eine neue Version eines bereits installierten Workflows installieren, dann laufen alle bisherigen noch laufenden Workflow-Prozesse mit einer der älteren Versionen ab. So können Sie Workflows ändern, ohne noch laufende Prozesse zu stören. Neu gestartete Prozesse laufen dann immer mit der aktuellsten Version. 4.6.2. Manuelle Workflow-Versionierung Die automatische Versionierung durch jBPM hat jedoch ihre Grenzen: Wurden für eine neue Workflow-Version Webmasken abgeändert, so werden diese nach der Installation auch für bereits laufende Workflow-Prozesse verwendet, was zur Folge hat, dass diese unter Umständen nicht mehr korrekt verwendet werden können. Um dieses Problem zu lösen, bietet agorum core ab Version 6.4.9 die Möglichkeit, Workflows manuell Versionsnummern zuzuweisen, die auch für die Versionierung der zugehörigen Webmasken verwendet werden. 68 Kapitel 4. Erweiterte Themen 4.6.3. Ändern der Workflow-Version Zur Festlegung der Versionsnummer eines Workflows muss in dessen Prozessbeschreibung bereits ein Startknoten vorhanden sein. Wählen Sie im Kontextmenü des Workflow-Projektes den Punkt agorum workflow → Change workflow version (Abb. 4.13). Abbildung 4.13.: Wizard zum Ändern der Workflow-Version Dadurch wird am Startknoten eine neue Aktion festgelegt, durch die der WorkflowInstanz bei Ausführung ihre Versionsnummer mitgeteilt wird. Ist schon eine entsprechende Aktion vorhanden, wird nur die vorhandene Version geändert. Zudem werden die vorhandenen Webmasken und die zugehörigen .xml-Dateien in Unterverzeichnisse mit dem Namen current verschoben, um ein Überschreiben der aktuell installierten Versionen beim Deployment zu verhindern. Sollten sie später einmal den Startknoten löschen und neu erstellen, müssen Sie die Version danach erneut festlegen! 69 Kapitel 5. Schlusswort Nun sollten Sie einen Überblick darüber haben, wie die Workflow-Komponente programmiert werden kann Bei Fragen, wenden Sie sich bitte an den Support der Firma agorum http://www.agorum.com. 70 Abbildungsverzeichnis 3.1. Anlegen eines neuen Workflow-Projektes in Eclipse . . . . . . . . 3.2. Der Wizard zum Anlegen eines Workflow-Projektes in Eclipse . . 3.3. Projektstruktur des neuangelegten Workflow-Projektes in Eclipse 3.4. Einstellung des Java-Compilers in Eclipse . . . . . . . . . . . . . . 3.5. Menü zum hinzufügen der agorum Standard Workflow Libraries . 3.6. Wizard zum Hinzufügen der Standard-Libraries zum Projekt . . . 3.7. Hinzugefügte Libraries . . . . . . . . . . . . . . . . . . . . . . . . 3.8. Wizard zum Hinzufügen der Standard-Libraries zum Projekt . . . 3.9. Erstellen einer Workflow-Definition . . . . . . . . . . . . . . . . . 3.10. Anzeigen des Reiters properties . . . . . . . . . . . . . . . . . . . 3.11. Fertige Ansicht mit geöffnetem Workflow-Designer . . . . . . . . . 3.12. Eintragen der Workflow-Beschreibung . . . . . . . . . . . . . . . . 3.13. Erzeugen des Start-Knotens . . . . . . . . . . . . . . . . . . . . . 3.14. Erzeugen des Endknotens . . . . . . . . . . . . . . . . . . . . . . 3.15. Definieren des Masken-Knotens . . . . . . . . . . . . . . . . . . . 3.16. Definieren der eigentlichen Maske . . . . . . . . . . . . . . . . . . 3.17. Auswahl der Personen, die die Maske erhalten sollen . . . . . . . . 3.18. Erstellen einer Aktion, die ausgeführt wird, bevor die Maske geladen wird . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19. Definieren eines Test-Aktions-Handlers . . . . . . . . . . . . . . . 3.20. Erstellen der Test-Klasse TestAction1 . . . . . . . . . . . . . . . . 3.21. Erzeugen der Verbindungen zwischen den Knoten . . . . . . . . . 3.22. Deployment des Workflows . . . . . . . . . . . . . . . . . . . . . . 3.23. Aufruf zum Hinzufügen einer Maske zum Workflow . . . . . . . . 3.24. Einträge für die Maske . . . . . . . . . . . . . . . . . . . . . . . . 3.25. Einträge für die Konfigurationsdateien ParameterController.xml und EditMaskController.xml . . . . . . . . . . . . . . . . . . . . . 3.26. Zusätzliche Eintragungen in TileMyFirstTaskMainTab.jsp . . . . 3.27. Installieren des web-Teils des Projekts auf dem Server . . . . . . . 3.28. Installieren des web-Teils, Login . . . . . . . . . . . . . . . . . . . 3.29. Ihr Test Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.30. Ansicht der definierten Maske . . . . . . . . . . . . . . . . . . . . 3.31. Protokoll des Workflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 12 13 14 14 15 16 17 18 19 19 20 21 22 23 . . . . . . . 24 25 27 28 29 30 31 . . . . . . . 31 32 36 36 37 38 39 4.1. Lokale Installation des Prozessarchivs . . . . . . . . . . . . . . . . . 41 71 Abbildungsverzeichnis 4.2. Menü zum Installieren des Gesamtworkflows . . . . . . 4.3. Wizard zum Installieren des Gesamtworkflows . . . . . 4.4. Installierter Workflow, Meldung . . . . . . . . . . . . . 4.5. Wizard zum Anlegen eines Timephased Action Scripts 4.6. Wizard zum Umbenennen eines Workflow-Projektes . . 4.7. Wizard zum Import einer EA-Designer-Maske . . . . . 4.8. Menü zum Konvertieren einer *.def-Datei . . . . . . . . 4.9. Wizard zum Konvertieren einer *.def-Datei . . . . . . . 4.10. Beschreibung des Workflows als Textschlüssel eintragen 4.11. Die übersetzte Workflow-Beschreibung . . . . . . . . . 4.12. Übersetzte Variablen . . . . . . . . . . . . . . . . . . . 4.13. Wizard zum Ändern der Workflow-Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 44 45 46 47 47 48 49 50 69 72 Anhang A. Anhang A.1. Versions-Historie dieses Dokumentes Version 1.0.0: Erstellung der ersten Dokumenten-Version Version 1.0.1: Erweiterung der Timer-Beschreibung Version 1.0.2: Beschreibung der neuen Standard-Variablen Version 1.0.3: Erweiterung um die Funktionalitäten in Version 6.2.2 Version 1.0.4: Beschreibung für das Aufrufen eines Workflows über einen Parameter erstellt Version 1.0.5: Versionsnummer geändert, Download entfernt Version 1.0.6: Maskengestaltung um Tiles für untere Buttonleise und EADesigner ergänzt Version 1.0.7: Umstellung des Tutorials auf agorum Workflow Eclipse-Plugin, zusätzliche Funktionen des agorum Workflow Eclipse-Plugins ergänzt Version 1.0.8: Beschreibung der Workflow-Versionierung ab Version 6.4.9 73 Anhang A. Anhang A.2. Sonstiges Soweit in dieser Dokumentation Marken- oder Produktbezeichungen verwendet werden, unterliegen diese ausschließlich den Schutzrechten des Inhabers, auch wenn dies nicht explizit kenntlich gemacht wird. 74