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

    当我们在使用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 [email protected]_DataContract
{
    HcmPersonnelNumberId hcmPersonnelNumberId;
}

[DataMemberAttribute(‘HcmPersonnelNumberId‘)]
public HcmPersonnelNumberId parmHcmPersonnelNumberId(HcmPersonnelNumberId _hcmPersonnelNumberId=hcmPersonnelNumberId)
{
    hcmPersonnelNumberId=_hcmPersonnelNumberId;
    return HcmPersonnelNumberId;
}

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

class [email protected]_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([email protected]_UIBuilder))]
public class [email protected]_DataContract
{
    HcmPersonnelNumberId hcmPersonnelNumberId;
}

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

时间: 2024-10-11 05:55:27

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

Dynamics AX 2012 R2 安装额外的AOS

    众所周知,AX系统分为三层:Client,Application Server,Database Server.     我们添加额外的Application Server主要是出于以下两个原因: 使用多台服务器,分担不同的角色(如批处理任务,报表,服务). 增加基础架构的弹性.     AX中的集群服务器,并不依托于Windows服务器,而是通过自己的技术实现的.它可以提高性能,但没有提高可用性.当一台服务器挂了,客户端会失去连接,任何正在处理的任务都会被回滚.重启客户端后,会连接到集

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

    在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的.     这次,我们来看看在窗体上修改或录入数据的情况.图中所示的流程,是在理想情况下的完整触发过程.如果窗体控件.窗体数据源字段或表的验证方法返回False,也可能会提前结束流程. 用户在窗体上修改或录入数据后,首先触发了该字段的Form.Control.Validate()方法,如果该方法返回的是False,流程到此结束,用户修改或录入数据失败

安装Dynamics AX 2012 R2 AIF IIS上的Web服务

1.为什么使用IIS上的WEB服务 组件? 如果你要在Dynamics AX Service中使用HTTP Adapter,那么你就要安装IIS上的WEB服务 组件.HTTP Adapter会在IIS中生成一个Web Service. 2.安装IIS上的WEB服务 组件 下面讲讲怎么安装IIS上的WEB服务 组件.在服务器上,启动AX安装程序,选择添加或修改组件,选中IIS上的Web服务,下一步安装. 安装完毕后,会在在AX的系统管理>服务和应用集成框架>网站 中,添加了一个站点, 并在服务器

Dynamics AX 2012 R2 从代码中调用SSRS Report

    平时,我们制作SSRS Report的方法主要有两种:使用Query或RDP.如果需要为报表传递参数,就要在代码中为报表参数赋值,然后在代码中调用报表.下面我总结下这两种报表在代码中传参和调用的方式: 1.使用Query作为报表数据源 1.1.Dynamic Filters属性     在VS中,需要注意Report DataSource的Dynamic Filters属性. 1.1.1.如果Dynamic Filters属性为True的话,会在Report Parameter中生成一个

[译]Dynamics AX 2012 R2 BI系列-规划分析的注意事项

https://msdn.microsoft.com/en-us/library/gg731898.aspx       在开始实施AX的分析特性前,有很多事情要考虑.本文描述了你必须考虑的事情,和在规划过程中每一步你必须做的决定. 1.验证必备项 2.明确拓扑结构     要帮助你的AX实施规划,明确一个支持你组织需求的拓扑结构.明确拓扑结构时,考虑下面的信息. 2.1.性能注意事项     要确保AX的OLTP(Online Transaction Processing)数据库能够很好得运行

Dynamics AX 2012 R2 无法创建类"Excel.Application"的COM对象

    Reinhard在做一个Excel导入项目时,发现X++代码一旦执行到Excel组件部分,就会报如下错误: 无法创建类"Excel.Application"的COM对象.请确保在计算机""上已正确注册该对象.     根据错误提示,我们先去组件服务中,查找名为Microsoft Excel Application的COM组件.     Reinhard并没有在COM组件列表中,找到该COM组件.我们知道,Microsoft Excel Application

[译]Dynamics AX 2012 R2 BI系列-Cube概览

https://msdn.microsoft.com/EN-US/library/dd252604.aspx     Cube是一个多维度的结构,它是BI应用开发的基础.本文描述了cube的组成部分,让你能更好地理解如何使用cube来分析数据. 1.Cube的结构     一个cube由一组测量和维度属性构成.对于AX分析cube,测量和维度在AOT中定义.Perspective用于标识那些包含着测量和维度的表和视图. 1.1.测量     一个测量,是表或视图中一个包含着可计量的数据的列,通常

Dynamics AX 2012 R2 RemoteApp导出项目报错

    今天,Reinhard使用RemoteApp的方式登陆AX开发环境,对项目文件进行修改后,习惯性地将项目导出到Reinhard的电脑上,做个备份.但是导出时弹出错误提示框,报以下错误:     在记录中的写入=9C9360时文件C:\Windows\TEMP\$tmp00030007.$$$中出错 Windows错误:=错误代码:112=Unknown error 是否重试?     一开始,Reinhard以为文件的写入权限出错了,所以将之前的备份文件删除,重新导出,依然报错.    

Dynamics AX 2012 R2 AIF 内部异常

    今天,Reinhard发现某个入站端口,突然一直报错: The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebu