Erfolgsgeschichte eines VARIO-Kunden: ESD-Protect Jetzt lesen

Workflows

Im Menüpunkt Workflows kannst Du eigene, individuell angepasste Abläufe definieren. Diese benutzerdefinierten Workflows ermöglichen es Dir, Prozesse zu automatisieren, die von den Standardabläufen in VARIO Cloud abweichen. So kannst Du das System optimal an die Anforderungen und Arbeitsweise Deines Unternehmens anpassen und Deine Arbeit mit der VARIO Cloud noch effizienter gestalten.

Hier die Vorteile von Workflows für Dein Unternehmen im Überblick:

  • Zeitersparnis: Automatisierung von Routinetätigkeiten reduziert manuellen Aufwand.
  • Fehlerreduktion: Standardisierte Abläufe minimieren Eingabefehler.
  • Compliance: Geschäftsregeln werden automatisch eingehalten.
  • Skalierbarkeit: Prozesse wachsen flexibel mit dem Unternehmen mit.
  • Intuitive Bedienung: Workflows werden grafisch erstellt statt mit komplexe Programmierung.
  • Nahtlose Integration: Direkt in VARIO Cloud eingebunden, keine externen Workflow-Tools erforderlich.
  • Echtzeit-Debugging: Fehler werden präzise angezeigt und lassen sich sofort analysieren und beheben.
  • Individuelle Abläufe: Workflows lassen sich exakt auf eigene Prozesse zuschneiden – keine starren Standardlösungen.

Einmal eingerichtet, laufen die meisten Workflow-Abläufe unauffällig im Hintergrund. Dadurch fügen sie sich nahtlos in bestehende Abläufe ein und sind im täglichen Einsatz kaum von systemseitigen Prozessen zu unterscheiden.

JavaScript-Kenntnisse erforderlich

Für das Erstellen und Bearbeiten von Workflows sind Kenntnisse in der Programmiersprache JavaScript erforderlich. Die Workflows greifen direkt in die Abläufe von VARIO Cloud einfehlerhafte Workflows können daher zu unerwünschtem Verhalten oder Störungen im System führen. Prüfe Deine Workflows daher sorgfältig, bevor Du sie aktivierst. 

Mithilfe der integrierten Protokolle und Logs zu den Workflows lassen sich solche Fehler zwar nachvollziehen, dennoch ist technisches Verständnis erforderlich, um sie gezielt zu beheben.

Über “+ Workflow” kannst Du einen neuen Workflow anlegen. Bestehende Workflows lassen sich über das Aktionsmenü auch als JSON-Datei importieren.

Menüpunkt Workflows

Synchrone und Asynchrone Workflows

Bevor Du Deinen ersten Workflow erstellst, ist es wichtig, den Unterschied zwischen den beiden verfügbaren Varianten zu kennen: synchrone und asynchrone Workflows.

Welche Variante verwendet wird, hängt vom Workflow-Auslöser ab, den Du beim Anlegen des Workflows festlegst. Je nach Variante stehen Dir unterschiedliche Workflow-Elemente zur Verfügung.

Zusammengefasst:

    • Synchrone Workflows werden direkt im Kontext einer Benutzeraktion ausgeführt (z. B. beim Synchronisieren eines Belegs) und können den weiteren Arbeitsablauf beeinflussen.
    • Asynchrone Workflows laufen zeitlich unabhängig im Hintergrund und eignen sich z. B. für automatisierte Prüfungen oder Benachrichtigungen.

Wie Du den passenden Workflow-Auslöser auswählst, erfährst Du im Abschnitt Workflow anlegen“.

Synchrone Workflows

Ein synchroner Workflow wird direkt im Rahmen einer Benutzeraktion ausgeführt – z. B. beim Speichern eines Datensatzes. Der Datensatz wird in diesem Fall erst gespeichert, wenn der gesamte Workflow vollständig durchgelaufen ist.

Während der Ausführung kann es zu kurzen Wartezeiten kommen. Der aktive Workflow wird durch eine Hinweismeldung im System angezeigt, und die Änderungen, die durch den Workflow vorgenommen werden, erscheinen sofort im geöffneten Datensatz.

Verwende synchrone Workflows überall dort, wo Daten unmittelbar geprüft oder Folgeprozesse im gleichen Dialog gestartet werden sollen.

Merksatz: Synchron = “blockierend” – der Workflow wird innerhalb der Benutzeraktion ausgeführt und hält den Vorgang an, bis diese abgeschlossen ist.

Beispiel für einen synchronen Workflow

Ein Anwendungsfall für einen synchronen Workflow ist die automatische Prüfung und Erstellung eines Deals beim Speichern eines Angebots.

Dabei läuft der Workflow wie folgt ab:

    • Existiert bereits einen Deal, wird das Angebot wie gewohnt gespeichert.
    • Existiert keinen Deal, legt der Workflow automatisch einen neuen Deal an, bevor der Speichervorgang abgeschlossen wird.

Da es sich um einen synchronen Workflow handelt, wird das Angebot erst gespeichert, wenn die Prüfung abgeschlossen und ggf. der neue Deal erstellt wurde. Der Benutzer kann erst dann mit der Arbeit fortfahren, wenn der gesamte Workflow erfolgreich beendet ist.

Ein Workflow wird synchron ausgeführt, wenn er mit einem der folgenden Auslöser angelegt wird:

  • Vor dem Speichern von:
    • Adressen
    • Aktivitäten
    • Aufgaben
    • Deals
    • Projekten
  • Bei Synchronisierung von Belegen

Asynchrone Workflows

Ein asynchroner Workflow wird nicht sofort im Rahmen einer Benutzeraktion ausgeführt, sondern nachgelagert. Erst wenn die ursprüngliche Aktion abgeschlossen ist, startet der Workflow im Hintergrund – während der Benutzer bereits weiterarbeiten kann.

Im Gegensatz zu synchronen Workflows entstehen hier keine Wartezeiten. Änderungen, die durch den Workflow vorgenommen werden, sind daher erst nach dessen Abschluss sichtbar. Falls gewünscht, kann der Benutzer über eine im Skript definierte Hinweismeldung informiert werden.

Verwende asynchrone Workflows für ressourcenintensive, zeitaufwändige oder optionale Aufgaben, um den Arbeitsfluss nicht zu unterbrechen.

Merksatz: Asynchron = “hintergründig” – die Benutzeraktion ist sofort abgeschlossen, der Workflow übernimmt den Rest im Nachgang.

Beispiel für einen asynchronen Workflow

Ein Anwendungsfall für einen asynchronen Workflow ist die automatische Erstellung eines Deals beim Speichern eines Angebots – unabhängig davon, ob bereits ein Deal zum Angebot existiert.

Der Ablauf sieht wie folgt aus:

    • Das Angebot wird sofort gespeichert, ohne Verzögerung für den Benutzer.
    • Im Anschluss wird im Hintergrund ein Workflow gestartet, der automatisch einen neuen Deal anlegt.
    • Der Benutzer kann währenddessen direkt weiterarbeiten.
    • Optional informiert eine Hinweismeldung, die im Workflow integriert ist, über die erfolgreiche Erstellung des Deals.

Ein Workflow wird asynchron ausgeführt, wenn er mit einem der folgenden Auslöser angelegt wird:

  • Nach dem Speichern von:
    • Adressen
    • Aktivitäten
    • Aufgaben
    • Belegen
    • Deals
    • Projekten
  • Bei Beginn der Bearbeitung von Belegen
  • Bei Erstellung von Belegen
  • Vor dem Speichern von Belegen
  • Übernahme von Belegen
  • Dokumentreferenz nach Änderung (z. B. bei der Verknüpfung eines Belegs mit einer Aufgabe)
  • Dateianalyse abgeschlossen

Wann sollte ich welchen Workflow-Typ auswählen?

EntscheidungskriterienSynchronAsynchron
Benutzerrückmeldung muss sofort sein? (z. B. Validierung, Pflichtfeldprüfung)
Längere Hintergrundlogik (z. B. Angebotsprüfung durch mehrere Regeln)
Direkter Datenzugriff anderer Prozesse nötig? (z. B. Folgeereignis im selben Fenster)
Performance wichtig, Benutzer soll ohne Unterbrechung weiterarbeiten können?

Im direkten Vergleich:

Synchron: Workflow läuft innerhalb der Aktion -> Kurze Wartezeit, sofortige Ergebnisse

Asynchron: Workflow läuft nach der Aktion im Hintergrund -> Keine Wartezeit, Ergebnis erscheint später

Workflow erstellen

Um Dir den Einstieg in die Arbeit mit Workflows zu erleichtern, zeigen wir Dir die einzelnen Schritte anhand des Beispiel-Workflows “Lieferungs- und Zahlungsmodalitäten für Angebote”.

Beispiel Lieferungs- und Zahlungsmodalitäten für Angebote

Dieser Workflow vereinfacht die Erstellung von Angeboten für Interessenten, bei denen noch keine Geschäftsbeziehung hinterlegt ist.

Standardablauf ohne Workflow:

Beim Anlegen eines Angebots für eine Adresse ohne Geschäftsbeziehung (z. B. bei neuen Interessenten) müssen die Zahlungs- und Lieferbedingungen manuell eingetragen werden.

Ablauf mit Workflow:

Mit Hilfe des Workflows werden die Zahlungs- und Lieferungsmodalitäten in diesem Fall automatisch vorausgefüllt, sobald das neue Angebot erstellt wird.

Der Workflow prüft dazu:

– ob es sich um einen Beleg der Kategorie “Angebot” handelt,

– und ob keine Geschäftsbeziehung vom Typ “Kunde” bei der Adresse hinterlegt ist.

Wenn beide Bedingungen zutreffen, werden die Modalitäten aus im Workflow festgelegten Standardwerten übernommen.

 

