Joby w ABAPie

Witajcie w kolejnej części z cyklu nauki ABAPa. Tym razem poruszymy sobie temat JOBów, czyli programów które działają w tle, i mogą być uruchamiane cyklicznie, bez ingerencji użytkownika.

W czym to może mi pomóc ?

Generalnie Job (process), to nic innego jak program który jest uruchomiony w tle. Różnica między zwykłym uruchomieniem, a takim które zadziała w postaci procesu jest taka, że proces uruchamia się bez udziału użytkownika. Nasza rola ogranicza się tylko do określenia pory uruchomienia i wybrania wariantu jeżeli jest to potrzebne. Program który jest uruchamiany w postaci procesu nie będzie też w stanie wykonać operacji związanej z ekranem użytkownika, więc jeśli potrzebujesz w trakcie jego działania dostać jakieś dane z zewnątrz to musisz np. odczytać je z jakiejś tabeli bądź wykorzystać workflow.

Przykład

Kod i tabela są zawarte również w repozytorium: https://github.com/pawelwiejkut/blog_abap_jobs , więc możesz skopiować to używając ABAPGita jeżeli nie chcesz programować samemu

Zróbmy więc sobie w DDIC przykładową tabelkę która zawiera tylko dwie kolumny:

Z biznesowego punktu widzenia możemy sobie założyć że program ma na celu wpisywanie co minute jednakowej temperatury do naszej tabeli. Jego kod będzie więc wyglądać następująco:

Ok, tabela i program już istnieją – czas więc na przygotowanie joba.

1. Przechodzimy do transakcji se38 i tworzymy variant dla naszego programu. Variant to nic innego jak zapis parametrów wejściowych naszego programu.

2. Wybieramy Program->Execute -> Background. Wyszukujemy interesujący nas variant i ustawiamy nazwę joba oraz datę i godzinę jego wykonania. Na końcu ustawiamy jak często ma się uruchomić.

3. Przechodzimy w końcu do transakcji sm37, która służy do zarządzania Jobami. Zobaczymy czy nasz będzie widoczny i poprawnie ustawiony:

Job jest w statusie released, co oznacza że jeszcze się nie uruchomił. W Job start conditions widać też kiedy to nastąpi. Po chwili Jobów powinno być już znacznie więcej:

Te które są w statusie „Finished” skończyły już swoją pracę, a działanie programu zakończyło się bez błędów. Sprawdźmy więc tabelkę i zobaczmy czy faktycznie tak jest:

Mój pierwszy wpis zrobiłem testowo uruchamiając program poza Jobem. Jeżeli spojrzycie na czasy uruchomienia zaznaczonych wierszy to zauważycie że każdy nowy wpis do tabeli wpada co 1 min (35,36,37,38,39,40). Można więc dojść do wniosku że program działa poprawnie.

Jaki program kryje się pod jobem ?

Właściwym byłoby teraz zadanie pytania jaki program tak właściwie kryje się pod jobem ? Możemy to sprawdzić w sm37:

Logi

Możemy też odczytywać zapisane podczas działania programu logi. Z ABAPowego punktu widzenia będzie to przechwycony statement 'MESSAGE’.

Wyrzucenie Joba ze schedulingu

Jeżeli chcemy kompletnie anulować uruchamianie Joba, musimy zaznaczyć go i kliknąć na ikonę śmietnika. Ikona stop, przerwie zaś bieżące uruchomienie i zadziała tylko i wyłącznie gdy proces będzie w statusie „Active”.

Bardziej skomplikowane procesy

Bardziej skomplikowane procesy możecie uruchamiać przy wykorzystaniu transakcji SM36. Da się tam również skonfigurować proces tak aby zawierał kilka programów uruchamiających się po sobie. WIęcej informacji na ten temat znajdziecie tutaj:

https://www.guru99.com/background-job-processing.html

https://www.tutorialscampus.com/sap-basis/scheduling-background-job.htm

Na co zwracać uwagę?

Jeżeli będziecie schedulować joba to pamiętajcie żeby robić to na innym użytkowniku niż wasz – najlepiej na jakimś technicznym. Jest to ważne ponieważ jeżeli użytkownik wygaśnie to job nie wykona się ponownie.

Jeżeli chodzi o podstawy pracy z Jobami to na tyle 🙂 Mam nadzieję że teraz temat jest dla was bardziej jasny. Jeżeli artykuł Ci się podobał, zapraszam do obserwowania mnie na instagramie, i zapisania się na newsletter.

Sprawdź też

SAP NPL 7.52 SP04 don’t start

This time I will show you how to fix the issue with your SAP ABAP …