Mario Rogulj
Autor:
Mario Rogulj

ABAP developer

ABAP - novotarije

ABAP je programski jezik uveden od strane SAP-a i korišten isključivo za razvoj SAP modula i SAP programa. Od važnijih osobina istaknuo bih sljedeće: sintaksu je iznimno jednostavno savladati, literatura nije zastarjela, kod je čitljiv, a debugger intuitivan. Ipak, mučila me nemogućnost postizanja elegancije. Obzirom da sam radio u drugim programskim jezicima/alatima (C++, Java, Matlab) navikao sam da rješavanje nekih kompliciranih problema, uz malo mašte, može biti napisano u dvije-tri linije (karikiram, naravno). Od toga sam se morao brzo odviknuti. Umjesto da tipkam po starinski, naredbu po naredbu, trošio sam puno vremena na smišljanje elegantnog rješenja. Naravno, lako je zavoljeti ABAP-ov način rada. Po mom mišljenju, jednostavnost je prečesto shvaćana kao loša osobina.

Da ne bi sve stalo na ovome pobrinuo se SAP; ABAP je krenuo u modernizaciju, sintaksom se približava modernijim alatima. Dodane funkcionalnosti poboljšale su debuggiranje, uvođenjem novih naredbi te prilagodbom kompajlera ubrzano je unošenjekoda, čime je donekle povećana mogućnost prethodno navedenih elegantnih rješenja. Međutim, zbog novijih zahvata gubi se dio prethodno spomenute jednostavnosti i čitljivosti koda. Pokazat ću nekoliko promjena i navesti mjesto za daljnje istraživanje ove teme, a vi sami odlučite sviđa li vam se smjer u kojem jezik ide.

Kako su olakšali debugiranje? 

ABAP debugger jedan je od najvažnijih alata za programiranje, održavanje programa i rješavanje problema u SAP-u. Njegove funkcionalnosti pokrivaju sve što jednom programeru može zatrebati. Verzijom 7.02 dodatno je poboljšan uvođenjem uvjetnog dinamičkog breakpointa.

Ponekad je prilikom debuggiranja potrebno „skočiti“ negdje na sredinu ili kraj petlje što može biti dugotrajno i zamorno, pogotovo ako je to potrebno ponoviti više puta. Moguće rješenje bilo bi privremeno ubaciti nešto poput ovoga:

if sum '6'.
  
BREAK-POINT.
ENDIF.

Obzirom da se izbjegava svaka, čak i privremena, izmjena standardnih SAP programa, niti su izmjene na testnom sustavu uvijek moguće, uvjetni breakpoint je rješenje problema: 

Ovako je sigurno da će debugger stati točno na iteraciji (ili iteracijama) koja nam treba za analizu.

Kako je višestruko olakšano pisanje koda

Autocomplete

Autocomplete nije novost u svijetu programiranja. Ipak, u ABAP je uveden tek prije nekoliko godina. Korištenjem kombinacije tipki Ctrl+Space pojavit će se izbor naredbi i olakšati život svim SAP programerima.

Dijeljenje prozora za unos

U nedostatku boljeg komentara: nevjerojatno praktično!

Podjelom prozora za unos koda mogu postojati 2 prozora u jednom, oba istovremeno otvorena za izmjene. Igranjem s razdjelnikom na vrhu vertikalnog scroll-a može se dobiti: 

U gornjem prozoru deklaracije varijabli, u donjem funkcija koju pokušavamo natipkati, bez otvaranja novog prozora.

Kako su smanjili ukupan broj linija i skratili izraze

Deklariranje varijabli unutar izraza
Ključna riječ , korištena za deklariranje varijable, sad se može koristiti i kao operator deklariranja unutar izraza. Na primjer:

Prije:                                                                                                   Sada:
DATA broj type i value 3.                DATA(broj) = 3.
Kompajler odabere tip varijable tekst prema izrazu sa desne strane.

Prije:                                                                                                   Sada:
DATA wa like LINE OF itab.               LOOP AT itab INTO DATA(wa).   
LOOP AT 
itab INTO wa.                      ...
  
...                                    ENDLOOP.
ENDLOOP.
Kompajler odabere tip varijable wa prema izrazu koji dolazi prije njega.

Napomena: deklariranje varijabli unutar izraza neće raditi za višestruke izraze, kao npr. DATA(g_from1) = DATA(g_from) = p_from.

Nadalje, od verzije 7.40, SP08, moguće je i u Open SQL naredbe uključiti operator DATA:

SELECT carrname AS namecarrid AS id
       
FROM   scarr
       
INTO TABLE @DATA(result).

Za više detalja pogledajte link

Operator konstruktor

Od verzije 7.40 u ABAP su ubačeni i tzv. operator-konstruktori. Funkcionalno gledano ni oni ne donose ništa novo, ali značajno olakšavaju programiranje.

Operator NEW

  • kreira data objekt  NEW dtype(value)

Prije:                                                                                                   Sada:

FIELD-SYMBOLS <fS> TYPE data.                  DATA(dref) = NEW i555 ).
DATA dref TYPE REF TO data.
CREATE DATA dref TYPE i.
ASSIGN dref->TO <fs>.
<fs> 
555.

  • instancu klase … NEW classp1 a1 p2 a2 … )

Prije:                                                                                                   Sada:

DATA oref TYPE REF TO class.                   DATA(oref) = NEW class( ... ).
CREATE OBJECT oref EXPORTING ...

  • ili jedno ili drugo … NEW #… ) ovisno o tome kojeg je tipa operand

     

Operator VALUE

  • dodjeljuje inicijalnu vrijednost data objektu

o   Struktura
- umjesto dodavanja jedne po jedne vrijednosti elementima strukture u zasebnim linijama koda, sad to izgleda ovako:
struct VALUE t_structcol1 1  col2-col1 col2-col2 ). 

o   Tablica
§  Isto kao struktura

Operator REF

  • Kreira referencu na objekt

Operator konverzije

Konverzija iz jednog tipa varijable u drugi u ABAP-u je, naravno, podržana. Prije je postojala kao zasebna naredba koja se nije mogla kombinirati sa drugim izrazima. Operator CONV doskočio je tom problemu i sada je moguće napisati nešto poput ovoga:
DATA(xstr) = cl_abap_codepage=>convert_tosource CONV stringtext ) ).

Ovakav izraz bi, tipkan starim načinom, zauzeo barem 4 linije koda.

Kako su poboljšali rad s internim tablicama

Verzija 7.02 dopušta definiranje interne tablice sa sekundarnim ključevima dok verzija 7.40 dopušta definiranje i interne tablice sa praznim ključem.
Što znači „prazan ključ“?
U starijim verzijama ABAP-a bilo je moguće definirati internu tablicu bez eksplicitnog definiranja ključa čime bi ABAP dodijelio neki predefinirani ključ, što je bilo pomalo nezgodno jer je odabir polja za ključ bio skoro pa slučajan. Prazan ključ znači da definirana tablica nema ključ po kojem bi se moglo automatski sortirati.
Od verzije 7.40 uveden je izraz ... WITH EMPTY KEY.
Sintaksa izgleda slično ovome: TYPES itab TYPE STANDARD TABLE OF string WITH EMPTY KEY.

Od sada pa nadalje definiranje standardnih tablica mora imati ili definiran ključ ili prazan ključ, predefinirani ključ više se ne koristi.

Čitanje iz tablica

Izrazi za čitanje iz internih tablica postali su puno intuitivniji i kraći.

Prije:
READ TABLE itab INDEX idx INTO wa.
Sada je jednostavno:
wa itab[ idx ].

Slično: READ TABLE itab WITH TABLE KEY key COMPONENTS col1 = ... col2 = ...  INTO wa. Postalo je: wa itab[ KEY key COMPONENTS col1 = ... col2 = ... ].

Puno detaljnije o ovoj temi možete pronaći na ovom linku.

Za kraj

Svi koji se, motivirani ovim tekstom, odluče zabaviti sa novotarijama i posluže mojim izvorom informacija, vidjet će da toga ima puno više nego što je ovdje navedeno. Previše je toga da bi stalo u ovaj post. Nadam se da će ovaj tekst poslužiti kao koristan uvod u daljnje proučavanje ABAP-a.
Smjer u kojem ABAP ide je, nadam se, jasan. Po svemu sudeći postaje sve sličniji JAVI i ostalim (modernijim) programskim jezicima.
Stara sintaksa se zasad ne odbacuje i to me iznimno veseli. Jedva čekam naići na novije programe koji će biti šarolika kombinacija starog i novog, ovisno o želji/mašti/iskustvu programera. 

Popularne teme
.NET ABAP ADFS Agile Always On Anemic Model Angular Azure Backbone BI BI projekti Bootstrap building people business inteligence Business Intelligence Change Chrome CI CITCON Claims compile Continuous Delivery continuous deployment Continuous Integration CSR d3js data data visualization Data visualization alati DDD dekompozicija dependency injection dinamička forma dinamički parametri dinamički query distribuirani razvoj Domain-Driven design DOP društvena odgovornost edge-based video analytics Eliminating waste enkapsulacija enterprise razvoj softvera ERP ETL Excel FIORI Frontend game Geopackage GPKG GIS Git Groovy heat map HICCUPS Hichert HTML IBCS interoperability invision IoT IPSO izvještavanje java java lambde benchmark JavaFX Javascript Jazz Build Engine JBE Jenkins jquery jqueryui jsfiddle JVM Kaizen Kanban KING ICT Kingovci Knockout kvaliteta leadership Lean M language Management Maven Metodologija microservices Microsoft mobile Mobility mockups moć monday game NetWeaver network nodejs OGC OKR open source optimizacija organizacija organizacijska struktura OutOfMemoryError outsourcing paginacija Performance performanse PERT PMI podatkovni skup pouzdanost Power BI Power Map Power Pivot Power Query Power View pretraga proces procjena Product Owner programming proizvod Project manager projektni plan radar Rational Team Concert razvoj tima Release resize responsive charts REST retrospektiva Rich-Domain model Roko Roić rolling wave planning RTC SAP scale scatterplot chart Scrum scrum team scrum tim service boundaries single responsibility principle Single Sign-On smart metering SoapUI social responsibility softver Software software prototyping Software Testing Club Spring Boot SQL standard sustav videonadzora svg Team team building team development Team Foundation Server terminski plan Testing tim timesheet timovi Toggl.com touch transakcijski nadzor tražilica Uspjeh Visual Studio vodstvo vodstvo leadership moć društvena odgovornost DOP social responsibility CSR vođenje projekata WBS Web Zagreb STC

PRIJAVA NA NEWSLETTER

Najnovije novosti iz ICT svijeta