CustomWorkflow Merkmale setzen

Lev1ath4n

Neues Mitglied
5. November 2024
6
2
Hallo zusammen,

Ich versuche aktuell einen eigenen Custom Workflow zu schreiben, bekomme laut Wawi aber immer folgende Fehlermeldung beim ausführen:

Fehler beim Konvertieren des nvarchar-Werts "Maßstab" in den int-Datentyp. BrowsePk: 3 WorkflowAktionId: 4 callerMemberName: AktionAusfuehren


Ich verstehe nicht so ganz wieso er hier überhaupt versucht irgendwas zu Konvertieren, vielleicht hat ja aber jemand von euch eine Ahnung bzw Idee.

SQL:
CREATE TYPE CustomWorkflows.Parameter_spMerkmaleSetzen_Merkmal FROM

NVARCHAR(255);

GO


CREATE TYPE CustomWorkflows.Parameter_spMerkmaleSetzen_Wert FROM

NVARCHAR(255);

GO


EXEC CustomWorkflows._SetActionParameterDisplayName

@parameterName = 'Parameter_spMerkmaleSetzen_Merkmal',

@displayName = 'Merkmal'

GO


EXEC CustomWorkflows._SetActionParameterDisplayName

@parameterName = 'Parameter_spMerkmaleSetzen_Wert',

@displayName = 'Wert'

GO


CREATE PROCEDURE CustomWorkflows.spMerkmalSetzen @kArtikel INT,

@cMerkmal Parameter_spMerkmaleSetzen_Merkmal, @cWert Parameter_spMerkmaleSetzen_Wert, @MerkmalINT INT, @WertINT INT

AS

BEGIN


    SELECT @MerkmalINT = [kMerkmal]

    FROM [eazybusiness].[dbo].[tMerkmalSprache]

    WHERE cName = @cMerkmal


    SELECT @WertINT = [kMerkmalWert]

    FROM [eazybusiness].[dbo].[tMerkmalWertSprache]

    WHERE cWert = @cWert


    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)

    VALUES (@MerkmalINT, @WertINT, @kArtikel)


END


Versuche ich das ganze selbst über SQL auszuführen Funktioniert es ohne Probleme (Beispiel):

SQL:
DECLARE @kArtikel INT, @cMerkmal NVARCHAR(255), @cWert NVARCHAR(255), @MerkmalINT INT, @WertINT INT
    
    SET @kArtikel = '3'
    SET @cMerkmal = 'Maßstab'
    SET @cWert = '1:18'
    
    SELECT @MerkmalINT = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal

    SELECT @WertINT = [kMerkmalWert]
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache]
    WHERE cWert = @cWert

    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalINT, @WertINT, @kArtikel)
 

Lev1ath4n

Neues Mitglied
5. November 2024
6
2
Update:

Der Workflow Funktioniert doch. Eine Bereits erstelle Prozedur kann man nur nicht Überschreiben sondern muss sie mit einem anderen Befehl Ändern:


SQL:
ALTER PROCEDURE [CustomWorkflows].[spMerkmalSetzen]
AS
BEGIN

    ...

END

Außerdem musste ich eine Kleine Sache noch ändern. Wer interesse an dem Workflow hat hier einmal der Vollständig Funktionale:


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

CREATE TYPE CustomWorkflows.Parameter_spMerkmaleSetzen_Wert FROM
NVARCHAR(255);
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
@parameterName = 'Parameter_spMerkmaleSetzen_Merkmal',
@displayName = 'Merkmal'
GO

EXEC CustomWorkflows._SetActionParameterDisplayName
@parameterName = 'Parameter_spMerkmaleSetzen_Wert',
@displayName = 'Wert'
GO

CREATE PROCEDURE CustomWorkflows.spMerkmalSetzen @kArtikel INT,
@cMerkmal Parameter_spMerkmaleSetzen_Merkmal, @cWert Parameter_spMerkmaleSetzen_Wert
AS
BEGIN

   
    DECLARE @MerkmalINT INT, @WertINT INT

    SELECT @MerkmalINT = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal

    SELECT @WertINT = [kMerkmalWert]
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache]
    WHERE cWert = @cWert

    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalINT, @WertINT, @kArtikel)

END
GO

EXEC CustomWorkflows._SetActionDisplayName
@actionName = 'spMerkmalSetzen',
@displayname = 'Merkmal setzen'
GO

EXEC CustomWorkflows._CheckAction @actionName = 'spMerkmalSetzen';
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: oliverk

sanja9

Aktives Mitglied
14. Juli 2021
15
7
Vielen Dank für deinen Beitrag. Ich habe die Prozedur um eine Eindeutigkeitsprüfung für die Kombination aus *kMerkmal* und *cWert* ergänzt, da sonst bei mehrfach vorkommenden gleichen Werten immer das erste Merkmal zugewiesen wurde.



Code:
ALTER PROCEDURE CustomWorkflows.spMerkmalSetzen
    @kArtikel INT,
    @cMerkmal Parameter_spMerkmaleSetzen_Merkmal,
    @cWert Parameter_spMerkmaleSetzen_Wert
AS
BEGIN
    DECLARE @MerkmalID INT;
    DECLARE @WertID INT;

    -- Prüfung: Eindeutigkeit von cMerkmal sicherstellen
    IF (SELECT COUNT(*) FROM [eazybusiness].[dbo].[tMerkmalSprache] WHERE cName = @cMerkmal) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Merkmal-ID für den angegebenen Merkmal-Namen gefunden.', 16, 1);
        RETURN;
    END

    -- Merkmal-ID ermitteln
    SELECT @MerkmalID = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal;

    -- Prüfung: Eindeutigkeit der Kombination von kMerkmal und cWert sicherstellen
    IF (SELECT COUNT(*)
        FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
        JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
        WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Wert-ID für die Kombination aus Merkmal und Wert gefunden.', 16, 1);
        RETURN;
    END

    -- Wert-ID anhand der Kombination von kMerkmal und cWert ermitteln
    SELECT @WertID = mw.kMerkmalWert
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
    JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
    WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID;

    -- Einfügen der Werte in die Tabelle tArtikelMerkmal
    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalID, @WertID, @kArtikel);
END;


Code:
CREATE PROCEDURE CustomWorkflows.spMerkmalSetzen
    @kArtikel INT,
    @cMerkmal Parameter_spMerkmaleSetzen_Merkmal,
    @cWert Parameter_spMerkmaleSetzen_Wert
AS
BEGIN
    DECLARE @MerkmalID INT;
    DECLARE @WertID INT;

    -- Prüfung: Eindeutigkeit von cMerkmal sicherstellen
    IF (SELECT COUNT(*) FROM [eazybusiness].[dbo].[tMerkmalSprache] WHERE cName = @cMerkmal) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Merkmal-ID für den angegebenen Merkmal-Namen gefunden.', 16, 1);
        RETURN;
    END

    -- Merkmal-ID ermitteln
    SELECT @MerkmalID = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal;

    -- Prüfung: Eindeutigkeit der Kombination von kMerkmal und cWert sicherstellen
    IF (SELECT COUNT(*)
        FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
        JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
        WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Wert-ID für die Kombination aus Merkmal und Wert gefunden.', 16, 1);
        RETURN;
    END

    -- Wert-ID anhand der Kombination von kMerkmal und cWert ermitteln
    SELECT @WertID = mw.kMerkmalWert
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
    JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
    WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID;

    -- Einfügen der Werte in die Tabelle tArtikelMerkmal
    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalID, @WertID, @kArtikel);
END;
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Lev1ath4n

Lev1ath4n

