Tutorial in erster Näherung fertig
220
README.md
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
# FlexDMA Schnelleinstieg
|
||||||
|
|
||||||
|
Das nachfolgende Tutorial bietet einen Schnelleinstieg in die wichtigsten Features der Workflow-Engine FlexDMA am Beispiel eines Reiseantragsworkflows.
|
||||||
|
|
||||||
|
![](img/prozessdiagramm.svg)
|
||||||
|
|
||||||
|
## Schrittweises Vorgehen in der Entwicklungsumgebung
|
||||||
|
|
||||||
|
### Neues Prozessmodell anlegen
|
||||||
|
![](img/entwicklungsumgebung_schritt_1.png)
|
||||||
|
|
||||||
|
Es beginnt mit einen Klick auf den Button __Neues Prozessmodell anlegen__.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_2.png)
|
||||||
|
|
||||||
|
Danach erhalten Sie ein neues leeres Prozessmodell, in dessen Schema bereits ein minimales Code-Beispiel mit einem einzelnen Attribut (sample) bereitgestellt wird.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_3.png)
|
||||||
|
|
||||||
|
Danach können Sie im Reiter Schema das Datenmodell ihres Prozessmodells definieren. Es soll am Ende alle Felder enthalten, die in den Prozessschritten benötigt werden.
|
||||||
|
|
||||||
|
### Vollständiges Schema des Beispiel-Reiseantrags
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
schema_uniquename: tutorial_reiseantrag
|
||||||
|
schema_title: Beispiel Reiseantrag
|
||||||
|
initial_status: initial
|
||||||
|
types:
|
||||||
|
hotel:
|
||||||
|
attributes:
|
||||||
|
- attribute_name: name
|
||||||
|
label: Name
|
||||||
|
type: string
|
||||||
|
control: textbox
|
||||||
|
- attribute_name: kosten
|
||||||
|
label: "Kosten"
|
||||||
|
type: string
|
||||||
|
regex: "^[0-9]+(,[0-9]+)?$"
|
||||||
|
control: textbox
|
||||||
|
reisetyp:
|
||||||
|
attributes:
|
||||||
|
- attribute_name: typ
|
||||||
|
label: Reisetyp
|
||||||
|
type: string
|
||||||
|
control: textbox
|
||||||
|
loader:
|
||||||
|
type: python
|
||||||
|
code_location: "tutorial_reiseantrag/loaders/reisetyp.py"
|
||||||
|
attributes:
|
||||||
|
- attribute_name: reisetyp
|
||||||
|
label: "Typ der Reise"
|
||||||
|
type: reisetyp
|
||||||
|
control: select
|
||||||
|
required: true
|
||||||
|
- attribute_name: vorname
|
||||||
|
label: Vorname
|
||||||
|
type: string
|
||||||
|
control: textbox
|
||||||
|
required: true
|
||||||
|
- attribute_name: nachname
|
||||||
|
label: Nachname
|
||||||
|
type: string
|
||||||
|
control: textbox
|
||||||
|
required: true
|
||||||
|
- attribute_name: zielort
|
||||||
|
label: Zielort
|
||||||
|
type: string
|
||||||
|
control: textbox
|
||||||
|
- attribute_name: beginn
|
||||||
|
label: Reisebeginn
|
||||||
|
type: date
|
||||||
|
control: datepicker
|
||||||
|
- attribute_name: ende
|
||||||
|
label: Reiseende
|
||||||
|
type: date
|
||||||
|
control: datepicker
|
||||||
|
- attribute_name: uebernachtungen
|
||||||
|
label: "Übernachtungen"
|
||||||
|
type: hotel
|
||||||
|
cardinality: many
|
||||||
|
control: tableedit
|
||||||
|
- attribute_name: genehmigungskommentar
|
||||||
|
label: "Kommentar der/des Vorgesetzten"
|
||||||
|
type: string
|
||||||
|
control: textarea
|
||||||
|
```
|
||||||
|
|
||||||
|
Für das Attribut _reisetyp_ vom Typ _reisetyp_ ist im Schema ein dynamisches Laden mittels eigenem Code in Python oder SQL vorgesehen worden. Aus diesem Grund muss als nächstes die dafür vorgesehene Funktion im Reiter __Code__ definiert werden. Wie das geht zeigt der nächste Screenshot.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_4.png)
|
||||||
|
|
||||||
|
Damit sind die grundlegenden Arbeiten an unserem Prozessmodell abgeschlossen und wir können uns nun um die Abbildung der einzelnen Prozessschritte kümmern.
|
||||||
|
|
||||||
|
### Abbildung der Prozessschritte als Views
|
||||||
|
|
||||||
|
Durch einen Klick auf den Button __View hinzufügen__ in der folgenden Maske kann eine neue View angelegt werden.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_6.png)
|
||||||
|
|
||||||
|
Nach dem Klick erscheint ein Dialog, der bereits einen Code-Vorlage für die Erstellung der View mit empfehlungen für die verpflichtend zu definierenden und einige weitere Attribute beinhaltet.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_7.png)
|
||||||
|
|
||||||
|
Dieser Code kann nun vor dem tatsächlichen Anlegen der View noch wie im folgenden Screenshot angepasst werden.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_8.png)
|
||||||
|
|
||||||
|
Nach dem Klick auf __View anlegen__ erscheint die neue View dann in einem neuen Tab im Quellcodeeditor.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_9.png)
|
||||||
|
|
||||||
|
Dort lässt sie sich über den Button __View-Vorschau__ auch schon so betrachten, wie sie in der finalen Anwendung dann aussehen wird.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_10.png)
|
||||||
|
|
||||||
|
Nun kann die View des Antragstellers so gestaltet werden, wie sie final aussehen soll.
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_11.png)
|
||||||
|
|
||||||
|
Das hat dann in der Vorschau das folgende Resultat:
|
||||||
|
|
||||||
|
![](img/entwicklungsumgebung_schritt_12.png)
|
||||||
|
|
||||||
|
Hier noch der vollständige Code unserer ersten View:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
view_for: "tutorial_reiseantrag" # Bezieht sich auf schema_uniquename
|
||||||
|
title: "Reiseantrag anlegen"
|
||||||
|
state: initial
|
||||||
|
roles_allowed:
|
||||||
|
- role: reisende
|
||||||
|
restricted_by: "username == owner_username"
|
||||||
|
transitions:
|
||||||
|
- name: "to_beantragt"
|
||||||
|
label: "Antrag stellen"
|
||||||
|
state: "beantragt"
|
||||||
|
- name: "to_initial"
|
||||||
|
label: "Zwischenspeichern"
|
||||||
|
state: "initial"
|
||||||
|
tabs:
|
||||||
|
- name: "Allgemein"
|
||||||
|
panels:
|
||||||
|
- name: "Stammdaten"
|
||||||
|
visible_attributes:
|
||||||
|
- nachname
|
||||||
|
- vorname
|
||||||
|
- name: "Reisedaten"
|
||||||
|
visible_attributes:
|
||||||
|
- reisetyp
|
||||||
|
- zielort
|
||||||
|
- beginn
|
||||||
|
- ende
|
||||||
|
```
|
||||||
|
|
||||||
|
Damit ist die erste View unseres Prozessmodells erfolgreich erzeugt. Im Code-Abschnitt __transitions__ enthält unsere erste View übrigens auch schon den Übergang zur nächsten View __Reiseantrag prüfen__, die für Nutzende mit der Rolle _vorgesetzte_ bereitsteht und alle Anträge im Status _beantragt_ zur Bearbeitung bereitstellt.
|
||||||
|
|
||||||
|
Über die Einschränkung (__restricted_by__) wird festgelegt, dass Reisende in dieser View nur ihre eigenen Reiseanträge sehen dürfen.
|
||||||
|
|
||||||
|
### Eine View für Reiseantrag prüfen anlegen
|
||||||
|
|
||||||
|
Das Vorgehen zur Anlage der View _Reiseantrag prüfen_ ist exakt das gleiche wie bei der View _Reiseantrag stellen_.
|
||||||
|
|
||||||
|
Der resultierende Code sieht wie folgt aus:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
view_for: "tutorial_reiseantrag" # Bezieht sich auf schema_uniquename
|
||||||
|
title: "Reiseantrag prüfen"
|
||||||
|
state: beantragt
|
||||||
|
roles_allowed:
|
||||||
|
- role: vorgesetzte
|
||||||
|
transitions:
|
||||||
|
- name: "to_initial"
|
||||||
|
label: "Antrag ablehnen"
|
||||||
|
state: "initial"
|
||||||
|
post_transition:
|
||||||
|
code_location: "tutorial_reiseantrag/transitions/send_email.py"
|
||||||
|
- name: "to_genehmigt"
|
||||||
|
label: "Antrag genehmigen"
|
||||||
|
state: "genehmigt"
|
||||||
|
post_transition:
|
||||||
|
code_location: "tutorial_reiseantrag/transitions/send_email.py"
|
||||||
|
tabs:
|
||||||
|
- name: "Allgemein"
|
||||||
|
panels:
|
||||||
|
- name: "Stammdaten"
|
||||||
|
visible_attributes:
|
||||||
|
- nachname
|
||||||
|
- vorname
|
||||||
|
- name: "Reisedaten"
|
||||||
|
visible_attributes:
|
||||||
|
- reisetyp
|
||||||
|
- zielort
|
||||||
|
- beginn
|
||||||
|
- ende
|
||||||
|
- name: "Kommentare"
|
||||||
|
visible_attributes:
|
||||||
|
- genehmigungskommentar
|
||||||
|
readonly_fields:
|
||||||
|
- vorname
|
||||||
|
- nachname
|
||||||
|
- zielort
|
||||||
|
- beginn
|
||||||
|
- ende
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Maske enthält nun einige Felder, die vom Vorgesetzten nicht bearbeitet werden dürfen, eine E-Mail-Benachrichtigung an den Antragsteller bei Genehmigung und Ablehnung sowie vollständige Sichtrechte aller Nutzer mit der Rolle __vorgesetzte__ auf alle Anträge im Status __beantragt__.
|
||||||
|
|
||||||
|
Die Vorschau der Maske:
|
||||||
|
|
||||||
|
![](img/vorschau_view_2.png)
|
||||||
|
|
||||||
|
Auf die gleiche Weise werden nun alle weiteren laut Prozessdiagramm erforderlichen Views erzeugt.
|
||||||
|
|
||||||
|
Das von FlexDMA automatisch generierte Diagramm zum abgebildeten Prozess sieht wie folgt aus:
|
||||||
|
|
||||||
|
![](img/prozessdiagramm_flexdma_generated.png)
|
||||||
|
|
||||||
|
Ein Durchlauf durch den daraus resultierenden Prozess wird im folgenden Video gezeigt.
|
||||||
|
|
||||||
|
![](img/Bildschirmaufzeichnung.webm)
|
BIN
README.pdf
Normal file
BIN
img/Bildschirmaufzeichnung.webm
Normal file
BIN
img/entwicklungsumgebung_schritt_1.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
img/entwicklungsumgebung_schritt_10.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
img/entwicklungsumgebung_schritt_11.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
img/entwicklungsumgebung_schritt_12.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
img/entwicklungsumgebung_schritt_2.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
img/entwicklungsumgebung_schritt_3.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
img/entwicklungsumgebung_schritt_4.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
img/entwicklungsumgebung_schritt_5.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
img/entwicklungsumgebung_schritt_6.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
img/entwicklungsumgebung_schritt_7.png
Normal file
After Width: | Height: | Size: 184 KiB |
BIN
img/entwicklungsumgebung_schritt_8.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
img/entwicklungsumgebung_schritt_9.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
img/prozessdiagramm.png
Normal file
After Width: | Height: | Size: 51 KiB |
3
img/prozessdiagramm.svg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/prozessdiagramm_flexdma_generated.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
img/vorschau_view_2.png
Normal file
After Width: | Height: | Size: 46 KiB |