2 min read

AXRETAIL: How to control the Action flow

Applies to AX 2012 R2 


The purpose of this article is to provide an example, how to control the data flow concerning (preaction/action).

Retailers might have to add new catalogs, Changing prices and barcodes during opening hours. If the number of changes are huge, the processing time increases and

the locking behaviour on the store database is affected.



1. Change the code, so processed always is 2 when the data is changed/added by table methods


preactionTable.action = _type;
preactionTable.preactionDate = systemdateget();
preactionTable.preactionTime = timenow();
preactionTable.linkDown = _linkDown;
preactionTable.userId = curuserid();
preactionTable.processed = 2;

//Default: PreactionTable.processed = NoYES::No;

2. Change the default value of Processed to 2, then data inserted from a Insert_recordset will also get the value 2 in the processed field.

Code path example


method line 106 

            insert_recordset preactions (action, linkDown, locationFilter, preactionDate, preactionTime, RefRecId, RefTableId)
                    action, linkDown,
                    filter, preactionDate,
                    preactionTime, RecId, assortmentTableId
                from explodedInner
                    explodedInner.createdTransactionId == currentTransId &&
                    explodedInner.OMOperatingUnitId == omOperatingUnitRefRecId &&
                    explodedInner.AssortmentRecId == assortmentRefRecId;



3. Import the two SQL agent jobs attached. (the owner id is contoso\Administrator must be changed)

The two jobs are releasing the data in two steps

  • Release Preactions non A 1040 tables

            – All preactions that are not in a table list will be released every minute.


  • Release Preactions A 1040 tables

           – All preactions will be released in batch of 10000 every 15 minutes


4. The create action can utilize batch worker threads

 If the Create actions periodic job is run in batch processing mode, it will use the Microsoft Dynamics AX batch processing framework to scale out processing by using multi-threaded logic. For this to work, you need to update the Retail Scheduler Number of documents in the batch task parameter to a larger number. For example, the number must be in the thousands instead of 0 (zero).

Hotfix needed

Create Actions job performs daily cleanup during every batch task which slows the job down considerably

 KB Article Number (s) : 2995408  




 5. Add the CREATE ACTIONS to batch every 5-15 minutes



6. It is possible to control the A job flow when sending the data out of AX.

In the case a table has very high number of changes, it can cause locking issue on the store database.

By setting the number of Action Counter Interval, it will look only take the specified number of lines in the RetailConnActionTable


Responsible class:



    // There is no logging for this method as this is executed in a very tight loop. It affects the run time.

    [sourceCounter, upperCounter] = this.replicationCounter(_fromTableId, _schedulerSubjobTable.ActionCounterInterval);

    if (sourceCounter >= upperCounter)


        return 0;



    currentDeletedRecordCount = 0;

    currentReadRecordCount = 0;




Author: Kim Truelsen

Date…: 7/10-2014