Komunikat dla użytkownika z poziomu SQL ?

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

profimedia
Posty: 56
Rejestracja: 29 maja 2009, 12:20
Rola: Administrator CDN XL
Wersja: 10
Lokalizacja: Katowice
Kontakt:

Komunikat dla użytkownika z poziomu SQL ?

Post autor: profimedia »

Witam

Czy da się z poziomu bazy MS SQL wywołać komunikat dla użytkownika XL ?
Chciałem zrobić pewną weryfikację podczas zatwierdzania (wyjmowania z bufora) dokumentów PZ.
Najprościej chyba zrobić to triggerm sprawdzającym inserty do tabeli Dostawy (trigger ma porównywać czy w bazie nie ma już dostawy z identycznym polem dst_cecha) i wyświetlającym w razie spełnienia warunku komonikat. Ale jak ?

A może w samym CDN XL ta się to zrobić? Ale zaznaczam że select na bazie obejmie kilkadziesiat tys. rekordów więc żeby nie zawieszał sie GUI :/

Dziękuję za podpowiedzi ;)

xtomi
Posty: 408
Rejestracja: 16 lut 2010, 21:24
Rola: Administrator CDN XL
Wersja: 10

Re: Komunikat dla użytkownika z poziomu SQL ?

Post autor: xtomi »

Można to zrobić korzystając z funkcji RAISERROR()

Kod: Zaznacz cały

 RAISERROR('#CDN_INFO/##CDN_1=komunikat /##CDN_2=komunikat w szczegolach/#', 16, 1)

Widziałem gdzieś biuletyn Comarchu w którym ta funkcja była dokładniej opisana ale nie mogę sobie przypomnieć który to był:

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Komunikat dla użytkownika z poziomu SQL ?

Post autor: elmiq »

Skoro ma się to wykonywać przy zatwierdzaniu PZ to najrozsądniej będzie wywoływać Trigger dla zmiany pola Trn_Stan przy spełnionym warunku na GIDTyp PZ-tki. Tak jak napisał xtomi można użyć RAISERROR bez cofania transakcji - czyli informacja o błędzie, którego brak. Można też doczepić się Hydrą do zatwierdzanego PZ i w razie potrzeby wywalać MessageBox-a, ale z tym jest więcej pracy.
Mateusz Świerkosz

http://elmiq.blogspot.com/

marceynowa
Posty: 347
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Re: Komunikat dla użytkownika z poziomu SQL ?

Post autor: marceynowa »

stary temat, ale chciałbym do niego powrócić.

Zbudowałem trigger dla ZS (na zmianę stanu):

Kod: Zaznacz cały

ALTER TRIGGER [CDN].[ZmianaStanu]
   ON  [CDN].[ZamNag] 
   FOR UPDATE
AS
BEGIN
	
	SET NOCOUNT ON

	IF UPDATE(ZaN_Stan)
		RAISERROR('#CDN_INFO/##CDN_1=Zmiana stanu ZS /##CDN_2=Kliknij OK/#', 16, 1)
	
	SET NOCOUNT OFF
	
END
Utworzyłem zamówienie i próbuję za potwierdzić. Wyskakuje spodziewany komunikat, ale po kliknięciu na OK nic się nie dzieje. XL zatrzymał się w miejscu wywołania błędu i ani rusz dalej.
Co należy zrobić, aby po OK można kontynuować pracę?

Awatar użytkownika
viesiek1
Posty: 425
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Komunikat dla użytkownika z poziomu SQL ?

Post autor: viesiek1 »

W tym wątku masz dyskusję na ten temat: http://cdn.3lance.pl/viewtopic.php?f=9&t=2838

Najważniejszy jest wpis Mateusza:
W triggerze po RAISERROR, zamiast ROLLBACK TRAN, daj COMMIT TRAN - po czymś takim, XL wyświetli komunikat, a po jego zamknięciu kolejne naciśnięcie na "dyskietkę" w systemie bez problemu zapisze dokument.
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

Awatar użytkownika
czesiomisio
Posty: 14
Rejestracja: 15 cze 2015, 15:09
Rola: Użytkownik CDN XL
Wersja: 2016

Re: Komunikat dla użytkownika z poziomu SQL ?

Post autor: czesiomisio »

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

ODPOWIEDZ