当前位置: 首页 > news >正文

Dynamics AX 2012 R2 客制化RDP报表参数对话框

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

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

    默认效果是这样:

Screenshot20150127160448

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

Screenshot20150127160544

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报表的开发方式,不变。至此,打开报表参数对话框上的员工编号字段控件,已经有了下拉效果。

转载于:https://www.cnblogs.com/msdynax/p/custom-rdp-report-parm-dialog.html

相关文章:

  • BZOJ 1052 HAOI2007 覆盖问题 二分法答案+DFS
  • Alwasyon环境下增加数据文件需要注意的几点
  • 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)
  • ldd查询命令或软件共享的函数库(动态)
  • 员工考勤系统
  • C# 打印本地PDF文件
  • javascript的位操作、整数、二进制
  • .net 按比例显示图片的缩略图
  • 线上解决问题分析
  • JavaScript定时机制setTimeout与setInterval研究
  • UVA 11174 Stand in a Line 树dp+算
  • HttpSessionListener的用法
  • JasperReports报表组15
  • BZOJ 1264: [AHOI2006]基因匹配Match( LCS )
  • 用Linux命令对两个文件进行连接操作
  • 分享的文章《人生如棋》
  • 2018一半小结一波
  • java第三方包学习之lombok
  • Java面向对象及其三大特征
  • jquery ajax学习笔记
  • JS学习笔记——闭包
  • Linux gpio口使用方法
  • Linux链接文件
  • PHP那些事儿
  • supervisor 永不挂掉的进程 安装以及使用
  • vue中实现单选
  • 安装python包到指定虚拟环境
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 看域名解析域名安全对SEO的影响
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • AI算硅基生命吗,为什么?
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #ifdef 的技巧用法
  • #include<初见C语言之指针(5)>
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (4.10~4.16)
  • (C语言)fgets与fputs函数详解
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Note)C++中的继承方式
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (学习日记)2024.01.09
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net framework profiles /.net framework 配置
  • .net 受管制代码
  • .NET 中 GetProcess 相关方法的性能