Artykuł skierowany jest przede wszystkim do osób, które nie miały dotychczas styczności z językiem ABAP i chcą poznać jego podstawy. Jeżeli mieliście okazję poznać składnię ABAP, niniejszy tekst pozwoli Wam utrwalić wiedzę i zaczerpnąć ciekawe informacje. Zapraszamy do lektury.

 

ABAP - Co? Dlaczego? Od kogo?

ABAP to język programowania stworzony przez firmę SAP, która jest liderem na światowym runku w dziedzinie oprogramowania służącego zarządzaniu przedsiębiorstwami, takimi jak ERP, CRM, czy też BI. ABAP spełnia trzy najbardziej popularne standardy programowania: obiektowy, strukturalny i imperatywny. Jedną z jego największych zalet jest to, że jest językiem czwartej generacji, przeznaczonym specjalnie do przetwarzania danych, ich analizy i raportowania. Dzięki temu, użyteczne raporty mogą powstawać szybko i przy użyciu niewielkiej ilości słów kluczowych. Jest to ważna funkcjonalność, ponieważ doświadczonych programistów ABAP jest mniej w porównaniu do liczby osób zajmujących się popularniejszymi językami np. C++ czy JAVA.

 

Ale jak to w ogóle wygląda?

Zacznijmy od prostego przykładu: program hello world może wyglądać w następujący sposób:

REPORT zhello.
WRITE: / 'Hello World'.

 

Łatwe, prawda? Dodatkowym atutem tego języka jest fakt, że wiele formularzy i raportów tworzy się przy użyciu gotowych komponentów. Przyspiesza to ich tworzenie, ponieważ programista nie musi zajmować się prawidłowym układem zawartości raportu, tylko wyświetla ją korzystając z prostego WRITE, odpowiedniej klasy i metody lub modułu funkcyjnego. W ten sposób wstawia dane do tabel, które użytkownik może sortować, eksportować lub wchodzić w pojedyncze rekordy, aby uzyskać większą ilość informacji.

Co więcej, wszystkie programy są przechowywane w bazie SAP, co umożliwia dostęp do nich z dowolnego miejsca poprzez SAP GUI.

Język ABAP ma wbudowane funkcjonalności odpowiadające typowym trzem warstwom (prezentacji, aplikacji i bazodanowe), z których korzysta się naturalnie i łatwo. Za to struktura warstwowa pojawia się, gdy chcemy skorzystać z ABAP WebDynpro, w celu stworzenia aplikacji webowej.
 

 

Przykłady i porównanie do innych języków. 

W tym akapicie przedstawimy kilka elementów składni języka ABAP i przyrównamy je do bardziej popularnych języków programowania.
 

Dla poniższego przykładu w języku ABAP:

           WRITE: zmienna, 'string'.
 

Jego odpowiednik w Java miałby następującą postać:

          System.out.println(zmienna + ' ' + 'string');
 

Interakcja programu z użytkownikiem odbywa się poprzez wprowadzanie danych na ekranie selekcji. Słowo kluczowe PARAMETERS tworzy takie pole, a także odpowiadającą mu zmienną w programie:

                PARAMETERS zmienna TYPE typ.
 

Dla porównania w języku Java pobieranie parametrów najczęściej odbywa się z użyciem klasy Scanner i wygląda następująco:

                Scanner sc = new Scanner(System.in);
                String var = sc.nextLine();

 

Scanner ma też wiele różnych opcji umożliwiających wczytywanie tylko liczb lub odczytywanie plików.

 

Tworzenie zmiennych i typów.

W języku ABAP istnieje kilka predefiniowanych typów, z których korzystamy przy deklarowaniu zmiennych. Najpopularniejszymi typami są:
 

Typ

Opis

I

Liczba całkowita.

F

Liczba zmiennoprzecinkowa, przybliża wartości przez co obliczenia mogą być niedokładne.

P

Liczba spakowana, o mniejszym rozmiarze fizycznym. Może przechowywać większe liczby niż pozostałe typy.

C

Char, jeśli podamy rozmiar będzie odpowiednikiem stringa, ale z określonym rozmiarem.

N

Typ numeryczny, zachowuje się jak char, ale przyjmuje tylko cyfry.

D

Data, przechowywana w formacie YYYYMMDD. Podstawowe działania arytmetyczne, czyli dodawanie i odejmowanie, na zmiennych tego typu są kalendarzowo poprawne.

T

Czas, przechowywany w formacie HHMMSS. Dodawanie i odejmowanie jest zegarowo poprawne.

