Zum Hauptinhalt springen

Workflow

Im Installationsverzeichnis unter Resources befindet sich der Visio Workflow ptpRequest_V1.vsdx.

Standard Workflow Steps​

  • 0 Start
  • 10 Manuelle Anlage
    • 11 Nachbearbeitung (Ersteller)
    • 15 Worflowstart
  • 30 Prüfung
    • 31 Nachbearbeitung (Prüfer)
  • 40 Freigabe
  • 98 Abgelehnt
  • 100 Abgeschlossen

Zusätzliche Workflow Steps​

Neben den Standard Workflow-Schritte können weitere Steps in der Visio angelegt werden. Um diese in der Benutzeroberfläche anzuzeigen, muss die Eigenschaft customWorkflowSteps im Portalskript ou.cust.ptpREQ.callbacks.settings verwendet werden.

Beispiel

Voraussetzung​

tipp

Zum Aktivieren muss das Skript ou.tmpl.ptpREQ.callbacks.settings in ou.cust.ptpREQ.callbacks.settings umbenannt werden.

Erste Schritte​

In der getSettings Funktion verwenden wir nun das customWorkflowSteps-Array und erweitern dies um folgende Einträge:

// ...
customWorkflowSteps: [
{
globalState: 50,
icon: "circled-plus",
label: "Erstellen",
tooltip: "Bestellung erstellen",
},
{
globalState: 55,
icon: "airplane",
label: "Versenden",
tooltip: "Bestellung versenden",
},
{
globalState: 80,
icon: "clock",
label: "Versendet",
tooltip: "Bestellung versendet",
},
],
// ...

Nach dem Speichern, sollte bei einer Neuanlage einer Bestellanforderung, die oben erstellten Workflow-Schritte angezeigt werden.

Beispiel Erstellung

Im weiteren Verlauf wird der Status automatisch anhand des globalState in der Mappe angepasst. Der globalState der Mappe (80) stimmt mit dem letzten customWorkflowSteps-Eintrag (80) überein und wird entsprechend als aktueller Schritt dargestellt. Die vorherigen Schritte werden als "Erfolgreich Abgeschlossen" markiert.

Beispiel Aktualisierung

tipp

Die Workflow-Schritte werden automatisch anhand der Eigenschaft globalState sortiert und können somit zwischen den Standard-Schritten platziert werden.

Optionen​

Es müssen folgende Pflichtfelder befüllt sein:

  • globalState: Zur Sortierung und Überprüfung, ob es sich um den aktuellen Schritt handelt.
  • icon: Aktuell werden nur Entypo Icons unterstützt
  • label: Beschriftung
  • tooltip: Tooltip - Na was halt ein Tooltip so macht 😉

Weitere Felder sind:

Sichtbarkeit einstellen​

Möchte man bestimmte Schritte dynamisch ein- bzw. ausblenden, so kann die Option visible verwendet werden.

// ...
customWorkflowSteps: [
{
globalState: 50,
icon: "circled-plus",
label: "Erstellen",
tooltip: "Bestellung erstellen",
visible: function (docFile) {
// Optional Step ausblenden, z.B. wenn für aktuelle kein Versand-Step vorgesehen ist.
return false;
},
},
],
// ...
hinweis

Hier könnte man ein Screenshot anzeigen, der aber wiederum würde ja den Workflow-Schritt nicht anzeigen... Somit hat man sich den hier gespart.

Status dynamisch bestimmen​

Die state Eigenschaft ermöglicht eine dynamische Anpassung des Status eines Workflow-Schrittes.

Beispiel Status dynamisch bestimmen

Erwartete Rückgabewerte:

  • "ongoing": Step wurde noch nicht erreicht, z.B. wenn Mappen globalState kleiner ist als aktueller Step
  • "current": Step ist gerade aktiv, z.B. wenn Mappen globalState gleich aktueller Step
  • "success": Step wird als erfolgreich markiert
  • "failed": Step wird als fehlgeschlagen markiert
  • "skipped": Step wurde übersprungen (Hintergrundfarbe wird nicht befüllt, siehe Beispiel unten)
// ...
customWorkflowSteps: [
{
globalState: 50,
icon: "download",
label: "Einkaufen!",
tooltip: "Dann geh doch zu Netto",
state: function (docFile) {
// Optionale Rückgabewerte: "ongoing" | "current" | "success" | "failed" | "skipped"
// Wird kein Wert zurückgegeben, ist der Step noch nicht abgeschlossen und somit offen.

const globalState = +docFile.globalState;
if (globalState === 50) {
return "current";
} else if (globalState < 50) {
return "ongoing";
}

// Über das docFile können Felder abgefragt werden und nach deren Status reagiert werden.
const successState = docFile.getFieldValue("Eingekauft");
return successState ? "success": "skipped";
},
},
],
// ...

Erweitertes Beispiel​

tipp

Durch die Verwendung der Eigenschaften visible und state können Workflow-Schritte dynamisch angezeigt werden, um alternative Schritte darzustellen. Ein Beispiel hierfür (Der Mann hat überlebt 😬):

Beispiel dynamischer Status

Vollständiges Beispiel:

// ...
customWorkflowSteps: [
{
globalState: 50,
icon: "download",
label: "Einkaufen!",
tooltip: "Dann geh doch zu Netto",
state: function (docFile) {
const globalState = +docFile.globalState;
if (globalState === 50) {
return "current";
} else if (globalState < 50) {
return "ongoing";
}

const successState = docFile.getFieldValue("Eingekauft");
return successState ? "success": "skipped";
},
},
{
globalState: 52,
icon: "upload",
label: "Auspacken",
tooltip: "Und in den Kühlschrank damit",
state: function (docFile) {
const globalState = +docFile.globalState;
if (globalState === 50) {
return "current";
} else if (globalState < 50) {
return "ongoing";
}

const successState = docFile.getFieldValue("Eingekauft");
return successState ? "success": "skipped";
},
},
{
globalState: 53,
icon: "tools",
label: "Kochen",
tooltip: "Was der Kühlschrank her gibt",
state: function (docFile) {
const globalState = +docFile.globalState;
if (globalState === 50) {
return "current";
} else if (globalState < 50) {
return "ongoing";
}

const successState = docFile.getFieldValue("Eingekauft");
return successState ? "success": "skipped";
},
},
{
globalState: 55,
icon: "thumbs-up",
label: "Lieferando",
tooltip: "Bitte immer bei Lieblingspizzeria bestellen, der weiß dann schon Bescheid",
visible: function (docFile) {
const fallback = docFile.getFieldValue("LieferandoBestellNr");
return fallback && fallback.length > 0;
},
state: function (docFile) {
const globalState = +docFile.globalState;
if (globalState === 50) {
return "current";
} else if (globalState < 50) {
return "ongoing";
}

const fallback = docFile.getFieldValue("LieferandoBestellNr");
return fallback ? "success": "skipped";
},
},
{
globalState: 58,
icon: "light-up",
label: "Essen",
tooltip: "Hmmm lecker",
state: "success",
},
],
// ...