这里有篇文章介绍了Dynamics AX 6在MorphX上的又一个新特性:axmodel。axmodel其实是一个layer下的另一种应用程序组织形式,在6.0以前,客户自定义的开发都是在一个特定的layer下进行的,这样会产生一些问题,比如我从两个ISV购买了两套产品,如果是直接使用AOD文件,我没办法将两个产品同时应用在bus层,而只能逐个导入XPO。那么今后如果某个ISV的产品有了升级,我又要在这两套产品上进行整合,所有的Application Objects被塞到同一个AOD文件中。
现在AX 6.0引入了axmodel的概念,使得一个layer可以包括多个model,每个应用都对应一个model,于是就可以针对model进行import、export、update等操作,这样的话,我可以以xcopy的方式,将两个不同的model装在同一个layer下,而且可以分开管理,非常方便。
axmodel的具体形式就是文件,这感觉跟AOD文件差不多。与AOD不同的是,axmodel文件是可以自描述的,它包含model的meta data,比如名称、描述、版本、供应商等信息,这使得ISV发布各自的应用程序变得非常方便。不仅如此,axmodel支持数字签名,这意味着ISV可以使用.NET下的强名称工具sn.exe生成密钥对,然后使用AxUtil.exe程序对axmodel进行签名,确保AX6在import这个axmodel的时候,能够相信它是来自可信任的ISV的,而没有被第三方修改过。
axmodel同样也有缺陷,这也是layer下所特有的缺陷,即同一个object在某个layer下只能有一个版本。比方说,如果你的应用程序修改了CustTable数据表,而在导入另一个axmodel的时候,发现它的更改与你的修改有冲突,此时你就需要作出选择,是创建一个新的axmodel以保存这些冲突的对象?还是直接overwrite?或者是直接discard?That's up to you
最后说说我的想法。我感觉axmodel和layer的关系,有点像.NET开发中assembly和solution的关系。axmodel和assembly都可以是单独的应用,都可以支持签名等安全特性。所不同的是,.NET开发中使用命名空间解决同名问题,而axmodel则不得不沿袭原本的Prefix/Suffix的方式来解决这个问题。