Komunikaty definiowalne
W Comarch ERP XL istnieje możliwość dodawania definiowalnych komunikatów wyświetlanych przez aplikację pochodzących z triggerów w bazie MSSQL.
Dotychczas komunikaty wyświetlane na skutek działania triggerów były błędami krytycznymi. W większości przypadków komunikat zwracany przez trigger znajdował się na zakładce Przyczyna. Powodowało to spore utrudnienie w odnalezieniu właściwego komunikatu z serwera MSSQL. Często intencją autora triggera było wyświetlenie innego komunikatu niż błąd krytyczny oraz umieszczenie odpowiedniej treści w głównym oknie komunikatu.
Definiowalne komunikaty umożliwiają określenie priorytetu oraz zdefiniowanie treści komunikatu, a także informacji wyświetlanej na zakładkach Przyczyna oraz Remedium.
Komunikaty w triggerze jest wyświetlany za pomocą funkcji RAISERROR(). Funkcja ta generuje komunikat oraz błąd na podstawie zadanych parametrów. Błąd ten jest przechwytywany przez system, który wyświetla odpowiedni komunikat, zawierający w swej treści komunikat błędu wygenerowany przez serwer MSSQL. W dotychczasowym działaniu użytkownik nie miał żadnego wpływu na typ oraz treść wyświetlanego komunikatu. Definiowanie komunikatu będzie polegało na umieszczeniu w jego treści, konkretnie w wywołaniu funkcji RAISERROR(), odpowiednich znaczników określających priorytet komunikatu (informacja, błąd, błąd krytyczny), znaczników określających treść komunikatu oraz treść zakładki Przyczyna i Remedium. Znacznikami określającymi priorytet komunikatu są: Znaczniki te mogą być umieszczone w dowolnym miejscu w treści komunikatu. Dla zwiększenia czytelności kodu proponujemy umieszczanie tych znaczników na początku treści. Komunikat podzielony jest na treść właściwą oraz zakładki Przyczyna i Remedium. Definiowana treść powinna zaczynać się od jednego z poniższych znaczników: Znacznikiem kończącym treść danej części komunikatu są znaki /#. Poniżej przedstawiono przykładowe wywołanie funkcji RAISERROR() z definiowanym komunikatem: Poniżej został przedstawiony prosty trigger blokujacy zmianę nazwy towaru, ze zdefiniowanym komunikatem. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER CDN.ZmianaNazwyTowaru ON CDN.TwrKarty FOR UPDATE AS BEGIN SET NOCOUNT ON IF UPDATE(Twr_Nazwa) BEGIN IF EXISTS (SELECT * FROM deleted WHERE deleted.Twr_Nazwa<>”) BEGIN RAISERROR(‘#CDN_BLAD/# #CDN_1=Próba zmiany nazwy indeksu towarowego!/# #CDN_2=Nie masz uprawnień do wykonania tej operacji./# #CDN_3=Skontaktuj się z Twoim administratorem./#’,16,1) ROLLBACK TRAN RETURN END END END SET NOCOUNT OFF GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO Jako informacja ogólna pojawi się komunikat: Próba zmiany nazwy indeksu towarowego! W informacjach szczegółowych będą widniały następujące treści:
Definiowanie komunikatu w triggerze
Znaczniki określające priorytet komunikatu
Znaczniki określające treść komunikatu
Przykłady
Przykład triggera ze zdefiniowanym komunikatem