Aan het begin van het proces wordt de data ingedeeld in batches. Om te voorkomen dat deze stap bij elke iteratie uitgevoerd wordt, zijn in het begin twee paden gedefinieerd. De wijze van starten bepaalt welk pad gekozen wordt. Als de workflow met de hand gestart wordt, is de $PMWorkflowRunInstanceName leeg. Bij elke volgende iteratie is deze gevuld door de aanroep vanuit de cmd_RESTART_LOOP taken. In de bovenste link staat dan ook de volgende conditie gedefinieerd:
$PMWorkflowRunInstanceName = ''
In de onderste link staat de volgende conditie gedefinieerd:
$PMWorkflowRunInstanceName != ''
Het proces ondersteunt twee manieren om de batchgrootte te bepalen. In de eerste methode wordt de batchgrootte met de hand bepaald en wordt het aantal iteraties hieruit afgeleid. In de tweede methode wordt het maximum aantal iteraties opgegeven en wordt de batchgrootte berekend. Beide methodes houden rekening met het opgegeven aantal parallelle processen.
Methode 1 zorgt er voor dat alle taken even veel data moeten verwerken. Bij methode 2 kun je precies bepalen hoe groot de batches moeten zijn maar bestaat de kans dat in de laatste iteratie enkele taken geen data meer hoeven te verwerken.
Het indelen en opvragen van batches wordt gestuurd vanuit de CT_DEF_BATCH_CONTROL tabel. Deze bevat de volgende velden:
MAPPING_NAME | De naam van de mapping die parallel gedraaid moet worden. De naam wordt alleen gebruikt om het juiste record te selecteren. Hij hoeft niet persé overeen te komen met de werkelijke mapping. |
BATCHID | Het actuele batchid. Deze wordt op 1 gezet bij de initialisatie en elke iteratie opgehoogd met BATCHID_INCR. |
BATCHID_INCR | Het aantal parallelle processen wat gedraaid moet worden. |
MAX_BATCH_SIZE | Het maximale aantal records wat verwerkt moet worden in een batch. Deze kan handmatig ingevuld worden of bepaald worden met behulp van het maximale aantal iteraties in het MAX_LOOPS veld. |
TABLE_NAME | De naam van de tabel die de te verwerken data bevat. Deze tabel moet het veld BATCHID bevatten. |
SQL_ERROR | Als er tijdens het bijwerken van de CT_DEF_BATCH_CONTROL tabel iets fout gaat dan wordt de fout in dit veld gezet |
SAP_OBJECT | De naam van het SAP object die verwerkt wordt. Deze naam wordt gebruikt om te bepalen in welke tabel de DMS_ERRORMESSAGES data gearchiveerd moet worden. DMS_ERRORMESSAGES_<SAP_OBJECT>_ARCH. |
MAX_LOOPS | Het maximum aantal iteraties wat het proces moet doorlopen. Als deze leeg is, wordt het aantal iteraties bepaald door de MAX_BATCH_SIZE. |
DELAY | Het aantal seconden pauze voordat de volgende parallelle taak gestart wordt. |
WHERE_CLAUSE | Een extra WHERE CLAUSE die gebruikt kan worden om alleen een deel van de datatabel in batches in te delen. Neem het volledige WHERE statement op in het veld (WHERE VELD1 = ‘X’). |
De eerste taak in stap 1 kijkt of MAX_LOOPS ingevuld is in de CT_DEF_BATCH_CONTROL tabel en berekend de MAX_BATCH_SIZE op het moment dat die groter is dan 0. Dit doet hij door het aantal records op te vragen van de tabel die verwerkt moet worden en dat te delen door het aantal iteraties en het aantal parallelle processen. Als de MAX_LOOPS niet ingevuld is, blijft de MAX_BATCH_SIZE ongemoeid.
De tweede taak deelt de tabel die verwerkt moet worden in batches. De taak leest hiervoor uit de CT_DEF_BATCH_CONTROL tabel welke datatabel het BATCHID bevat. Alle records in deze tabel krijgen een batchid toegewezen.