Az ABAP támogatja a párhuzamosságot, de...
Amikor párhuzamos feldolgozásról és szállakról beszélünk, akkor az SAP körökben általában programok háttérben való indítását jelenti.
Azonban van egy másik módja is, programokon belül, több szálra felosztani egy adott funkcióelem futását.
Az ABAP nyelvben a párhuzamosság tulajdonképpen aszinkron funkcióelem hívást jelent.
Általában, amikor meghívunk egy funkcióelemet, akkor az a hívó programot megszakítja,
átadja az irányítást egy másik programnak - amely a funkcióelemet futtatja -
majd visszaadja az irányítást az eredeti programnak, ami folytatja működését.
Az aszinkron funkcióelem hívással az eredeti program futása nem szakad meg, hanem párhuzamosan egy új szálat indít el,
amely a funkcióelem futásának a végéig tart.
Az ilyen hívást egy ciklusban elhelyezve több párhuzamos szál indulását eredményezi.
A párhuzamos feldolgozás előfeltételei:
CALL FUNCTION (funkcióelem neve) STARTING NEW TASK (a feldolgozó száll azonosítója) -
Ezzel az ABAP paranccsal adjuk meg az SAP rendszernek, hogy a funkcióelemet egy másik szálon szeretnénk futtatni.
DESTINATION - Ezzel a kiegészítéssel jelölhetjük meg a másik rendszert.
Ha ugyanazon a rendszeren futtatjuk akkor a kiegészítéshez a 'NONE' paramétert kell adni.
IN GROUP - Ezzel a kiegészítéssel egy előredefiniált csoportot adhatunk meg, amelybe már belehet állítani pár tulajdonságot.
A csoportot az RZ12-es tranzakcióban lehet létrehozni.
PERFORMING (alprogram neve) ON END OF TASK -
Ezzel a kiegészítéssel a funkcióelem visszatérése után a hívó programban egy alprogramot hívhatunk meg.
CALLING (metódus) ON END OF TASK - Ezzel a kiegészítéssel a funkcióelem visszatérése után egy metódust tudunk meghívni.
WAIT UNTIL (feltétel) - Ezzel a kiegészítéssel várhatunk pl. egészen addig, amíg az összes funkcióelem vissza nem tér.
Aszinkron funkcióelemek esetén bemenő/kimenő paramétereknek csak generikus típusokat adhatunk meg és csak érték szerinti átadás van (SE37 -
paraméterek melletti jelölő - Értékátadás ). A WRITE műveletet sem lehet párhuzamos feldolgozásnál használni,
így az egyik bevált módszer, hogyha az aszinkron funkcióelem TABLES paraméterében adja át a funkcióelemben kiszámolt értéket/információ.
Az IMPORT/TABLES paramétereket úgy tudjuk feldolgozni, hogyha az ON END OF TASK előtt meghívott
alprogramban vagy metódusban a RECEIVE RESULTS FROM FUNCTION (az aszinkron funkcióelem) parancsot használjuk.
A példaprogramban feltételezzük, hogy létre van hozva egy táblatípus a következő struktúrával:
táblatípus: ZTABL_PARALLEL - sortípus: ZSTRUCT_PARALLEL
Ha egy új mezőt szeretnénk beszúrni a táblába, a tábla kulcsába értéket kell generálnunk. Amennyiben ezt
egy SELECT lekérdezéssel tennénk meg, előfordulhat, hogy egyszerre két process is ezt teszi, így a második
beszúrás sikertelen lesz, hiszen egy már létező kulccsal akarnánk beszúrni egy új rekordot.
Ez a probléma kiküszöbölhető, úgynevezett számkörök használatával. Egy számkörnek meg lehet adni egy intervallumot,
típust és amikor szükség van rá, egy függvény segítségével - NUMBER_GET_NEXT - generálhatunk értéket belőle.
Ez garantálja, hogy egy értéket egyszer oszt ki a rendszer. A következő példában ZMOBILSZK a már létrehozott
számkörünk, és a z_azon változóba generáltatjuk az új értéket.