当我们在使用RDP报表时,AX会根据Data Contract,自动生成报表参数对话框上的字段控件。一般情况下,该对话框能够满足我们的需求,但是如果有较为复杂或特殊的需求,就要我们对该对话框进行客制化。

    Reinhard这里就有一张报表,需要使用员工编号作为参数。但是AX系统中默认的员工编号EDT,没有提供lookup方法Reinhard将该员工编号EDT放在报表参数窗体上后,只能手工录入员工编号,不能通过下拉框进行选择。

默认效果是这样:

但是 Reinhard想要的效果是这样:

Reinhard经过不断地研究,发现AX提供了一种可以客制化报表参数对话框字段控件的技术——SysOperation Framework。如果你也和 Reinhard一样,想要改变自动生成的对话框上的字段,就可以使用该框架。

    SysOperation Framework提供了一个SysOperationAutomaticUIBuilder类,通过继承该类,可以在系统基于我们服务操作数据契约来生成对话框的过程中,添加自己的逻辑。一般包括以下业务逻辑:

  • 设置字段控件的属性,如强制启用
  • 覆盖字段控件的方法,如lookup()modifiedField()
  • 覆盖addDialogField()方法,阻止控件被添加

如果你有大量的控件要使用UI Builder添加到对话框中,取而代之,可以考虑在控制器中使用模板窗体

如果你在UI Builder中有大量的验证代码,取而代之,可以考虑在数据契约中实现验证。这样做,是为了遵循MVC哲学。

先来看看ReinhardDataContract

[DataContractAttribute]
public class Reinhard@MSDynAX.net_DataContract
{
HcmPersonnelNumberId hcmPersonnelNumberId;
} [DataMemberAttribute('HcmPersonnelNumberId')]
public HcmPersonnelNumberId parmHcmPersonnelNumberId(HcmPersonnelNumberId _hcmPersonnelNumberId=hcmPersonnelNumberId)
{
hcmPersonnelNumberId=_hcmPersonnelNumberId;
return HcmPersonnelNumberId;
}

    ReinhardDataContract中,只有一个属性——员工编号。想在报表参数对话框中,为该字段控件添加lookup方法。下面创建UI Builder类:

class Reinhard@MSDynAX.net_UIBuilder extends SysOperationAutomaticUIBuilder
{
DialogField hcmPersonnelNumberIdField;
} public void hcmPersonnelNumberIdLookUp(FormStringControl _control)
{
HcmWorkerLookup lookup=HcmWorkerLookup::newWorkersInCurrentCompany();
lookup.lookupWorker(_control);
} public void build()
{
super();
hcmPersonnelNumberIdField=this.bindInfo().getDialogField(
this.dataContractObject(),
methodStr(HPRN_1416_DC,parmHcmPersonnelNumberId)
);
} public void postRun()
{
super();
hcmPersonnelNumberIdField.registerOverrideMethod(
methodStr(FormStringControl,lookup),
methodStr(HPRN_1416_UIBuilder,hcmPersonnelNumberIdLookUp),
this);
}

可以看到,ReinhardUI Builder中的第一个方法,是用于覆盖员工编号字段控件lookup()方法

第二个方法,获取到员工编号字段控件

第三个方法,将我们的第一个方法,注册到字段控件的lookup()方法上。

最后,Reinhard修改Data Contract的声明:

[DataContractAttribute,
SysOperationContractProcessingAttribute(
classStr(Reinhard@MSDynAX.net_UIBuilder))]
public class Reinhard@MSDynAX.net_DataContract
{
HcmPersonnelNumberId hcmPersonnelNumberId;
}

其他部分依然遵循RDP报表的开发方式,不变。至此,打开报表参数对话框上的员工编号字段控件,已经有了下拉效果。

