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.255
682
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
In Diskussion Manueller Workflow Regex JTL-Workflows - Ideen, Lob und Kritik 4
Beantwortet Workflow funktioniert bei Unicorn 2 Bestellungen nicht JTL-Workflows - Fehler und Bugs 3
In Diskussion Workflow Rechnung Email Wochenende JTL-Workflows - Fehler und Bugs 3
In Diskussion Workflow - Lagerbestand auf Lager X = 0, dann setzte 5 Tage Lieferzeit JTL-Workflows - Ideen, Lob und Kritik 4
Beantwortet Doppelte Versandpositionen per Workflow entfernen JTL-Workflows - Fehler und Bugs 3
Neu Amazon & Schweiz ab 01.01.25: Rechnungslegung ja oder nein? Workflow? User helfen Usern - Fragen zu JTL-Wawi 2
Neu ausgehende XRechnung speichern - workflow User helfen Usern - Fragen zu JTL-Wawi 5
Neu Workflow: Auftragsfarbe bei Fehlbestand ändern User helfen Usern - Fragen zu JTL-Wawi 1
SQL Abfrage bei Workflow Datei Schreibn JTL-Wawi 1.9 1
1.9.5.4 und Shop 5.3.3 fehlende Beschreibung im Shop durch Workflow, bin genervt JTL-Wawi 1.9 2
Neu Workflow Beschaffung - gelöscht JTL-Workflows - Ideen, Lob und Kritik 0
Neu Kunden UST Feld mit Workflow befüllen User helfen Usern - Fragen zu JTL-Wawi 1
Neu JTL Worker führt den Workflow nicht aus User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Workflow testen, teilweise unmöglich aktuelles Beispiel zu wählen JTL-Workflows - Fehler und Bugs 11
Beantwortet Workflow manuell Preisreduzierung 10% JTL-Workflows - Ideen, Lob und Kritik 4
In Diskussion Workflow Benachrichtigung wenn 80% vom Anfangsbestand verkauft wurde JTL-Workflows - Ideen, Lob und Kritik 7
Neu Vorauss. Lieferdatum = Heute in Workflow abfragen? User helfen Usern - Fragen zu JTL-Wawi 2
Neu Workflow Email versenden wenn Durchnittseinkaufspreis sich verändert hat JTL-Workflows - Ideen, Lob und Kritik 1
Neu Workflow o.Ä. gesucht für Versanddatenimport Arbeitsabläufe in JTL-Wawi 3
In Diskussion Automatische Workflow laufen nicht JTL-Workflows - Fehler und Bugs 4
In Diskussion In Workflow auf Views zugreifen JTL-Workflows - Ideen, Lob und Kritik 4
Neu Workflow für Otto.de Bestellungen über Amazon MCF Otto.de - Anbindung (SCX) 0
In Diskussion Workflow soll nur Montags bis Freitags greifen JTL-Workflows - Ideen, Lob und Kritik 12
Neu Workflow: Adresse - Strasse kürzen ( ab Wert "OT" ) User helfen Usern - Fragen zu JTL-Wawi 6
Workflow FollowUP Angebot JTL-Wawi - Ideen, Lob und Kritik 0
Beantwortet E-Mail Vorlage Versandbestätigung per Workflow ausführen, wie? JTL-Workflows - Ideen, Lob und Kritik 7
In Diskussion Brauche Hilfe bei Bestand Email Workflow JTL-Workflows - Ideen, Lob und Kritik 17
In Diskussion Workflow besteht alle Test wird nur nicht ausgeführt JTL-Workflows - Fehler und Bugs 23
Verwiesen an Support Workflow artikel_erstellt wird bei LagerUmbuchung ausgelöst. JTL-Workflows - Fehler und Bugs 1
Neu Workflow Hilfe gesucht, Ersetzten eines Textes User helfen Usern - Fragen zu JTL-Wawi 4
Neu Workflow und Version für Vorhaben Starten mit JTL: Projektabwicklung & Migration 3
Neu Workflow erstellen, einen Wert aus den Stammdaten kopieren in einen anderen User helfen Usern - Fragen zu JTL-Wawi 8
Neu Workflow Auftragssplit bei DHL Export Sendungen mit mehreren Paketen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow Artikelnummer durch Lieferantennummer ersetzen User helfen Usern - Fragen zu JTL-Wawi 6
In Diskussion Log bei Workflow Fehler JTL-Workflows - Ideen, Lob und Kritik 0
In Diskussion Rechnungsentwurf per Workflow? JTL-Workflows - Ideen, Lob und Kritik 7
Neu Workflow Fehler User helfen Usern - Fragen zu JTL-Wawi 1
Neu Workflow der prüft, ob eine Bestellung komplett aus einem bestimmten Lager lieferbar ist. User helfen Usern - Fragen zu JTL-Wawi 7
In Diskussion Custum Workflow - Syntax JTL-Workflows - Ideen, Lob und Kritik 0
In Diskussion Keine Auslieferung nach Zahlungsartänderung über Workflow JTL-Workflows - Fehler und Bugs 4
Zahlungsmodul Workflow JTL-Wawi 1.9 17
Neu GPSR Zuordnung in der Ameise Wawi Version 1.5 Probleme Funktionsattribut ID User helfen Usern - Fragen zu JTL-Wawi 3
Neu GPSR: Zuordnung der Verantw. Person zum meinen Artikeln JTL-Ameise - Fehler und Bugs 10
GPSR - Das Feld [Verantwortliche Person] ist leer hinterlegt! Es findet keine Zuordnung statt. - wie lösche ich den Eintrag JTL-Wawi 1.9 5
Neu Kundengruppen Zuordnung bei Registrierung anhand Emaildomain Plugins für JTL-Shop 3

Ähnliche Themen