Beispiel-Workflow

 

Auf den Aufbau und die einzelnen Elemente eines Workflows gehen wir im Abschnitt “Workflow-Elemente” detailliert ein.

Um einen neuen Workflow zu erstellen, gehe folgendermaßen vor:

  • Wähle “+Workflow” aus.
  • Gib dem Workflow eine Bezeichnung, wähle den gewünschten Auslöser aus und klicke auf “Anlegen“.
Workflow anlegen

Auslöser

Die Auslöser legen fest, welche Aktion in VARIO Cloud den Start eines Workflows auslöst. Sie sind nach Funktionsbereiche wie Belege, CRM/Office oder Adressen unterteilt. Je nach Bereich stehen unterschiedliche Auslöser zu Verfügung, wie zum Beispiel das Speichern eines Datensatzes und die Übernahme eines Beleges. 

Wichtig: Pro Auslöser kann nur ein aktiver Workflow gleichzeitig bestehen!

 

Mit der Wahl des Auslösers wird gleichzeitig bestimmt, ob der Workflow synchron oder asynchron ausgeführt wird. Eine Übersicht aller verfügbaren Auslöser und deren Zuordnung zu synchronen oder asynchronen Workflows findest Du im Abschnitt “Synchrone und Asynchrone Workflow“.

 

Beispiel Auslöser

Für unseren Beispiel-Workflow “Lieferungs- und Zahlungsmodalitäten für Angebote” verwenden wir den Auslöser “Beleg: Bei Erstellung”. Dieser löst einen asynchronen Workflow aus, der unmittelbar nach dem Anlegen eines Belegs gestartet wird. 

  • Im nächsten Schritt kannst Du die Bezeichnung und Beschreibung für das Start-Element ggf. anpassen. Bestätige mit “Anlegen”.
  • Nach dem Anlegen öffnet sich die Workflow-Konfiguration. Hier kannst Du per Drag-and-Drop weitere Elemente zur Darstellung hinzufügen.
Element hinzufügen

Workflow-Elemente

Mit den einzelnen Workflow-Elementen bestimmst Du die Schritte innerhalb eines Workflows und legst fest, was an jeder Stelle passieren soll.

– Das Start-Element markiert den Beginn des Workflows.

– Ein Abschließen-Element signalisiert das erfolgreiche Ende des Ablaufs.

– Mit den Elementen “Benutzeraktion” und “Benutzerskript” definierst Du die konkrete Abläufe.

Im Abschnitt “Workflow-Elemente” findest Du eine ausführliche Beschreibung aller verfügbaren Elemente und ihrer Einsatzmöglichkeiten.

  • Beim Hinzufügen eines Elements öffnet sich einen Pop-Up-Fester, in dem Du die Einstellungen bzw. das Skript für das Element festlegen kannst. Die verfügbaren Optionen variieren je nach Elementtyp. Mit einem Doppelklick auf ein bereits eingefügtes Element kannst Du es jederzeit nachträglich bearbeiten.
  • Über die Andockpunkte an den Elementen kannst Du diese in der gewünschte Reihenfolge miteinander verbinden und so den Verlauf des Workflows festlegen.
Elemente verbinden
  • Durch Gedrückthalten des Konfigurationsbereichs kannst Du den Workflow frei verschieben.
  • Mit dem Mausrad oder der Zoom-Leiste am rechten Rad lässt sich die Ansicht vergrößern oder verkleinern.
  • Der Button Automatisch anordnen hilft Dir, die Elemente automatisch übersichtlich anzuordnen, dass der Workflow übersichtlich bleibt – besonders nützlich bei komplexeren Workflows.
  • Jeder Workflow benötigt ein End-Element. Hierfür stehen Dir die Elemente “Abschließen” und “Fehler” zur Verfügung. Weitere Informationen zu diesen findest Du im nächsten Abschnitt.
End-Element
  • Klicke auf “Speichern”, um den Workflow als Entwurf zu sichern. Über “Workflow aktivieren” kann der Workflow anschließend aktiviert werden.

Bevor Du ein Workflow aktivierst

Stelle sicher, dass der Workflow vollständig und korrekt konfiguriert ist, bevor Du ihn aktivierst. Ein aktivierter Workflow wirkt sich unmittelbar auf die Funktionsweise in den jeweiligen Bereichen von VARIO Cloud aus – fehlerhafte Konfigurationen können zu unerwünschten Abläufen oder Datenänderungen führen.

  • Über dem Button Workflow Button kannst Du die Bezeichnung des Workflows anpassen.

Workflow-Trigger-IDs über den Support-Modus

Wenn der Support-Modus aktiviert ist, wird beim Auslösen eines Workflows eine Infobox mit den IDs der möglichen Workflow-Auslöser für den jeweiligen Datensatz angezeigt. Im gezeigten Screenshot siehst Du beispielsweise die potenziellen Auslöser vor und nach dem Speichern einer Adresse.

 

Trigger IDs

Workflow-Elemente

Mit den einzelnen Workflow-Elementen bestimmst Du die Schritte und Abläufe innerhalb eines Workflows. Jedes Element definiert, was genau in einem bestimmten Abschnitt des Workflows passieren soll.

Damit ein Workflow aktiviert werden kann, müssen mindestens folgende Elemente enthalten sein:

  • ein Start-Element
  • mindestens ein End-Element – entweder „Abschließen“ oder „Fehler“

Die verfügbaren Elemente richten sich nach der Art des Workflows: synchron oder asynchron. Je nach Variante stehen unterschiedliche Funktionen zur Verfügung. In Elementen wie dem Benutzerskript-Element wird die Funktion mittels Skript definiert. Hier legst Du den konkreten Ablauf fest – z. B. Bedingungen, Berechnungen oder Aktionen wie das Erstellen eines Datensatzes. Durch das Hovern mit der Maus über ein Element wird ein Tooltip mit einer kurzen Beschreibung des Elements eingeblendet.

Start

Das Element “Start” Start kennzeichnet den Beginn des Workflows. Es steht für den Workflow-Auslöser, der beim Anlegen des Workflows definiert wurde und wird beim Erstellen eines neuen Workflows automatisch hinzugefügt.

Abschließen

Das Element “Abschließen” Abschließen kennzeichnet das Ende eines Workflows. Im Gegensatz zum Fehler-Element, das einen Workflow z. B. mit einer Fehlermeldung beendet, steht das Abschließen-Element für einen erfolgreichen Abschluss des Ablaufs.

Fehler

Mit dem Element “Fehler” Fehler lässt sich ein individueller Fehlerfall definieren. Es dient als alternative Abschlussvariante, die nach den entsprechenden Schritten im Workflow eintreten soll – z. B. wenn bestimmte Felder leer bleiben.

Alternativ kann ein Fehler auch direkt im Skript, z. B. im Benutzerskript-Element, integriert werden, z. B. mit dem Befehl “throw’“. Auf diese Weise lässt sich gezielt eine Aktion verhindern. Der ausgelöste Fehler wird anschließend als solches im Workflow-Protokoll vermerkt. Weitere Informationen dazu findest Du um Abschnitt Fehlermeldungen in Workflows“.

Fehler im Skript

Benutzeraktion

Das Element “Benutzeraktion” Benutzeraktion fügt dem Workflow einen manuellen Zwischenschritt hinzu, bei dem eine Interaktion durch den Benutzer erforderlich ist, um den Ablauf fortzusetzen.

Typischerweise wird dem Benutzer ein Pop-up-Fenster mit Auswahlmöglichkeiten angezeigt. Erst nachdem die Aktion bestätigt oder eine Auswahl getroffen wurde, läuft der Workflow weiter.

Beispiel für eine Benutzeraktion

Ein Szenario für eine Benutzeraktion ist eine Abfrage beim Speichern eines Angebots, ob dieses:

– einem bereits vorhandenen Deal zugeordnet werden soll,

– einem neuen Deal zugewiesen werden soll,

– oder nicht mit einem Deal verknüpft werden soll.

Die getroffene Auswahl wird anschließend im nachfolgenden Benutzerskript-Element verarbeitet, um den entsprechenden Schritt im Workflow auszuführen.

 

Deal zu Angebot-Abfrage

Allgemein

Neben den Feldern “Bezeichnung” und “Beschreibung” stehen Dir im Reiter “Allgemein” folgende Optionen zur Verfügungen. Für die Aktivierung des Workflow muss eine dieser Einstellungen ausgewählt werden:

  • Zuständige Benutzer und Zuständige Benutzergruppe: hier kannst Du festlegen, wer die Benutzeraktion ausführen soll, wenn dies nicht der Benutzer sein soll, der die Aktion ausgelöst hat.
  • Toggle “Verantwortlicher Benutzer ist ausführender Benutzer”: ist dieser Schalter aktiviert, wird die Benutzeraktion vom gleichen Benutzer ausgeführt, der sie ausgelöst hat.
Benutzeraktion Reiter Allgemein

Benutzeraktionen

Über den Button “+Benutzeraktion” kannst Du eine neue Benutzeraktion anlegen. Jede Benutzeraktion steht für eine manuelle Entscheidung oder Eingabe, die vom Benutzer vorgenommen werden muss, z. B. die Auswahl zwischen mehreren Optionen in einem Pop-Up-Fenster. Die Benutzeraktion kann jederzeit über das Kreuz in der oberen rechten Ecke des Elements wieder entfernt werden.

Benutzeraktion hinzufügen

Eine Benutzeraktion unterteilt sich in drei Teilbereiche. Dies sind die Benutzeraktion (1) selbst, die Auswahlmöglichkeiten (2) innerhalb der Benutzeraktion und die Folgeentscheidungen (3) in den jeweiligen Auswahlmöglichkeiten. In den folgenden Abschnitten gehen wir näher auf diese Teilbereiche und die entsprechenden Felder ein.

