Skip to main content

Dynamics 365 for operations – Table extensions

Background

Extensions are a new way to add functionality and custom code to the D365 system without changing the standard code. In fact, Microsoft has announced that edit standard elements like those that we have done in the past will not be possible after 2017.
By using extensions, we can achieve the same result by simply extending the standard system => EXTENSIONS.
To read more about the difference between overlaying and extensions follow this link https://ax.help.dynamics.com/en/wiki/customization-overlayering-and-extensions/#extensions

Extending tables

By using table extensions, we can create a new table that adds new fields, field groups, indexes, mappings, relations, methods, subscribe to event handlers and more.
When extending tables we need to follow the naming rule as such: <TABLENAME><_Extension> the compiler understands the _Extensions suffix and knows that the table in question is extending a table from the standard system. This gives us access to public methods of the standard table, the fields, indexes and so on.
Example
Let us say we need to extend the BOM standard table to add some more fields, new methods and subscribe to an event.
First we create a new table as we normally do and to adhere to the naming rule the extended table gets the name BOM_Extension. In our solution explorer, we get a new folder named Table Extensions and there we can see our new table.

Create new table extension


Adding new fields

Here four fields have been added to the BOM_Extension table and then we see the fields from the standard BOM table




Adding new methods and subscribing to events

In order to create new methods for the extended table we need to use a table extension class and the class needs to have the same name as the extended table, in our example the class should be named BOM_Extension. The class should be declared static
All methods must be declared public static and the first parameter MUST be the table that the class is extending. This parameter is though never passed on when calling the method, only the parameters that we add after the table buffer.

See the following screen shot of a simple method in a table extension class

Event handler

When subscribing to events/event handlers you can right-click the event under the Events note on the extended table and select “Copy event handler method”



Then just paste the code into the extension class and add some code that is needed in the event handler. In the following example, the onValidateField event handler is being handled. The Common parameter is the table buffer and the DataEventArgs is the event we are subscribing to. Then in this code example we instantiate the ValidateFieldEventArgs and give it the value of the “e” parameter.




Comments

Popular posts from this blog

Plug-able Authentication in Microsoft Dynamics AX 2012

I have worked in many projects involving the Enterprise Portal for Ax ranging from version 2.5. One of the biggest issue for the end customer/user has been the ability to have a plug-able authentication for EP. This has been an issue for example for customers that have other portals based on Share Point as well as custom build ASP.NET web sites. All these portals are able to share the authentication with Single Sign On, SSO. But until now with version 2012 of Ax this has not been possible since earlier versions of Ax have only supported Windows Authentication. So in scenarios where you implement an EP site for a customer that has other portals and uses for example forms authentication, if you are not running Ax 2012 you have to have a special/dedicated log-on to EP. One of the biggest advantages is the fact that now external users do not have to be in Active Directory mixed up with all the internal users or located in an extra AD repository with all the administrative IT work l...

Remove HTML code from strings

When you work for example with the presentations DAX adds some HTML comment code to the text stored in the database. This can cause the text on the web to be displayed in incorrect format. This also takes up space in the database and makes the database file grow larger. <!--AXAPTA  MarginWidth="0" MarginHeight="0" WebletName="WebLet700062029" Type="WebPageWeblet" -->TEXT There is a nice X++ function: just call Web::stripHTML( string ), which will return the string without the HTML tags