第九章:XML文档集成---发送框架
本文仅供AX从业者和爱好者学习交流之用,由于原文版权问题,请勿转载
发送框架由AxdSend API实现,用于发送没有与特定的终结点关联并且没有唯一实体键约束的文档。记录的范围,比如会计科目表的范围,由用户选择。AX包含使用该功能的几个默认文档,比如AxdChartOfAccounts 和AxdPricelist。
发送框架提供选择终结点和文档范围的默认的对话框能为多条记录生成XML文档。该框架允许为文档提供比默认对话框提供的用户输入多的特定的对话框。该框架不是为由特定公共已知的唯一实体键标识和与固定终结点关联的文档设计的。
默认的对话框包含一个终结点下拉菜单和,可选的,用来打开标准的查询窗体的查询按钮。该查询从由调用者指定的Axd<Document name>类中获取。在AIF中可以配置很多终结点,但只有一些可以后去当前文档,Lookup指挥显示对该文档有效的终结点,由为当前文档的read和readList设定的约束决定。
该框架为了支持一个新的文档只需要少量的代码。如果一个文档只是简单地选择一个终结点和填充查询范围,不需要额外的编码,框架会提供大多数功能。
图9-11.发送会计科目表XML文档的电子文档对话框
如果一个文档需要一个更具体的对话框,可以简单地继承AxdSend类,并且在dialog方法中提供需要的用户交互界面。在下面的示例代码中对话框已经添加了一个额外的字段,简单地添加一行代码(在下面类AxdSendChartOfAccounts的代码示例中用黑体表示)就可以实现AxdSend类的parmShowDocPurpose 使字段出现在对话框中。
发送框架由AxdSend API实现,用于发送没有与特定的终结点关联并且没有唯一实体键约束的文档。记录的范围,比如会计科目表的范围,由用户选择。AX包含使用该功能的几个默认文档,比如AxdChartOfAccounts 和AxdPricelist。
发送框架提供选择终结点和文档范围的默认的对话框能为多条记录生成XML文档。该框架允许为文档提供比默认对话框提供的用户输入多的特定的对话框。该框架不是为由特定公共已知的唯一实体键标识和与固定终结点关联的文档设计的。
默认的对话框包含一个终结点下拉菜单和,可选的,用来打开标准的查询窗体的查询按钮。该查询从由调用者指定的Axd<Document name>类中获取。在AIF中可以配置很多终结点,但只有一些可以后去当前文档,Lookup指挥显示对该文档有效的终结点,由为当前文档的read和readList设定的约束决定。
该框架为了支持一个新的文档只需要少量的代码。如果一个文档只是简单地选择一个终结点和填充查询范围,不需要额外的编码,框架会提供大多数功能。
图9-11.发送会计科目表XML文档的电子文档对话框
如果一个文档需要一个更具体的对话框,可以简单地继承AxdSend类,并且在dialog方法中提供需要的用户交互界面。在下面的示例代码中对话框已经添加了一个额外的字段,简单地添加一行代码(在下面类AxdSendChartOfAccounts的代码示例中用黑体表示)就可以实现AxdSend类的parmShowDocPurpose 使字段出现在对话框中。
static public void main(Args args)
{
AxdSendChartofAccounts axdSendChartofAccounts ;
AifConstraintList aifConstraintList;
AifConstraint aifConstraint;
;
axdSendChartofAccounts = new AxdSendChartofAccounts();
aifConstraintList = new AifConstraintList();
aifConstraint = new AifConstraint();
aifConstraint.parmType(AifConstraintType::NoConstraint);
aifConstraintList.addConstraint(aifConstraint);
//This Line
axdSendChartofAccounts.parmShowDocPurpose(true) ;
axdSendChartofAccounts.sendMultipleDocuments(classnum(AxdChartOfAccounts),AifSendMode::Async,aifConstraintList) ;
}
该发送框架不支持排序,并且查询的结构是锁定的以确保查询的结果跟在XML文档查询中定义的查询匹配,这就是AxdSend类要限制排序和结构的原因。查询对话框只显示顶级表的字段,因为查询的机制采用了outer join。结果集很可能与从最终用户视角所期望的不同。比如,在内部数据源上的限制条件将会只过滤内部数据源,而不会过滤包含它们的数据源(译注:这是由于fetchMode设为了1:n,循环取数的原因,在形成XML文档时,又没有办法采用1:1,因为它要层级实现)。当使用文档的findList方法时,这些限制条件被强加到用户界面上以便匹配查询的限制条件(译注:由于没有操作过,每天整明白这句话的意思,日后再回头看,Mark一下)。{
AxdSendChartofAccounts axdSendChartofAccounts ;
AifConstraintList aifConstraintList;
AifConstraint aifConstraint;
;
axdSendChartofAccounts = new AxdSendChartofAccounts();
aifConstraintList = new AifConstraintList();
aifConstraint = new AifConstraint();
aifConstraint.parmType(AifConstraintType::NoConstraint);
aifConstraintList.addConstraint(aifConstraint);
//This Line
axdSendChartofAccounts.parmShowDocPurpose(true) ;
axdSendChartofAccounts.sendMultipleDocuments(classnum(AxdChartOfAccounts),AifSendMode::Async,aifConstraintList) ;
}