[AX 2012]SSRSレポートでMenuitemから送信されたレコードを取得する

3892 ワード

以前のバージョンのAXでは、レポートを実行するときにクラスRunBaseReportを使用し、サブクラスを拡張し、レポートを実行します.典型的なAxapta 3の例です.
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レコードを取得し、それに基づいて表示するデータをフィルタリングすることができます.
AX 2012ではRunbaseフレームワークがSysOperationフレームワークに置き換えられており、RunbaseReportクラスの置き換えはSrsReportRunControl(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());

最後に、SrsRdpSampleReportControllerを実行するためにMenu Itemを作成すればよい.