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就可以了。

  • 相关阅读:
    用户故事与敏捷方法阅读笔记2
    用户故事与敏捷方法阅读笔记1
    梦断代码阅读笔记3
    梦断代码阅读笔记2
    梦断代码阅读笔记1
    疫情可视化项目-进度2
    疫情可视化项目-进度1
    每日总结3.16
    Android体温记录器更新-进度5
    每日总结3.11
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/3457820.html
Copyright © 2011-2022 走看看