ABAP

ABAP (Advanced Business Application Programming, původně Allgemeiner Berichts-Aufbereitungs-Prozessor) je vyšší programovací jazyk vytvořený německou softwarovou společností SAP SE. pro vývoj jejich aplikací. Je extrahován ze základních výpočetních jazyků Java, C, C++ a Python. V současné době je vedle Javy zvolen jako jazyk pro programování aplikačního serveru SAP NetWeaver, který je součástí platformy SAP NetWeaver pro vytváření podnikových aplikací.

Historie 
ABAP je jedním z mnoha aplikačně specifických jazyků čtvrté generace (4GL), které byly poprvé vyvinuty v 80. letech. Původně to byl reportovací jazyk pro SAP R / 2, což představovalo platformu, která umožnila velkým korporacím vytvářet mainframové obchodní aplikace pro správu materiálů a finanční a manažerské účetnictví. ABAP vytváří integraci mezi nezávislým softwarem.

ABAP tvoří abstrakci mezi obchodními aplikacemi, operačním systémem a databází. Tím je zajištěno, že aplikace nezávisí přímo na konkrétním serveru nebo databázové platformě a lze je snadno přenést z jedné platformy na druhou.

 70. léta 20. století: Vznikl makro assembler pro generování reportů v systémech R/2. Název byl z „Allgemeiner Berichts-Aufbereitungs Prozessor“.
 80. léta: ABAP se vyvinul do podoby interpretačního jazyka pro aplikace v R/2. Umožňoval programovat tzv. dialogově řízené transakce.
 Začátek 90. let: V systému R/3 byl uveden jako „programovací jazyk 4. generace“ pod názvem ABAP/4, „Advanced Business Application Programming“. Od této doby jsou aplikace pro produkty mySAP.com psány v ABAP/4. Pouze systémové jádro je psáno v programovacím jazyku C.
 Kolem roku 2000: začala nová etapa ve vývoji jazyka. Bylo provedeno objektové rozšíření jazyka – tzv. ABAP Objects.
 Od roku 2003 je možno používat i jazyk Java pro vývoj aplikací mySAP.com.

Typy programů ABAP 
Podobně jako jiné programovací jazyky je i ABAP buď spustitelná jednotka nebo knihovna, která poskytuje opakovaně použitelný kód jiným programům a není samostatně spustitelná.

Programy ABAP se skládají z jednotlivých příkazů. První slovo v příkazu se nazývá klíčové slovo ABAP. Každý příkaz končí tečkou a jednotlivé příkazy lze jakkoliv odsazovat. Slova musí být vždy oddělena alespoň jednou mezerou. U klíčových slov, dodatků a operandů běhové prostředí ABAP nerozlišuje mezi velkými a malými písmeny.

