D365 FO Update9以后增加了Chain of Command(CoC),用来扩展系统类的方法,具体的使用方法参见下文。
https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/extensibility/method-wrapping-coc
在CoC出现之前,系统采用在扩展类上增加静态方法,并通过属性指定一堆值才能实现,如下所示:
1 [PreHandlerFor(tableStr(InventTable), tableMethodStr(InventTable, initValue))] 2 public static void InventTable_Pre_initValue(XppPrePostArgs args) 3 { 4 InventTable inventTable = args.getThis(); 5 inventTable.ItemId = "Hello"; 6 }
现在用CoC实现如下所示:
1 public void initValue() 2 { 3 next initValue(); 4 this.ItemId = "Hello"; 5 }
简洁多了,庆幸接触D365晚,不用写那么繁琐的方法来修改系统类的方法。
感觉AX进入D365时代以后,X++本身的特性的增加进入了快车道,迭代也很快,不像从3.0到2012,语言本身的特性变化不大。
虽然迭代以后,看之前的写法有点傻,不过这正说明进步,正如看C#在Lamada表达式之前的一些写法也显得笨拙一样,拥抱变化吧。