Kontynuując wątek gniazd rozszerzeń w WAPRO Aukcje, dzisiaj przedstawię przykład zastosowania gniazda rozszerzeń a konkretniej zajmę się gniazdem „Po ręcznym dodaniu kontrahenta”. Załóżmy przypadek kiedy klient zgłosił się do nas i chcielibyśmy go dodać poprzez pobranie informacji z Allegro.
Przyjmijmy, że w WAPRO Mag w kartotece kontrahenta dodaliśmy pole dodatkowe typu lista rozwijalna nieedytowana z typem jak klient został dodany. Dopuszczalne wartości to Ręcznie|Ręcznie aukcje|Allegro. Pole dodajemy w Administrator | Pola dodatkowe.
Następnie potrzebujemy włączyć i oprogramować gniazdo. Samo gniazdo aktywujemy w WAPRO Aukcje w menu Aukcje | Gniazda rozszerzeń.
Następnie z tej listy potrzebujemy wziąć nazwę funkcji czyli de facto nazwę procedury składowanej, którą wyedytujemy celem oprogramowania gniazda.
W tym przypadku nazwa to AUK_ALL_SRC_KontrPoDodaniuKontrahenta – schemat nazwy składa się z następujących członów:
AUK_ – wyróżnia na liście procedur w bazie wszystkie obiekty z systemu WAPRO Aukcje
ALL_ – wyróżnia system, którego dotyczy procedura czyli Allegro
SRC_ – wyrożnia procedurę, że jest to procedura systemowa SOURCE czyli do gniazd jako źródłowa
KontrPoDodaniuKontrahenta – oznacza operację w danym kontekście Kontr (kontrahent), miejsce Po (po dodaniu) DodaniuKontrahenta (Operacja)
Musimy teraz wykorzystać narzędzie do pisania kodu SQL czyli np. Microsoft SQL Server Management Studio można je pobrać ze strony producenta.
Po zalogowaniu się do MgmStudio i wybraniu odpowiedniej bazy w drzewku szukamy kolejno Serwer | Databases | Baza | Programmability | Stored procedures po odnalezieniu interesującej nas procedury (można z menu prawego przycisku myszy ustawić filtr) wybieramy na procedurze prawy przycisk myszy i opcję Script Stored Procedure as Drop and Create To | New Query Window
pojawi się w oknie obok definicja procedury.
Analizujemy od sekcji Create procedure czyli miejsca gdzie procedura jest tworzona.
Poniżej znajduje się deklaracja zmiennych, które będą odczytywane z XML, który przekazywany jest do aplikacji w parametrze o nazwie @parametry.
Zastosowanie jednego parametru typu XML pozwala bez problemu aktualizować wersję bez konieczności nadpisywania podstawowej wersji procedury (przy aktualizacji nie są one aktualizowane kolejnymi wersjami jeśli istnieją w bazie i potencjalnie mogły być użyte przez programistę).
Po odczytaniu parametrów z XML do zmiennych w domyślnej wersji jest tylko zalogowanie danych do tabeli AUK_ALL_LOG informacji jakie parametry zostały przekazane do procedury. Pozwala to w każdej wersji szybko sprawdzić jakie są nowe parametry (z definicji procedury to nie wynika bo jak pisałem nie jest ona aktualizowana).
Aby teraz nasze gniazdo zadziałało i coś zrobiło musimy dopisać linijkę, która zmieni nasze pole dodatkowe.
Musimy po odczytaniu zmiennych a przed zalogowaniem do tabeli wstawić następujące 2 linijki kodu:
if @idKontrahenta > 0
update KONTRAHENT set POLE1 = 'Ręcznie aukcje' where ID_KONTRAHENTA = @idKontrahenta
Teraz nasza procedura ma postać:
Wystarczy uruchomić kod poleceniem Execute lub klawiszem F5. Jeśli serwer SQL nie zgłosi błędu możemy sprawdzić działanie kodu.
W aukcjach dodam ręcznie kontrahenta w tym celu w module Kontrahenci robimy dodaj, podajemy login i podstawowe dane klienta. Po pobraniu danych z Allegro (jeśli login jest prawidłowy pobierany jest techniczny identyfikator kontrahenta Allegro i kojarzony z kontrahentem WAPRO Mag). Po wyświetleniu tego kontrahenta w WAPRO Mag i analizie pola dodatkowe widać efekt działania w formie wklejenia w pole wartości Ręcznie aukcje.
Tak oto zostało stworzone jedno z najszybszych i prostszych gniazd ale obrazujące na czym to polega. Co dostarcza aplikacja do procedury i jak z tego skorzystać.
Jeśli masz jakieś pytania pisz w komentarzach.