Andrzej Stempnik

Andrzej Stempnik Kierownik IT, Nomet

Temat: Trigger - wyświetlający informację

Witam
Mam problem z wyświetleniem informacji w programie Impuls stojącym na Oracle. W jaki sposób w triggerze można wyświetlić okienko z komunikatem ? Chciałbym aby wyskakiwała informacja przed albo po insercie. Czyli aby przy określonym warunku pojawił się komunikat i jednocześnie wykonał się ten insert.
Paweł Pasztaleniec

Paweł Pasztaleniec Lead Consultant -
CGI

Temat: Trigger - wyświetlający informację

Witam,

Jeżeli wymagana jest interakcja interakcja z użytkownikiem, to: alert i show_alert
Jeżeli interakcja nie jest wymagana, to zwykły message.

Dokładniej mogę opisać jeżeli poznam więcej szczegółów.

Pozdrawiam
Paweł
Andrzej Stempnik

Andrzej Stempnik Kierownik IT, Nomet

Temat: Trigger - wyświetlający informację

Witam i dziękuję za odpowiedz ..

upraszczając temat chodzi mi o wyświetlenie informacji w triggerze w momencie dopisywania pozycji zamówienia

CREATE OR REPLACE TRIGGER AS_CTU_BIU
AFTER INSERT
ON BAZA_BPSC.CENY_TOWAROW_USLUG
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW

declare
begin
if :NEw.cena = 999 then ** wyświetl informację wpisałeś wysoką cenę **
end if;

end;

konto usunięte

Temat: Trigger - wyświetlający informację

Andrzej Stempnik:
begin
if :NEw.cena = 999 then ** wyświetl informację wpisałeś wysoką cenę **
end if;
end;

Nie wiem w jakiej technologii jest ten Impuls ... ale zazwyczaj robi się to tak, że "rzuca się wyjątek" ... raise_application_error() z kodem błędu z zakresu 20000-20999.

http://download.oracle.com/docs/cd/B19306_01/appdev.10...

Natomiast aplikacja (frontend) musi to obsłużyć we własnym zakresie.
Andrzej Stempnik

Andrzej Stempnik Kierownik IT, Nomet

Temat: Trigger - wyświetlający informację

Witam i dziękuję za odpowiedz..

tylko czy jeżeli .. "rzucę wyjątek" wykona się insert ?
bo zależy mi na tym aby pozycja się dopisała i jednocześnie pojawił się ten komunikat
Albert D.

Albert D. Software Developer

Temat: Trigger - wyświetlający informację

Rzucenie wyjatku w wyzwalaczu to dobre rozwiazanie-jako dodatkowe zabezpieczenie. Wedlug mnie najlepiej taka walidacje przede wszystkim zrobic w Impuls zeby niepotrzebnie nie probowac wprowadzac do bazy czegos co ma nie byc wprowadzone. Podejrzewam, ze ingerencja w kod tego programu bedzie niezbedna zeby taka informację wyświetlić.

Edit:
Nie wykona sie insert przy rzuceniu wyjatkiem w wyzwalaczu.
Chyba, ze bedzie to wyswalacz AFTER a nie BEFORE ale musisz uwazac
na inne zaleznosci, ktore dzieja sie pozniej, bo tak naprawde w ten sposob przerywasz wykonanie programu.
W tym przypadku najlepszym rozwiazaniem jest sprawdzenie warunku w Impuls i wyswietlenie komunikatu (jesli jest mozliwa ingerencja w kod).Andrzej C. edytował(a) ten post dnia 14.10.11 o godzinie 10:00
Andrzej Stempnik

Andrzej Stempnik Kierownik IT, Nomet

Temat: Trigger - wyświetlający informację

Witam i dziękuję za odpowiedz ..

niestety zależy mi na tym żeby wprowadzić do bazy te dane. Jeżeli z klientem mamy ustalone ceny na dłuższy okres a wzrosły ceny wytworzenia to mimo, że sprzedajemy ze stratą to musimy w tej cenie sprzedać. I właśnie dlatego w czasie wprowadzania zamówienia chciałbym mieć informację na temat sprzedaży poniżej ustalonej wartości. To nie ma być blokada wprowadzania takiej ceny a jedynie informacja dla handlowca żeby zwrócił na dany towar uwagę.
Igor Piotr I.

