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.517
753
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
Große custom.css, wie geht es einfacher? Einrichtung JTL-Shop5 1
Beantwortet Workflow Datei schreiben Dateiname per Dotliquid Fehler Illegales Zeichen im Pfad. callerMemberName : WriteFile JTL-Workflows - Fehler und Bugs 1
Neu Workflow zum automatischen Stornieren einer Rechnung nach Versand User helfen Usern - Fragen zu JTL-Wawi 1
Neu Artikel KinderArtikel anlegen: Workflow "Artikel erstellt und Artikel geändert" werden NUR beim Vaterartikel gestartet User helfen Usern - Fragen zu JTL-Wawi 0
Stornobeleg als Workflow-Trigger JTL-Wawi 1.10 2
Neu Kartonagen nicht mehr über Workflow auswählbar nach Update auf 1.11.3 JTL-Workflows - Ideen, Lob und Kritik 0
Neu Workflow für voraussichtlichen Liefertag erstellen JTL-Workflows - Ideen, Lob und Kritik 6
Neu Workflow für voraussichtlichen Liefertag erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Lieferantenbestellung per Workflow bestätigen JTL-Wawi 1.11 0
Neu Workflow: Straße enthält Postfiliale oder Paketshop JTL-Workflows - Fehler und Bugs 3
Neu Workflow 4 Wochen vor vorraus. Lieferdatum Arbeitsabläufe in JTL-Wawi 1
Überverkäufe über Workflow setzen JTL-Wawi 1.10 2
In Diskussion Workflow alle X Tage ausführen JTL-Workflows - Ideen, Lob und Kritik 5
Ausliefern Workflow über API JTL-Wawi 1.9 6
Neu Kann man das Shop-Guthaben von Kunden per Workflow beeinflussen? User helfen Usern - Fragen zu JTL-Wawi 0
JTL-Workflow | Automatisches Speichern von Rechnungen möglich? JTL-Wawi 1.9 2
In Diskussion Workflow Angebote OHNE Auftrag JTL-Workflows - Ideen, Lob und Kritik 8
Gelöst Workflow-Trigger für Selbstabholung / FFN-Versand JTL-Workflows - Fehler und Bugs 2
In Diskussion Workflow für bezahlte Aufträge eines bestimmten Lagers → Pickliste zu bestimmter Uhrzeit JTL-Workflows - Ideen, Lob und Kritik 2
In Diskussion Workflow verändert Wert JTL-Workflows - Ideen, Lob und Kritik 1
Workflow Standardlieferant JTL-Wawi 1.10 2
XML Auftragsimport per Workflow bediinen JTL-Wawi 1.8 1
Issue angelegt [WAWI-44314] Workflow automatisch 2 Pakete erstellen bei bestimmen Produkten? JTL-Workflows - Ideen, Lob und Kritik 2
Gelöst CustomWorkflow erscheint nicht in den Workflow-Aktionen JTL-Workflows - Fehler und Bugs 7
Neu Workflow um einen Artikel bei einem bestimmten Verkaufskanal zu aktivieren oder deaktivieren User helfen Usern - Fragen zu JTL-Wawi 4
Neu Mit Workflow verfügbaren Bestand aller Artikel in Datei schreiben User helfen Usern - Fragen zu JTL-Wawi 8
In Diskussion Workflow ausführen bei Lagerbestand 0 eines Lagers JTL-Workflows - Fehler und Bugs 3
Neu Workflow: WMS Lager nutzen um Versandart zu bestimmen User helfen Usern - Fragen zu JTL-Wawi 1
In Diskussion Workflow für das Austauschen von bestelltem Artikel in einem Auftrag gegen einen alternativen Artikel JTL-Workflows - Ideen, Lob und Kritik 3
Workflow soll wenn Artikel 0 Bestand für 35 Tage hat diesen auf inaktiv setzen JTL-Wawi 1.10 4
Automatischer Workflow für Versand von Gutscheinen versendet den Gutschein nicht JTL-Wawi 1.10 2
Workflow für Benachrichtigung bei Stammkunden JTL-Wawi 1.10 9
Workflow: Neue Kunden direkt einer Kundengruppe zuordnen JTL-Wawi 1.10 6
Neu Workflow: Musterbestellungen (0 € Gesamtbruttowert) automatisch ausliefern lassen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Workflow Versandart prüfen und im Auftrag setzen - speziell für Stücklistenartikel User helfen Usern - Fragen zu JTL-Wawi 0
Neu Ausliefern Workflow mit variablen Ausführungszeiten je nach vorauss. Lieferdatum User helfen Usern - Fragen zu JTL-Wawi 3
In Diskussion Workflow Error While Automating Game Update Notifications JTL-Workflows - Fehler und Bugs 2
Neu Bitte legen Sie eine Retoure in JTL-Wawi an, damit eine korrekte Zuordnung zu den Stücklistenartikeln möglich ist. - WMS Retoure JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 0
Neu Gewinnbasierte Provision & gezielte Kunden-Zuordnung im JTL Shop / Wawi User helfen Usern 0

Ähnliche Themen