Graphmodul pr - Prozesse

Aus Graph-IT Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Das Graphmodul pr - prozesse stellt Knoten zur Verfügung um Aufgabentypen zu definieren und zu versionieren, und den Kreis der Personen festzulegen die Aufgaben dieses Typs ausführen dürfen. Es stellt Templates bereit mit denen zu Aufgabentypen erweiterbare Knoten und Formulare generiert werden können. Es bietet außerdem die Möglichkeit allgemeine Ereignisse die während der Abarbeitung einer Aufgaben auftreten zu protokollieren und aus diesem Protokoll Laufzeiten zu berechnen.

Die Aufgabe

Eine Aufgabe ist eine Tätigkeit die von einer Person in einem Zug ohne Unterbrechung durchgeführt wird. Die Aufgabe hat einen bestimmten Typ der von einem bestimmten Personenkreis ausgeführt werden darf. Sie wird zu einem Zeitpunkt A begonnen und zu einem späteren Zeitpunkt B beendet.

Der Knoten prTask(version)

Der Knoten prTask dient dazu Aufgabentypen zu definieren. Ein prTask gehört immer zu einem bestimmten Graphmodul und kann so zwischen Graphen über den Aktualisierungsprozess ausgetauscht werden. Der Name des prTasks wird aus dem Präfix des Graphmoduls und einer pro Graphmodul vorlaufenden Nummer erzeugt. Der prTask hat darüber hinaus eine Menschen lesbare Bezeichnung. Diese ist als kurze Überschrift zu dem Task zu verstehen. Sie wird von den Templates verwendet um Formular und Grid Beschriftungen zu generieren. Ein prTask hat eine oder mehrere prTaskversionen. Der Knoten prTaskversion enthält das Attribut Beschreibung in welchem die einzelnen Arbeitsschritte der Aufgabe in von Menschen lesbarer Form gespeichert werden. Dies ist die eigentliche Definition des Aufgabe. Ein prTask gilt als aktiv, wenn genau eine verknüpfte prTaskversion aktiv ist. Dies bedeutet das neue Aufgaben nach dieser Definition abgearbeitet werden sollen. Die prTaskversionen zu einem prTask sollten sich nicht allzu sehr unterscheiden. Weicht eine gewünschte Aufgabendefinition sehr von der bestehenden ab, so sollte besser eine neue prTask-Instanz angelegt werden.

Der Knoten prPerson

Im Knoten prPerson werden Personen definiert die Aufgaben eines bestimmten Typs ausführen dürfen. Die prPerson hat nur einen Namen und Verknüpfungen zu den prTask-Instanzen die diese Person durchführen darf. Die prPerson kann darüber hinaus mit einem Autobenutzer verknüpft werden. Diese Verknüpfung wird von den durch Templates generierten Knoten, Formularen und Aktionen dazu verwendet die prPerson-Instanz des Autobenutzer automatisch mit der bearbeiteten Aufgabe-Instanz zu verknüpfen.

Die Aufgabe-Knoten

Die Aktionfunktion prtask_aktualisiereknoten aktualisiert zu dem prTask gehörenden Aufgabe-Knoten. Der Name des prTask wird dabei als Knotentyp verwendet. Die Instanzen des generierten Knoten stellen dann Aufgaben des durch die prTask-Instanz definierten Aufgabentyps dar. Die generierten Aufgabe-Knoten haben zunächst folgende Attribute und Aktionen:

   Die datetime Attribute ‚angelegtam‘, ‚begonnenam‘, ‚pausiertam‘, ‚fortgesetztam‘ und ‚beendetam‘
   Das string Attribut ‚prstatus‘, welches die Werte ‚angelegt‘, ‚begonnen‘, ‚pausiert‘ und ‚beendet‘ annehmen kann
   Das string Attribut ‚prperson‘, welches die prPerson-Instanz refenreziert, welche die Aufgabe durchgeführt hat
   Das text Attribut ‚prfehler‘, in welchem Fehler ausgegeben werde können
   Das string Attribut ‚pruuid‘, in welchem eine eindeutige ID für die Aufgabe abgelegt wird
   Das string Attribut ‚name‘ ist ein Alias von ‚prangelegtam‘ solange das Attribut ‚pruuid‘ nicht gesetzt ist. Danach ist es ein Alias von ‚pruuid‘.
   Die lifecycle-Aktion ‚pranlegen‘, welche durch das Attribut ‚name‘ getriggert wird. Die Aktion prüft zunächst, ob das Attribut ‚prstatus‘ leer ist. Ist dies nicht der Fall so bricht die Aktion ab. Die Attribute ‚prangelegtam‘ und ‚pruuid‘ werden initialisiert und das Attribut ‚prstatus‘ auf ‚angelegt‘ gesetzt.
   Die lifecycle-Aktion ‚prbeginnen‘. Sie bricht ab wenn das Attribut ‚prStatus‘ nicht den Wert ‚angelegt‘ hat. Sie überprüft dann ob die durch das Attribut ‚prperson‘ referenzierte ‚prperson‘-Instanz die Aufgabe ausführen darf. Wenn ja dann wird das Attribut ‚prbegonnenam‘ gesetzt und das Attribut ‚prstatus‘ auf den Wert ‚begonnen‘ aktualisiert.
   Die lifecycle-Aktion ‚prpausieren‘ bricht ab wenn das Attribut ‚prstatus‘ nicht den Wert ‚begonnen‘ hat. Sonst wird das Attribut ‚prpausiertam‘ gesetzt und das Attribut ‚prstatus‘ auf den Wert ‚pausiert‘ aktualisiert.
   Die lifecycle-Aktion ‚prfortsetzen‘ bricht ab wenn das Attribut ‚prstatus‘ nicht den Wert ‚pausiert‘ hat. Sonst wird das Attribut ‚prfortgesetztam‘ gesetzt und das Attribut ‚prstatus‘ auf den Wert ‚begonnen‘ aktualisiert.
   Die lifecycle-Aktion ‚prbeenden‘ bricht ab wenn das Attribut ‚prstatus‘ nicht den Wert ‚begonnen‘ hat. Sonst wird das Attribut ‚prbeendetam‘ gesetzt und das Attribut ‚prstatus‘ auf den Wert ‚beendet‘ aktualisiert.
   Die Aktion ‚prvalidieren‘, welche durch die Aktion ‚prbeenden‘ getriggert wird. Ihre Aufgabe ist es zu prüfen ob die Werte in der Instanz gültig sind. Sind sie es nicht so muss sie das Attribut ‚prfehler‘ befüllen. Die Aktion darf nur lesend auf den Graphen zugreifen und darf bis auf das Setzen des Attributes ‚prfehler‘ keine Seiteneffekte haben.
   Die Aktion ‚prprojizieren‘, welche durch die Aktion ‚prbeenden‘ getriggert wird. Ihre Aufgabe ist es die Werte in der Instanz auf den restlichen Graphen abzubilden. Sie darf aber keine Werte in der Instanz selbst ändern.
   Die Aktion ‚prloeschen‘, welche durch die Aktion ‚loeschen‘ getriggert wird. Ihre Aufgabe ist es abhängige Instanzen der Aufgabe zu löschen.

