# Usługa harmonogramu zadań i wywołanie zadania z poziomu transakcji WMS

> Jak usługa harmonogramu uruchamia integrację z Subiektem GT i jak wywołać zadanie z JavaScriptu transakcji WMS z parametrami, także to wyłączone z harmonogramu.

Adres strony: https://magazyn.softwarestudio.com.pl/usluga-harmonogramu-zadan-i-wywolanie-zadania-z-transakcji/

---

W opisywanym wdrożeniu zadania integracji z Subiektem GT wykonuje usługa harmonogramu zadań działająca poza serwerem aplikacji. Zadanie bywa zdefiniowane na jednym serwerze, a wykonywane na drugim. Dokumentacja opisuje też wzorzec wywołania zadania z transakcji WMS na żądanie, z parametrami.
Opisujemy, jak w jednym wdrożeniu [Studio WMS.net](/wms/) zadania integracji z Subiektem GT wykonuje osobna usługa, a nie sam WMS. Nazywamy ją usługą harmonogramu zadań SoftwareStudio, a w tym wdrożeniu nosi nazwę SSSERVICE. Tekst jest napisany dla działu IT i kierownika projektu i dotyczy projektu klienta, a nie standardowego ustawienia produktu.

Usługa uruchamia tory integracji, które opisuje artykuł o [trzech niezależnych torach integracji](https://system.wms.net.pl/integracja-wms-z-subiekt-gt-trzy-niezalezne-tory/). Stan ich kolejek pomaga ocenić artykuł o [diagnostyce kolejki integracji w T-SQL](https://sql.server.net.pl/sql-server/diagnostyka-kolejki-integracji-wms-z-subiektem-w-t-sql/). Inne wdrożenie, w którym formularz wywołuje zadanie usługi bez czekania na wynik, opisuje artykuł o [zadaniu uruchamianym z formularza](/zadanie-integracyjne-uruchamiane-z-formularza-wms/).

## Harmonogram poza serwerem aplikacji

Usługa harmonogramu zadań działa poza serwerem aplikacji. To ona uruchamia integrację z Subiektem GT. WMS przekazuje dane do Subiekta wyłącznie przez kolejki w bazie danych, a wybrane zadanie może dodatkowo uruchomić na żądanie. Konfiguracja zadań mieszka po stronie usługi, a nie w bazie WMS. Inne metody wymiany danych z systemem ERP zestawia artykuł o [integracji ERP z WMS](/integracja-erp-z-wms-webapi/).

Tabela zestawia wybrane zadania z dokumentu wdrożenia, a nie pełny wykaz. Trzy z nich mają ustawiony harmonogram, a czwarte jest na co dzień wyłączone z harmonogramu.

| Zadanie | Harmonogram | Do czego służy |
| --- | --- | --- |
| Pobieranie dokumentów magazynowych z Subiekta | Aktywne | Dokumenty z Subiekta trafiają do WMS |
| Dodawanie i aktualizacja towarów | Aktywne | Towary są dodawane i aktualizowane w Subiekcie |
| Pobieranie wszystkich stanów prosto z bazy Subiekta | Codziennie wieczorem | Odczyt wszystkich stanów magazynowych bezpośrednio z bazy Subiekta |
| Stan jednego produktu w jednym magazynie | Wyłączone, na żądanie | Pobranie pojedynczej informacji o stanie jednego produktu |

Pobieranie stanów odbywa się prosto z bazy Subiekta, z pominięciem Sfery, czyli interfejsu programistycznego Subiekta GT. Według dokumentacji wdrożenia czas pobierania stanów zmniejszono z 25-30 do 5-10 sekund, a komunikaty o braku wolnych stanowisk przy odczycie ustały.

## Zadanie zdefiniowane na jednym serwerze, wykonywane na drugim

Zadanie może być zdefiniowane na jednym serwerze, a wykonywane zdalnie na drugim, na którym działa proces łączący z Subiektem. Wykonanie zdalne wskazuje trzy parametry: adres usługi, jej port i serwer wykonawczy. Ich wartości w tekście pomijamy.

Skutek widać na liście zadań lokalnych usługi na serwerze wykonawczym. Pokazuje ona wyłącznie zadania systemowe, takie jak sprzątanie logów i historii. Zadania integracji na tej liście nie ma, bo jest zdefiniowane po drugiej stronie.

Definicję zadania widać więc po stronie serwera, na którym je zdefiniowano, a wykonanie po stronie serwera wykonawczego. Osoba, która zagląda tylko do jednej z tych maszyn, zobaczy połowę obrazu.

> Brak zadania integracji na liście zadań lokalnych serwera wykonawczego nie świadczy o awarii. Zadanie jest zdefiniowane po drugiej stronie.

## Gdzie szukać historii i logów

Tabele usługi w bazie klienta, czyli trzy tabele zadań, historii i logów, są puste. Historii i logów szuka się więc na maszynie, która wykonuje zadania.

Dla działu IT wynika z tego kolejność działań przy zgłoszeniu. Najpierw ustalamy, na której maszynie zadanie jest wykonywane, potem sprawdzamy stan usługi z przeglądarki, a na końcu konfigurację zadania. Puste tabele usługi w bazie klienta nie są objawem awarii.

Usługa udostępnia interfejs WWW API. Pozwala on sprawdzić stan usługi i wyświetlić listę zadań lokalnych, a także uruchomić zadanie zdalnie i pobrać jego logi. Stan samej usługi sprawdza się z przeglądarki.

Odpowiedź ze statusem Ok oznacza tylko, że usługa żyje, a nie że zadanie integracji jest włączone. Tabela zestawia trzy objawy zgłaszane przy diagnozie.

| Objaw | Znaczenie |
| --- | --- |
| Brak zadania integracji na liście zadań lokalnych serwera wykonawczego | Stan normalny. Zadanie jest zdefiniowane po drugiej stronie. |
| Odpowiedź usługi ze statusem Ok | Usługa żyje. Nie oznacza to, że zadanie integracji jest włączone. |
| Komunikat Unknown web method | Starsza wersja systemu bez tej metody. Potrzebna jest wymiana wersji. |

## Wywołanie zadania z transakcji

Dokumentacja integracji opisuje wywołanie zadania z JavaScriptu transakcji WMS jako wzorzec. Nie twierdzimy, że opisywany klient z niego korzysta. Wzorzec obejmuje także zadania, które na co dzień są wyłączone z harmonogramu i służą do pobrania pojedynczej informacji na żądanie. Wywołanie przyjmuje cztery parametry.

- Identyfikator zadania - wskazuje zadanie w usłudze.
- Tryb - synchroniczny albo asynchroniczny.
- Zgoda na zadanie nieaktywne - pozwala uruchomić zadanie wyłączone z harmonogramu.
- Słownik parametrów - wartości przekazywane zadaniu.

Komunikat „Unknown web method” przy wywołaniu zadania z parametrami oznacza starszą wersję systemu bez tej metody. Rozwiązaniem jest wymiana wersji, a nie zmiana konfiguracji.

## Zadanie na żądanie z parametrami

Przykładem jest stan jednego produktu w jednym magazynie. Parametrami są identyfikator produktu i magazyn. Tryb synchroniczny jest tu istotny, bo wywołanie czeka na wykonanie zadania, żeby transakcja mogła zaraz potem odczytać pobrane dane.

Przy trybie asynchronicznym transakcja dostałaby odpowiedź, zanim zadanie zapisze dane, więc odczyt mógłby trafić na stan sprzed wywołania. Przykład z fikcyjnymi danymi, zgodny ze wzorcem: transakcja wywołuje zadanie dla produktu o identyfikatorze 1001 i magazynu MAG-A w trybie synchronicznym, a po jego zakończeniu odczytuje pobrane dane.

Wywołanie na żądanie różni się od zadania z harmonogramu momentem uruchomienia. Harmonogram uruchamia zadanie o ustalonej porze, a transakcja prosi o jedną informację w chwili, gdy jest potrzebna.

## Dlaczego brak zmiany w wierszu jest prawidłowy

Zadanie liczy skrót pobranej informacji. Przy zgodności skrótu nie rusza wiersza, także daty ostatniej modyfikacji. Powtórne uruchomienie dla niezmienionego stanu nie zostawia więc śladu w danych, i jest to zachowanie prawidłowe.

Brak zmiany daty w wierszu nie znaczy, że zadanie się nie wykonało. Przy sprawdzaniu, czy zadanie zadziałało, patrzymy dlatego na logi na serwerze wykonawczym, a nie na datę w wierszu.

Dla projektu oznacza to, że odbiór zadania opisujemy przez logi i wynik wywołania, a nie przez zmianę wiersza w danych.

## Pytania do zadania na etapie analizy

Przed wdrożeniem usługi harmonogramu zadajemy cztery pytania. To pytania, a nie fakty o opisywanym wdrożeniu. Odpowiedzi zapisuje się w analizie, której zakres opisuje artykuł o [analizie przedwdrożeniowej WMS](/analiza-przedwdrozeniowa-wms-co-zawiera/).

- Gdzie zdefiniowano zadanie - na którym serwerze i który serwer je wykonuje.
- Które zadania działają na żądanie - czy mają być wyłączone z harmonogramu.
- Czy transakcja czeka na wynik - tryb synchroniczny czy asynchroniczny.
- Gdzie szukamy logów - na której maszynie i kto ma do niej dostęp.

## Czego ta strona nie opisuje

Strona nie podaje adresów, portów, nazw serwerów ani identyfikatorów zadań. Nie pokazujemy też kodu wywołania. Nie twierdzimy, że zadania integracji w konkretnym magazynie działają albo stoją: czy zadanie jest włączone, sprawdza się w konfiguracji usługi, a nie w odpowiedzi o jej stanie.

Błędy wysyłki dokumentów i ich ponowienia opisuje artykuł o [klasyfikacji błędów w T-SQL](https://sql.server.net.pl/sql-server/klasyfikacja-bledow-i-ponowienia-wysylki-dokumentow-w-t-sql/), a samą wysyłkę dokumentów artykuł o [eksporcie dokumentów magazynowych do Subiekta GT](/eksport-dokumentow-magazynowych-do-subiekta-gt/).

## Pytania i odpowiedzi o usłudze harmonogramu zadań

## Słownik pojęć o usłudze harmonogramu zadań

Terminy używane przez dział IT i kierownika projektu, gdy zadania integracji uruchamia usługa harmonogramu, a transakcja WMS wywołuje zadanie na żądanie.
