Neu Custom Workflow: Zuordnung einer Verantwortlichen Person zu Artikeln

oliverk

Aktives Mitglied
5. November 2007
30
20
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
20
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
20
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.201
662
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 ACF | Advanced Custom Fields Pro Unterstützung (Mit Workaround) WooCommerce-Connector 2
Neu Amazon Custom Orders mit Bildern von Kunden Amazon-Anbindung - Ideen, Lob und Kritik 0
Neu Workflow manuell Preisreduzierung 10% JTL-Workflows - Ideen, Lob und Kritik 0
Neu Workflow Benachrichtigung wenn 80% vom Anfangsbestand verkauft wurde JTL-Workflows - Ideen, Lob und Kritik 3
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 Workflow: Mail bei Notiz in Auftrags-Historie User helfen Usern - Fragen zu JTL-Wawi 1
Beantwortet Manueller Workflow lässt sich nicht anlegen (V 1.9.5.2) JTL-Workflows - Fehler und Bugs 13
Neu Hilfe bei Workflow - falsche Steuernummer bei Amazon hinterlegt User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Workflow Freiposition JTL-Workflows - Fehler und Bugs 1
In Diskussion Workflow für Liefertag Wareneingang? JTL-Workflows - Ideen, Lob und Kritik 2
Neu Workflow - Wert "Netto-EK" im Auftrag auf 0,00 € setzen für eine bestimmte Kundengruppe User helfen Usern - Fragen zu JTL-Wawi 1
Neu Workflow mit verfügbarem Bestand User helfen Usern - Fragen zu JTL-Wawi 4
Von Workflow lokal gespeicherte Datei direkt wieder löschen lassen JTL-Wawi 1.8 1
Neu Per WMS Workflow API Call ausführen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 1
In Diskussion Fragen zur Rechnungserstellung via Workflow JTL-Workflows - Ideen, Lob und Kritik 2
In Diskussion Manueller Workflow zeitgestuert JTL-Workflows - Ideen, Lob und Kritik 20
Neu Workflow Adresse prüfen auf deutsche Kunden eingrenzen Gelöste Themen in diesem Bereich 6
Neu Brauche Hilfe bei einen Workflow in Sachen Versand Eigene Übersichten in der JTL-Wawi 6
Neu Permanenten Excel-Log über Workflow führen User helfen Usern - Fragen zu JTL-Wawi 2
Workflow DotLiquid: KomplettLieferbarAusLager zeigt FFN Lager an obwohl nicht komplett lieferbar aus diesem Lager JTL-Wawi 1.9 1
In Diskussion Workflow für eBays neues "Kaufabbruch"-Feature JTL-Workflows - Ideen, Lob und Kritik 2
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
Neu Zuordnung Produkt & Variante WooCommerce-Connector 1

Ähnliche Themen