Getestet mit JTL-Wawi bis 1.11.*

Eigene Workflow-Aktionen in JTL-Wawi: Custom Workflows per SQL – mit Praxisbeispiel

Wenn die Standard-Aktionen nicht reichen: So bauen Sie eine eigene Workflow-Aktion als Stored Procedure – am Beispiel der Kundengruppe, die im Auftrag nicht mitzieht.

Wichtig: Dieser Artikel enthält SQL-Befehle, die Daten in Ihrer JTL-Datenbank ändern. Legen Sie vorher eine vollständige Datensicherung an und testen Sie zuerst in einer Testumgebung. Die Anleitung beschreibt unser Vorgehen in einem konkreten Fall und ersetzt keine individuelle Prüfung Ihres Systems. Die Umsetzung erfolgt auf eigene Verantwortung – für Datenverlust, Ausfälle oder Folgeschäden übernehmen wir keine Haftung. Gern übernehmen wir die Umsetzung für Sie.

JTL-Workflows nehmen viel Handarbeit ab – bis man an eine Stelle kommt, die die Standard-Aktionen nicht erreichen. Für genau diesen Fall gibt es Custom Workflows: eigene Aktionen, die als SQL-Prozedur in der Datenbank liegen und im Workflow-Editor erscheinen wie jede andere Aktion.

Wir zeigen das an einem Fall aus dem Support, der in B2B-Shops regelmäßig auftritt.

Das Problem: Die Kundengruppe im Auftrag bleibt alt

Ein Workflow soll Neukunden automatisch einer B2B-Kundengruppe zuordnen. Mit der Aktion „Werte setzen“ kommt man im Auftrag nur über den Pfad Stammdaten → Kunde → Kundengruppe an die Gruppe heran. Damit ändert sich aber die Gruppe des Kunden – nicht die des Auftrags.

Der Auftrag hat eine eigene Kopie der Kundengruppe. Sie wird beim Anlegen aus dem Kunden übernommen und danach nicht mehr aktualisiert:

Wo Wert nach dem Workflow
Kunde (dbo.tKunde) B2B-Gruppe ✔
Auftrag (Verkauf.tAuftrag) Endkunden ✘ – bleibt alt

In der Oberfläche ist dieses Feld nicht erreichbar. Auswertungen, Folge-Workflows oder Druckvorlagen, die auf die Gruppe im Auftrag schauen, arbeiten dann mit dem falschen Wert.

So funktionieren Custom Workflows

  • Eine eigene Aktion ist eine Stored Procedure im Schema CustomWorkflows.
  • Der erste Parameter ist immer der Schlüssel des Objekts – beim Auftrag @kAuftrag, beim Artikel @kArtikel, beim Kunden @kKunde.
  • Der Name im Workflow-Editor kommt aus einer Extended Property DisplayName an der Prozedur.
  • Weitere Parameter brauchen je einen eigenen benutzerdefinierten Datentyp im Schema CustomWorkflows. Der Basistyp bestimmt das Eingabefeld: BIT wird zur Checkbox, INT zum Zahlenfeld, NVARCHAR zum Textfeld.
  • Ob alles korrekt registriert ist, zeigt die Sicht CustomWorkflows.vCustomActionCheck.

Legen Sie Custom Workflows zuerst in einer Testkopie der Datenbank an und sichern Sie die Produktivdatenbank, bevor Sie Prozeduren einspielen.

Die Lösung: eine Aktion ohne Parameter

Statt die Gruppe als Parameter zu übergeben, liest die Aktion die aktuelle Gruppe direkt vom Kunden und schreibt sie in den Auftrag. Damit passt ein und dieselbe Aktion in jeden Workflow – egal, welche Gruppe vorher gesetzt wurde.

USE eazybusiness
GO

IF OBJECT_ID('CustomWorkflows.spAuftragKundengruppeVomKunden') IS NOT NULL
    DROP PROCEDURE CustomWorkflows.spAuftragKundengruppeVomKunden
GO

CREATE PROCEDURE CustomWorkflows.spAuftragKundengruppeVomKunden
    @kAuftrag INT
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE a
       SET a.kKundengruppe = k.kKundenGruppe
      FROM Verkauf.tAuftrag AS a
      JOIN dbo.tkunde       AS k ON k.kKunde = a.kKunde
     WHERE a.kAuftrag = @kAuftrag
       AND k.kKundenGruppe IS NOT NULL
       AND ISNULL(a.kKundengruppe, -1) <> k.kKundenGruppe;
END
GO

