当我们在使用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. java设计模式。。。转载

    maowang I am a slow walker,but I never walk backwards! 博客园 首页 新随笔 联系 订阅 管理 随笔 - 125  文章 - 0  评论 - 12 ...

  2. Iconfont矢量图标平台全面升级

    阿里UX矢量图标库今天全新发布上线了,这次升级相对于老版本做了30多项功能和体验上的改善:赶快来体验一下吧!! 请猛戳:www.iconfont.cn 请猛戳:www.iconfont.cn 设计师p ...

  3. javascrpt 中的Ajax请求

    回顾下javascript中的Ajax请求,写一个小例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  4. PowerDesigner的使用二

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今 最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesig ...

  5. 深入理解C++虚函数表

    虚函数表是C++类中存放虚函数的一张表,理解虚函数表对于理解多态很重要. 本次使用的编译器是VS2013,为了简化操作,不用去操作函数指针,我使用到了VS的CL编译选项来查看类的内存布局. CL使用方 ...

  6. Android课程---Activity的创建

    一.为了创建一个新的Activity,你需要继承Activity类,定义UI,实现功能.新的Activity的最基本的框架代码如下所示: package com.paad.myapplication; ...

  7. Android课程---Android Studio使用小技巧:提取方法代码片段

    这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...

  8. IOS第18天(4,核心动画,时钟效果,定时器,图片旋转角度,CALayer 锚点,获取当前,小时,秒,分)

    **** #import "HMViewController.h" // 每秒秒针转6度 #define perSecendA 6 // 每分钟分针转6度 #define perM ...

  9. EmguCV+Win7+Visual C# 2012 配置

    一.下载与安装OpenCV 安装包版本:OpenCV2.4.2 X86 下载地址:http://sourceforge.net/projects/opencvlibrary/files/opencv- ...

  10. 【7集iCore3基础视频】7-3 iCore3硬件介绍

    iCore3原理图介绍: 高清源视频:http://pan.baidu.com/s/1gfbhuE3%20密码:xnbc iCore3 购买链接:https://item.taobao.com/ite ...