Ciekawostki o ABAP

Krótkie notatki o obiektach danych, Clean ABAP, nowoczesnej składni, a także o ekosystemie SAP.

Obiekt danych vs zmienna

W terminologii ABAP „obiekt danych” (data object) to pojęcie trochę szersze niż „zmienna”, ale w praktyce bardzo często używa się tego jak synonim.

Jak to rozróżnia dokumentacja?

  • Data object - każdy kawałek pamięci, w którym program trzyma dane:
    a) zmienne proste (DATA lv_num TYPE i.),
    b) struktury, tabele wewnętrzne, stałe (CONSTANTS), parametry PARAMETERS, SELECT-OPTIONS, pola ekranowe.
  • Zmienna - zwykle mówi się tak o data object, którego wartość może się zmieniać w trakcie działania programu (czyli nie stała, nie literał).

Czyli:

  • Każda „zmienna” w ABAP jest obiektem danych,
  • ale nie każdy obiekt danych nazywamy w potocznym języku zmienną (...).

ABAP BASICS

“Nowszy” ABAP

„Nowszy ABAP” to po prostu nowsze wersje języka (ABAP 7.40, 7.50, 7.52, 7.55, ABAP Cloud), w których SAP dodaje nowe słowa kluczowe, operatory (VALUE, NEW, FILTER, deklaracje inline itd.).​

Skąd biorą się „nowinki” w ABAP?

  • SAP rozwija ABAP Platform razem z kolejnymi wersjami NetWeaver/SAP S/4HANA i ABAP Cloud, każda wersja wnosi nowe elementy języka oraz „modern ABAP syntax”.​

  • Zmiany są projektowane przez zespół języka ABAP w SAP, często inspirowane światem Javy lub C# oraz zasadami Clean Code (bardziej zwięzły, wyrażeniowy kod).​

Gdzie te nowinki są oficjalnie publikowane?

  1. SAP Help Portal - ABAP Keyword Documentation
  • Sekcje o Constructor Expressions, VALUE operator, Inline Declarations opisują nowe konstrukcje z 7.40+.​

  • Tam też pojawia się informacja „as of release …”, czyli od której wersji ABAP dany feature jest dostępny.​

  1. SAP/styleguides - Clean ABAP
  • Oficjalny styleguide SAP (GitHub), pokazuje, jak używać nowej składni, np. VALUE, NEW, DATA (…) itp.​
  1. Blogi i artykuły o „ABAP 7.4+ / modern ABAP”
  • Przykładowo: „ABAP 7.4 and Beyond - Constructor Operators”, „Modern ABAP - VALUE Operator” - z konkretnymi przykładami nowej składni.​​
  1. SAP Learning / SAP Community
  • Learning Journeys typu Acquire core ABAP skills i blogi „ABAP modern code conventions” pokazują, jakie konstrukcje uważa się dziś za „nowoczesne”.​
MODERN ABAP

Historia i nazwa języka ABAP

ABAP ma już ponad 40 lat powstał jako wewnętrzny język raportów SAP na platformie mainframe R/2 i z czasem stał się fundamentem całego ekosystemu ERP tej firmy.​

Początki: raporty na R/2

  • Pierwsze implementacje ABAP datuje się na okolice 1980 roku, służył wtedy głównie do tworzenia raportów finansowych i logistycznych w systemie SAP R/2 działającym na mainframe’ach.​

  • W tamtym okresie był klasycznym językiem 4GL do opisu zapytań i formatowania list - użytkownik biznesowy mógł zdefiniować, jakie dane chce zobaczyć, a ABAP generował zestawienia bez konieczności pisania niskopoziomowego kodu.​

Znaczenie pierwotnej nazwy

  • Oryginalne rozwinięcie skrótu brzmiało „Allgemeiner Berichts-Aufbereitungs-Prozessor” co dosłownie oznaczało „ogólny procesor przygotowania raportów”.

  • Nazwa podkreślała, że ABAP był „procesorem” raportów zasilanych danymi z modułów finansowych i materiałowych, a nie ogólnym językiem aplikacyjnym, jakim stał się później.​

Przemiana w język aplikacyjny

  • Na początku lat 90-tych SAP zdecydował się oprzeć nowy system klient-serwer R/3 w całości na ABAP/4. Od tego momentu język przestał być tylko dodatkiem raportowym, a stał się pełnoprawnym językiem budowy transakcji, ekranów i logiki biznesowej.​

  • Wraz z tą zmianą firma zaczęła komunikować go jako „Advanced Business Application Programming”, akcentując rolę w tworzeniu zaawansowanych aplikacji biznesowych zamiast samych raportów.​

Inspiracje i ewolucja składni

  • Składnia „starego” ABAP-u była silnie inspirowana COBOL‑em: długie słowa kluczowe, nacisk na przetwarzanie rekordów i pracy z plikami/listami, co odzwierciedlało realia systemów mainframe.​

  • Z czasem, wraz z wprowadzeniem ABAP Objects i NetWeaver, język ewoluował w stronę nowoczesnego, obiektowego środowiska, utrzymując jednocześnie kompatybilność wsteczną z kodem tworzonym od lat 80-tych.​

Miejsce ABAP dziś

  • Dziś ABAP pozostaje jednym z dwóch głównych języków back-endowych SAP (obok Javy) i jest używany zarówno w klasycznym SAP ERP, jak i w nowszych systemach, takich jak SAP S/4HANA.​

  • Mimo upływu ponad czterech dekad duża część „DNA” systemów SAP - od R/2 i R/3 po współczesne rozwiązania - wciąż jest zakodowana właśnie w ABAP‑ie, co czyni go jednym z najdłużej rozwijanych języków biznesowych na świecie

ABAP Turns 40 | SAP News Center

ABAP HISTORY

Nowoczesna składnia 7.40+

ABAP 7.40+ mocno zmienił sposób pisania kodu - z „proceduralnego raportu” w stronę zwięzłego, wyrażeniowego stylu, bliższego nowoczesnym językom wysokiego poziomu. Te dodatki realnie upraszczają pracę z danymi i poprawiają czytelność.

Deklaracje inline i nowy DATA(…)

  • Deklaracje inline pozwalają zadeklarować zmienną dokładnie tam, gdzie jest używana, np. DATA(lv_total) = ..., zamiast osobnego bloku DATA: lv_total TYPE ....
  • Dzięki temu kod staje się bardziej lokalny i czytelny - zmienne widać w kontekście, w którym powstają, a sekcja globalnych deklaracji na górze programu przestaje rosnąć w nieskończoność.

Operatory VALUE i NEW

  • VALUE pozwala tworzyć całe struktury i tabele w jednym wyrażeniu, np. zainicjalizować strukturę z konkretnymi polami albo zbudować tabelę wewnętrzną z kilkoma wierszami „na raz”, bez dodatkowych APPEND.
  • NEW upraszcza tworzenie obiektów - zamiast CREATE OBJECT lo_ref TYPE ... można napisać DATA(lo_ref) = NEW zcl_klasa( param = ... ), co skraca kod i ujednolica go z innymi operatorami.

REDUCE, COND, SWITCH - funkcyjny styl w ABAP‑ie

  • REDUCE wprowadza wzorzec „fold/reduce” znany z języków funkcyjnych: możesz w jednej konstrukcji zsumować wartości z tabeli, policzyć minimum/maksimum czy zbudować wynik na podstawie akumulatora.
  • COND i SWITCH pozwalają zapisać logikę warunkową jako wyrażenie, a nie blok IF ... ENDIF – idealnie nadają się do mapowania wartości statusów, prostych transformacji czy wyboru domyślnego wariantu.

FILTER i praca z tabelami wewnętrznymi

  • FILTER umożliwia deklaratywne filtrowanie tabel wewnętrznych - zamiast ręcznie iterować po tabeli i przepisywać pasujące wiersze, opisujesz po prostu warunek selekcji.
  • Dzięki temu wiele konstrukcji z podwójną pętlą i zagnieżdżonymi IF można zamienić na pojedyncze wyrażenie, co ułatwia utrzymanie kodu i ogranicza ryzyko błędów związanych z modyfikacją tabeli w pętli.

Spójny „nowy ABAP”

  • W połączeniu z wyrażeniowymi operacjami na tabelach (FOR, FILTER, REDUCE) i deklaracjami inline, język zyskuje spójny, „nowy ABAP” - kod jest krótszy, bardziej opisowy i łatwiejszy do testowania jednostkowego.
  • Organizacje, które przyjmują ten styl razem z wytycznymi Clean ABAP, często raportują znaczące uproszczenie klas serwisowych i raportów, przy zachowaniu pełnej kompatybilności z istniejącym „starym” kodem.

ABAP 7.40 Quick Reference - SAP Community
ABAP Syntax 7.40+: New Features and Enhancements
ABAP 7.4 And Beyond [4] : Constructor Operators – Discovering ABAP

MODERN ABAP