Benutzeraktion Felder
Benutzeraktion

Innerhalb einer Benutzeraktion kannst Du aus drei Strukturierungsvarianten wählen:

  • Einfaches Eingabefeld oder Toggle: Der Benutzer muss einen Wert eintragen (z. B. Text, Datum, Zahl) oder eine Option aktivieren.
  • Suchdialog: Der Benutzer wählt einen bestehenden Datensatz aus einem bestimmten Bereich der VARIO Cloud, z. B. eine Adresse oder einen Artikel.
  • Auswahlmöglichkeiten mit Folgeentscheidungen: Der Benutzer trifft eine Auswahl zwischen mehreren vordefinierten Optionen. Je nach gewählter Option, kann eine eigene Folgeentscheidung definiert werden, anhand der das Ergebnis der Benutzeraktion weiterverarbeitet wird.

Mehrere Benutzeraktionen

Du kannst auch mehrere Benutzeraktionen anlegen, um verschiedene Eingabearten miteinander zu kombinieren. Beispielsweise lässt sich eine Benutzeraktion erstellen, in der der Benutzer ein Datum eingibt, und eine weitere, in der er eine von mehreren Auswahlmöglichkeiten trifft.

Wird eine dieser Benutzeraktionen als synchron definiert, gelten alle Benutzeraktionen des Workflows als synchron.

Felder zur Benutzeraktion

Ergebnisname der Benutzeraktion – Interner Kennzeichnung, unter der die Benutzeraktion im Skript des nachfolgenden Elements verwendet wird. Der Name kann frei gewählt werden, sollte jedoch eindeutig und nachvollziehbar sein, so dass er auch nachträglich verständlich bleibt.

Typ – Bestimmt den Feldtyp für die Eingabe, z. B. Text, Datum oder Währung. Für Auswahlmöglichkeiten muss “Text” ausgewählt sein. Bei Suchdialogen entfällt dieser.

Toggle “Mehrfachauswahl” – Ermöglicht es dem Benutzer, mehrere Optionen gleichzeitig auszuwählen. Nur relevant bei Auswahlfeldern.

Toggle “Synchron” – Gibt an, ob die Benutzeraktion synchron (vor sofortiger Fortsetzung des Workflows) oder asynchron (zeitversetzt) ausgeführt wird.

Suchdialog – Ermöglich die Auswahl eines Datensatzes aus einem VARIO Cloud Bereich (z. B. Adresse).

Bezeichnung Benutzeraktion – Beschreibungstext, der im Pop-up-Fenster über den Auswahlmöglichkeiten angezeigt wird. Beispiel: “Deal mit Angebot verknüpfen”.

Beispiel Benutzeraktion
Auswahlmöglichkeit

Innerhalb einer Benutzeraktion kannst Du mehrere Auswahlmöglichkeiten definieren, aus denen der Benutzer im Pop-up-Fenster wählen kann. Jede Auswahlmöglichkeit steht dabei für eine Option, die zur Auswahl steht.

Im Beispiel “Deal anlegen?” stehen dem Benutzer folgende Optionen zur Verfügung:

  • Zu einem bestehenden Deal zuordnen
  • Zu einem neuen Deal zuordnen
  • Keine Zuordnung
Auswahlmöglichkeiten Beispiele

Über den Button “+Auswahlmöglichkeit” kannst Du die einzelne Optionen hinzufügen und definieren.

Felder zur Auswahlmöglichkeit

Bezeichnung Auswahlmöglichkeit – Beschreibungstext zur Auswahlmöglichkeit, der dem Benutzer in der Benutzeraktion angezeigt wird. Beispiel: “Zu einem bestehenden Deal zuordnen“.

Ergebniswert des Auswahlmöglichkeit – Interner Kennzeichnung, unter der die Benutzeraktion im Skript des nachfolgenden Elements verwendet wird. Der Name kann frei gewählt werden, sollte jedoch eindeutig und nachvollziehbar sein, so dass er auch nachträglich verständlich bleibt.

Toogle “Standard” – Legt fest, welche Option beim Öffnen des Pop-ups standardmäßig vorausgewählt ist. Beispiel: “Zu einem neuen Deal zuordnen” bei häufigem Anwendungsfall.

Auswahlmöglichkeit bearbeiten
Folgeentscheidung

Zu jeder Auswahlmöglichkeit kann eine Folgeentscheidung definiert werden. Diese wird ausgeführt, sobald der Benutzer die jeweilige Auswahl im Pop-up-Fenster trifft.

Beispiel Folgeentscheidung zur Auswahl „Zu einem bestehenden Deal zuordnen“

Im Fall unseres Beispiels „Deal anlegen?“ ergeben sich folgende Folgeentscheidungen:

  • Wird die Auswahlmöglichkeit „Zu einem bestehenden Deal zuordnen“ gewählt, erscheint ein Suchfeld, über das der Benutzer einen vorhandenen Deal auswählen kann.

 

Deal zu Angebot-Folgeentscheidung1

 

  • Wird hingegen „Zu einem neuen Deal zuordnen“ ausgewählt, öffnet sich ein Mehrfachauswahldialog, in dem das Thema des neuen Deals ausgewählt werden kann.

 

Deal zu Angebot-Folgeentscheidung2

Felder zur Folgeentscheidung:

Ergebnisname der Folgeentscheidung – Interner Kennzeichnung, unter der die Folgeentscheidung im Skript des nachfolgenden Elements verwendet wird. Der Name kann frei gewählt werden, sollte jedoch eindeutig und nachvollziehbar sein, so dass er auch nachträglich verständlich bleibt.

Typ – Definiert den Feldtyp der Eingabe (z. B. Text, Datum, Währung). Wird ein Suchdialog verwendet, legt der Typ fest, welcher Wert aus dem Datensatz genutzt wird – z. B. die ID eines Deals (Typ: Zahl).

Suchdialog – Ermöglicht die Auswahl eines Datensatzes aus einem Bereich der VARIO Cloud – z. B. ein bestehender Deal oder ein Deal-Thema.

Bezeichnung Folgeentscheidung – Beschreibungstext zur Folgeentscheidung, der dem Benutzer in der Benutzeraktion angezeigt wird. Beispiel zur Auswahlmöglichkeit “Zu einem bestehenden Deal zuordnen”: “Bestehenden Deal auswählen

Folgeentscheidung bearbeiten
Ergebnisnamen und -werten im Skript integrieren

Damit die Entscheidung, die Du in einer Benutzeraktion triffst, auch eine konkrete Auswirkung im Workflow hat, müssen die verwendeten Ergebnisnamen und Ergebniswerte korrekt in ein Folgeelement – zum Beispiel ein Benutzerskript – übernommen werden. Nur so kann der Workflow abhängig von Deiner Auswahl unterschiedliche Aktionen ausführen.

In unserem Beispiel wird das Angebot erst durch die Verarbeitung im Benutzerskript mit einem bereits vorhandenen oder einem neuen Deal verknüpft. Dazu werden die in der Benutzeraktion definierten Ergebnisnamen und Ergebniswerte im Skript des darauffolgenden Benutzerskript-Elements wie folgt integriert:

Skript mit Ergebnisnamen und Ergebniswerten

import workItem from “work_item_script”;

workItem.setGuard( (ctx) => {
return true;
});

workItem.setAction( (ctx) => {
let crmDealService = ctx.services.crmDealService;
let crmDocumentRefService = ctx.services.crmDocumentRefService;
let documentService = ctx.services.documentService;
let userAndGroupService = ctx.services.userAndGroupService;
let utils = ctx.services.utils;

let userDecision = ctx.parameters[‘DECISION_KEY_CHECK_DEAL_TO_OFFER‘];
let documentId = ctx.parameters[‘documentId’];

if (userDecision == ‘DECISION_ANSWER_REFERENCE_TO_EXISTING_DEAL‘) {
let existingDealId = ctx.parameters[‘DECISION_ANSWER_EXISTING_DEAL_ID‘];
crmDocumentRefService.addDocumentRef(existingDealId,
‘DEAL’,
documentId);
}
else if (userDecision == ‘DECISION_ANSWER_CREATE_NEW_DEAL‘) {
let document = documentService.readById(documentId);
let dealState = crmDealService.findStartState();
let dealType = crmDealService.findTypeByLabel(‘Vertrieb’);
let dealTopicId = ctx.parameters[‘DECISION_ANSWER_NEW_DEAL_TOPIC_ID‘];
let dealTopic = crmDealService.findTopicById(dealTopicId);
let dealPriority = crmDealService.findPriorityByType(‘NORMAL’);
let currentUser = userAndGroupService.getCurrentUser();

let deal = crmDealService.getNewDto();
deal.typeRef = utils.toApiReference(dealType);
deal.stateRef = utils.toApiReference(dealState);
deal.priorityRef = utils.toApiReference(dealPriority);
deal.assignedUserRef = utils.toApiReference(currentUser);
deal.mainResponsibleUserRef = utils.toApiReference(currentUser);
deal.topicRef = utils.toApiReference(dealTopic);
deal.accountRef = utils.toApiReference(document.accountId);
deal = crmDealService.create(deal);

crmDocumentRefService.addDocumentRef(deal.id,
‘DEAL’,
documentId);
}
});

Benutzerskript

Mit dem Element Benutzerskript fügst Du dem Workflow einen automatisierten Schritt hinzu, der ohne Benutzerinteraktion ausgeführt wird. Die Ausführung erfolgt anhand eines individuell definierten Skripts.

Skript

