flexdma_getting_started/README.md
2023-02-22 11:29:31 +01:00

221 lines
6.7 KiB
Markdown

# 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)