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.667
805
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 Workflow mit UND / ODER - Bedingung erstellen JTL-Workflows - Ideen, Lob und Kritik 2
Using short screen recordings for JTL-Wawi workflow documentation – anyone doing this? JTL-Wawi 2.0 3
Neu Werte erhöhen per Workflow User helfen Usern - Fragen zu JTL-Wawi 3
In Diskussion Workflow OpenAI JTL-Workflows - Ideen, Lob und Kritik 0
Workflow Trigger bei Angebot-Import über Ameise JTL-Wawi 1.9 0
Neu 2.0.0: Workflow Queue wird nicht abgearbeitet via API JTL-Wawi 2.0 1
Neu Verständnisfrage zum Mahnlauf Workflow User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Ort mit OT per Workflow bereinigen JTL-Workflows - Ideen, Lob und Kritik 3
Neu Ausdruck Rechnung beim Workflow nicht korrekt formatiert User helfen Usern - Fragen zu JTL-Wawi 6
Worker versendet keine E-Mails mehr aus der Workflow Queue JTL-Wawi 2.0 6
Gelöst Workflow - Seriennummer per Mail versenden JTL-Workflows - Fehler und Bugs 1
Neu Workflow automatisch bei Warenausgang für Bestand und Puffer JTL-Wawi - Ideen, Lob und Kritik 12
workflow führt zu "keiner Rückmeldung" / Absturz JTL-Wawi 1.11 3
Artikelpuffer Email Workflow JTL-Wawi 1.11 4
Neu Workflow Ereignis "Position hinzufügen" bei Angebote User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow - Bedingung Lieferstatus User helfen Usern - Fragen zu JTL-Wawi 4
Workflow: Artikel geändert -> bat-script ausführen JTL-Wawi 1.11 2
Neu Workflow funktioniert nicht so wie gewollt :) User helfen Usern - Fragen zu JTL-Wawi 1
In Diskussion Workflow Abweichung Preise > Emailreport JTL-Workflows - Ideen, Lob und Kritik 3
Neu Workflow Auslöser: Artikel gelöscht User helfen Usern - Fragen zu JTL-Wawi 0
Neu Mahnwesen per Workflow automatisieren User helfen Usern 0
Neu Ebay-Artikelimport triggert Workflow "Artikel geändert" nicht JTL-Wawi - Fehler und Bugs 0
Lieferantenbestellung: Hinweis/Zuordnung JTL-Wawi 1.11 4

Ähnliche Themen