Im Reiter “Skript” steht Dir ein integrierter JavaScript-Editor zur Verfügung, in dem Du das Skript für das Benutzerskript-Element bearbeiten kannst. Hier kannst Du auf verschiedene Utility-Funktionen, Parameter und Services zugreifen und diese gezielt einsetzen, um den gewünschten Ablauf im Workflow zu steuern.

Im Feld “Skript-Modul” kannst Du eines der unter dem Menüpunkt “Skripte” gespeicherten Skripte auswählen. So musst Du den Skripttext nicht bei jedem Element neu verfassen und kannst zentrale Skripte bei Bedarf gezielt anpassen oder erweitern.

Wenn Du kein Skript aus der Liste auswählst, muss der Skript direkt im Element manuell eingetragen werden, um das Element speichern zu können.

Reiter Skript

Im Skript eines Benutzerskript-Elements stehen Dir verschiedene Funktionen und Objekte zur Verfügung, mit denen Du den Ablauf des Workflows gezielt steuern kannst. Hier ein Überblick über die wichtigsten Begriffe:

BegriffBeschreibung
setGuard (optional)Definiert eine Bedingung, unter der der Workflow ausgeführt werden soll. Beispiel: nur bei bestimmtem Ländercode.
return true Gibt innerhalb der setGuard an, dass die definierte Aktion immer ausgeführt wird.
return falseGibt innerhalb der setGuard an, dass die definierte Aktion nie ausgeführt wird.
setPrepare (optional)Hier können Variablen mit Parametern befüllt werden, die später in setAction verwendet werden.
setActionDefiniert die eigentliche Aktion, die im Workflow ausgeführt werden soll.
ctxBietet Zugriff auf verschiedene Kontextinformationen, die sich je nach Workflow-Auslöser unterscheiden können.
ctx.availableinputZugriff auf die für den Workflow verfügbaren Parameter, je nach Auslöser (z. B. die Aufgaben-ID bei einem Workflow mit dem Auslöser “Nach dem Speichern einer Aufgabe”).
ctx.instanceDetailsZugriff auf Informationen zur aktuellen Workflow-Instanz.
ctx.parametersZugriff auf vordefinierte Parameter, z. B. Vorgängerbeleg oder vorherige Datensatzversion. Anders als bei availableinput können diese erweitert werden, z. B. durch C-Units.
ctx.parameters[‘previousDocument’]Zugriff auf die vorherige Version des Beleges für Workflows mit den Auslösern “Vor dem Speichern“, “Nach dem Speichern“, “Bei Beginn der Bearbeitung” und “Bei Synchronisierung” von Belegen.
ctx.parameters[‘sourceDocumentId’]Zugriff auf die ID des Ursprungsbelegs für einen Workflow mit dem Auslöser Übernahme von Belegen.
ctx.servicesZugriff auf die für den Workflow zur Verfügung stehenden Verarbeitungsmethoden, mit denen wiederum auf auf die Geschäftsobjekte in der VARIO Cloud, z. B. Adressen oder Artikel, zugegriffen werden kann.
Beispiel: ctx.services.accountService.create = Adresse anlegen
ctx.services.logger.info(…)Fügt einen selbst definierten Hinweis zum Log des Elements hinzu.
ctx.services.vqlServiceAusführung einer VQL-Abfrage um im Workflow auf das Ergebnis dieser zugreifen zu können.

Tips zur Verfassung des Skipts

  • Im JavaScript-Editor im Reiter “Skript” steht Dir eine Autovervollständigung zur Verfügung, die Dir alle verfügbaren Kontextobjekte (ctx.) und JavaScript-Methoden auflistet.
    • Beim Navigieren durch die Vorschläge mit den Pfeiltasten wird jeweils ein Tooltip mit einer Kurzbeschreibung des gewählten Objekts oder Befehls eingeblendet.

Tooltip zu Objekt

 

  • Du kannst eigene Funktionen außerhalb von setAction definieren und anschließend innerhalb von setAction verwenden.
  • Zudem kannst Du Konstanten definieren, um z. B. Feldnamen eindeutig zu benennen.
  • Mit der Tastenkombination Strg+F kann die Suchfunktion im Skript geöffnet werden, um nach einem Wert im Skript zu suchen. 
  • In den C-Units verschiedener Bereiche gibt die Spalte “Version” an, wie oft ein Datensatz bereits bearbeitet wurde. Diese Information kann in Workflows genutzt werden, um bestimmte Schritte abhängig von der Bearbeitungsversion auszuführen. Wenn z. B. Zusatzfelder nicht direkt beim Anlegen eines Datensatzes ausgefüllt werden, kannst Du Workflow-Schritte so steuern, dass sie erst ab einer bestimmten Versionsnummer greifen – also z. B. erst, wenn der Datensatz ein zweites Mal gespeichert wurde. Weitere Informationen dazu findest Du hier.

Parameter

Im Reiter “Parameter” kannst Du über “+Parameter” zusätzliche Parameter anlegen, die im Skript verwendet werden können. Dabei stehen Dir zwei Optionen zur Verfügung:

  • Fester Wert: Du kannst ein festen Parameter anlegen, der aus einem Text, einer Zahl oder einem booleschen Wert besteht.
  • Selektionsergebnis: Du kannst das Ergebnis einer vorhandenen Selektion verwenden. Dafür muss die Selektion den Toggle “Workflow” aktiviert haben, damit diese in einem Workflow verfügbar ist. Weitere Informationen dazu findest Du hier.

Über die Symbols Selektion auswählen/ Wert auswählen kannst Du zwischen beide Optionen wechseln.

Benutzerskript Parameter

Felder zur Parametereinrichtung

Name – Interne Kennzeichnung des Parameters, der im Skript verwendet wird. Der Name kann frei gewählt werden, sollte jedoch eindeutig und nachvollziehbar sein.

Wert – Der feste Wert, der dem Parameter zugewiesen wird und im Workflow bzw. Skript verwendet werden kann.

Datentyp – Legt fest, welche Art von Wert im Feld “Wert” angegeben werden kann. Zur Auswahl stehen: Text, Zahl und Boolesch.

Selektion – Hier kannst Du eine im voraus angelegte Selektion auswählen. Voraussetzung: Toggle “Workflow” ist aktiv.

Pfad – Gibt den Spalten- oder Feldnamen aus den C-Unit-Einstellungen an, der bestimmt, welcher Wert aus der Selektion für den Parameter übernommen wird.
Die benötigten Bezeichnungen kannst Du im Support-Modus der Selektion über den Toggle “Originale C-Unit Bezeichnungen anzeigen” einsehen.

Abfrage

Das Element “Abfrage” Abfrage teilt den Workflow in mehrere mögliche Pfade auf. Welcher Pfad ausgeführt wird, hängt von der im Element definierten Bedingung ab.

Im Beispiel-Workflow „Lieferungs- und Zahlungsmodalitäten für Angebote“ wird eine Abfrage eingesetzt, um zu prüfen, ob der neu angelegte Beleg ein Angebot ist:

  • Wenn ja, wird der Pfad über das Benutzerskript-Element „Füllung von Zahlungs- und Liefermodalitäten“ geführt.
  • Wenn nein, verzweigt der Workflow direkt zum Warten-Element, das die verschiedenen Pfade wieder zusammenführt.

Mit der Abfrage steuerst Du also gezielt, welcher Ablauf im Workflow abhängig von definierten Bedingungen durchlaufen wird.

Abfrage

Skript

Im Reiter “Skript” des Abfrage-Elements steht Dir ein integrierter JavaScript-Editor zur Verfügung. Dort definierst Du eine Bedingung, deren Ergebnis als Zeichenkette (string) zurückgegeben wird. Jede zurückgegebene Zeichenkette entspricht einer möglichen Abzweigung, die Du im Reiter “Abzweigungen” anlegen kannst. Auf Basis des Rückgabewerts wird der entsprechende Pfad im Workflow fortgeführt. Die möglichen Abzweigungen legst Du im Skript mit setSplit() fest.

Hinweis: Weitere Informationen zum Aufbau und zur Funktionsweise des Skripts findest Du im vorherigen Abschnitt zum Benutzerskript.

Abfrage Skript

Parameter

Wie beim Benutzerskript-Element kannst Du auch im Reiter “Parameter” des Abfrage-Elements über “+ Parameter” zusätzliche Werte anlegen, die im Skript verwendet werden können. Dabei stehen Dir zwei Optionen zur Verfügung:

  • Fester Wert: Du kannst ein festen Parameter anlegen, der aus einem Text, einer Zahl oder einem booleschen Wert besteht.
  • Selektionsergebnis: Du kannst das Ergebnis einer vorhandenen Selektion verwenden. Dafür muss die Selektion den Toggle “Workflow” aktiviert haben, damit diese in einem Workflow verfügbar ist. Weitere Informationen dazu findest Du hier.

Über die Symbols Selektion auswählen/ Wert auswählen kannst Du zwischen beide Optionen wechseln. Weitere Informationen zu den einzelnen Feldern findest Du im vorherigen Abschnitt.

Abzweigungen

Im Reiter “Abzweigungen” kannst Du die gewünschten Pfad-Abzweigungen hinzufügen und diese entsprechend der Rückgabewerte im Skript benennen.
Jede hier angelegte Abzweigung stellt einen möglichen Verlauf im Workflow dar, abhängig vom Ergebnis der Bedingung im Skript.

Warten (eins)

Das Element “Warten (eins)” Warten eins dient dazu, mehrere Pfade, die zuvor durch ein Abfrage-Element entstanden sind, wieder zusammenzuführen.

Sobald einer der Pfade das Warten-Element erreicht, wird der Workflow fortgesetzt – ohne darauf zu warten, dass auch die anderen Pfade abgeschlossen sind.

Warten (alle)

Ähnlich wie beim Element “Warten (eins)” werden mit “Warten (alle)” Warten alle mehrere zuvor verzweigte Pfade wieder zusammengeführt.