X

Typ heksadecymalny (liczba zapisana w systemie szesnastkowym), można przetwarzać pojedyncze bity.

 

Typy I, F, D i T mają ustaloną długość, w pozostałych przypadkach należy podać, jak dużą chcemy mieć zmienną.

Dodatkowo istnieją typy złożone, którymi są tabele wewnętrzne i struktury. Zostały one opisane poniżej.

Aby zadeklarować typ lub zmienną wykonujemy poniższe polecenie:

                TYPES: typ(długość) TYPE predefiniowany_typ.
                TYPES: typ TYPE typ_słownikowy.

                TYPES: BEGIN OF struc_type,
                               " typy parametrów struktury
                END OF struc_type.

                DATA: var1 TYPE predefiniowany_typ.
                DATA: var2 TYPE typ_słownikowy.
                DATA: var3 TYPE struc_type.
                DATA: var4 LIKE zmienna.

 

Deklaracja zmiennych w języku Java dla porównania odbywa się w następujący sposób:

                typ nazwa;
                typ nazwa = wartość;

 

Najbliższym odpowiednikiem struktur w Javie są klasy, o których będzie mowa w późniejszej części artykułu.

 

Bardzo istotnym elementem języka ABAP są tabele wewnętrzne. Są to struktury, które składają się z tych samych elementów co zdefiniowane przez użytkownika tabele w bazie danych. Tabelę wewnętrzną możemy utworzyć na kilka sposobów:

                DATA itab1 LIKE tabela_z_bazy_danych.
               
DATA itab2 LIKE itab1.
                DATA itab3 TYPE TABLE OF struktura.
                DATA itab4 TYPE typ_tabeli.

W innych językach musielibyśmy tworzyć odpowiednie struktury lub klasy samodzielnie i wypełniać nimi tabele, wektory lub inne kontenery.

Kolejnym istotnym elementem każdego języka programowania są podprogramy i funkcje. Zaczynając od definicji ich wywołania:
 

                FORM nazwa USING zmienna CHANGING zmienna2 TABLES tabela.
                                ‘’ kod metody
                ENDFORM.

                PERFORM nazwa USING zmienna CHANGING zmienna2 TABLES tabela.
 

Kod funkcji zawiera się w modułach funkcyjnych, które to przynależą do grup funkcyjnych.

                FUNCTION nazwa
                               IMPORTING
                                               parametry
                               EXPORTING
                                               parametry
                               CHANGING
                                               parametry
                               TABLES
                                               tabele
                               EXCEPTIONS
                                               wyjątki.
                               "kod
                ENDFUNCTION.

                CALL FUNCTION nazwa
                               IMPORTING
                                               parametry
                               EXPORTING
                                               parametry
                               CHANGING
                                               parametry
                               TABLES
                                               tabele
                               EXCEPTIONS
                                               wyjątki.

Tworzymy moduły funkcyjne, gdy chcemy korzystać z kodu w więcej niż jednym programie.


Funkcja w języku Java miałaby następującą postać:

                typ nazwa(parametry)
                {
                               // kod
                }

 

ABAP posiada też elementy spotykane w innych językach programowania, takie jak pętle WHILE i DO, instrukcję warunkową IF i selektor CASE.

WHILE warunek.
‘’ kod
ENDWHILE.

DO int TIMES.
‘’ kod
ENDDO.

IF warunek.
‘’ kod
ELSEIF warunek.
‘’ kod
ELSE.
‘’ kod
ENDIF.

CASE zmienna.
WHEN wartość1.
WHEN wartość2.
WHEN OTHERS.
ENDCASE.

SELECT * FROM tabela INTO zmienna.
‘’ kod, zazwyczaj wpisanie zawartości zmiennej do tabeli wewnętrznej
ENDSELECT.

 

Ich odpowiedniki w języku Java wyglądają dość podobnie:

                while (warunek) {
                // kod
                }

                do {
                // kod
                 } while (warunek);

switch (zmienna) {
                       case wartość1: //kod
                                     break;
                       case wartość2: //kod
                                     break;
                       default: //kod
                                     break;
}

if (warunek) {
// kod
} else if (warunek2) {
// kod
} else {
// kod
}

 

Ważnym elementem dzisiejszych języków jest obiektowość. Możemy tworzyć klasy globalne w słowniku, jak i klasy lokalne pisząc ich definicję i implementację w kodzie raportu. Poniższy kod pokazuje składowe klasy i tworzenie obiektu:

CLASS klasa DEFINITION.
               
PRIVATE SECTION.
                                ‘’ kod
                PROTECTED SECTION.
                                ‘’ kod
                PUBLIC SECTION.
                                METHOD metoda IMPORTING zmienna TYPE typ.
                                CLASS-METHOD metoda_statyczna RETURNING zmienna TYPE typ.
ENDCLASS.
CLASS klasa IMPLEMENTATION.
                METHOD metoda.
                                ‘’ kod
                ENDMETHOD.
                METHOD metoda_statyczna.
                                ‘’ kod
                ENDMETHOD.
ENDCLASS.

CREATE OBJECT object TYPE REF TO klasa.
 

Deklaracja klas i tworzenie obiektów w języku Java odbywa się następująco:

                widoczność class nazwa_klasy {
                               widoczność zmienna;
                               widoczność metoda (parametry) {
                               //kod
                               }
                }

                nazwa_klasy nazwa_obiektu = new nazwa_klasy();

 

Definicja klasy w języku Java potrafi zająć mniej miejsca niż w języku ABAP, ale dzięki rozdzieleniu na definicję i implementację łatwiej zrozumieć kod ABAP. Zapis ten jest podobny do składni języka C++, gdzie definicje zawarte są w plikach .h, a implementacja w .cpp.

 

ABAP umożliwia pracę z użyciem tzw. field symboli, które można porównać do wskaźników istniejących w języku C. Na wstępie należy zadeklarować wykorzystywany field symbol używając poniższej składni:

                FIELD-SYMBOLS:  TYPE typ.
 

Krokiem następnym jest przypisanie na zmienną, którą ma wskazywać:

                ASSIGN zmienna2 to .
 

Po wykonaniu powyższych możemy korzystać z field symboli, jak ze zwykłej zmiennej. Przykładowo możemy wypisać ją na ekran:

                WRITE  .
 

W języku Java wszystkie zmienne są referencjami - Java nie posiada wskaźników. Z tego powodu, dla porównania, przedstawione zostaną wskaźniki z C. W przeciwieństwie do field symboli wskazują one adres do zmiennej, a nie na jej wartość. Deklarujemy wskaźnik podając jego typ:

                Typ* nazwa;
 

Przypisujemy adres zmiennej:

                wskaźnik = &zmienna;
 

Aby wypisać adres naszej zmiennej i jej wartość piszemy kolejno:

                printf("%x", wskaźnik);
                printf("%d",*wskaźnik);

 

Podczas tworzenia raportów pobierane są dane z bazy danych i tabel słownikowych. Wykorzystujemy do tego polecenia pisane w Open SQLu. Polecenia te są tłumaczone na odpowiedni SQL przez interfejs bazy danych. Oto kilka z dopuszczalnych słów kluczowych:

SELECT
INSERT
UPDATE
MODIFY
DELETE

 

Kolejną pomocną składową ABAP są pola systemowe. Są to zmienne, które należy  traktować, jako stałe ponieważ program sam je wypełnia w trakcie działania. Zawierają one wiele pomocnych informacji. Kilka najważniejszych pól zostało przedstawionych poniżej:
 

Pole systemowe

Opis

sy-subrc

Wartość zwrócona po wykonaniu polecenia ABAP, 0 gdy się powiodło i inna wartość w zależności od tego czego nie udało się wykonać

sy-index

Aktualny numer przebiegu pętli

sy-tabix

Aktualny indeks w tabeli, którą przeglądamy

sy-tfill

Aktualna liczba wierszy w tabeli

sy-dbcnt

Liczba przetworzonych wierszy w tabeli

sy-datum

Aktualna data (na serwerze)

sy-uzeit

Aktualna godzina (na serwerze)

sy-repid

Nazwa aktualnie działającego programu ABAP

 

Większość tych informacji możemy również uzyskać w innych językach programowania, ale często potrzebujemy do tego różnych bibliotek, które pozwalają wywołać odpowiednie funkcje.
 

 

Więcej zalet! 