Příkazy mohou přesahovat jeden řádek. V jednom řádku je možné mít několik příkazů (i když se to nedoporučuje). Řádky, které začínají hvězdičkou (*) v prvním sloupci, jsou řádky komentářů a jsou ignorovány. Dvojité uvozovky (") označují, že zbytek řádku je komentář. Kód v ABAP je citlivý na mezery.

Na rozdíl od jazyků jako C/C++ nebo Java, které definují omezenou sadu příkazů specifickou pro vybraný jazyk a poskytují většinu funkcí prostřednictvím knihoven, obsahuje jazyk ABAP rozsáhlé množství předdefinovaných příkazů.

Spustitelné programy 
ABAP rozlišuje dva typy spustitelných programů:

 Reporty
 Skupiny modulů (Program ABAP, který normálně obsahuje dynpra a dialogové moduly, a je spuštěn pomocí transakčních kódů.)

Reporty se řídí relativně jednoduchým programovacím modelem, kdy uživatel volitelně zadává několik parametrů (např. výběr přes podmnožinu dat) a program poté pomocí určených vstupních parametrů vytvoří report ve formě interaktivního seznamu. Reporty lze navrhnout také k modifikaci dat. Jedná se o tzv. „seznamově orientovanou“ podobu výstupu.

Skupiny modulů definují složitější vzory interakce uživatelů pomocí kolekce obrazovek. Termín „obrazovka“ označuje skutečný obraz, který uživatel vidí. Každá obrazovka má také „logiku toku“, která odkazuje na kód ABAP implicitně vyvolaný obrazovkami, který je rozdělen na část „PBO“ (proces před výstupem) a „PAI“ (proces po vstupu). V dokumentaci SAP se termín „dynpro“ (dynamický program) skládá z kombinace obrazovky a logiky toku, jež obsahují i pole dynpra.

Nepustitelné programy 
Nespustitelné programy jsou:

 Include moduly
 Množina subrutin
 Funkční skupiny
 Třídy objektů
 Rozhraní
 Skupiny typů

Include modul je zahrnut v době generování do volající jednotky. Často se používá k rozdělení velkých programů.
Množina subrutin obsahuje podprogramy ABAP (bloky kódu s uzavřené příkazy FORM / ENDFORM a vyvolávané pomocí PERFORM).
Funkční skupiny jsou knihovny samostatných funkčních modulů (uzavřené příkazy FUNCTION / ENDFUNCTION a vyvolané funkcí CALL FUNCTION).
Třídy a rozhraní objektů jsou podobné třídám a rozhraním v programovacím jazyce Java. Třídy definují sady metod a atributů. Rozhraní obsahují „prázdné“ definice metod, pro které musí každá třída implementující rozhraní poskytnout explicitní kód.
Skupiny typů určují kolekce datových typů a konstant.

Integrované datové typy jsou:

Běhové prostředí ABAP 
Všechny programy ABAP jsou umístěny v databázi SAP. Nejsou uloženy v samostatných externích souborech, jako jsou programy v Javě nebo C++. V databázi existuje veškerý kód ABAP ve dvou formách: zdrojový kód, který lze prohlížet a upravovat pomocí nástrojů ABAP Workbench a generovaný kód, binární reprezentace, která je srovnatelná s bajtovým kódem Java.

Systém SAP 
Všechna data SAPu a veškerý software SAPu běží v kontextu systému SAP. Systém se skládá z centrální relační databáze a jedné nebo více aplikací („instancí“), které přistupují k datům a programům v této databázi.

Instalace webového aplikačního serveru se obvykle skládá ze tří systémů: pro vývoj, pro testování a zajištění kvality a pro produkci. Můžeme se setkat s více systémy, přesto jsou tři nejběžnější konfigurací. Programy ABAP jsou vytvářeny a procházejí prvním testováním právě ve vývojovém systému. Poté jsou distribuovány do ostatních instancí. Tyto akce probíhají pod kontrolou systému Change and Transport System (CTS), který je zodpovědný za řízení souběžnosti (např. brání dvěma vývojářům ve změně stejného kódu současně), správu verzí a nasazení programů do produkčního systému.

Online přístup k aplikačním serverům ABAP lze provádět prostřednictvím proprietárního grafického rozhraní, které se nazývá „SAP GUI“, nebo přes webový prohlížeč.

Transakce 
Transakce v terminologii SAP je provedení programu. Normální způsob provedení kódu v systému SAP je zadáním kódu transakce (např. VA01 je kód transakce pro vytvoření prodejní objednávky). Transakce lze volat prostřednictvím systému definovaných nebo uživatelsky specifických nabídek založených na rolích. Lze je také spustit zadáním kódu transakce přímo do příkazového pole, které je k dispozici na každé obrazovce SAP. Transakce lze také vyvolat programově pomocí příkazů CALL TRANSACTION a LEAVE TO TRANSACTION. Obecný pojem transakce se v terminologii SAP nazývá Logická jednotka práce (LUW). Krátkou formou transakčního kódu je T-kód.

Vývojové prostředí 
V ABAP existují dva možné způsoby vývoje. Jejich dostupnost závisí na verzi systému ABAP.

ABAP Workbench 
ABAP Workbench je součástí systému ABAP a je přístupný přes SAP GUI. Obsahuje různé nástroje pro úpravy programů.

 ABAP Editor pro psaní a úpravy reportů, modulů, množin subrutin, includů a množin podprogramů (transakce SE38).
 ABAP Dictionary pro zpracování definic databázových tabulek a načítání globálních typů (transakce SE11).
 Menu Painter pro návrh uživatelského rozhraní (lišta nabídek, standardní panel nástrojů, panel nástrojů aplikace, přiřazení funkčních kláves) (transakce SE41).
 Screen Painter pro navrhování obrazovek a logiku toku (transakce SE51).
 Function Builder pro funkční moduly (transakce SE37).
 Class Builder pro ABAP třídy objektů a rozhraní (transakce SE24).

Object Navigator (transakce SE80) poskytuje jediné integrované rozhraní do těchto různých nástrojů.

Vývojové nástroje ABAP 
Vývojové nástroje ABAP, formálně označovány jako „ABAP v Eclipse“, jsou sada pluginů pro platformu Eclipse pro vývoj v ABAP. ABAP vývojář si musí nainstalovat požadované nástroje na svůj počítač a pracovat lokálně, zatímco se provádí nepřetržitá synchronizace s back-endem.

Slovník ABAP 
Slovník ABAP (ABAP Dictionary) obsahuje všechna metadata o datech v systému SAP. Úzce souvisí s ABAP Workbench v tom, že jakýkoli odkaz na data (tabulka, view nebo datový typ) bude získán ze slovníku. Vývojáři používají transakce slovníku ABAP (přímo nebo prostřednictvím navigátoru objektů SE80 uvnitř ABAP Workbench) k zobrazení a údržbě těchto metadat.

Při změně objektu slovníku bude program, který odkazuje na změněný objekt, automaticky odkazovat na novou verzi při příštím spuštění programu. Není nutné překompilovat programy odkazující na změněné objekty slovníku.

Nejdůležitější typy slovníkových objektů:

 Tabulky
 Indexy
 Views
 Struktury
 Domény
 Pomoc s vyhledáváním (nástupci nyní zastaralých „identifikačních kódů“)
 Uzamykatelné objekty

Interní tabulky 
Interní tabulky jsou důležitým znakem jazyka ABAP. Interní tabulka je definována podobně jako vektor struktur v C++ nebo vektor objektů v Javě. Hlavní rozdíl v těchto jazycích spočívá v tom, že ABAP poskytuje kolekci příkazů pro snadný přístup a manipulaci s obsahem interních tabulek. ABAP nepodporuje pole. Jediný způsob, jak definovat víceprvkový datový objekt, je použít interní tabulku.

Interní tabulky jsou způsob, jak ukládat proměnné datové sady pevné struktury do pracovní paměti ABAP, a poskytovat funkce dynamických polí. Data se ukládají po řádcích, kde každý řádek má stejnou strukturu.

Vlastnosti 
 silně i slabě typový zároveň
 má vestavěnou podporu pro SQL (OpenSQL přímo v syntaxi jazyka)

Ukázka 

Ukázka definice, implementování a použití jednoduché lokální třídy (Local class) v reportu/programu.
Modifikovaný kód ze SAP Help Classes - Introductory Example.

*---------------------------------------------------------------------*
* CLASS lcl_counter DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_counter DEFINITION.

  PUBLIC SECTION.
    METHODS: set_value IMPORTING value(i_value) TYPE i,
             add_value IMPORTING value(i_increment) TYPE i OPTIONAL,
             get_value RETURNING value(e_value) TYPE i.

  PRIVATE SECTION.
    DATA l_count TYPE i.

ENDCLASS. "lcl_counter DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_counter IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_counter IMPLEMENTATION.

  METHOD set_value.
    l_count = i_value.
  ENDMETHOD.                    "set_value

  METHOD add_value.
    IF i_increment > 0.
      ADD i_increment TO l_count.
    ENDIF.
  ENDMETHOD.                    "add_value

  METHOD get_value.
    e_value = l_count.
  ENDMETHOD.                    "get_value

ENDCLASS. "lcl_counter IMPLEMENTATION
*---------------------------------------------------------------------*
* Here starts actual report
DATA g_number TYPE i VALUE 5.
DATA gref_cnt TYPE REF TO lcl_counter.

START-OF-SELECTION.

  CREATE OBJECT gref_cnt.

  gref_cnt->set_value( g_number ).       " 5
  gref_cnt->add_value( 10 ).             " +10
  g_number = gref_cnt->get_value( ).     " 15

  WRITE g_number.

Reference

Externí odkazy 
 Using ABAP
 ABAP Training Materials

Literatura 
Keller, Horst ; Krüger, Sascha, ABAP Objects, Addison-Wesley, 2002, .

Programovací jazyky