Thursday, 21 January 2016

Dynamics AX7 Development 4–Overlay or extend

In this post I will look at the decision of overlaying or extending. In AX7 you can extend metadata by adding a field to a table or adding a control to a form, and extend business logic by defining event handlers. You can now write event handlers on several pre-defined events on tables, forms, form data sources, form controls, and others.

Below we are going to look at a basic example comparing Overlay with Extending (using event handler). As mentioned there are many forms of extensions but for simplicity we will focus on one (event handler).


Overlaying is when you modify existing code by changing the system behaviour. For example lets look at overlaying the initValue method on the CustTable.

Right click on the object and click Customize. This will add it to your project.


You will see a little [c] to indicate it is a customised object.


I added a bit of code to the initValue method. Notice how it has changed colour to indicate it has been customised.


Extension (using events)

Extensions are used in AX7 much more and is much more flexible. Extensions allow you to leave the system behaviour but adding your piece to it. In some cases you have to overlay but try to avoid that if possible. As overlaying may seem simple but it will cost you on upgrades, hotfixes, maintaining code and merging code.

Lets look at the same example but now using extensions.

On the CustTable right click and Opern designer.


Right click and copy the vent handler method (this will copy into clipboard).


Now create a class. Paste whats in clipboard. It will paste the highlighted section below.

Add your code. The vent will now be triggered after the initValue method.


Warning: Code block to update languageId is for illustration only. Not runnable.

More detail on the wiki page:


Anonymous said...

How did you able to customize it? in my cast if I try to customize it raises CustTable can not be customized because project belongs to different package. if I try open application suite model then it says I am not authorize to modify application suite. and element already exists in selected model.
how should model be managed to work with application suite objects

Anonymous said...

How should model parameters be set?

Dilip said...

Nice post Munib. Re. the above comments, If you want to overlay CustTable, when you create your model, you will need to select the Application Suite package from the drop down and if you are going with the Extensions way of development, then you need to select the new package option and reference Application Suite to it. In either option, you need to reference Application Suite, inorder to extend or customize CustTable. Model parameters can be set by going to Dynamics 365 - Model Management and Update parameters, you can reference and update models from here.