EXEC sys.sp_addextendedproperty
     @name = 'DisplayName', @value = 'Kundengruppe vom Kunden übernehmen',
     @level0type = 'SCHEMA',    @level0name = 'CustomWorkflows',
     @level1type = 'PROCEDURE', @level1name = 'spAuftragKundengruppeVomKunden'
GO

-- Kontrolle: Status muss "OK" sein
SELECT cName, cDisplayName, cObjekt, nParamCount, Status
  FROM CustomWorkflows.vCustomActionCheck
 WHERE cName = 'spAuftragKundengruppeVomKunden';

Einbau in den Workflow

Workflow-Objekt Auftrag, Aktionen in dieser Reihenfolge:

  1. Werte setzen: Stammdaten → Kunde → Kundengruppe = gewünschte Gruppe
  2. (optional) Historieneintrag schreiben
  3. Kundengruppe vom Kunden übernehmen – die neue Aktion, ohne Parameter

Ab jetzt stehen Kunde und Auftrag auf derselben Gruppe.

Stolperfallen aus der Praxis

Symptom Ursache Lösung
Prozedur taucht im Editor nicht auf Skript lief in der Datenbank master Immer USE eazybusiness voranstellen
„Falsche Syntax in der Nähe von …“ Unterabfrage direkt im DECLARE DECLARE und SET trennen
„Operandentypkollision … sql_variant“ NVARCHAR(MAX) als Wert der Extended Property Höchstens NVARCHAR(3750) verwenden
Parameter soll Auswahlliste werden Wird vom Editor nicht unterstützt Pro Wert eine eigene Aktion ohne Parameter
Leerer Wert aus Liquid-Pfad zur Kundengruppe Der Pfad liefert den Gruppennamen nicht Wert in der Prozedur direkt aus der Datenbank lesen
Workflow bricht ab, nichts passiert Fehler in der Prozedur Workflow-Protokoll prüfen (siehe unten)

Beim Entfernen einer Aktion: erst aus allen Workflows herausnehmen, dann die Prozedur löschen und erst danach die zugehörigen Datentypen – sonst bleiben kaputte Einträge im Workflow stehen.

Fehler finden: das Workflow-Protokoll

Fehler einer Custom-Aktion landen im Workflow-Protokoll. Diese Abfrage zeigt die letzten Einträge:

SELECT TOP 50 l.dDatum, w.cName AS Workflow, l.nTyp, l.kObjektPk, l.cLog
  FROM dbo.tWorkflowLog l
  LEFT JOIN dbo.tWorkflow w ON w.kWorkflow = l.kWorkflow
 ORDER BY l.dDatum DESC;

Was die Aktion bewusst nicht tut

Geändert wird nur das Kopf-Feld der Kundengruppe im Auftrag. Preise der Positionen bleiben unverändert – sie werden beim Anlegen der Position berechnet. Soll der Auftrag nach dem Gruppenwechsel neu bepreist werden, ist das ein eigener Schritt.

Custom Workflows sind ein starkes Werkzeug – und eines, mit dem man direkt in der Datenbank arbeitet. Wenn Sie unsicher sind, ob eine Aktion so gebaut ist, dass sie auch das nächste Wawi-Update übersteht, sprechen Sie uns an.

Zu kompliziert?Lassen Sie uns das einrichten – angepasst an Ihre Vorlagen und Workflows.
Einrichten lassen

Häufige Fragen

Was ist ein Custom Workflow in JTL-Wawi?

Eine eigene Workflow-Aktion, die als Stored Procedure im Datenbankschema CustomWorkflows angelegt wird. Die Wawi zeigt sie danach im Workflow-Editor wie eine normale Aktion an.

Brauche ich dafür besondere Rechte?

Ja. Zum Anlegen der Prozedur braucht man auf dem SQL Server Rechte als db_owner oder sa in der Datenbank eazybusiness. Ein Lesezugang reicht nicht.

Kann ein Parameter eine Auswahlliste bekommen?

Nein. Parameter erscheinen als Eingabefeld, Zahl oder Checkbox – je nach Datentyp. Wer eine Auswahl braucht, legt pro Wert eine eigene parameterlose Aktion an.

Ändert die Aktion auch die Preise im Auftrag?

Nein. Sie ändert nur das Kopf-Feld Kundengruppe. Preise der Positionen werden beim Anlegen der Position berechnet und bleiben unverändert.

Lassen Sie uns über Ihr JTL-Setup sprechen.

Kurz anrufen oder schreiben – im kostenlosen Erstgespräch klären wir, wo es hakt und was sinnvoll ist.