博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dynamics AX 2012 R2 客制化RDP报表参数对话框
阅读量:5010 次
发布时间:2019-06-12

本文共 2221 字,大约阅读时间需要 7 分钟。

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

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

    默认效果是这样:

    但是 想要的效果是这样:

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

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

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

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

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

    先来看看DataContract

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

    DataContract中,只有一个属性——员工编号。想在报表参数对话框中,为该字段控件添加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);}

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

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

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

    最后,修改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

你可能感兴趣的文章
android adb常用指令
查看>>
Android框架之路——GreenDao3.2.2的使用
查看>>
类方法WCF学习笔记-KnowTypeAttribute用法
查看>>
平台程序微信平台开发应用的签名
查看>>
程序卡OK6410裸板更新程序_update
查看>>
MYSQL用户名:root
查看>>
JavaScript 开发规范要求
查看>>
Devstack 安装OpenStack Pike版本(单机环境)
查看>>
Javascript 函数初探
查看>>
类的定义、声明使用
查看>>
转载,gini系数代码对应的公式
查看>>
编译安装mysql-5.6.40
查看>>
年终总结
查看>>
初创互联网公司技术架构变迁之路
查看>>
【BZOJ 3676】 3676: [Apio2014]回文串 (SAM+Manacher+倍增)
查看>>
【网络流24题】No. 13 星际转移问题 (网络判定 最大流)
查看>>
解析$.grep()源码及透过$.grep()看(两次取反)!!的作用
查看>>
[模板] 字符串hash
查看>>
SGU438_The Glorious Karlutka River =)
查看>>
Linux集群及LVS简介
查看>>