Share via


AX 2012 R2 AIF: 如何找到已有的AIF service的artifacts?

如果我们需要新建AIF 服务,这个过程使用AIF Document Service Wizard 比较直观, 最后不仅会生成一个Axd的project,而且在运行Wizard结束的时候有个汇总页面让你清楚系统都生成了哪些AIF 的部件 (artifacts).

image

有时候我们可能需要定制或者修改系统的逻辑。那么对于系统已经自带的标准AIF service, 如何反向找到那些artifacts呢?

1. 比如RetailStoreService AIF 服务, 首先在AOT里我们很容易找到其对应的AIF Service Class为RetailStoresService

image

根据定义该service class有方法实现service所定义的所有操作operations:

image

2. 我们查看比如Read()方法,找到这些方法的参数就知道AifDocument class了:

image

image

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

image

这样我们就得到了Axd Document Class=AxdRetailStores.

5. 如果该AxdRetailStores没有重载任何GetQueryName/GetQuery,那么对应的AX Query应该跟这个Axd Document Class同名:

image

 

image

6. 查看Axd Document Class的 成员函数,就能发现用到的AxBC class.

仿照如上步骤你可以试验得到RetailLoyaltyCustomerService的所有artifacts:

到这里我们有了如下表格:

image

关于AxBC class的说明参看https://technet.microsoft.com/en-us/library/aa873749.aspx