Die lifecycle-Aktionen und die Aktion ‚loeschen‘ erzeugen darüber hinaus jeweils eine ‚prereignis‘-Instanz, in welcher der Statuswechsel dokumentiert wird. Der Programmierer ergänzt und verwendet den Aufgabe-Knoten. Dies geschieht zunächst in den Aktionen ‚prvalidieren‘, ‚prprojizieren‘ und ‚prloeschen‘. Diese sind zunächst ungültig, da sie keinen Programmcode enthalten. Darüber hinaus können zusätzliche Attribute, Aktionen, Verknüpfungen und Hilfsknoten angelegt werden.

   Die zusätzlichen Aktionen an dem Aufgabe-Knoten zerfallen in die zwei Kategorien ‚Vorbereiten‘ und ‚Projizieren‘
   Die Aktionen der Kategorie ‚Vorbereiten‘ dürfen nur auf Instanzen arbeiten die nicht im Status ‚beendet‘ sind. Sie dürfen Verknüpfungen zu benachbarten Knoten herstellen und Daten aus dem Rest des Graphen in die Instanz kopieren. Sie dürfen an der Instanz Aktionen der Kategorie ‚Vorbereiten‘ ausführen. Sie dürfen keine anderen Änderungen am Graphen vornehmen. Konzeptionell gehört die Aktion ‚prvalidieren‘ in diese Kategorie.
   Die Aktionen der Kategorie ‚Projizieren‘ dürfen nur auf Instanzen arbeiten die im Status ‚beendet‘ sind. Sie dürfen Verknüpfungen zu benachbarten Knoten herstellen, aber keine weiteren Änderungen an der Instanz durchführen. Sie dürfen an der Instanz Aktionen der Kategorie ‚Projizieren‘ ausführen. Die Aktionen der Kategorie ‚Projizieren‘ dürfen nur ein mal pro Instanz aufgerufen werden. Konzeptionell gehört die Aktion ‚prprojizieren‘ in diese Kategorie.
   Für zusätzliche Datenfunktionen an dem Aufgabe-Knoten gilt, dass sie von den benachbarten Knoten nur das Primärattribut auslesen dürfen. Werden an dem Aufgabe-Knoten weitere Daten aus den benachbarten Knoten benötigt so müssen diese durch Aktionen aus der Kategorie ‚Vorbereiten‘ kopiert werden.
   Aufgabe-Knoten dürfen nur in Aktionen und Datenfunktionen anderer Aufgabe-Knoten referenziert werden. Eine Instanz im Status ‚beendet‘ darf nicht verändert werden.
   Hilfsknoten haben eine ‚zu 1‘-Verknüpfung zu ihren Aufgabe-Knoten. Sie sind konzeptionell identisch mit dem Aufgabe-Knoten und unterliegen damit gleichen Einschränkungen. Ihre Typ hat als Präfix den Typ des Aufgabe-Knoten.

Das Aufgabe-Fomular

Die Aktionfunktion prtask_generiereformular generiert zu dem prTask ein Formular in der Auto-Oberfläche. Dieses kann als Ausgangspunkt für das Aufgabe-Fomular dienen. Es hat bereits Schaltflächen für die lifecycle-Aktionen ‚beginnen‘, ‚pausieren‘, ‚fortsetzen‘ und ‚beenden‘. Die Schaltfläche ‚beginnen‘ ruft die neue Aktion ‚aubeginnen‘ auf, welche versucht zu dem aktuellen Autobenutzer ein prPerson-Instanz zu ermitteln, deren Name in das Attribut ‚prperson‘ setzt und die Aktion ‚prbeginnen‘ aufruft. Um die Schaltflächen korrekt zu deaktivieren werden auch noch die Attribute ‚aubeginbar‘, ‚aupausierbar‘, ‚aufortsetzbar‘ und ‚aubeendbar‘ angelegt.

Die Knoten prAufgabe und prEreignis