Handbuch:Erweiterung/Workflows/Tutorial: Unterschied zwischen den Versionen

Laetitia Huyghe (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Laetitia Huyghe (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
Zeile 16: Zeile 16:
#* Darüber hinaus können Sie den Workflow an eine bestimmte Seitenrevision binden. (Dies ist z. B. für Genehmigungsworkflows erforderlich).
#* Darüber hinaus können Sie den Workflow an eine bestimmte Seitenrevision binden. (Dies ist z. B. für Genehmigungsworkflows erforderlich).
# '''Speichern''' Sie das BPMN-Diagramm.
# '''Speichern''' Sie das BPMN-Diagramm.
# Sollen beim Starten eines Workflows Daten gesammelt werden, die in der Workflow-Ausführung berücksicht werden müssen, dann wird zusätzlich eine Formularseite mit der Erweiterung <code>.form</code> angelegt.
# '''Fügen''' Sie einen [[Handbuch:Erweiterung/Workflows/Triggers|Workflow-Auslöser]] hinzu.
# '''Fügen''' Sie einen [[Handbuch:Erweiterung/Workflows/Triggers|Workflow-Auslöser]] hinzu.
# '''Testen''' Sie den Workflow: Der Workflow ist nun im Wiki verfügbar. Sie sollten testen, ob die folgenden Funktionen verfügbar sind:
# '''Testen''' Sie den Workflow: Der Workflow ist nun im Wiki verfügbar. Sie sollten testen, ob die folgenden Funktionen verfügbar sind:
Zeile 23: Zeile 24:
#* Der zugeordnete Benutzer hat eine Aufgabe erhalten.
#* Der zugeordnete Benutzer hat eine Aufgabe erhalten.
#* Der Workflow wird in allen möglichen Szenarien korrekt abgeschlossen (im Falle von Gateways).
#* Der Workflow wird in allen möglichen Szenarien korrekt abgeschlossen (im Falle von Gateways).
=== Workflows anpassen ===
Ab BlueSpice 4.5 können <code>.bpmn</code>-Seiten über einen Workflow-Editor angepasst werden, sodass es nicht mehr nötig ist, den xml-Quellcode anzupassen.
Vor BlueSpice 4.5 können Workflows nur über BPMN-XML erstellt werden.


=== Tipps ===
=== Tipps ===
Um die Verwaltung der Workflows so einfach wie möglich zu gestalten, empfiehlt es sich, die Elemente möglichst aussagekräftig zu benennen und ihnen die gleiche ID wie dem Namen zu geben.
Um die Verwaltung der Workflows so einfach wie möglich zu gestalten, empfiehlt es sich, die Elemente möglichst aussagekräftig zu benennen und ihnen die gleiche ID wie dem Namen zu geben.
'''Gruppen-Feedback anpassen:''' Standardmäßig wird dieser Workflow automatisch abgeschlossen, wenn genau 3 Mitglieder der ausgewählten Feedback-Gruppe ein Feedback abgegeben haben, egal wie groß die Gruppe ist. In einer Anpassung können Sie den Schwellenwert anpassen (z.B. Abschluss des Workflows, wenn ''n'' Mitglieder oder wenn ''n%'' der Mitglieder der Gruppe ihr Feedback abgegeben haben).  {{Icon|bi bi-arrow-right-circle}} [[Handbuch:Erweiterung/Workflows/Gruppen-Feedback anpassen|Beispiel Gruppen-Feedback anpassen]]


== Beispiel 1 (einfach): Unterschrift auf einer Seite einholen ==
== Beispiel 1 (einfach): Unterschrift auf einer Seite einholen ==

Aktuelle Version vom 22. Mai 2025, 08:56 Uhr


Anleitung zum Erstellen eines benutzerdefinierten Workflows[Bearbeiten | Quelltext bearbeiten]

Zusätzlich zu den eingebauten Workflows können Benutzer ihre eigenen Workflows im Wiki erstellen. Die Funktionalität der Workflows basiert auf den derzeit implementierten Workflow-Elementen. Beachten Sie, dass derzeit nicht alle Elemente des BPMN-Standards von der Workflows-Erweiterung unterstützt werden.

Schritte zum Erstellen eines benutzerdefinierten Workflows[Bearbeiten | Quelltext bearbeiten]

So erstellen Sie einen Workflow:

  1. Definieren des erforderlichen Workflows mit den notwendigen Schritten und Aktivitäten
  2. Erstellen einer Seite mit der Erweiterung .bpmn. Idealerweise wird diese Seite im MediaWiki-Namensraum erstellt, um die Bearbeitungsrechte auf Wiki-Administratoren zu beschränken.
  3. Bearbeiten Sie die Seite im Modus Diagramm bearbeiten oder klicken Sie auf das Stiftsymbol.
    Edit menu with selected option "Edit diagram"
    Bearbeiten Menü
  4. Fügen Sie ein Startereignis, Aktivitäten, Gateways (optional) und ein Endereignis hinzu. Die folgenden BPMN-Elemente werden unterstützt:
    • Ereignisse: Start- und Endereignis
    • Gateways: derzeit sind nur parallele Gateways möglich
    • Aktivitäten: BlueSpice hat einen eigenen Satz von Aktivitäten. Siehe die vollständige Liste.
    • Darüber hinaus können Sie den Workflow an eine bestimmte Seitenrevision binden. (Dies ist z. B. für Genehmigungsworkflows erforderlich).
  5. Speichern Sie das BPMN-Diagramm.
  6. Sollen beim Starten eines Workflows Daten gesammelt werden, die in der Workflow-Ausführung berücksicht werden müssen, dann wird zusätzlich eine Formularseite mit der Erweiterung .form angelegt.
  7. Fügen Sie einen Workflow-Auslöser hinzu.
  8. Testen Sie den Workflow: Der Workflow ist nun im Wiki verfügbar. Sie sollten testen, ob die folgenden Funktionen verfügbar sind:
    • Der Workflow kann in den im Workflow-Auslöser definierten Namensräumen gestartet werden (falls es hier Einschränkungen gibt).
    • Der Workflow wird ausgelöst.
    • Der Workflow ist in der Übersichtsseite der Workflows aufgelistet.
    • Der zugeordnete Benutzer hat eine Aufgabe erhalten.
    • Der Workflow wird in allen möglichen Szenarien korrekt abgeschlossen (im Falle von Gateways).

Workflows anpassen[Bearbeiten | Quelltext bearbeiten]

Ab BlueSpice 4.5 können .bpmn-Seiten über einen Workflow-Editor angepasst werden, sodass es nicht mehr nötig ist, den xml-Quellcode anzupassen.

Vor BlueSpice 4.5 können Workflows nur über BPMN-XML erstellt werden.

Tipps[Bearbeiten | Quelltext bearbeiten]

Um die Verwaltung der Workflows so einfach wie möglich zu gestalten, empfiehlt es sich, die Elemente möglichst aussagekräftig zu benennen und ihnen die gleiche ID wie dem Namen zu geben.


Gruppen-Feedback anpassen: Standardmäßig wird dieser Workflow automatisch abgeschlossen, wenn genau 3 Mitglieder der ausgewählten Feedback-Gruppe ein Feedback abgegeben haben, egal wie groß die Gruppe ist. In einer Anpassung können Sie den Schwellenwert anpassen (z.B. Abschluss des Workflows, wenn n Mitglieder oder wenn n% der Mitglieder der Gruppe ihr Feedback abgegeben haben). Beispiel Gruppen-Feedback anpassen

Beispiel 1 (einfach): Unterschrift auf einer Seite einholen[Bearbeiten | Quelltext bearbeiten]

Definition des Workflows[Bearbeiten | Quelltext bearbeiten]

Zur Einführung sehen wir uns einen einfachen Worfklow an:

Nach Fertigstellung einer Seite (z.B. eines Protokolls) wird die Unterschrift des Abteilungsleiters John Doe eingefordert.

BPMN-Diagramm mit zwei Schritten
erforderliche Workflow-Schritte

Wir benötigen eine Workflow-Definition mit zwei Workflow-Aktivitäten:

  1. User feeback (request signature): John Doe erhält eine Feedback-Aufgabe. Eine Feedback-Aufgabe fügt der Seite einen Banner hinzu. Um die Aufgabe abzuschließen, gibt John Doe sein Feedback ab (zum Beispiel: "zur Kenntnis genommen").
    Banner with action link
    Workflow Banner
  2. Edit wiki page (add signature): Nach Abschluss der Feedback-Aufgabe fügt der Workflow der Seite automatisch die Wiki-Unterschrift von J. Doe hinzu.
    Wiki Unterschrift mit Name und Zeitstempel
    Eingefügte Unterschrift

Workflow erstellen[Bearbeiten | Quelltext bearbeiten]

Hierzu erstellen wir eine Seite mit der Erweiterung .bpmn:

  1. Klicken Sie auf die Neu-Schaltfläche des Wikis und geben Sie den Seitennamen mit der Erweiterung .bpmn ein, z.B. Unterschrift.bpmn.
    Textfeld zur Erstellung der Seite Unterschrift.bpmn
    Seite über die "Neu"-Schaltfläche erstellen
  2. Klicken Sie auf Fertig.
  3. Öffnen Sie die Seite im Bearbeitungs-Modus. Das Diagramm zeigt bereits die Start-Aktivität an.
  4. Fügen Sie die Aktivität User feedback hinzu.
    Ausschnitt der Editorleiste
    Aktivität "User feedback"
    1. Öffnen Sie das Dialogfeld für die Aktivität (über Doppel-Klick) und geben Sie den Namen der Aktivität ein (z.B. "request signature" oder "Signatur anfordern"),
    2. Fügen Sie den Benutzernamen sowie eine Anweisung hinzu (z.B. "Sign this page" oder "Seite unterschreiben")
      Dialogfenster mit Beispielwerten aus den beschriebenen Schritten
      Dialogfenster für Aktivität "User feedback"
    3. Klicken Sie auf Speichern.
    4. Verbinden Sie das StartEvent mit der Aktivität User feedback.
  5. Fügen Sie die Aktivität Edit wiki page hinzu und verbinden Sie es mit der vorhergehenden Aktivität.
    Ausschnitt der Editorleiste
    Aktivität "Edit wiki page"
    1. Öffnen Sie das Dialogfeld für die Aktivität (über Doppel-Klick) und geben Sie den Namen der Aktivität ein (z.B. "add signature" oder "Seite unterschreiben"),
    2. Geben Sie die Seite an, auf der die Unterschrift hinzugefügt werden soll. Im Normalfall ist das die Seite, auf der der Workflow ausgelöst wird. Hierfür verwenden Sie als Platzhalter das Magische Wort {{FULLPAGENAME}}.
    3. Geben Sie den Benutzernamen für die Unterschrift an. (Hinweis: Im nächsten Beispiel sehen wir, wie der Benutzername beim Auslösen des Workflows über ein Formular eingegeben werden kann, aber in diesem Beispiel geben wir der Einfachheit halber den Namen direkt im Workflow ein, da immer dieselbe Person unterschreibt).
    4. Geben Sie als Inhalt (Content) vier Tilden ein. Diese erzeugen im Wiki automatisch die Unterschrift des angegebenen Benutzers.
    5. Markieren Sie die Änderung (also das Einfügen der Unterschrift auf der Seite) als kleine Änderung (Minor revision), wenn sie keine Benachrichtigung oder Anzeige als letzte Änderung auf Übersichtsseiten im Wiki auslösen soll.
    6. Wählen Sie als Bearbeitungsmodus (Edit mode) Append. Dies fügt die Unterschrift am Ende der Seite ein.
      Dialogfenster mit Beispielwerten aus den beschriebenen Schritten
      Dialogfenster für Aktivität "Edit wiki page"
    7. Klicken Sie auf Speichern.
    8. Verbinden Sie die Aktivität User feedback mit der Aktivität Edit wiki page.
  6. Fügen Sie ein EndEvent hinzu und verbinden Sie es mit der vorhergehenden Aktivität.
    Ausschnitt aus der Workflow-Editorleiste mit dem Menüpunkt EndEvent
    EndEvent
  7. Speichern Sie die Seite.

Der Workflow sollte nun so aussehen:

BPMN-Diagramm mit zwei Schritten
Fertiger Workflow

Der Workflow kann nun im Wiki genutzt werden.

Als nächsten Schritt aktivieren wir den Workflow im Wiki.

Workflow-Auslöser erstellen[Bearbeiten | Quelltext bearbeiten]

Damit der Workflow nun auf einer Seite genutzt werden kann, müssen wir noch einen Auslöser anlegen:

  1. Klicken Sie auf Globale Aktionen > Workflow-Triggers.
  2. Klicken Sie auf Neuen Auslöser hinzufügen.
  3. Wählen Sie Manuell als Typ aus.
    Dialogfenster zur Auswahl des Trigger-Typs
    Manuellen Workflow-Auslöser erstellen
  4. Richten Sie den Workflow-Auslöser ein:
    1. Geben Sie den Namen ein, so wie im Workflow-Menü auf der Seite angezeigt werden soll.
    2. Geben Sie eine kurze Beschreibung ein, so wie sie im Workflow-Menü auf der Seite angezeigt werden soll (optional).
    3. Wählen Sie den Workflow Unterschrift als zu startenden Workflow aus.
    4. Geben Sie als Bedingung an, in welchen Namensräumen der Workflow zur Verfügung stehen soll (optional). Wenn keine Bedingung angegeben wird, steht der Workflow automatisch in allen Inhaltsnamensräumen zur Verfügung.
      Dialogfenster mit den Parametern für den Workflow "Unterschrift"
      Auslöser einrichten

Workflow anwenden[Bearbeiten | Quelltext bearbeiten]

Der Workflow durchläuft folgende Schritte:

  1. Workflow starten: Benutzer mit Bearbeitungsrechten im Wiki können nun den Workflow starten, um eine Unterschrift von J. Doe einzufordern. Hierzu wird der Workflow zum Beispiel auf einer Protokollseite über den entsprechenden Menüpunkt ausgelöst.
    Dialogfenster zum Starten des Workflows "Unterschrift einholen"
    Workflow starten
    Es erscheint ein Startdialog. Da es in unserem hier kein hinterlegtes Formular zur Dateneingabe gibt, kann der Dialog mit Fertig abgeschlossen werden.
    automatischer Startdialog
    Workflow starten
    Der zugewiesene Benutzer J. Doe erhält eine Email und es erscheint eine Aufgabe in seinem Benutzermenü im Wiki.
  2. Workflow-Aufgabe ausführen: J. Doe überprüft die Seite und führt über den blauen Banner seine zugewiesene Feedback-Aufgabe aus. Es ist möglich, dass im Banner nicht der Name angezeigt wird, sondern der Name einer dem Workflow zugewiesenen Systemnachricht. Diese können Sie im Wiki anlegen.
    Banner with action link
    Workflow Banner
  3. Unterschrift wird zur Seite hinzugefügt: Die Wiki-Unterschrift wird automatisch an das Ende des Seiteninhalts angehängt.
    Wiki Unterschrift mit Name und Zeitstempel
    Eingefügte Unterschrift

Beispiel 2 (fortgeschritten): Klassifizierung einer Wikipage[Bearbeiten | Quelltext bearbeiten]

Einen neuen Workflow definieren[Bearbeiten | Quelltext bearbeiten]

Als Beispiel erstellen wir einen Workflow, der nach einer Klassifizierung einer Wikiseite fragt. Basierend auf der Klassifizierung des Dokuments sendet der Workflow entweder eine E-Mail an die Rechtsabteilung oder es fügt zuerst einen kurzen Eintrag in einer Wiki-Seite ein und sendet dann die E-Mail an die Rechtsabteilung.

Der beschriebene Workflow besteht aus vier Aktivitäten und einem Gateway. Sie können im Wiki ein BPMN-Diagramm erstellen, um den Prozess zu visualisieren:

Classificiation-workflow.
Classificiation-workflow.

Erstellen des Workflows[Bearbeiten | Quelltext bearbeiten]

Um den Workflow zu erstellen, sind folgende Schritte notwendig:

  1. Benutzerdefinierten Workflow-Definition erstellen: MediaWiki:Classification-workflow.bpmn
  2. Initiierungsformular erstellen und mit dem Workflow verbinden. Das Formular fügt einige Informationen zum Workflow hinzu, bevor die Workflow-Aufgabe erstellt wird: MediaWiki:ContentClassificationInit.form
  3. Klassifizierungsformular erstellen und mit dem Workflow verbinden. Das Formular ermöglicht es dem zugewiesenen Benutzer, das Dokument zu klassifizieren: MediaWiki:ContentClassificationRequest.form
  4. Fortsetzung der Workflow-Konfiguration mit dem Gateway, der E-Mail-Konfiguration und dem Anhängen der betreffenden Wikipage
  5. Hinzufügen eines Auslösers, der definiert, wo und wie der Workflow gestartet werden soll.
  6. Testen des Workflows.
Hinweis

Das unten bereitgestellte XML ist mit dem hinzugefügten "BPMN Editor" in BlueSpice 4.5 nicht kompatibel. Es gibt keine Möglichkeit, es auf visuelle Weise zu bearbeiten.

Workflow-Definition erstellen[Bearbeiten | Quelltext bearbeiten]

Zuerst erstellen wir die Seite MediaWiki:Classification-workflow.bpmn mit einfachem Stub-XML. Jeder Workflow benötigt diese Elemente:

  • Zeile 1: Der XML-Prolog
  • Zeile 2: Das "definitions"-Element, das die xml-Namespaces bezeichnet, in denen die Workflow-Elemente definiert sind.
  • Zeile3: Das "process"-Element, das alle anderen Elemente enthält.
  • Zeile 5: Der Workflow läuft im Kontext einer bestimmten Überarbeitung einer Wiki-Seite.
  • Zeile 11: Der Workflow benötigt ein startEvent und
  • Zeile 18: ein endEvent.
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:wf="http://hallowelt.com/schema/bpmn/wf">
	<bpmn:process id="Classification_workflow_process">
	    <bpmn:extensionElements>
			<wf:context>
				<wf:contextItem name="pageId"/>
				<wf:contextItem name="revision"/>
			</wf:context>
		</bpmn:extensionElements>

	    <bpmn:startEvent id="TheStart">
			<bpmn:outgoing>FromTheStartToInitializeWorkflow</bpmn:outgoing>
		</bpmn:startEvent>
		<bpmn:sequenceFlow id="FromTheStartToInitializeWorkflow" sourceRef="TheStart" targetRef="InitializeWorkflow" />

        <!-- ... -->

		<bpmn:endEvent id="TheEnd">
			<bpmn:incoming>FromSendMailToTheEnd</bpmn:incoming>
		</bpmn:endEvent>

	</bpmn:process>

</bpmn:definitions>

Dieses Stub-XML enthält nur die Ereignisse "Start" und "Ende", einschließlich - noch zu definierender - "ausgehender" und "eingehender" Flussreferenzen.

Erstellen und verbinden des Initiierungs-Formulars[Bearbeiten | Quelltext bearbeiten]

Das Initiierungsformular ermöglicht die Interaktion mit dem Benutzer, der den Workflow startet. Es erklärt, was passiert, wenn der Workflow gestartet wird, und ermöglicht das Hinzufügen eines Kommentars, um einen Kontext für die Benutzeraufgabe bereitzustellen.

Initialisierungsformular
Initialisierungsformular

Wir erstellen es hier im MediaWiki-Namensraum, um sicherzustellen, dass nicht jeder Benutzer das Formular später bearbeiten kann. Aber generell können solche Formulare überall im Wiki erstellt werden.

So erstellen Sie das Initiierungsformular:

  1. Erstellen Sie die Seite MediaWiki:ContentClassificationInit.form
  2. Fügen Sie die folgende Formulardefinition im Quellbearbeitungsmodus ein:
    {
        "lang": "json",
        "form_name": "ContentClassificationInit",
        "items": [
            {
                "name": "intro",
                "widget_label": "Klicken Sie  \"Fertig\", um die Klassifizierung des Dokuments anzufordern. Sie können hier einen Kommentar an die zuständige Person mitgeben",
                "type": "label"
            },
            {
                "name": "comment",
                "label": "Comment",
                "noLayout": true,
                "showOn": [
                    "create",
                    "edit",
                    "view"
                ],
                "editableOn": [
                    "create",
                    "edit"
                ],
                "type": "textarea"
            }
        ]
    }
    
  3. Save the page.

Als nächstes geben wir im BPMN mit der folgenden userTask mit, das Formular anzuzeigen:

		<bpmn:userTask id="InitializeWorkflow" name="Start Content Classification Workflow">
			<bpmn:extensionElements>
				<wf:type>custom_form</wf:type>
				<wf:form>MediaWiki:ContentClassificationInit</wf:form>
				<wf:initializer>true</wf:initializer>
			</bpmn:extensionElements>
			<bpmn:property name="comment"></bpmn:property>
			<bpmn:incoming>FromTheStartToInitializeWorkflow</bpmn:incoming>
			<bpmn:outgoing>FromInitializeWorkflowToAskForClassification</bpmn:outgoing>
		</bpmn:userTask>
		<bpmn:sequenceFlow id="FromInitializeWorkflowToAskForClassification" sourceRef="InitializeWorkflow" targetRef="AskForClassification" />

Schauen wir uns an, was das bewirkt:

  • Id und name dieser Aktivität sind auf „InitializeWorkflow“ und „Start Content Classification Workflow“ festgelegt. Beide Werte müssen nicht übereinstimmen, tun dies aber normalerweise.
  • <wf:type> ist custom_form und teilt dem Workflow mit, dass ein Formular direkt im Wiki (im Gegensatz zu einem im Code befindlichen Formular) verfügbar ist.
  • <wf:form> zeigt auf die eigentliche Formularseite im Wiki
  • <wf:initializer> ist auf true gesetzt, da es verwendet wird, um einige Informationen anzuzeigen oder zu sammeln, bevor der eigentliche Workflow beginnt.

Am Ende haben wir die eingehenden und ausgehenden Ströme referenziert. (Hinweis: Die Reihenfolge der Elemente spielt normalerweise keine Rolle; nur die Verschachtelung ist wichtig).

Wir fügen diese userTask in Zeile 16 nach der Zeile <bpmn:sequenceFlow id="FromTheStartToInitializeWorkflow" sourceRef="TheStart" targetRef="InitializeWorkflow" /> hinzu:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:wf="http://hallowelt.com/schema/bpmn/wf">
	<bpmn:process id="Classification_workflow_process">
	    <bpmn:extensionElements>
			<wf:context>
				<wf:contextItem name="pageId"/>
				<wf:contextItem name="revision"/>
			</wf:context>
		</bpmn:extensionElements>

	    <bpmn:startEvent id="TheStart">
        	<bpmn:outgoing>FromTheStartToInitializ</bpmn:outgoing>
        </bpmn:startEvent>
       <bpmn:sequenceFlow id="FromTheStartToInitializeWorkflow" sourceRef="TheStart" targetRef="InitializeWorkflow" />

		<bpmn:userTask id="InitializeWorkflow" name="Start Content Classification Workflow">
			<bpmn:extensionElements>
				<wf:type>custom_form</wf:type>
				<wf:form>MediaWiki:ContentClassificationInit</wf:form>
				<wf:initializer>true</wf:initializer>
			</bpmn:extensionElements>
			<bpmn:property name="comment"></bpmn:property>
			<bpmn:incoming>FromTheStartToInitializeWorkflow</bpmn:incoming>
			<bpmn:outgoing>FromInitializeWorkflowToAskForClassification</bpmn:outgoing>
		</bpmn:userTask>
		<bpmn:sequenceFlow id="FromInitializeWorkflowToAskForClassification" sourceRef="InitializeWorkflow" targetRef="AskForClassification" />

		<bpmn:endEvent id="TheEnd">
			<bpmn:incoming>FromSendMailToTheEnd</bpmn:incoming>
		</bpmn:endEvent>

	</bpmn:process>

</bpmn:definitions>

Erstellen und Verbinden des Klassifizierungsformulars[Bearbeiten | Quelltext bearbeiten]

Der Workflow zeigt einem Benutzer ein Klassifizierungsformular an. Dieser Benutzer wird in einem späteren Schritt im Workflow definiert.

So erstellen Sie das Klassifizierungsformular:

  1. Erstellen Sie die Seite MediaWiki:ContentClassificationRequest.form
  2. Fügen Sie die folgende Formulardefinition im Quellbearbeitungsmodus ein:
{	
    "lang": "json",
	"form_name": "ContentClassificationRequest",
	"items": [
		{
			"name": "intro",
			"widget_label": "Überprüfen Sie das Dokument und wählen Sie die passende Klassifizierung für dieses Dokument aus",
			"type": "label"
		},
		{
			"name": "classification",
			"label": "Classification",
			"required": true,
			"options": [
				{
					"data": "CLSA",
					"label": "Class A"
				},
				{
					"data": "CLSB",
					"label": "Class B"
				}
			],
			"type": "dropdown",
			"widget_$overlay": true
		}
	]
}

Als Nächstes weisen wir im BPMN an, das Formular dem Benutzer anzuzeigen, der die Workflow-Aufgabe erhält. Dafür fügen wir eine userTask-Aktivität hinzu:

        ...
		<bpmn:userTask id="AskForClassification" name="Provide classification">
			<bpmn:extensionElements>
				<wf:type>custom_form</wf:type>
				<wf:form>MediaWiki:ContentClassificationRequest</wf:form>
			    <wf:initializer>true</wf:initializer>
			</bpmn:extensionElements>
			<bpmn:property name="assigned_user">
				<![CDATA[{{ROOTPAGENAME:{{#show:{{FULLPAGENAME}}|?Responsible|link=none|default=TheBoss}}}}]]>
			</bpmn:property>
			<bpmn:property name="due_date">
				<![CDATA[{{#time:YmdHis|now + 7 days}}]]>
			</bpmn:property>
			<bpmn:property name="classification"></bpmn:property>
			<bpmn:incoming>FromTheStartToAskForClassification</bpmn:incoming>
			<bpmn:outgoing>FromAskForClassificationToGateway</bpmn:outgoing>
		</bpmn:userTask>
		<bpmn:sequenceFlow id="FromAskForClassificationToGateway" sourceRef="AskForClassification" targetRef="Gateway" />
		...

Sehen wir uns diesen Abschnitt genau an. Diese userTask hat neben der Formularreferenz zum Klassifizierungsformular (vergleiche hierzu das Initiierungsformular) einige zusätzliche Eigenschaften:

  • assigned user: Das Attribut assigned user ist obligatorisch, da die Workflow-Engine wissen muss, welcher Benutzer abgefragt werden soll. In diesem Fall verwenden wir etwas Wikitext-Funktionalität, um den zugewiesenen Benutzer aus dem Kontext zu berechnen. Der Wert besteht aus einer Kombination aus einer Wikitext-Variablen und einer Parserfunktion (diese spezielle Parserfunktion wird von der Semantic MediaWiki-Erweiterung definiert, die hier als Abhängigkeit angesehen werden kann). Die Parserfunktion {{#show}} versucht, einen Benutzernamen aus einer semantischen Eigenschaft zu erhalten, die auf der Seite, auf der der Workflow gestartet wird, festgelegt sein kann oder nicht. Wenn die Funktion keine richtigen Informationen findet, greift sie auf TheBoss zurück (vorausgesetzt, dass ein solcher Benutzer im Wiki existiert). Die {{ROOTPAGENAME}}-Variable ist nur eine einfache Möglichkeit, den "Benutzer"-Namensraum zu entfernen, wenn der gesuchte Wert so etwas wie Benutzer:JaneDoe statt nur JaneDoe war.
  • due date: Das Attribut due_date ist ebenfalls obligatorisch. Alle benutzerseitigen Aktivitäten benötigen ein Fälligkeitsdatum. Wenn die laufende Aktivität überfällig ist, beendet die Workflow-Engine den Workflow. In diesem Fall implementieren wir ein Konzept von "Ruhetagen", da wir kein absolutes Fälligkeitsdatum haben, sondern es ab dem Zeitpunkt berechnen, an dem die Aktivität mit der Parserfunktion {{#time}} beginnt.
  • classification: Das Klassifizierungsattribut ist zufällig. Es muss angegeben werden, damit das Formular es festlegen und der Workflow-Kontext darauf zugreifen kann. Wir hätten einen Standardwert angeben können, aber wir möchten ihn leer lassen.

Am Ende haben wir die eingehenden und ausgehenden Flüsse referenziert. (Hinweis: Die Reihenfolge der Elemente spielt normalerweise keine Rolle; nur die Verschachtelung ist wichtig).

Der Gateway[Bearbeiten | Quelltext bearbeiten]

Jetzt können wir mit dem Hinzufügen des Gateways fortfahren. Der Gateway stellt die beiden erforderlichen Pfade bereit:

  1. Wenn der zugewiesene Benutzer das Dokument als Klasse A (CLSA) klassifiziert hat, wird eine E-Mail an die Rechtsabteilung gesendet.
  2. Wenn der zugewiesene Benutzer das Dokument als Klasse B (CLSB) klassifiziert hat, wird vor dem Senden der E-Mail zusäthlich eine Wiki-Seite mit dem in der Aufgabe „AppendWikipage“ definierten Inhalt angehängt.
        ...
		<bpmn:exclusiveGateway id="Gateway" name="AskForClassification.classification">
			<bpmn:incoming>FromAskForClassificationToGateway</bpmn:incoming>
			<bpmn:outgoing>FromGatewayToSendMail</bpmn:outgoing>
			<bpmn:outgoing>FromGatewayToAppendWikipage</bpmn:outgoing>
		</bpmn:exclusiveGateway>
		<bpmn:sequenceFlow id="FromGatewayToSendMail" name="CLSA" sourceRef="Gateway" targetRef="SendMail" />
		<bpmn:sequenceFlow id="FromGatewayToAppendWikipage" name="CLSB" sourceRef="Gateway" targetRef="AppendWikipage" />
		...

Nach dem Einrichten des Gateways müssen wir die beiden zugehörigen Aktivitäten definieren.

E-Mail an die Rechtsabteilung senden[Bearbeiten | Quelltext bearbeiten]

Für Fall 1 benötigen wir den Workflow, um sofort eine E-Mail zu senden:

        ...
		<bpmn:task id="SendMail" name="Send mail">
			<bpmn:extensionElements>
				<wf:type>send_mail</wf:type>
			</bpmn:extensionElements>
			<bpmn:property name="recipient">
				<![CDATA[legal@company.local]]>
			</bpmn:property>
			<bpmn:property name="subject">
				<![CDATA[New "{{{AskForClassification.classification}}}" content: {{FULLPAGENAME}}]]>
			</bpmn:property>
			<bpmn:property name="body">
				<![CDATA[Please check further actions now!]]>
			</bpmn:property>
			<bpmn:incoming>FromGatewayToSendMail</bpmn:incoming>
			<bpmn:incoming>FromAppendWikipageToSendMail</bpmn:incoming>
			<bpmn:outgoing>FromSendMailToTheEnd</bpmn:outgoing>
		</bpmn:task>
		<bpmn:sequenceFlow id="FromSendMailToTheEnd" sourceRef="SendMail" targetRef="TheEnd" />
		...

Text an eine Wikiseite anhängen[Bearbeiten | Quelltext bearbeiten]

Für Fall 2 möchten wir, dass der Workflow zuerst die vorhandene Seite Classification_incidents mit dem in der content-Eigenschaft angezeigten Text anhängt.

Diese Anforderung kann mit dem Aktivitätstyp edit_page erfüllt werden:

        ...
		<bpmn:task id="AppendWikipage" name="Append wikipage">
			<bpmn:extensionElements>
				<wf:type>edit_page</wf:type>
			</bpmn:extensionElements>
			<bpmn:property name="title" default="Classification_incidents"/>
			<bpmn:property name="user" default="MediaWiki default"/>
			<bpmn:property name="content" default="* [[{{FULLPAGENAME}}]] was classified {{{AskForClassification.classification}}}"/>
			<bpmn:property name="mode" default="append"/>
			<bpmn:property name="minor" default="1"/>
			<bpmn:incoming>FromGatewayToAppendWikipage</bpmn:incoming>
			<bpmn:outgoing>FromAppendWikipageToSendMail</bpmn:outgoing>
		</bpmn:task>
		<bpmn:sequenceFlow id="FromAppendWikipageToSendMail" sourceRef="AppendWikipage" targetRef="SendMail" />
		...

Für diesen Aktivitätstyp werden die folgenden Eigenschaften festgelegt:

  • title: Titel der Wiki-Seite, an die der Inhalt angehängt wird.
  • user: Benutzer, der in der Versionshistorie der angehängten Wiki-Seite angezeigt wird.
  • content: Text, der der Wiki-Seite hinzugefügt wird.
  • mode: zeigt an, wo der Text zur Wiki-Seite hinzugefügt wird.
  • minor: legt diese Seitenrevision als "minor" (1) oder "major" (2) fest.

Nachdem diese Aufgabe abgeschlossen ist, sendet der Workflow eine E-Mail an die Rechtsabteilung.

Ergebnisse: komplettes BPMN[Bearbeiten | Quelltext bearbeiten]

Am Ende sieht die bpmn-Seite für den Workflow so aus:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions
	xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
	xmlns:wf="http://hallowelt.com/schema/bpmn/wf">

	<bpmn:process id="Classification_workflow_process">
		<bpmn:extensionElements>
			<wf:context>
				<wf:contextItem name="pageId"/>
				<wf:contextItem name="revision"/>
			</wf:context>
		</bpmn:extensionElements>
		<bpmn:startEvent id="TheStart">
			<bpmn:outgoing>FromTheStartToInitializeWorkflow</bpmn:outgoing>
		</bpmn:startEvent>
		<bpmn:sequenceFlow id="FromTheStartToInitializeWorkflow" sourceRef="TheStart" targetRef="InitializeWorkflow" />
		
		<bpmn:userTask id="InitializeWorkflow" name="Start Content Classification Workflow">
			<bpmn:extensionElements>
				<wf:type>custom_form</wf:type>
				<wf:form>MediaWiki:ContentClassificationInit</wf:form>
				<wf:initializer>true</wf:initializer>
			</bpmn:extensionElements>
			<bpmn:property name="comment"></bpmn:property>
			<bpmn:incoming>FromTheStartToInitializeWorkflow</bpmn:incoming>
			<bpmn:outgoing>FromInitializeWorkflowToAskForClassification</bpmn:outgoing>
		</bpmn:userTask>
		<bpmn:sequenceFlow id="FromInitializeWorkflowToAskForClassification" sourceRef="InitializeWorkflow" targetRef="AskForClassification" />

		<bpmn:userTask id="AskForClassification" name="Provide classification">
			<bpmn:extensionElements>
				<wf:type>custom_form</wf:type>
				<wf:form>MediaWiki:ContentClassificationRequest</wf:form>
			</bpmn:extensionElements>
			<bpmn:property name="assigned_user">
				<![CDATA[{{ROOTPAGENAME:{{#show:{{FULLPAGENAME}}|?Responsible|link=none|default=TheBoss}}}}]]>
			</bpmn:property>
			<bpmn:property name="due_date">
				<![CDATA[{{#time:YmdHis|now + 7 days}}]]>
			</bpmn:property>
			<bpmn:property name="classification"></bpmn:property>
			<bpmn:incoming>FromInitializeWorkflowToAskForClassification</bpmn:incoming>
			<bpmn:outgoing>FromAskForClassificationToGateway</bpmn:outgoing>
		</bpmn:userTask>
		<bpmn:sequenceFlow id="FromAskForClassificationToGateway" sourceRef="AskForClassification" targetRef="Gateway" />

		<bpmn:exclusiveGateway id="Gateway" name="AskForClassification.classification">
			<bpmn:incoming>FromAskForClassificationToGateway</bpmn:incoming>
			<bpmn:outgoing>FromGatewayToSendMail</bpmn:outgoing>
			<bpmn:outgoing>FromGatewayToAppendWikipage</bpmn:outgoing>
		</bpmn:exclusiveGateway>
		<bpmn:sequenceFlow id="FromGatewayToSendMail" name="CLSA" sourceRef="Gateway" targetRef="SendMail" />
		<bpmn:sequenceFlow id="FromGatewayToAppendWikipage" name="CLSB" sourceRef="Gateway" targetRef="AppendWikipage" />

		<bpmn:task id="SendMail" name="Send mail">
			<bpmn:extensionElements>
				<wf:type>send_mail</wf:type>
			</bpmn:extensionElements>
			<bpmn:property name="recipient">
				<![CDATA[legal@company.local]]>
			</bpmn:property>
			<bpmn:property name="subject">
				<![CDATA[New "{{{AskForClassification.classification}}}" content: {{FULLPAGENAME}}]]>
			</bpmn:property>
			<bpmn:property name="body">
				<![CDATA[Please check further actions now!]]>
			</bpmn:property>
			<bpmn:incoming>FromGatewayToSendMail</bpmn:incoming>
			<bpmn:incoming>FromAppendWikipageToSendMail</bpmn:incoming>
			<bpmn:outgoing>FromSendMailToTheEnd</bpmn:outgoing>
		</bpmn:task>
		<bpmn:sequenceFlow id="FromSendMailToTheEnd" sourceRef="SendMail" targetRef="TheEnd" />

		<bpmn:task id="AppendWikipage" name="Append wikipage">
			<bpmn:extensionElements>
				<wf:type>edit_page</wf:type>
			</bpmn:extensionElements>
			<bpmn:property name="title" default="Classification_incidents"/>
			<bpmn:property name="user" default="MediaWiki default"/>
			<bpmn:property name="content" default="* [[{{FULLPAGENAME}}]] was classified {{{AskForClassification.classification}}}"/>
			<bpmn:property name="mode" default="append"/>
			<bpmn:property name="minor" default="1"/>
			<bpmn:incoming>FromGatewayToAppendWikipage</bpmn:incoming>
			<bpmn:outgoing>FromAppendWikipageToSendMail</bpmn:outgoing>
		</bpmn:task>
		<bpmn:sequenceFlow id="FromAppendWikipageToSendMail" sourceRef="AppendWikipage" targetRef="SendMail" />

		<bpmn:endEvent id="TheEnd">
			<bpmn:incoming>FromSendMailToTheEnd</bpmn:incoming>
		</bpmn:endEvent>

	</bpmn:process>

</bpmn:definitions>

Workflow-Auslöser definieren[Bearbeiten | Quelltext bearbeiten]

Damit der Workflow im Wiki erscheint, müssen wir einen Trigger definieren:

  1. Klicken Sie im Menü Globale Aktionen auf Workflow-Triggers.
  2. Klicken Sie auf Neuen Trigger hinzufügen.
  3. Wählen Sie die Option Manuell aus dem Dropdown-Menü.
  4. Klicken Sie auf Weiter.
  5. Definieren Sie die Einstellungen für den Workflow-Trigger:
    • Name: Name, der im Workflow-Auswahlmenü angezeigt wird.
    • Beschreibung: Erläuterung der Funktion und Besonderheiten dieses Triggers.
    • Zu startender Workflow: Durch diesen Trigger ausgelöster Workflow. In unserem Fall Classificiation-workflow.
    • Anfangsdaten für den Workflow (optional): - Standard-Kommentarvorschlag.
    • Bedingungen (optional): In welchen Namensräumen der Workflow zur Auswahl angezeigt wird.
  6. Klicken Sie auf Speichern.

Ihr Workflow kann jetzt getestet werden.

Workflow testen[Bearbeiten | Quelltext bearbeiten]

Der Workflow ist jetzt im Wiki verfügbar. Wir können nun testen, ob die folgende Funktionalität verfügbar ist:

  • Der Workflow steht in den im Workflow-Trigger definierten Namensräumens zum Starten zur Verfügung (sofern hier Einschränkungen bestehen).
  • Der Worklfow wird ausgelöst.
  • Der Workflow wird auf der Seite „Workflows Übersicht“ aufgelistet.
  • Der zugewiesene Benutzer hat eine Aufgabe erhalten.
  • Der Workflow wird in Fall A und B korrekt abgeschlossen.

Bpmn.io nutzen, um Workflows zu definieren[Bearbeiten | Quelltext bearbeiten]

Ein solches Diagramm kann mit dem kostenlosen Dienst bpmn.io erstellt werden. Die resultierende BPMN-Datei muss allerdings modifiziert werden, bevor sie tatsächlich importiert und im Wiki verwendet werden kann.




PDF-Ausschluss - Start

Feedback zur Dokumentation ist im Community-Forum möglich.

PDF-Ausschluss - Ende