Unterschied: Der Workflow wird erst dann fortgesetzt, wenn alle angebundenen Pfade vollständig abgeschlossen sind.

Warten (indirekt)

Mit dem Element “Warten (indirekt)” Warten indirekt kannst Du im Workflow einen Zwischenstopp einbauen, der den Ablauf temporär pausiert. Die Fortsetzung erfolgt asynchron, sobald ein bestimmtes Signal, eine Bedingung oder ein Zeitpunkt eintritt.

Diese Bedingungen werden – ähnlich wie im Abfrage-Element – im Reiter “Skript” definiert und im Reiter “Fortsetzungssignale” angelegt. Es muss mindestens ein Fortsetzungssignal vorhanden sein, damit der Workflow mit dem Element “Warten (indirekt)” aktiviert werden kann. Es können jedoch beliebig viele Fortsetzungssignale hinzugefügt werden.

Timeout

Mit dem Element “Timeout” Timeout lässt sich eine feste Wartezeit im Workflow einbauen. Im Feld “Timeout (in Millisekunden)” gibst Du die gewünschte Zeitspanne an, über die der Workflow pausiert werden soll.
Erst nach Ablauf dieser Zeit wird der Workflow automatisch fortgesetzt.

Unter-Workflow

Mit dem Element “Unter-Workflow” Unter-Workflow kannst Du einen bereits angelegten Unter-Workflow auswählen und in den aktuellen Workflow einfügen. Das ist besonders hilfreich, wenn wiederkehrende Abläufe in mehreren Workflows verwendet werden oder wenn Du komplexe Prozesse übersichtlich strukturieren möchtest.

Asynchrone Unter-Workflows nicht in synchrone Workflows einsetzbar

Ein asynchroner Unter-Workflow kann nicht in einen synchronen Workflow eingebunden werden, da sich die verfügbaren Elemente unterscheiden.

Weitere Informationen zur Erstellung und Verwendung von Unter-Workflows findest Du im Abschnitt “Unter-Workflows”.

Abfrage der Dokumentkategorien

Das Element “Abfrage der Dokumentkategorien” Abfrage ist eine vordefinierte Variante des klassischen Abfrage-Elements. Es dient dazu, den Workflow abhängig von der Belegkategorie in mehrere Pfade aufzuteilen.

Im Gegensatz zum regulären Abfrage-Element ist das Skript bereits vorkonfiguriert. Im Reiter “Abzweigungen” sind die gängigen Belegkategorien bereits als vordefinierte Abzweigungen angelegt. Diese kannst Du je nach Bedarf bearbeiten, anpassen oder erweitern.

Abzweigungen

Workflows sicher bearbeiten

Beim Bearbeiten eines aktiven Workflows wird automatisch eine Kopie erstellt. Diese kann frei bearbeitet und als Entwurf gespeichert werden. Der Entwurf erscheint in Übersicht unterhalb des aktiven Workflows. So musst Du den Workflow nicht unterbrechen, um Anpassungen vorzunehmen – besonders hilfreich bei Workflows, die dauerhaft im Einsatz sind.

Sobald der Entwurf aktiviert wird, ersetzt er automatisch den bisherigen aktiven Workflow. Die alte Version des Workflows wird dabei deaktiviert und ist anschließend unter den deaktivierten Workflows zu finden.

Workflow Entwurf Kopie

Wenn Du einen inaktiven Workflow bearbeitest, wird kein Duplikat erstellt. Stattdessen ändert sich der Status von “Inaktiv” zu “Entwurf” und der Workflow kann anschließend frei bearbeitet werden.

Workflow löschen bzw. deaktivieren

Nur Workflow-Entwürfe können gelöscht werden. Einen Workflow-Entwurf kannst Du entweder über die drei Punkte im Datagrid oder über den Button “Löschen” beim Bearbeiten des Workflows entfernen.

Beim Löschen eines Entwurfs wird dieser nicht endgültig entfernt, sondern lediglich deaktiviert. Dadurch bleibt der Entwurf erhalten und kann bei Bedarf nachträglich eingesehen oder wieder aktiviert werden.

Workflow löschen

Ein aktiver Workflow kann über den Button “Workflow deaktivieren” in der Workflow-Konfiguration deaktiviert werden. Auch hier bleibt der Workflow erhalten, wechselt jedoch in den Status “Inaktiv”.

Workflow deaktivieren

Deaktivierte Workflows

Deaktivierte Workflows kannst Du über das Symbol Deaktivierte Datensätze-Symbolim Datagrid einsehen.

Deaktivierte Workflows

Durch das Auswählen eines Workflows und den Button “Workflow aktivieren” kannst Du diesen wieder aktivieren.

Workflow aktivieren

Aktionen

Skripte

Hier bewegt sich was!

Noch ist dieser Bereich nicht ganz vollständig. Aber keine Sorge: Unser Team für Dokumentation und Qualität füllt sie Schritt für Schritt mit allem, was Dir im Alltag weiterhilft. Schau bald wieder vorbei, es lohnt sich!

Workflow exportieren

Über die Aktionen innerhalb eines Workflows kannst Du den geöffneten Workflow als JSON-Datei exportieren.

Workflow exportieren

Die Workflows kannst Du auch über den Drei-Punkte-Menü exportiert werden.

Workflow exportieren über das drei Punkte Menü

Workflow importieren

Über die Aktionen im Workflow-Datagrid kannst Du einen Workflow mittels Auswahl einer JSON-Datei importieren.

Workflow importieren
Workflow Import Aktion

Es öffnet sich ein Menü, in welchem Du die entsprechende Datei auswählen oder per Drag & Drop hinzufügen kannst:

Upload Worklow

Danach musst Du nur noch auf den Button Workflow importieren” klicken:

Workflow importieren

Unter-Workflows

Unter-Workflows dienen dazu, eine Gruppe von Workflow-Schritten zu speichern, die in verschiedene Workflows eingebunden werden können.

Sie sind besonders hilfreich für:

  • wiederverwendbare Teilabläufe, z. B. Standardaktionen,
  • die Strukturierung komplexer Workflows, um diese übersichtlicher und wartbarer zu gestalten.

Unter-Workflows sind nicht eigenständig lauffähig und haben aus dem Grund keinen eigenen Auslöser. Auch wenn sie als “aktiv” markiert sind, haben sie keinen direkten Einfluss auf Prozesse in VARIO Cloud, solange sie nicht in einen übergeordneten Workflow integriert wurden.

Unter-Workflows anlegen

Unter-Workflows kannst Du wie jeden anderen Workflow über den Button “+ Workflow” in der Übersicht erstellen.
Durch das Aktivieren des Toggles “Unter-Workflow” legst Du fest, dass es sich nicht um einen eigenständigen Workflow, sondern um einen Unter-Workflow handelt.

Unter-Workflow erstellen

Nach dem Anlegen kann der Unter-Workflow wie gewohnt bearbeitet und konfiguriert werden. Auch hier gilt:

  • Ein Start-Element und mindestens ein End-Element (z. B. „Abschließen“ oder „Fehler“) sind erforderlich.
  • Du kannst alle Workflow-Elemente verwenden – mit einer wichtigen Einschränkung: Enthält der Unter-Workflow synchrone Elemente, kann er nicht in einem asynchronen Workflow verwendet werden.

Unter-Workflow integrieren

Bevor ein Unter-Workflow in andere Workflows integriert werden kann, muss er zunächst aktiviert werden.

Innerhalb eines bestehenden Workflows kannst Du den Unter-Workflow anschließend über das Element “Unter-Workflow” einfügen. Dort wählst Du den gewünschten Unter-Workflow aus.

Unter-Workflow hinzufügen

Sub-Workflows exportieren und importieren

Beim Exportieren eines Workflows werden enthaltene Unter-Workflows mit ihrem jeweiligen Namen gespeichert.

Beim Import eines Workflows gilt Folgendes:

    • Nicht vorhandene Unter-Workflows werden anhand des Namens automatisch neu angelegt.
    • Bereits vorhandene Unter-Workflow werden übersprungen.  

Workflow-Protokoll (Logs)

Alle Ausführungen von Workflows werden in VARIO Cloud protokolliert, um Abläufe nachvollziehbar zu machen – was insbesondere bei Fehlern oder unerwartetem Verhalten nützlich ist.

Voraussetzung:

Damit ein Workflow protokolliert wird, muss er aktiviert und mindestens einmal ausgeführt worden sein – z. B. durch das Anlegen eines Angebots im Fall unseres Beispiel-Workflows.

Die Logs bleiben so lange erhalten, bis der Workflow erneut bearbeitet und gespeichert wird. Solange ein Workflow nur deaktiviert wird, bleiben die Protokolle erhalten.

Die Protokolle (Logs) sind an mehreren Stellen einsehbar:

  • im Workflow selbst (im Bearbeitungsbereich),
  • im Datagrid der Workflows (im Menüpunkt Workflows),
  • im Datensatz, der in dem Workflow mit einbezogen wurde (z. B. Angebot oder Adresse).

Tipp für selbst definierte Logs

Mithilfe von ctx.services.logger.info(…) kann im Skript eines Elements ein eigener Log-Hinweis zum Element angegeben werden.

 

Log-Info

 

Dieser ist nach Ausführung des Workflows im Log des Elements zu sehen. 

 

Log-Info2

Protokolle im Workflow

Wähle einen Workflow aus und klicke auf den Button “Ausführungen”. Hier werden alle bisherigen Ausführungen des Workflows aufgelistet. Es stehen Dir zwei Möglichkeiten zur Verfügung, auf denen auch die Protokollansichten in anderen Bereichen basieren:

