AX 2012 R2 AIF: 如何找到已有的AIF service的artifacts?
如果我们需要新建AIF 服务,这个过程使用AIF Document Service Wizard 比较直观, 最后不仅会生成一个Axd的project,而且在运行Wizard结束的时候有个汇总页面让你清楚系统都生成了哪些AIF 的部件 (artifacts).
有时候我们可能需要定制或者修改系统的逻辑。那么对于系统已经自带的标准AIF service, 如何反向找到那些artifacts呢?
1. 比如RetailStoreService AIF 服务, 首先在AOT里我们很容易找到其对应的AIF Service Class为RetailStoresService
根据定义该service class有方法实现service所定义的所有操作operations:
2. 我们查看比如Read()方法,找到这些方法的参数就知道AifDocument class了:
3. 查看Aif Document Class的方法,其方法用到的参数即为data container parameters.
4. 记下上述的AIF Document Class的 ID=1018077, 该类一定从AifDocument继承,然后使用如下的查询来找到Axd Document Class:
select DOCUMENTNAME,DOCUMENTCLASSID as AifDocumentClassId,SCHEMAROOTELEMENTTYPE as AxdDocumentClass,* from AIFSCHEMASTORE SS
inner join AIFDOCUMENTSCHEMATABLE ST
on SS.RECID=ST.SCHEMARECID and ST.DOCUMENTCLASSID=1018077
这样我们就得到了Axd Document Class=AxdRetailStores.
5. 如果该AxdRetailStores没有重载任何GetQueryName/GetQuery,那么对应的AX Query应该跟这个Axd Document Class同名:
6. 查看Axd Document Class的 成员函数,就能发现用到的AxBC class.
仿照如上步骤你可以试验得到RetailLoyaltyCustomerService的所有artifacts:
到这里我们有了如下表格:
关于AxBC class的说明参看https://technet.microsoft.com/en-us/library/aa873749.aspx