Mapping InventDim fields in an extension.

There are two table maps each mapping the fields of InventDim to concrete fields on other tables and entities: InventDimFieldsMap and InventInventoryDimensionEntityFieldsMapping. These maps provide common inventory dimension features such as copying and resolving dimensions. When you add a new inventory dimension, like Flavor, you must add Flavor fields to many tables and entities and…


X++ access modifiers

The access modifiers in X++ are now much closer to C#’s access modifiers, and behave just the same. Who can access foo() when it is…?   Please notice protected internal is the union of protected and internal. I.e. a protected internal method can still be referenced by subclasses outside the defining model. The extensibility attributes…


X++ containers – a positive surprise

Containers only exists in X++ – you’ll not find a similar generic construct elsewhere. They serve many purposes like storage of blob data (like images), transferring of large portions of data, building hierarchical in-memory data structures, serializing objects, returning multiple values from methods – to just name a few common use cases. For the past…


A good start!

Today marks a special day for me. I’ve now been working on Atlanta/Axapta/AX/FnO for exactly half my life. This simple X++ jobs tells the truth, and suggests me to pause for a second to answer the ultimate question: Do you wish to continue? Hell yeah – we are just getting started! I’ve felt that way…


SysDa – a new X++ query API

One of the major problems we faced when we embarked on the extensibility journey, was that X++ select statements are not extensible. If someone wants to add a new range, a join, a field in the field list – it is not possible. So far our strategy has been to convert these statements to good-old…


Chain of command on forms

Chain of command now supports even more extension scenarios on forms. It is now possible to wrap: Methods on the root of the form. Methods on controls. Methods on data sources. Methods on fields on data sources. So far you can only wrap system methods on the latter 3, i.e. methods that are defined on…


WhsWorkExecuteDisplay replacement

If you ever tried to implement a process on the mobile device used primarily in warehouse, you’ll have come across a class named WhsWorkExecuteDisplay. If you are not so fortunate, consider looking at the code. There are many software craftmanship lessons hidden here. This class and its subclasses are not as extensible as we need…


New capability in X++ : The In operator

We recently added a new feature in X++, making it easier to make certain SQL-where clauses extensible. Consider this method: It can now be refactored to support an extender in controlling which LedgerPostingTypes to include in the calculation: A neat little feature that debuted unnoticed by most.


New extension points

We just completed the engineering of version 8.1.1 – including more than 400 new extension points. Read more here: New extension points in July 2017 New extension points in version 7.3 New extension points in version 8.0 New extension points in 8.0.1 New extension points in 8.0.2 New extension points in 8.0.3 New extension points…


Tips for logging extensibility requests

My team is on the receiving end of extensibility requests. We are getting many quality requests, that we approve immediately – and deliver rapidly, typically in the next monthly update. However; we are also getting many requests that are not actionable. These we reject – asking for more details. We also observe some organizations bulk…