1. Möglichkeit:
  • Durch aufklappen des grünen Pfeils werden die einzelnen Elemente des durchlaufenden Pfads angezeigt. Bei Workflows mit mehreren Pfaden werden nur die Elemente protokolliert, die im konkreten Durchlauf tatsächlich ausgeführt wurden.
Workflow-Ausführungen
  • Beim Anklicken eines Elements öffnet sich ein Pop-Up-Fenster mit den Details und dem dazugehörigen Skript. Im Reiter “Logs” findest Du die Protokolleinträge für dieses Element.
  • Durch das Anklicken eines Log-Eintrags werden zusätzliche Debug-Informationen eingeblendet. Diese lassen sich über das Symbol Debug Info Kopieren bequem in die Zwischenablage übernehmen.
2. Möglichkeit:
  • Wähle eine der Workflow-Ausführungen aus, um den konkreten Ablauf im Workflow-Diagramm anzeigen zu lassen. Der Pfad wird grün dargestellt, solange der Workflow an diesen Stellen erfolgreich durchlaufen wurde. Tritt ein Fehler auf, wird der entsprechende Abschnitt rot markiert. Elemente, die sich noch in Bearbeitung befinden – etwa bei offenen Benutzeraktionen – erscheinen blau.
Workflow-Verlauf
  • Mit einem Doppelklick auf eines der Elementen öffnet sich ein Fenster mit den Details und dem zugehörigen Skript. Im Reiter “Logs” werden die Protokolleinträge zu dem Element angezeigt.
  • Beim Anklicken eines einzelnen Log-Eintrags wird eine Detailansicht mit Debug-Informationen eingeblendet. Diese kannst Du über das Symbol Debug Info Kopieren bequem in die Zwischenablage übernehmen.
  • In der Ansicht des Workflow-Verlaufs werden über den Button “Protokoll” in den Reiter “Logs” die gesamten Protokolle aller Elemente dieser Ausführung übersichtlich aufgelistet.
Workflow-Protokoll
  • Über den Auge-Symbol kannst Du ebenfalls die Angaben und die Logs zu den einzelnen Elementen einsehen.
  • Mit dem Button “Aktualisieren” in der Workflow-Ansicht kannst Du die Darstellung neu laden, falls die Workflow-Ausführung noch nicht abgeschlossen ist und sich der Status ggf. geändert hat.

Protokolle im Workflow-Datagrid

  • Öffne die Workflowverwaltung im Menüpunkt “Workflows”.
  • Klappe einen aktiven Workflow über den grünen Pfeil auf. Dir werden nun die bisherigen Ausführungen dieses Workflows aufgelistet.
Workflow-Protokolle im Datagrid
  • Wähle eine Ausführungen aus, um den Workflow-Verlauf im Detail anzuzeigen. Die verfügbaren Optionen zur Protokollanzeige entsprechen denen, die im oberen Abschnitt beschrieben werden.

Protokolle im Datensatz

Über die Aktionen innerhalb eines Datensatzes kannst Du gezielt die Workflow-Instanzen einsehen, in denen der jeweilige Datensatz einbezogen oder verwendet wurde. Im Fall unseres Beispiel-Workflows “Lieferungs- und Zahlungsmodalitäten für Angebote” kannst Du die Protokolle direkt in einem geöffneten Angebot einsehen, dessen Erstellung unseren aktiven Workflow ausgelöst hat.

Öffne dazu den entsprechenden Datensatz, z. B. das Angebot, und klicke auf dem Button “Aktionen”. Dort stehen Dir zwei Möglichkeiten zur Verfügung:

1. Möglichkeit – Workflow-Instanzen
  • Wähle die Aktion “Workflow-Instanzen”. Hier werden alle Workflow-Instanzen aufgelistet, bei denen der aktuelle Datensatz als Auslöser oder Beteiligter eingebunden war.
  • Über die Symbols Workflow abbrechen kannst Du eine unterbrochene Workflow-Instanz entweder manuell fortsetzen oder komplett abbrechen.
  • Mit einem Klick auf den grünen Pfeil kannst Du die gewünschte Instanz aufklappen. Darunter werden die durchlaufenen Elemente dieser Instanz angezeigt.
Workflow-Instanzen im Datensatz
  • Wähle eine Instanzen aus, um Dir den grafischen Workflow-Verlauf darstellen zu lassen. Die verfügbaren Optionen zur Protokollanzeige entsprechen denen, die im Abschnitt “Protokolle im Workflow” beschrieben werden.
2. Möglichkeit – Neuste Workflow-Instanzen
  • Wähle die Aktion “Neuste Workflow-Instanz”. Es werden alle Logs zur letzten Workflow-Instanz angezeigt, die den aktuellen Datensatz betreffen.
  • Wähle einen der Logs aus, um Dir die Detailinformationen zum jeweiligen Eintrag anzeigen zu lassen. Über die Workflow-Instanzen-ID kannst Du Dir den grafischen Workflow-Verlauf der Instanz in einem neuen Tab öffnen. Die verfügbaren Optionen zur Protokollanzeige entsprechen denen, die im Abschnitt “Protokolle im Workflow” beschrieben werden.

Nützliche Workflows

Versandlieferscheine übernehmen

Mit diesem Workflow werden Versandlieferscheine beim Speichern automatisch in den Status “Übernommen” versetzt – somit können diese nicht mehr in eine Rechnung übernommen werden. Dies kann nützlich sein, um eine individuell angelegte Belegarten wie den “Versandauftrag” und den “Versandlieferschein” beispielsweise für kostenlose Mustersendungen zu verwenden.

Alle anderen Belegarten der Belegkategorie “Lieferschein” werden trotzdem weiterhin wie gewohnt erst bei der Übernahme in den Folgebeleg in den Status “Übernommen” gesetzt.

Voraussetzungen:

Damit die entsprechenden Schritte im Workflow ausgeführt werden können, muss die Belegart Versandlieferschein im Bereich Einstellungen/Belege/Belegarten vorhanden sein.

Um diesen Workflow anzulegen, gehe wie folgt vor:

  • Lege einen Workflow an und wähle als Auslöser entweder “Vor dem Speichern von Belegen” oder “Übernahme von Belege“.
  • Füge dem Start-Element den Element “Benutzerskript” hinzu.
  • Wechsle in den Reiter “Skript” des Benutzerskript-Elements und ersetze den vorhandenen Inhalt durch folgendes Skript:

Skript des Benutzerskript-Elements

import workItem from ‘work_item_script’;

 

workItem.setAction((ctx) => {

var documentService = ctx.services.documentService;

var document = documentService.readById(ctx.parameters[‘documentId’]);

if (document.documentType === ‘Versandlieferschein’) { ctx.parameters[‘targetState’] = ‘ACCEPTED’;

}

});

Skript für Versandlieferschein übernehmen
  • Klicke auf “Speichern“, um das Benutzerskript-Element anzulegen.
  • Füge das Element “Abschließen” hinzu und verbinde die drei Elemente – Start, Benutzerskript und Abschließen – wie im folgenden Bild dargestellt.
Versandlieferscheine übernehmen
  • Speichere und aktiviere den Workflow, damit er bei zukünftigen Belegen automatisch ausgeführt wird.

Der Workflow kann selbstverständlich beliebig erweitert und mit anderen Workflow-Pfaden und –Schritten kombiniert werden.

Belege beim Speichern in Folgebeleg übernehmen

In einem Workflow mit dem Auslöser “Nach dem Speichern von Belegen” kannst Du in einem Benutzerskript-Element folgendes Skript hinterlegen, um Belege einer bestimmten Belegart automatisch beim Speichern in den jeweiligen Folgebeleg übernehmen zu lassen – in diesem Beispiel ein Angebot in einen Auftrag. Der Aufbau des Workflows kann dabei an den Workflow “Versandlieferscheine übernehmen” angelehnt oder individuell erweitert und angepasst werden.

Benutzerskript – Beleg übernehmen

 

import workItem from “work_item_script”;

workItem.setAction( ctx => {

var documentService = ctx.services.documentService;

var document = documentService.readById(ctx.parameters[‘documentId’]);

if (document.documentType === ‘Angebot’) {

let documentTransferToTypeRequest = documentService.getDocumentTransferToTypeRequest(); documentTransferToTypeRequest.documentId = document.id;

documentTransferToTypeRequest.targetDocumentType = ‘Auftrag’; documentService.transferToType(documentTransferToTypeRequest);

ctx.parameters[‘skipTransitionToTargetState’] = true;

}

});

Die in diesem Beispiel verwendeten Belegarten “Angebot” und “Auftrag” lassen sich durch beliebige, selbst angelegte Belegarten ersetzen, sofern diese in der Belegkette direkt aufeinanderfolgen.

Belege beim Speichern in Folgebeleg übernehmen

VQL in Workflow-Skripten

Mit VQL kannst Du in einem Workflow-Skript auf bestimmte Daten zugreifen. Dazu steht Dir im Skript-Editor der vql-Service zur Verfügung. Du erreichst ihn dort ganz einfach über:

ctx.services.vqlservice

Selektierten Wert ins Workflow-Log schreiben

In diesem Beispiel berechnen wir die Summe aller Nettobeträge der Belege einer Adresse und schreiben den Wert ins Log.

Im Bereich Benutzerskript kannst Du folgendes Beispiel-Skript mit VQL-Anteil einfügen:

 

import workItem from ‘work_item_script’;

workItem.setGuard((ctx) => {

// Skript-Methode “action” ausführen?

return true; });

workItem.setAction((ctx) => {

let document = ctx.services.documentService.readById(ctx.availableInput.documentId);

let accountId = document.accountId;

let totalBoughtGoods = ctx.services.vqlService.queryAll(

`SELECT sum(totalNetPrice) FROM document.querySalesDocuments WHERE accountId = ${accountId}`

);

ctx.services.logger.info(totalBoughtGoods);

});

 

