在较早版本的AX中我们运行一个报表时会用到类RunBaseReport,从它扩展一个子类,再由它运行报表,一个典型的Axapta3中的例子:

class ReportProdInfo extends RunBaseReport
{
ProdId _prodid;
} static void main(Args args)
{
ReportProdInfo _prodInfo;
ProdTable pdt;
;
if(args.dataset()!=tablenum(ProdTable)||(!args.record()))
{
throw error("@SYS22539");
}
pdt=args.record();
_prodInfo = new ReportProdInfo(pdt.ProdId);
if (_prodInfo.prompt())
_prodInfo.run();
} identifiername lastValueElementName()
{
return reportStr(ReportProdInfo);//指定Mophx报表的名称
}

我们可以根据Main方法的传入参数args的方法dataset/record来获取从一个MenuItem运行该类时传入的Datasource记录,进而根据它对要展示的数据进行过滤。

在AX2012中Runbase框架已经被SysOperation框架替代,RunbaseReport类的替代就是SrsReportRunController(从SysOperationController扩展而来),下面来看看如何使用这个新的控制类来传递记录参数到SSRS报表。

如果SSRS报表使用的是RDP class作为数据源,那你已经有了DataContract类,我们可以直接传入参数到DataContract类:

class SrsRdpSampleReportController extends SrsReportRunController
{
} public static void main(Args _args)
{
SrsRdpSampleReportController controller = new SrsRdpSampleReportController();
controller.parmReportName('RdpSampleReport.AutoDesign1');
controller.parmArgs(_args);
controller.startOperation();
} protected void preRunModifyContract()
{
SrsRDPContractSample rdpContract=this.parmReportContract().parmRdpContract();
; if(args && args.record()) rdpContract.parmRecord(args.record());
}

这里通过rdpContract.parmRecord(args.record())将从Menuitem args参数得到的记录传入data contract类,后续在data provider class中根据data contract的parmRecord()得到的记录处理数据就可以了。

如果SSRS报表使用Query作为数据源,同样我们在preRunModifyContract方法中获取报表的Query对象做处理就可以了,得到Query对象可以使用

Query query=this.getFirstQuery();

或者

Query query=this.parmReportContract().parmQueryContracts().lookup(this.getFirstQueryContractKey());

最后我们只要创建一个Menu Item来运行SrsRdpSampleReportController就可以了。

[AX2012]在SSRS报表中获取从Menuitem传入的记录的更多相关文章

  1. [AX2012 R3]在SSRS报表中使用QR二维码

    AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...

  2. AX2012/D365 SSRS报表开发

    大家好,好久没有做SSRS报表了,近期刚好有做2张,就整理起来供初学者参考. AX中SSRS报表开发的框架,父类非常多,这里跟大家简单分享2种比较常用的场景供大家使用. 1.简单的过滤字段,无特殊过滤 ...

  3. Dynamics CRM 在报表中获取当前登陆用户的guid

    <span style="font-size:18px;">CRM提供函数,只需在报表中调用即可.</span> <pre class="s ...

  4. SSRS 报表中的Chart在IE中不显示

    解决办法: 重启SSRS服务...

  5. MYSQL中获取得最后一条记录的语句

    方法1:select max(id) from tablename 方法2:select last_insert_id(); 在MySQL中,使用auto_increment类型的id字段作为表的主键 ...

  6. .NET[C#]使用LINQ从List<T>集合中获取最后N条数据记录的方法有哪些?

    https://codedefault.com/2018/using-linq-to-get-the-last-n-elements-of-a-collection-in-csharp-applica ...

  7. 从BIRT报表文件中获取页面设置信息(页边距、纸张大小、输出方向)的方法

     从BIRT报表文件中获取页面设置信息(页边距.纸张大小.输出方向)的方法    报表打印时,尤其是套打的报表,页面设置信息非常重要,比如页边距,纸张大小,输出方向等,而且每个报表的相关参数有可能不同 ...

  8. AutoCAD中的扩展字典及扩展记录(C#)

    在学习CAD扩展记录的过程中,遇到了一些问题,也积累了一些经验,现在给大家分享一些我的学习心得.在学习扩展字典之前需要读者了解cad的组码,也就是DxfCode.感兴趣的也可以了解一下扩展数据的相关内 ...

  9. Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据

    今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...

随机推荐

  1. C#里的SubString和Convert.ToDateTime

    1.C#里的SubString String.SubString(int   index,int   length) index:开始位置,从0开始 length:你要取的子字符串的长度 2.C#语言 ...

  2. vnc viewer on Ubuntu

    我使用的是putty和SSL/SSH Vnc Viewer.因为刚入坑,也希望小白们能少走弯路,所以本贴写得比较细. 先说说vnc server和 vnc viewer的区别:server用于服务器, ...

  3. Ubuntu 安装软件方法

    Ubuntu软件安装有几种方式,常用的是deb包的安装方式,deb是debian系列的Linux包管理方式,Ubuntu软件安装属于debian的派生,也默认支持这种软件安装方式,当下载到一个deb格 ...

  4. 关于Unity中Mecanim动画的重定向与动画混合

    应用 一个RPG游戏,里面有100种怪物,每种怪物其实都差不多的,行走,跳跃,攻击,难道动画师要调100次动画吗?其实不需要 Unity抽象出人形动画系统,用Unity简化版的骨骼来进行统一的管理,只 ...

  5. Policy Gradient

    Policy Gradient是区别于Q-Learning为代表的value based的方法.policy gradient又可以叫reinforce算法(Williams, 1992). 如今的A ...

  6. Eclipse中配置resin 4.x

    开发web项目时,你还困扰在,反复启动web容器的痛苦中么?也许会有人说,用调试模式.但是如果涉及到配置文件或者service类,还是不得不重启web容器吧,而且偶尔会出现抽风情况,没生效的情况(这时 ...

  7. 【转】JS对Cookie的读写删除

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...

  8. GitHub developer API 学习

    官网地址:https://developer.github.com/v3/ 目录 当前版本 schema parameters root endpoint client errors http red ...

  9. 了解VIM的寄存器

    VIM下的删除:delete; 复制:yank; 粘帖:put; 都会用到VIM下的相关寄存器,今天就说说这个寄存器的问题: VIM中有多种寄存器:包括: 有名寄存器,用名字("a-&quo ...

  10. unity-----------------------使用BuildAssetBundle打包

      我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的. 1.不保存就在上传 这个操作太恐怖了,切记!!在 U3D里 ...