XL013 – Komunikaty definiowalne

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.

Uwaga
Zdefiniowany komunikat nie daje możliwości określenia ważności (severity) wyzwolonego komunikatu. System Comarch ERP XL wyświetla komunikaty o ważności nie mniejszej niż 16.

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.
Komunikat spowodowany wyzwoleniem triggera CDN.ZmianaNazwyTowaru

Czy ten artykuł był pomocny?