Im Workflow-Log findest Du dann die mit dieser Beispiel-VQL errechnete Summe:

 

Workflow VQL

Mehr Informationen zu VQL findest Du auf unserer Handbuchseite zur freien VQL.

Fehlermeldungen in Workflows

In bestimmten Fällen ist es sinnvoll, einen Workflow gezielt in einen Fehler laufen zu lassen – beispielsweise, wenn ein bestimmtes Feld nicht ausgefüllt wurde oder bestimmte Bedingungen nicht erfüllt sind. Im Skript des betroffenen Elements (z. B. Benutzerskript) kann dazu eine individuelle Fehlermeldung hinterlegt werden, die dem Benutzer beim Ausführen des Workflow-Schritts angezeigt wird.

Beispiel: Fehler beim Speichern eines Belegs

In diesem Beispiel wird ein Fehler innerhalb eines Workflows mit dem Auslöser “Vor dem Speichern von Belegen” integriert.

Im Benutzerskript wird dazu mit throw eine Fehlermeldung beim Speichern des Belegs ausgegeben, um die Speicherung aktiv zu verhindern.

Mit ctx.services.logger.info(...) kann zusätzlich eine Log-Info im Workflow-Protokoll und Element-Log erzeugt werden, um den Grund der Unterbrechung nachvollziehbar zu dokumentieren.

 

Workflow Fehlermeldung

 

Beim Speichern des Belegs erscheint eine Hinweismeldung mit dem definierten Fehlertext.

 

Workflow Fehlermeldung  ausgelöst

 

Sowohl der Inhalt der Meldung als auch die Log-Info sind im Log des Benutzerskript-Elements und im Gesamtprotokoll des Workflows einsehbar.

 

Log-Info

Zahlungs- und Lieferbedingungen für Angebote ohne Geschäftsbeziehungen

Mit diesem Workflow kannst Du die Erstellung von Angeboten für Interessenten vereinfachen, bei denen noch keine Geschäftsbeziehung hinterlegt ist.

Standardmäßig müssten in solchen Fällen die Zahlungs- und Lieferungsmodalitäten manuell im Angebot eingetragen werden. Mit diesem Workflow werden diese Angaben automatisch mit vordefinierten Standardwerten ausgefüllt, die im Workflow festgelegt wurden.

Voraussetzungen:

Damit die im Beispiel definierte Zahlungs- und Lieferungsmodalitäten eingetragen werden können, müssen diese im Vorfeld unter folgenden Bereichen angelegt sein:

    • Einstellungen/Finanzen/Zahlungsmodalitäten: Zahlungsart “UEB” und Zahlungsbedingung “SN”  
    • Einstellungen/Lager/Lieferungsmodalitäten: Versandart “DL” und Lieferbedingung “FH”

Im Skript des Benutzerskript-Elements kannst Du die entsprechenden Werte an Deine eigenen Zahlungs- und Lieferungsmodalitäten anpassen.

Um diesen Workflow anzulegen, gehe wie folgt vor:

  • Lege einen Workflow an und wähle den Auslöser “Bei Erstellung von Belege”.
  • Füge dem Start-Element den Element “Abfrage” hinzu.
  • Wechsle in den Reiter “Skript” des Abfrage-Elements und ersetze den vorhandenen Inhalt durch folgendes Skript:

Skript des Abfrage-Element

import workItem from ‘work_item_split_gateway’;

workItem.setSplit((ctx) => {

var category = ctx.parameters[‘targetCategory’];

if (category ===CUSTOMER_OFFER) {

return category;

}

returnUNKNOWN;

});

Skript zu Zahlungs- und Lieferbedingungen für Angebote ohne Geschäftsbeziehungen
  • Füge im Reiter “Abzweigungen” die Abzweigungen CUSTOMER_OFFER und UNKNOWN hinzu.
Abzweigungen zu Zahlungs- und Lieferbedingungen für Angebote ohne Geschäftsbeziehungen
  • Klicke auf “Speichern“, um das Abfrage-Element anzulegen.
  • Füge anschließend das Benutzerskript-Element hinzu und im Reiter “Skript” des Elements das folgende Skript:

Skript des Benutzerskript-Elements

import workItem from ‘work_item_script’;

const DELIVERY_METHOD = ‘DL’;
const DELIVERY_TERM = ‘FH’;
const PAYMENT_METHOD = ‘UEB’;
const PAYMENT_TERM = ‘SN’;

workItem.setAction((ctx) => {
const { documentId } = ctx.parameters;
const {
documentService,
accountService,
deliveryMethodService,
deliveryTermService,
paymentMethodService,
paymentTermService,
utils,
logger,
} = ctx.services;

const document = documentService.readById(documentId);

const account = accountService.readById(document.accountId);

if (account.types.includes(‘CUSTOMER’)) {
return;
}

let changed = false;

if (!document.deliveryMethodRef) {
logger.info(‘Setze Versandart: ‘ + DELIVERY_METHOD);
changed = true;

const deliveryMethod = deliveryMethodService.findByLabel(DELIVERY_METHOD);

document.deliveryMethodRef = utils.toApiReference(deliveryMethod);
}

if (!document.deliveryTermRef) {
logger.info(‘Setze Lieferbedingung: ‘ + DELIVERY_TERM);
changed = true;

const deliveryTerm = deliveryTermService.findByLabel(DELIVERY_TERM);

document.deliveryTermRef = utils.toApiReference(deliveryTerm);
}

if (!document.paymentMethodRef) {
logger.info(‘Setze Zahlungsart: ‘ + PAYMENT_METHOD);
changed = true;

const paymentMethod = paymentMethodService.findByLabel(PAYMENT_METHOD);

document.paymentMethodRef = utils.toApiReference(paymentMethod);
}

if (!document.paymentTermRef) {
logger.info(‘Setze Zahlungsbedingung: ‘ + PAYMENT_TERM);
changed = true;

const paymentTerm = paymentTermService.findByLabel(PAYMENT_TERM);

document.paymentTermRef =
paymentTermService.createPaymentTermRef(paymentTerm);
}

if (!changed) {
return;
}

const updateRequest = documentService.getUpdateDocumentRequest();

updateRequest.document = document;

documentService.update(updateRequest);
});

Anpassung der Zahlungs- und Lieferungsmodalitäten

Die im Benutzerskript angegebenen Zahlungs- und Lieferungsmodalitäten können bei Bedarf individuell angepasst werden. Dazu musst Du lediglich folgende Angaben im Skript des Benutzerskript-Elements ändern:

 

const DELIVERY_METHOD = ‘DL‘; – statt DL kannst Du hier die Bezeichnung der gewünschten Versandart eintragen
const DELIVERY_TERM = ‘FH‘; – statt FH kannst Du hier die Bezeichnung der gewünschten Lieferbedingung eintragen
const PAYMENT_METHOD = ‘UEB‘; – statt UEB kannst Du hier die Bezeichnung der gewünschten Zahlungsart eintragen
const PAYMENT_TERM = ‘SN‘; – statt UEB kannst Du hier die Bezeichnung der gewünschten Zahlungsbedingung eintragen

  • Füge die Elemente “Warten (eins)” und “Abschließen” hinzu.
  • Verbinde die Elemente Start, Abfrage, Benutzerskript, Warten und Abschließen miteinander sowie die Elemente Abfrage und Warten (eins), so dass eine Darstellung wie im Bild entsteht.
Workflow Zahlungs- und Lieferbedingungen für Angebote ohne Geschäftsbeziehungen
  • Speichere und aktiviere den Workflow, damit er bei zukünftigen Angeboten automatisch ausgeführt wird.

Zuweisung des Projektleiters in Aufgaben des Projekts

Mit diesem Workflow wird beim Wechsel eines bestimmten Projektstatus, in unserem Beispiel vom Status “00 – Angelegt” in den Status “05 – in Vorbereitung für Kick-Off”, der im Projekt hinterlegte Projektmanager (intern) als zugeordneter Benutzer in den verknüpften Aufgaben eingetragen. Zusätzlich wird der Status der betroffenen Aufgaben auf einen vordefinierten Status gesetzt, bspw. “Zugeordnet“.

Voraussetzungen:

Damit die entsprechenden Schritte im Workflow korrekt ausgeführt werden können, müssen folgende Projekt- und Aufgabenstatus zuvor unter folgenden Bereichen in der VARIO Cloud angelegt sein:

    • Einstellungen/CRM/Aufgaben: Aufgabenstatus “Zugeordnet”
    • Einstellungen/CRM/Projekte: Projektstatus “00 – Angelegt” und “05 – in Vorbereitung für Kick-Off”

Im Skript des Benutzerskript-Elements kannst Du die entsprechenden Werte an deine eigenen Statusbezeichnungen anpassen

 

Zusätzlich wird eine Selektion aus der Adressverwaltung mit den folgenden Einstellungen benötigt:

    • Die Bezeichnung “Eigene Adresse”
    • Der ToggleFür Workflow” im Reiter “Allgemein” muss aktiviert sein
    • Die SpalteID
    • Ein Filter mit dem Feld “Geschäftsbeziehung”, der Operation “Ist gleich” und dem Wert “Eigene Firma” als fester Wert 

Weitere Informationen zur Konfiguration von Selektionen findest Du hier.

  • Lege einen Workflow an und wähle den Auslöser “Nach dem Speichern von Projekten” aus.
  • Füge dem Start-Element den Element “Benutzerskript” hinzu.
  • Wechsle in den Reiter “Skript” des Benutzerskript-Elements und ersetze den vorhandenen Inhalt durch folgendes Skript:

Skript des Benutzerskript-Elements

import workItem from ‘work_item_script’;