Igor Piotr I. IT manager/Senior
Oracle Developer

Temat: Trigger - wyświetlający informację

ehh kolega krzysztof napisał już że jest coś takiego

dbms_output.put_line('tekst');

to wyświetla komunikat nie zatrzymując aplikacji - ale ... komunikat nie pojawi się znikąd na pulpicie twojego komputera. trzeba go obsłużyć albo w tym twoim implus'ie albo jakiejś innej aplikacji .

inne łopatologiczne podejście -> jeżeli nie masz możliwosci zmiany kodu implusa

możesz zrobić taki myk w trigerze zrobić sobie inserta do jakieś tam tablicy
z komunikatami i w jakiś sposób to wyświetlać w pętli albo postawić formę (czy co kolwiek innego jave,C# an nawet php) co będzie cyklicznie odpytywać bazy co jakiś kwant czasu i walić komunikatem z twojej tablicy komunikatów.
Ale ... w ten sposób i tak nie uzyskasz interaktywności

niestety oba rozwiązania są żeby ich brzydko nie nazwać - męczeniem.Igor Piotr I. edytował(a) ten post dnia 14.10.11 o godzinie 15:06
Paweł Pasztaleniec

Paweł Pasztaleniec Lead Consultant -
CGI

Temat: Trigger - wyświetlający informację

Grupa dotyczy Oracle Forms, a pytanie jest stricte z zakresu bazy danych.
Moja pierwsza odpowiedź dotyczyła właśnie Formsów.

W bazie danych można jeszcze używać DBMS_ALERT ale to też wymaga zmian w aplikacji klienckiej i nie wiem czy znajduje zastosowanie w tym przypadku.

Pozdrawiam
Paweł

konto usunięte

Temat: Trigger - wyświetlający informację

Jedyny sposób interakcji z aplikacją (zakładam, że w Forms) z poziomu triggera to rzucanie wyjątku, ale oczywiście niesie to za sobą wiele różnych niepożądanych cech. W praktyce w ten sposób przerywa się działanie operacji.

Aby zrealizować proces proponowałbym wywołanie w triggerze zbudowanej przez siebie procedury która wykorzystywałaby pragma autonomuos_transaction i wykonywałaby insert do dodatkowej tablicy z informacjami związanymi z towarem. Potem na tej tablicy oparłbym jakiś raport i procedurę czyszczącą jeśli zbiera się tego dużo.
Zaletą tego rozwiązania jest to, że nie wymaga modyfikacji samej aplikacji, a autonomous_transaction zapewnia zapis i commit informacji w tabeli dodatkowej jednocześnie nie ingerując w transakcję podstawową aplikacji. Raport i operację czyszczenia można zrealizować w najwygodniejszej dla siebie technologii.Karol Kępka edytował(a) ten post dnia 21.10.11 o godzinie 00:08

konto usunięte

Temat: Trigger - wyświetlający informację

Karol Kępka:
Jedyny sposób interakcji z aplikacją (zakładam, że w Forms) z poziomu triggera to rzucanie wyjątku, ale oczywiście niesie to za sobą wiele różnych niepożądanych cech. W praktyce w ten sposób przerywa się działanie operacji.

Jest jeszcze DBMS_PIPE, ale wmaga trochę "skilla" do sformowania działającej aplikacji.

konto usunięte

Temat: Trigger - wyświetlający informację

Racja, zapomniałem o tym, ale być może dlatego, że kiedyś się tym bawiłem i walnąłem w kąt. dbms_pipe ma jakiś śmiesznie mały bufor i jak się nie będzie odpowiednio szybko odbierać, to raz dwa się zapycha i wykłada.

Ja osobiście wolę i stosuję logowanie do tablicy zewnętrznej i odczyt jakktokiedychce.



Wyślij zaproszenie do