zoukankan      html  css  js  c++  java
  • [AX2012]在SSRS报表中获取从Menuitem传入的记录

    在较早版本的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就可以了。

  • 相关阅读:
    前端面试题精选
    闭包、作用域、THIS、OOP
    Ubuntu,debian一键安装Mariadb
    两条命令实现nodejs快速安装
    HTML 5的革新——语义化标签section和article的区别
    uni-app之uni.showToast()image路径问题
    vue-cli4配置文件别名
    蓝湖使用方法
    Node组件——Express简介
    程序员最深情的告白——《致对象》
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/3457820.html
Copyright © 2011-2022 走看看