const PROJEKT_STATUS_ANGELEGT = ’00 – Angelegt’;
const PROJEKT_STATUS_VORBEREITUNG = ’05 – in Vorbereitung für Kick-Off’;
const AUFGABE_STATUS_ZUGEORDNET = ‘Zugeordnet’;

workItem.setAction(ctx =>
{
const taskService = ctx.services.crmTaskService;
const projectService = ctx.services.crmProjectService;

const previous = ctx.parameters.previousCrmProject;
const projectId = ctx.parameters.crmProjectId;

if (!previous)
{
return;
}

const project = projectService.readById(projectId);

if (project.stateRef.label !== PROJEKT_STATUS_VORBEREITUNG)
{
return;
}

const previousState = projectService.findStateById(previous.stateRef.id);

if (previousState.label !== PROJEKT_STATUS_ANGELEGT)
{
return;
}

ctx.services.logger.info(‘Bereite verknüpfte Aufgaben vor’);

const responsibleUser = getUserFromAccountPerson(ctx, project.projectManagerOfContractor?.accountPersonRef?.id);

if (project.childRefs !== null)
{
const targetState = taskService.findStateByLabel(AUFGABE_STATUS_ZUGEORDNET);

project.childRefs.forEach(child =>
{
if (child.type === ‘TASK’)
{
const task = taskService.readById(child.id);

task.stateRef = ctx.services.utils.toApiReference(targetState);

if (responsibleUser)
{
task.assignedGroupRef = null;
task.assignedUserRef = ctx.services.utils.toApiReference(responsibleUser);
}

task.stateRef = ctx.services.utils.toApiReference(targetState);

taskService.update(task);
}
});
}
});

function getUserFromAccountPerson(ctx, accountPersonId)
{
const companyId = ctx.parameters.id;

if (!companyId || !accountPersonId)
{
return null;
}

const persons = ctx.services.accountService.getPersons(companyId);

const targetPerson = persons.find(
person => person.id === accountPersonId,
);

if (!targetPerson?.userRef?.id)
{
return null;
}

return ctx.services.userAndGroupService.findUserById(
targetPerson.userRef.id,
);
}

Anpassung der Projekt- und Aufgabenstatus

Die im Benutzerskript angegebenen Projekt- und Aufgabenstatus können bei Bedarf individuell angepasst werden. Dazu musst Du lediglich folgende Angaben im Skript des Benutzerskript-Elements ändern:

 

const PROJEKT_STATUS_ANGELEGT = ‘00 – Angelegt‘; – statt “00 – Angelegt” kannst Du hier die Bezeichnung des ersten gewünschten Projektstatus eintragen
const PROJEKT_STATUS_VORBEREITUNG = ‘05 – in Vorbereitung für Kick-Off’’; – statt “05 – in Vorbereitung für Kick-Off” kannst Du hier die Bezeichnung des zweiten gewünschten Projektstatus eintragen
onst AUFGABE_STATUS_ZUGEORDNET = ‘Zugeordnet‘; – statt Zugeordnet kannst Du hier die Bezeichnung des gewünschten Aufgabenstatus eintragen

  • Klicke im Reiter “Parameter” auf den Button Workflow-Selektion, um einen Parameter auf Basis einer Selektion anzulegen.
  • Füge einen neuen Parameter mit den folgenden Angaben hinzu und wähle die im Voraus angelegte Selektion aus.
Parameter mit Selektion Eigene Adresse
  • Klicke auf “Speichern“, um das Benutzerskript-Element anzulegen.
  • Füge das Element “Abschließen” hinzu und verbinde die drei Elemente – Start, Benutzerskript und Abschließen – wie im folgenden Bild dargestellt.
Workflow Zuweisung des Projektleiters in Aufgaben des Projekts
  • Speichere und aktiviere den Workflow, damit er bei zukünftigen Belegen automatisch ausgeführt wird.

Geschenk-Artikel zu Angeboten hinzufügen

Mit diesem Workflow kann ein beliebiger Artikel als Genschenk-Artikel automatisch mit einem vorgegebenen Rabatt zu einem Angebot hinzugefügt werden, beispielsweise für bestimmte Adressen, bei denen z. B. einen vordefinierten Umsatz erreicht wurde. Dabei kann frei definiert werden welcher Umsatz als Variable gesetzt wird und welcher Rabatt der Artikel erhalten soll.

In unserem Beispiel wird der Artikel “ACC-1083” mit einem Rabatt von 100% in Angebote für Adressen hinzugefügt, die einen Umsatz von mindestens 10.000 erreicht haben.

Voraussetzungen

Der im Workflow angegebene Artikel muss mit den entsprechenden Angaben angelegt werden (als Verkaufsartikel, rabattierbar, mit Verkaufspreis usw.)   

  • Lege einen Workflow an und wähle den Auslöser “Vor dem Speichern von Belegen” aus.
  • Füge dem Start-Element das Element “Abfrage” hinzu.
  • Wechsle in den Reiter “Skript” des Abfrage-Elements und ersetze den vorhandenen Inhalt durch folgendes Skript:

Skript des Abfrage-Elements

import workItem from ‘work_item_split_gateway’;

workItem.setPrepare((ctx) => {});

workItem.setSplit((ctx) => {


// Dokument laden über die übergebene documentId
const document = ctx.services.documentService.readById(ctx.availableInput.documentId);

 

// Zuordnung zur Adresse (Account)
const accountId = document.accountId;

 

// Aggregation: Summe aller Nettoverkaufspreise für diesen Account (Hier müsste man auch Rechnungen etc einschränken)
const result = ctx.services.vqlService.queryAll(
`SELECT sum(totalNetPrice) FROM document.querySalesDocuments WHERE accountId = ${accountId}`
);

const totalNetSum = result?.[0]?.[“totalNetPrice.sum”] ?? 0;

ctx.services.logger.info(result?.[0]);
ctx.services.logger.info(totalNetSum);

// Entscheidung auf Basis der Gesamtsumme
if (totalNetSum > 10000 && document.documentTypeCategory === ‘CUSTOMER_OFFER’ ) {
return ‘SHOW_USER_DECISION’; // Falls der Schwellenwert überschritten wird
}

return ‘DO_NOTHING’; // Sonst keine Aktion
});

  • Füge im Reiter “Abzweigungen” die Abzweigungen SHOW_USER_DECISION und DO_NOTHING hinzu.
  • Klicke auf “Speichern“, um das Abfrage-Element anzulegen.
  • Füge anschließend das Benutzeraktion-Element hinzu und aktiviere den Toggle “Verantwortlicher Benutzer ist ausführender Benutzer“.
  • Stelle die folgenden Einstellungen im Reiter “Benutzeraktion” ein:
Benutzeraktion Einstellungen
  • Nach dem Speichern des Elements “Benutzeraktion” füge ein Benutzerskript-Element hinzu.
  • Im Reiter “Skript” gib folgenden Skript ein und speichere das Element:

Skript des Benutzerskripts-Element

import workItem from ‘work_item_script’;

 

/**
* Vorbereitung – optional (z. B. Logging-Kontext setzen)
*/
workItem.setPrepare((ctx) => {
// keine spezielle Vorbereitung erforderlich
});

 

/**
* Guard – Antwort auf die Benutzeraktion bestimmt, ob der Skript ausgeführt wird
*/
workItem.setGuard((ctx) => {
let userDecision = ctx.parameters[‘ADD_PRESENT’];
if (userDecision == ‘true’) {
return true;}
if (userDecision == ‘false’) {
return false;}
});

 

/**
* Action – lädt den Beleg, fügt eine neue Position hinzu und hinterlegt einen Price-Modifier
*/
workItem.setAction((ctx) => {
const {
documentService,
articleService,
utils,
logger,
} = ctx.services;

 

const { documentId } = ctx.parameters;

 

const document = documentService.readById(documentId);
if (!document) {
logger?.warn?.(`Dokument ${documentId} nicht gefunden – Abbruch.`);
return;
}

 

const articleNumber = ‘ACC-1083’; // ⚠️ hier Artikelnummer. anpassen
const article = articleService.readByNumber(articleNumber);
if (!article) {
logger?.warn?.(`Artikel ${articleNumber} nicht gefunden – Abbruch.`);
return;
}

 

const newLine = documentService.getNewDocumentLine();

newLine.articleId = article.id;
newLine.number = article.number;
newLine.name = article.name;
newLine.description = ‘Dein Geschenk’;
newLine.quantity = 1;


// Price-Modifier mit Factory erzeugen
const priceModifier = documentService.getNewDocumentPriceModifier();
priceModifier.name = ‘Geschenkrabatt’; // ⚠️ siehe Hinweis unten zu Feldnamen
priceModifier.value = 100; // 100%
priceModifier.modifierType = ‘DISCOUNT’;
priceModifier.valueType = ‘PERCENT’;
priceModifier.sourceType = ‘CUSTOM’;

 

// Statt push(): Liste in einem Schritt neu setzen (bewahrt evtl. vorhandene Modifiers)
newLine.priceModifiers = [ …(newLine.priceModifiers || []), priceModifier ];

 

ctx.services.logger.info(newLine);

 

// Position anhängen
document.lines = [ …(document.lines || []), newLine ];

 

// Beleg aktualisieren
const updateRequest = documentService.getUpdateDocumentRequest();
updateRequest.document = document;
documentService.update(updateRequest);
});

  • Füge zwei AbschließenElemente hinzu und verbinde die Elemente untereinander, wie im folgenden Bild dargestellt. Die einzelnen Elemente sind anhand der entsprechenden Icons zu erkennen.
Workflow Geschenk-Artikel zu Angebot hinzufügen
  • Speichere den Workflow. Nach Aktivierung des Workflows wird dieser nach dem Speichern von zukünftigen Belegen ausgeführt.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Es tut uns leid, dass der Beitrag für Dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?