Neues Mitglied
5. November 2024
6
2
Vielen Dank für deinen Beitrag. Ich habe die Prozedur um eine Eindeutigkeitsprüfung für die Kombination aus *kMerkmal* und *cWert* ergänzt, da sonst bei mehrfach vorkommenden gleichen Werten immer das erste Merkmal zugewiesen wurde.



Code:
ALTER PROCEDURE CustomWorkflows.spMerkmalSetzen
    @kArtikel INT,
    @cMerkmal Parameter_spMerkmaleSetzen_Merkmal,
    @cWert Parameter_spMerkmaleSetzen_Wert
AS
BEGIN
    DECLARE @MerkmalID INT;
    DECLARE @WertID INT;

    -- Prüfung: Eindeutigkeit von cMerkmal sicherstellen
    IF (SELECT COUNT(*) FROM [eazybusiness].[dbo].[tMerkmalSprache] WHERE cName = @cMerkmal) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Merkmal-ID für den angegebenen Merkmal-Namen gefunden.', 16, 1);
        RETURN;
    END

    -- Merkmal-ID ermitteln
    SELECT @MerkmalID = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal;

    -- Prüfung: Eindeutigkeit der Kombination von kMerkmal und cWert sicherstellen
    IF (SELECT COUNT(*)
        FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
        JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
        WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Wert-ID für die Kombination aus Merkmal und Wert gefunden.', 16, 1);
        RETURN;
    END

    -- Wert-ID anhand der Kombination von kMerkmal und cWert ermitteln
    SELECT @WertID = mw.kMerkmalWert
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
    JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
    WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID;

    -- Einfügen der Werte in die Tabelle tArtikelMerkmal
    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalID, @WertID, @kArtikel);
END;


Code:
CREATE PROCEDURE CustomWorkflows.spMerkmalSetzen
    @kArtikel INT,
    @cMerkmal Parameter_spMerkmaleSetzen_Merkmal,
    @cWert Parameter_spMerkmaleSetzen_Wert
AS
BEGIN
    DECLARE @MerkmalID INT;
    DECLARE @WertID INT;

    -- Prüfung: Eindeutigkeit von cMerkmal sicherstellen
    IF (SELECT COUNT(*) FROM [eazybusiness].[dbo].[tMerkmalSprache] WHERE cName = @cMerkmal) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Merkmal-ID für den angegebenen Merkmal-Namen gefunden.', 16, 1);
        RETURN;
    END

    -- Merkmal-ID ermitteln
    SELECT @MerkmalID = [kMerkmal]
    FROM [eazybusiness].[dbo].[tMerkmalSprache]
    WHERE cName = @cMerkmal;

    -- Prüfung: Eindeutigkeit der Kombination von kMerkmal und cWert sicherstellen
    IF (SELECT COUNT(*)
        FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
        JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
        WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID) <> 1
    BEGIN
        RAISERROR ('Mehr als eine oder keine passende Wert-ID für die Kombination aus Merkmal und Wert gefunden.', 16, 1);
        RETURN;
    END

    -- Wert-ID anhand der Kombination von kMerkmal und cWert ermitteln
    SELECT @WertID = mw.kMerkmalWert
    FROM [eazybusiness].[dbo].[tMerkmalWertSprache] AS mw
    JOIN [eazybusiness].[dbo].[tMerkmalWert] AS m ON mw.kMerkmalWert = m.kMerkmalWert
    WHERE mw.cWert = @cWert AND m.kMerkmal = @MerkmalID;

    -- Einfügen der Werte in die Tabelle tArtikelMerkmal
    INSERT INTO dbo.tArtikelMerkmal (kMerkmal, kMerkmalWert, kArtikel)
    VALUES (@MerkmalID, @WertID, @kArtikel);
END;
Oh vielen Dank für die Verbesserung/Erweiterung meiner Prozedur. Da ich nicht so viel mit SQL am Hut habe war ich schon froh es überhaupt funktionabel hinzubekommen. So hätte ich das niemals hinbekommen, deswegen nochmal vielen Dank dafür!