第九章:XML文档集成---定制已存在的XML文档

本文仅供AX从业者和爱好者学习交流之用,请勿转载。
作为定制已存在的XML文档的例子,假定在针对客户的一个解决方案中有一张表用来存放每一个库存商品的多个图片(译注:原文为illustrations,翻译成图解有点别扭),想在以XML文档发送采购订单的时候包含这些图片。这张表的结构如图9-8所示:
第九章:XML文档集成---定制已存在的XML文档
图9-8自定义表的结构
第一步是修改AxdPurchaseRequisition 这个Query使其包含ItemIllustration 这张表,也就是定制解决方案中的新建的表。图9-9显示了在添加了新建的表后,该Query的样子。被框起来的区域是必须向Ax4.0中发布的该Query中添加的部分。
第九章:XML文档集成---定制已存在的XML文档
图9-9.添加表ItemIllustration 后的Query
定制XML文档过程的第二步是通过Axd向导运行Query。向导的第二页提示解决方案所基于的Query的名称,在本例中,Query的名称为AxdPurchaseRequisition。在向导的下一页,如图9-10所示,可输入类的名称,默认与Query的名称相同。
第九章:XML文档集成---定制已存在的XML文档
图9-10.向导页,在该页可以选择XML文档应该支持的操作
剩余的字段对该过程来说是无关紧要的,因为不会更改已经存在的Axd<Document>类。如果在Query中创建了关系,向导会在方法prepareForSave 中构造所有需要的代码。
在下一页中,选择第一项以创建新的Ax<Table>类,第二个选项,是可选的,更新已存在的Ax<Table>类,该类有可能已经是最新的了。
在运行完向导后,需要修复可能有的编译错误和Axd向导产生的to-dos。首先,如果不需要缓存(caching)的话去掉它,通过移除两个方法CacheObjectCacheRecordRecord。当移除这些类(译注:原文为classes,感觉用Methods会更好些),必须移除类声明中的两个变量cacheRecordIdxcacheObjectIdx。假定InventDim不影响图片,移除这个可选参数,这样parmItemId方法看起来如下所示:

public  str parmItemId(str _itemId  =   '' )
{
    DictField dictField;
    ;
    
if (!prmisdefault(_itemId))
    
{
        dictField 
= new DictField(tablenum(ItemIllustration),fieldnum(ItemIllustration,
ItemId));
        
this.validateInboundItemIdString(_itemId,dictField);
        
if(this.valueMappingInbound())
        
{
            item 
= _itemId;
        }


        
this.setField(fieldNum(ItemIllustration,ItemId), _itemId);
    }


    
if (this.valueMappingOutbound())
    
{
        
return conpeek(this.axSalesItemId('',
 itemIllustration.ItemId),
1);
    }

    
else
    
{
        
return itemIllustration.ItemId;
    }

}

这样新创建表的实现就结束了,可以通过基本设置->设置->应用程序框架->操作重新注册 AxdPurchaseRequisition 来生成XML架构(Schema).

你可能感兴趣的:(xml)