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",
},
],
// ...