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.
Definiowanie komunikatu w triggerze
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.
Znaczniki określające priorytet komunikatu
Znacznikami określającymi priorytet komunikatu są:
- #CDN_INFO/#
- #CDN_BLAD/#
- #CDN_BLADK/#
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.
Znaczniki określające treść komunikatu
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:
- #CDN_1= – ogólna treść komunikatu
- #CDN_2= – zakładka Przyczyna
- #CDN_3= – zakładka Remedium
Znacznikiem kończącym treść danej części komunikatu są znaki /#.
Przykłady
Poniżej przedstawiono przykładowe wywołanie funkcji RAISERROR() z definiowanym komunikatem:
- RAISERROR(‘#CDN_INFO/# #CDN_1=Test aktualizacji kontrahenta/# #CDN_2=Przyczyną jest trigger/# #CDN_3=Wyłącz trigger/#’,16,1)
- RAISERROR(‘#CDN_BLAD/# #CDN_1=Test aktualizacji kontrahenta/# #CDN_2=Przyczyną jest trigger/# #CDN_3=Wyłącz trigger/#’,16,1)
- RAISERROR(‘#CDN_BLADK/# #CDN_1=Test aktualizacji kontrahenta/# #CDN_2=Przyczyną jest trigger/# #CDN_3=Wyłącz trigger/#’,16,1)
Przykład triggera ze zdefiniowanym 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:
- Zakładka Przyczyna: Nie masz uprawnień do wykonania tej operacji.
- Zakładka Remedium: Skontaktuj się z Twoim administratorem.
- Zakładka Zaawansowane: pełna treść komunikatu.