Dynamics AX 2012 R2 客制化RDP报表参数对话框的更多相关文章

  1. Dynamics AX 2012 R2 如何处理运行时间较长的报表

    当处理的数据量较多,逻辑比较复杂时,报表可能会超时.为了解决这个问题,Reinhard一直使用SrsReportDataProviderPreProcess来做预处理报表.它会在调用SSRS前,在AX ...

  2. Dynamics AX 2012 R2 安装Reporting Services 扩展

    今天Reinhard在VS中部署SSRS报表时,接到以下错误: 部署因错误而被取消.在报表服务器上,验证:-SQL Server Reporting Services 服务是否正在运行. 接着,Rei ...

  3. Dynamics AX 2012 R2 电子邮件广播错误 0x80040213

    Dynamics AX 2012 R2 电子邮件广播错误 0x80040213 今天Reinhard在新环境做邮件广播测试时,发现无法发送邮件,并报以下错误: 类"CDO.Message&q ...

  4. [译]Dynamics AX 2012 R2 BI系列-分析的架构

    https://msdn.microsoft.com/EN-US/library/dd309691.aspx     下图显示了包含在AX中的SSAS Cube,和用于访问他们的组件.     下面的 ...

  5. Dynamics AX 2012 R2 安装额外的AOS

    众所周知,AX系统分为三层:Client,Application Server,Database Server. 我们添加额外的Application Server主要是出于以下两个原因: 使用多台服 ...

  6. Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序

        在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的.     这次,我们来看看在窗体上修改或录入数据的情 ...

  7. Dynamics AX 2012 R2 业务系列-销售业务流程

    在博文Dynamics AX R2 业务系列中,Reinhard对这个系列做了一个规划,下面我们就按照规划开始说业务吧. 1.销售的主要职责 其实这里说的职责主要是针对销售文员,并非整天外面满世界跑业 ...

  8. Dynamics AX 2012 R2 业务系列-采购业务流程

    在博文Dynamics AX R2 业务系列中,Reinhard对这个系列做了一个规划,下面我们就按照规划开始说业务吧. 国际惯例,从采购开始. 1.采购的主要职责 简单点说,采购的主要职责,是从供应 ...

  9. Dynamics AX 2012 R2 业务系列

    在之前的一系列博文里,Reinhard介绍了Dynamics AX Demo的安装与配置.相信同学们看完后,都已经成功拥有了一个测试环境. 众所周知的是,ERP作为一个特殊的软件系统,他有着背后的业务 ...

随机推荐

  1. OpenCV 3.1 VS 2010 Cuda 7.5 TBB Configuration 配置

    Download OpenCV 3.1 Download OpenCV Extra Modules Download VS2010 Download CMake 3.2.0 Download Cuda ...

  2. [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大

    17.8 You are given an array of integers (both positive and negative). Find the contiguous sequence w ...

  3. hdu Remainder

    这道题是道很明显的bfs题.因为对数论没什么研究 ,所以这道题目里的两个关键点并不知道,看了别人的题解才知道 . 1.为避免取模后出现负数,采用:x%y=(x%y+y)%y 2.全部采用对m*k取模后 ...

  4. bootstrap学习笔记之一

    一.概要 bootstrap是最受欢迎的HTML.css和js框架,用于开发响应式布局,移动设备优先的WEB项目. 二.CSS部分 1.bootstrap已经设定了基本的全局样式,如font-fami ...

  5. JavaScript入门篇 编程练习

    编程挑战 一.定义"改变颜色"的函数 提示: obj.style.color obj.style.backgroundColor 二.定义"改变宽高"的函数 提 ...

  6. BizTalk开发系列(三十)单向端口实现请求-响应

    BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个 ...

  7. Linux下动态库(.so)和静态库(.a) 的区别

    静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.编译之后程序文件大,但加载快,隔离性也好.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还 ...

  8. Math-基本功能

    <script type="text/javascript"> /* *演示Math对象.该对象中的方法都是静态的.不需要new,直接Math调用即可 */ var n ...

  9. 【iCore3 双核心板_ uC/OS-III】例程十:消息队列

    实验指导书及代码包下载: http://pan.baidu.com/s/1sleklm1 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  10. Educational Codeforces Round 16 A B C E

    做题太久也有点累了..难题不愿做 水题不愿敲..床上一躺一下午..离下一场div2还有点时间 正好有edu的不计分场 就做了一下玩玩了 D是个数学题 F是个AC自动机 都没看明白 留待以后补 A 给出 ...