Monday, August 21, 2023

PostLoad() method in AX Tables and Data entity in Dynamics 365 for finance and operations

Today I found an interesting thing with regards to AX tables and this post is all about this new experience which is the PostLoad() method in AX tables.


When we create a new table in AOT, Morphx automatically creates a series of methods for it. 
We cannot see those methods but those can be overriden on each table as per requirements. 
PostLoad() is one of these system methods. List of all system methods can be seen from

Lets create a new table, I named it PostLoadTable with two fields Name and Value.



I added 5 records in the table manually (open table and added).

Tables in Microsoft Dynamics AX have a number of system-defined methods, such as insert, 
validateField,validateWrite. For a list of these methods, see the xRecord system class. 
The xRecord class can be seen as the base class for the Common table. 
The Common table can be seen as the base table for all tables.

In any table class, the body of each system-defined method contains only a call to super(). 
When you edit the X++ code in a table method, you override the parent's implementation of that method. 
Usually the call to super() must remain in the methods that you edit.

PostLoad() is the method that is used to read records from database and you can perform any custom 
logic by overriding this method on any table.

Let’s override this method and play around it

public void postLoad()
{
    super();

    if (this.Name == 'MEL')
        this.Value = 5;
}

By opening table again it shows me different result as compared to what we entered earlier as shown above.

Value for name MEL changes from 1 to 5 and I did not require to call update method.

There are many existing implementation of postLoad method in AX tables, 
I am listing few of them here for ease.

HCMWorkerTable\postLoad()
VendTrans\PostLoad()
CustTrans\PostLoad()

PostLoad() method in Data entity

I have seen lot of developers using 'PostLoad' method to implement most of their business logic related to integrations.

But, if you are writing any logic that is specific to the export process.
For ex: Setting any flags after export, or initiating any process after the export is done and so on.

We have to keep in mind that entities are not just used for Asynchronous but also for Synchronous scenarios.
The PostLoad() method will be executed every time the data is loaded.
For ex: 
1) When that particular data entity is opened through 'Open in excel'/Excel       Addin feature.
2) Whenever there is an get request against that entity
 - A simple 'Get' request from browser or any other tools.
   (Through the Odata endpoint -https://[Base URL]/data/'YourEntity') 
 - Use of 'Odata feed' in Excel or any other tools.

So we have to ensure that, there will not be any such logic written, which would be executed unnecessarily.

No comments:

Post a Comment