Niestety trik z COMMIT TRAN po RAISERROR u mnie nie zadziałał. Poniżej kod z triggera. Proces wygląda następująco.
Tworzymy ZS a z niego ZZ (do bufora).
Podczas podnoszenia na ekran (lub próbie zatwierdzenia bezpośrednio z listy) ZZ trigger ma sprawdzić czy na elementach ZZ są towary których EAN nie zaczyna się od znaku "5" jeśli
towar jest danej marki lub producenta.
Jeśli tak, to ma poinformować oraz podać indeks elementu (ów).
Komunikat się pojawia, informacje są prawdziwe ale niestety już nic z dokumentem nie da się zrobić, prawie wszystkie butony na ZZ są nieaktywne.
Można wejść w element ale tutaj też niż nie można zmienić. Po naciśnięciu anuluj i ponownej próbie podniesienia na ekran ZZ dostaję komunikat, że dany dokument jest modyfikowany
, jest tylko do podglądu. Na bieżąco podglądając ZamNag rekord nic nie dostaje.
Kod: Zaznacz cały
ALTER TRIGGER CDN.ORD_EanZZ
ON CDN.ZamNag
AFTER INSERT,UPDATE
AS
SET NOCOUNT ON
DECLARE @StanPrzed int = (select ZaN_Aktywny from deleted)
DECLARE @StanPo int = (select ZaN_Aktywny from inserted)
DECLARE @poz varchar(50)
SET @poz = (SELECT TOP 1 STUFF((select ', ' + convert( varchar(10), ZaE_GIDLp) as [text()]
FROM inserted as i JOIN CDN.ZamElem ON ZaE_GIDNumer = i.ZaN_GIDNumer AND ZaE_GIDTyp = i.ZaN_GIDTyp
JOIN CDN.TwrKarty ON ZaE_TwrTyp=Twr_GIDTyp AND ZaE_TwrNumer=Twr_GIDNumer
WHERE (Twr_PrdNumer = 437 OR Twr_MarkaId = 958) AND Twr_Ean NOT LIKE '5%' FOR xml path ('')), 1, 1, '') as poz)
BEGIN
IF @StanPrzed = 0 AND @StanPo > 0
AND EXISTS (SELECT * FROM inserted as i JOIN CDN.ZamZamLinki ON i.ZaN_GIDTyp=ZZL_ZZGidTyp and i.ZaN_GIDNumer=ZZL_ZZGidNumer) AND @poz IS NOT NULL
BEGIN
RAISERROR( '#CDN_INFO/# #CDN_1=Nieprawidłowy EAN. Sprawdź pozycje: %s ./#', 16,1,@poz)
COMMIT TRAN
RETURN
END
END
GO