Przejdźmy teraz do środowiska. Wszystkie narzędzia dostępne są z SAP GUI zwanego SAP Logon. Zapewnia nam ono między innymi ABAP Editor, w którym piszemy kod, a co za tym idzie dostępne są: podstawowe funkcjonalności, takie jak wyszukiwanie, podmiana znalezionych słów , numerowanie linii, kolorowanie składni oraz podobne. Dodatkowo, możemy korzystać z Preety Printer'a, który zgodnie z nałożonym przez użytkownika ustawieniami formatuje kod, tak aby stał się czytelniejszy.  Nie jest to jedyne przydatne narzędzie. Bardzo dobrze wykonany jest debugger. W porównaniu do debuggerów wykorzystywanych w wielu innych językach programowania, debugger SAP zapewnia większą czytelność i możliwość inspekcji kodu w trakcie działania programu. Wbudowane są też narzędzia pomagające w optymalizacji kodu. Jednym z nich jest Runtime Analysis, który po wybraniu programu do kontroli podaje nam czas w jakim wykonane zostały dane elementy naszego programu. Dzięki temu możemy szybko zobaczyć, że jakieś polecenie wykonuje nam się zbyt długo i możemy skorygować kod, aby działał optymalniej. Kolejnym przydatnym narzędziem jest Screen Painter, który umożliwia kontrolę nad tym, co znajduje się na poszczególnych ekranach podczas działania programu. Pozwala on na dodawanie obszarów, w których możemy umieszczać tabele z danymi, pól tekstowych, pól jedno- lub wielokrotnego wyboru i innych tego typu elementów. SAP Logon posiada też menu kontekstowe, które zmienia się w zależności od uruchomionego aktualnie narzędzia. Dzięki temu nie ma potrzeby zastanawiania się, gdzie w menu znajdują się potrzebne opcje, ponieważ wyświetlone zostają tylko te, z których aktualnie możemy korzystać.

Kolejnym ważną cechą języka ABAP jest fakt, że język ten nadal jest rozwijany przez firmę SAP. Wprowadzane są nowe wersje języka i rozwijane nowe technologie takie jak WebDynpro lub platforma HANA. WebDynpro umożliwia tworzenie aplikacji webowych, co w dzisiejszych czasach stanowi kluczowy aspekt dla tworzenia systemów informatycznych.

HANA jest to nowoczesna platforma służąca do przechowywania danych, charakteryzująca się przetwarzaniem ich w czasie rzeczywistym. Główną cechą odróżniającą ten system od innych rozwiązań oferowanych przez konkurencję, jest przetwarzanie danych w pamięci RAM. Dzięki temu dostęp do danych jest znacznie szybszy.

Dodatkowym atutem są oficjalne strony, fora i blogi SAP, które zawierają informacje o języku ABAP w jednym miejscu. Jest to lepsze rozwiązanie niż w innych językach programowania, przy których trzeba często szukać stron zawierających pytania o powody problemów lub o ich rozwiązania.

 

Jak zacząć?

Naukę języka ABAP można rozpocząć poprzez przygotowanie do międzynarodowych certyfikatów wydawanych przez firmę SAP. Materiały te przeprowadzają kursanta przez zagadnienia związane z językiem ABAP zaczynając od najbardziej podstawowych, a prowadząc do tych bardziej zaawansowanych. Materiał podzielony jest na działy, które opisują teorię w zrozumiały i przyjazny sposób, opierając teorię na przykładach. Każdy dział kończy się zadaniem praktycznym do wykonania na systemie szkoleniowym. Dostępne są również rozwiązania dla tych, którzy uczą się samodzielnie, tak aby mogli sprawdzić poprawność napisanego przez siebie kodu.

 

Podsumowanie.

ABAP jest językiem programowania systemu klasy ERP - SAP. Dzięki gotowym komponentom można szybko tworzyć własne programy z użyciem niewielkiej liczby słów kluczowych. Składnia ABAP jest trochę odmienna od popularniejszych języków programowania, ale nie jest aż tak inna, aby nie dało się do niej szybko przyzwyczaić. Wiele użytecznych narzędzi pozwala na szybsze znalezienie problemu, jeśli takie występują. Większość środowiska jest personalizowana i posiada menu kontekstowe, dzięki czemu nie trzeba zastanawiać się, gdzie znajdują się interesujące nas guziki oraz można szybko i skutecznie korzystać z menu w podobny sposób z każdego narzędzia. Pracując z systemami SAP należy pamiętać o certyfikatach, które można uzyskać poprzez podejście do egzaminów. Wszystkie materiały są udostępnione użytkownikom i pomagają rozwijać swoją wiedzę oraz doskonalić umiejętności.

 

Dodatkowe informacje:

·         Języki 4GL, Wikipedia

·         SAP Polska

·         Artykuł SAP HANA

·         https://help.sap.com/viewer/index

·         http://sapbrainsonline.com/

·         https://www.sapnuts.com/