Stap 1: Deel de data in batches in

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.