Neu Custom Workflow: Zuordnung einer Verantwortlichen Person zu Artikeln

oliverk

Aktives Mitglied
5. November 2007
30
23
Leipzig
Hi Leute,

ich möchte im Zuge der Fleiß- und Fließbandarbeit zur GPSR-Vorbereitung gern die "Verantwortliche Person" per manuellem Workflow zuweisen können. Da JTL das Feld "Verantwortliche Person" nicht in Workflows als beschreibbares Feld zur Verfügung stellt, benötige ich einen Custom Workflow (stored procedure). Korrigiert und verbessert bitte, falls euch irgendwelche Unzulänglichkeiten auffallen. Man kann damit eine "Verantwortliche Person" per "Nummer" auswählen und neu zuweisen, aktualisieren und bei leerem Wertefeld löschen.

Achtung: erfordert die JTL Pro Edition :(

SQL:
CREATE TYPE CustomWorkflows.Parameter_spVERANTWORTUNG_VERANTWORTUNG FROM NVARCHAR(255);
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
    @parametername = 'Parameter_spVERANTWORTUNG_VERANTWORTUNG',
    @displayName = 'Nummer'
GO

CREATE PROCEDURE CustomWorkflows.spVERANTWORTUNG
    @kArtikel INT,
    @cNumber Parameter_spVERANTWORTUNG_VERANTWORTUNG

AS

BEGIN
    DECLARE @kProductComplianceContact INT

    SELECT @kProductComplianceContact = Contact.tProductComplianceContact.kProductComplianceContact
    FROM Contact.tContact
    JOIN Contact.tProductComplianceContact ON Contact.tProductComplianceContact.kContact = Contact.tContact.kContact
    WHERE Contact.tContact.cNumber = @cNumber

IF @kProductComplianceContact IS NULL OR @kProductComplianceContact = ''
BEGIN
    DELETE FROM Artikel.tArtikelComplianceContact
    WHERE kArtikel = @kArtikel;
END
ELSE
BEGIN
    IF EXISTS (
        SELECT 1
        FROM Artikel.tArtikelComplianceContact
        WHERE kArtikel = @kArtikel
    )
        BEGIN
            UPDATE Artikel.tArtikelComplianceContact
            SET kProductComplianceContact = @kProductComplianceContact
            WHERE kArtikel = @kArtikel;
        END
    ELSE
        BEGIN
            INSERT INTO Artikel.tArtikelComplianceContact (kArtikel, kProductComplianceContact)
            VALUES (@kArtikel, @kProductComplianceContact);
        END
    END
END
GO

EXEC CustomWorkflows._SetActionDisplayName
    @actionName = 'spVERANTWORTUNG',
    @displayName = 'Verantwortliche Person'
 
Zuletzt bearbeitet:

oliverk

Aktives Mitglied
5. November 2007
30
23
Leipzig
Ich bin im Thread "Neues Feld "V-Person" nicht in der Variablen/Werten bei den Workflows zu finden" noch auf die Idee gestoßen, bestimmten Herstellern generell eine Verantwortliche Person zuweisen zu können. Also habe ich den Custom Workflow (Stored Procedure) von oben noch etwas aufgebohrt.

Screenshot_2024-12-01_04.png

Nummer
  • Bei Nummer wird die "Nummer" der Verantwortlichen Person eingegeben. Diese muss in Menu -> Artikel -> Verantwortliche Person angelegt werden.
  • Dieser Wert erstellt beim Artikel eine neue Verantwortliche Person oder überschreibt eine vorhandene VP.
  • Wenn das Feld leer ist, wird die Verantwortliche Person beim Artikel gelöscht.
Referenz vom Hersteller priorisieren?
  • Wenn das Häkchen gesetzt ist, wird die in den Herstellerdaten hinterlegte Referenz priorisiert.
  • Wenn eine Herstellerreferenz vorhanden ist, wird diese genutzt.
  • Wenn es keinen Eintrag gibt, wird die "Nummer" genutzt.
  • Da es kein passendes Feld gibt, verwende ich "Titel" als Referenzfeld, im SQL kann aber auch jedes andere ungenutzte Feld dafür eingestellt werden.
  • Wenn ein Eintrag in diesem Feld mit einer "Nummer" einer vorhandenen Verantwortlichen Person übereinstimmt, wird diese übernommen. (wenn das Häkchen gesetzt ist)

Screenshot_2024-12-01_02.png

SQL:
CREATE TYPE CustomWorkflows.Parameter_spVERANTWORTUNG_Nummer FROM NVARCHAR(255);
GO

CREATE TYPE CustomWorkflows.Parameter_spVERANTWORTUNG_ReferenzNutzen FROM BIT;
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
    @parametername = 'Parameter_spVERANTWORTUNG_Nummer',
    @displayName = 'Nummer'
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
    @parametername = 'Parameter_spVERANTWORTUNG_ReferenzNutzen',
    @displayName = 'Referenz vom Hersteller priorisieren?'
GO

CREATE PROCEDURE CustomWorkflows.spVERANTWORTUNG
    @kArtikel INT,
    @cNumber Parameter_spVERANTWORTUNG_Nummer,
    @ReferenzNutzen Parameter_spVERANTWORTUNG_ReferenzNutzen

AS

BEGIN
    -- Variable für die "Nummer" der Verantwortlichen Person
    DECLARE @kProductComplianceContact NVARCHAR(255)

    SELECT @kProductComplianceContact = Contact.tProductComplianceContact.kProductComplianceContact
    FROM Contact.tContact
    JOIN Contact.tProductComplianceContact ON Contact.tProductComplianceContact.kContact = Contact.tContact.kContact
    WHERE Contact.tContact.cNumber = @cNumber;

    -- Hier werden das Referenzfeld für die Verantwortliche Person in den Herstellerdaten/Kontakt und Nummer der Verantwortlichen Person auf Übereinstimmung geprüft.
    -- Bei Übereinstimmung wird der kContact der Verantwortlichen Person ausgegeben.
    DECLARE @HerstellerReferenz NVARCHAR(255)
    
    SELECT @HerstellerReferenz = kProductComplianceContact
    FROM Contact.tAddress
    JOIN tArtikel ON tArtikel.kHersteller = Contact.tAddress.kContact
    JOIN Contact.tContact ON Contact.tContact.cNumber = Contact.tAddress.cAcademicTitle
    JOIN Contact.tProductComplianceContact ON Contact.tProductComplianceContact.kContact = Contact.tContact.kContact
    WHERE kArtikel = @kArtikel;

    -- Hier wird der Hersteller deklariert für die Abfrage, ob Hersteller angelegt ist oder nicht.
    DECLARE @kHersteller NVARCHAR(255)
    
    SELECT @kHersteller = kHersteller
    FROM tArtikel
    WHERE kArtikel = @kArtikel;

    -- Beim Hersteller angelegte Verantwortliche Person nutzen
    IF @ReferenzNutzen = 1
        AND (@kHersteller IS NOT NULL AND NOT @kHersteller = '')
        AND (@HerstellerReferenz IS NOT NULL AND NOT @HerstellerReferenz = '')
    BEGIN
        IF EXISTS ( SELECT 1 FROM Artikel.tArtikelComplianceContact WHERE kArtikel = @kArtikel )
        BEGIN
            -- Wenn bereits ein Eintrag für den Artikel vorhanden ist, aktualisiere diesen mit der Herstellerreferenz.
            UPDATE Artikel.tArtikelComplianceContact
            SET kProductComplianceContact = @HerstellerReferenz /* Hier ist der Fehler. JOIN cNumber! Oder weitere Variable erzeugen? */
            WHERE kArtikel = @kArtikel;
        END
        ELSE
        BEGIN
            -- Wenn es noch keinen Eintrag für den Artikel gibt, füge die Herstellerreferenz hinzu.
            INSERT INTO Artikel.tArtikelComplianceContact (kArtikel, kProductComplianceContact) /* Hier ist der Fehler. JOIN cNumber! */
            VALUES (@kArtikel, @HerstellerReferenz);
        END
    END
    ELSE
    BEGIN
        -- Wenn keine Herstellerreferenz vorhanden ist, wird die angegebene Nummer der Verantwortlichen Person hier eingetragen, geändert oder gelöscht.
        IF @kProductComplianceContact IS NULL OR @kProductComplianceContact = ''
        BEGIN
            -- Wenn @kProductComplianceContact leer ist, lösche die Zeile
            DELETE FROM Artikel.tArtikelComplianceContact
            WHERE kArtikel = @kArtikel;
        END
        ELSE
        BEGIN
            IF EXISTS ( SELECT 1 FROM Artikel.tArtikelComplianceContact WHERE kArtikel = @kArtikel )
            BEGIN
                -- Wenn bereits ein Eintrag für den Artikel vorhanden ist, aktualisiere diesen mit dem Eintrag (Nummer) aus dem Workflow.
                UPDATE Artikel.tArtikelComplianceContact
                SET kProductComplianceContact = @kProductComplianceContact
                WHERE kArtikel = @kArtikel;
            END
            ELSE
            BEGIN
                -- Wenn es noch keinen Eintrag für den Artikel gibt, füge den Eintrag (Nummer) aus dem Workflow hinzu.
                INSERT INTO Artikel.tArtikelComplianceContact (kArtikel, kProductComplianceContact)
                VALUES (@kArtikel, @kProductComplianceContact);
            END
        END
    END
END
GO

EXEC CustomWorkflows._SetActionDisplayName
    @actionName = 'spVERANTWORTUNG',
    @displayName = 'Verantwortliche Person'
 

oliverk

Aktives Mitglied
5. November 2007
30
23
Leipzig
Es war noch ein Fehler enthalten. Hier die korrigierte Version:

SQL:
CREATE TYPE CustomWorkflows.Parameter_spVERANTWORTUNG_Nummer FROM NVARCHAR(255);
GO

CREATE TYPE CustomWorkflows.Parameter_spVERANTWORTUNG_ReferenzNutzen FROM BIT;
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
    @parametername = 'Parameter_spVERANTWORTUNG_Nummer',
    @displayName = 'Nummer'
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
    @parametername = 'Parameter_spVERANTWORTUNG_ReferenzNutzen',
    @displayName = 'Referenz vom Hersteller priorisieren?'
GO

CREATE PROCEDURE CustomWorkflows.spVERANTWORTUNG
    @kArtikel INT,
    @cNumber Parameter_spVERANTWORTUNG_Nummer,
    @ReferenzNutzen Parameter_spVERANTWORTUNG_ReferenzNutzen

AS

BEGIN
    -- Variable für die "Nummer" der Verantwortlichen Person
    DECLARE @kProductComplianceContact NVARCHAR(255)

    SELECT @kProductComplianceContact = Contact.tProductComplianceContact.kProductComplianceContact
    FROM Contact.tContact
    JOIN Contact.tProductComplianceContact ON Contact.tProductComplianceContact.kContact = Contact.tContact.kContact
    WHERE Contact.tContact.cNumber = @cNumber;

    -- Hier werden das Referenzfeld für die Verantwortliche Person in den Herstellerdaten/Kontakt und Nummer der Verantwortlichen Person auf Übereinstimmung geprüft.
    -- Bei Übereinstimmung wird der kContact der Verantwortlichen Person ausgegeben.
    DECLARE @HerstellerReferenz NVARCHAR(255)

    SELECT @HerstellerReferenz = Contact.tProductComplianceContact.kProductComplianceContact
    FROM tArtikel
    JOIN dbo.tHersteller ON dbo.tHersteller.kHersteller = dbo.tArtikel.kHersteller
    JOIN Contact.tAddress ON dbo.tHersteller.kContact = Contact.tAddress.kContact
    JOIN Contact.tContact ON Contact.tContact.cNumber = Contact.tAddress.cAcademicTitle
    JOIN Contact.tProductComplianceContact ON Contact.tProductComplianceContact.kContact = Contact.tContact.kContact
    WHERE tArtikel.kArtikel = @kArtikel;

    -- Hier wird der Hersteller deklariert für die Abfrage, ob Hersteller angelegt ist oder nicht.
    DECLARE @kHersteller NVARCHAR(255)
    
    SELECT @kHersteller = kHersteller
    FROM tArtikel
    WHERE kArtikel = @kArtikel;

    -- Beim Hersteller angelegte Verantwortliche Person nutzen
    IF @ReferenzNutzen = 1
        AND (@kHersteller IS NOT NULL AND NOT @kHersteller = '')
        AND (@HerstellerReferenz IS NOT NULL AND NOT @HerstellerReferenz = '')
    BEGIN
        IF EXISTS ( SELECT 1 FROM Artikel.tArtikelComplianceContact WHERE kArtikel = @kArtikel )
        BEGIN
            -- Wenn bereits ein Eintrag für den Artikel vorhanden ist, aktualisiere diesen mit der Herstellerreferenz.
            UPDATE Artikel.tArtikelComplianceContact
            SET kProductComplianceContact = @HerstellerReferenz
            WHERE kArtikel = @kArtikel;
        END
        ELSE
        BEGIN
            -- Wenn es noch keinen Eintrag für den Artikel gibt, füge die Herstellerreferenz hinzu.
            INSERT INTO Artikel.tArtikelComplianceContact (kArtikel, kProductComplianceContact)
            VALUES (@kArtikel, @HerstellerReferenz);
        END
    END
    ELSE
    BEGIN
        -- Wenn keine Herstellerreferenz vorhanden ist, wird die angegebene Nummer der Verantwortlichen Person hier eingetragen, geändert oder gelöscht.
        IF @kProductComplianceContact IS NULL OR @kProductComplianceContact = ''
        BEGIN
            -- Wenn @kProductComplianceContact leer ist, lösche die Zeile
            DELETE FROM Artikel.tArtikelComplianceContact
            WHERE kArtikel = @kArtikel;
        END
        ELSE
        BEGIN
            IF EXISTS ( SELECT 1 FROM Artikel.tArtikelComplianceContact WHERE kArtikel = @kArtikel )
            BEGIN
                -- Wenn bereits ein Eintrag für den Artikel vorhanden ist, aktualisiere diesen mit dem Eintrag (Nummer) aus dem Workflow.
                UPDATE Artikel.tArtikelComplianceContact
                SET kProductComplianceContact = @kProductComplianceContact
                WHERE kArtikel = @kArtikel;
            END
            ELSE
            BEGIN
                -- Wenn es noch keinen Eintrag für den Artikel gibt, füge den Eintrag (Nummer) aus dem Workflow hinzu.
                INSERT INTO Artikel.tArtikelComplianceContact (kArtikel, kProductComplianceContact)
                VALUES (@kArtikel, @kProductComplianceContact);
            END
        END
    END
END
GO

EXEC CustomWorkflows._SetActionDisplayName
    @actionName = 'spVERANTWORTUNG',
    @displayName = 'Verantwortliche Person'
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.358
708
Danke, aktualisieren kann man den CW so aber nicht, die User sollten daher auch einen Löschbefehl haben, damit die Aktionen auch gelöscht werden können.
Am besten für ein Update in eine IF-Schleife packen. ;) :thumbsup:

Man sollte auch gute Namen ausdenken, ansonsten könnte schnell mal ein Befehl bereits existieren, nur mal paar kleine Tipps am Rande.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Custom Sortierung eigener View auf Lieferschein bringen Eigene Übersichten in der JTL-Wawi 1
Neu Amazon Custom: Werte werden nicht in die WaWi übergeleitet Amazon-Anbindung - Fehler und Bugs 1
Neu Workflow kurze Pause per Batch - Fehler "Die Eingabeumleitung wird nicht unterstützt" JTL-Workflows - Ideen, Lob und Kritik 6
Neu Workflow auf Zahlungseingang und Zahlungsweise JTL-Workflows - Ideen, Lob und Kritik 1
Neu Per Workflow Versandart ändern - EK wird nicht korrigiert JTL-Workflows - Ideen, Lob und Kritik 1
In Bearbeitung Workflow funktioniert nicht - Bedingung: Seriennummer JTL-Workflows - Fehler und Bugs 15
Neu Menge von Auftragspositionen per Workflow ändern User helfen Usern - Fragen zu JTL-Wawi 4
Neu Workflow Stücklistenbestandteile ausgeben JTL-Workflows - Ideen, Lob und Kritik 1
Neu Externe Belege per Workflow speichern Amazon-Anbindung - Fehler und Bugs 1
Verwiesen an Support Probleme mit dem Workflow JTL-Workflows - Fehler und Bugs 2
Workflow-Hilfe Zahlungserinnerung nach 3 Werktagen & Storno nach 7 Werktagen ohne Zahlung JTL-Wawi 1.10 7
Neu Zustellzeit EXPRESS Sendungen - als Bedingung für Workflow User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow - Ausliefern - Jeden Tag um 04:00 Uhr, außer Sa. User helfen Usern - Fragen zu JTL-Wawi 4
Neu Wie kann es sein, dass ein "Rechnung erstellt" - Workflow 3 Tage später nochmal ausgelöst wird? User helfen Usern - Fragen zu JTL-Wawi 5
In Diskussion Rechnung per mail / Workflow gibt Fehler aus JTL-Workflows - Fehler und Bugs 6
Neu Workflow mehrere Werte setzen Shopify-Connector 2
In Diskussion Workflow für Amazon Tel. Nummern löschen JTL-Workflows - Ideen, Lob und Kritik 3
Neu Lässt sich die Artikelsichtbarkeit pro Kundengruppe per Workflow steuern? User helfen Usern - Fragen zu JTL-Wawi 2
Neu Variabel für "Bearbeiter" im Workflow User helfen Usern - Fragen zu JTL-Wawi 8
Gelöst BUG - Falsches Workflow wird ausgeführt JTL-Workflows - Fehler und Bugs 2
Neu Workflow der die Versandart für den Export zu Amazon nach dem ausliefern über WMS ändert User helfen Usern - Fragen zu JTL-Wawi 3
Gelöst [WAWI-75772] Workflow Erscheinungsdatum Feld leeren deaktiviert Überverkäufe möglich JTL-Workflows - Fehler und Bugs 2
Neu Workflow Artikel Erscheint am Datum überschritten, Bestandsführung aktivieren. User helfen Usern - Fragen zu JTL-Wawi 2
In Diskussion BUG Workflow bricht ab JTL-Workflows - Fehler und Bugs 6
Beantwortet Workflow: Zahlungserinnerung aus dem JTL Guid, versendet beim Testen mehr als nur 1 E-Mail JTL-Workflows - Fehler und Bugs 4
Beantwortet Brauche Hilfe Workflow Multichannel Rechnungserstellung nach Versand von Amazon JTL-Workflows - Ideen, Lob und Kritik 1
In Diskussion Workflow: Prüfen ob Artikel mit Fehlbestend nach 48h im Zulauf JTL-Workflows - Ideen, Lob und Kritik 2
Beantwortet Workflow Warengruppe nicht ausführen bei bestimmter Warengruppe, bei unterschiedlichen klappt es nicht JTL-Workflows - Fehler und Bugs 3
Manueller Workflow via App wird nicht vollständig ausgeführt JTL-Wawi App 5
In Diskussion Workflow - noch nicht versendete Aufträge JTL-Workflows - Fehler und Bugs 10
In Diskussion Workflow für Kleinpaket anhand eigener "Volumenzahl" JTL-Workflows - Ideen, Lob und Kritik 5
Neu Workflow Überprüfung Eigene Felder User helfen Usern - Fragen zu JTL-Wawi 3
Issue angelegt [WAWI-75077] Workflow Mahnlauf ignoriert Karenztage JTL-Workflows - Fehler und Bugs 3
Anhänge bei zb. Auftrag per Email versenden | Workflow JTL-Wawi 1.9 5
Zahlungsabgleich weiterhin schlecht - fehlende Zuordnung bei minimal abweichendem Präfix JTL-Wawi 1.10 0
Verantwortliche Person - Hersteller - GPSR - Zuordnung? JTL-Wawi 1.10 3
Neu product_identifier auf "0" führt zu Problemen bei Gutschriften Zuordnung bei Taxdoo JTL-Wawi - Fehler und Bugs 0
Neu JTL POS und Sump Zuordnung von Belegen Allgemeine Fragen zu JTL-POS 6
Neu Gelöset: EPID Zuordnung User helfen Usern 0

Ähnliche Themen