Wednesday, 3 August 2016

Extensions in AX 7

In AX7 X++ supports extension methods, similarly to C#.
Suppose we want to add a fullName method to the DirPersonName table. Here is how you do it, without touching the DirPersonName table. 

Create this new class: 

static class MyDirPersonName_Extension 
{  
    static public PersonName fullName(DirPersonName _person) 
    {  
        return strFmt(‘%1 %2 %3’, _person.FirstName, _person.MiddleName, _person.LastName);  
    }  
}  

Things to remember:

  1. The class must be postfixed with “_extension”.
  2. The class must be static.
  3. The extension methods must be static.
  4. The type of the first parameter determines which type is extended.
Now you can enjoy your extension method:
DirPersonName dirPersonName;  

while select dirPersonName 
{  
    info(dirPersonName.fullName());  
}  

Notice:

  1. When calling extension methods, you don’t provide the first parameter – that gets inferred from the instance’s type.
  2. If the extension method took any additional parameters – they (of course) needs to be provided.
  3. This doesn’t break encapsulation. The extension method only has access to public fields and methods on the type.

No comments:

Post a Comment