[AX 2012]SSRSレポートでMenuitemから送信されたレコードを取得する
3892 ワード
以前のバージョンのAXでは、レポートを実行するときにクラスRunBaseReportを使用し、サブクラスを拡張し、レポートを実行します.典型的なAxapta 3の例です.
Mainメソッドの入力パラメータargsのメソッドdataset/recordに従って、クラスを実行するMenuItemから入力されたDatasourceレコードを取得し、それに基づいて表示するデータをフィルタリングすることができます.
AX 2012ではRunbaseフレームワークがSysOperationフレームワークに置き換えられており、RunbaseReportクラスの置き換えはSrsReportRunControl(SysOperationControllerから拡張)であり、この新しい制御クラスを使用して記録パラメータをSSRSレポートに渡す方法を見てみましょう.
SSRSレポートでデータ・ソースとしてRDP classを使用している場合は、すでにDataContractクラスがあり、DataContractクラスにパラメータを直接入力できます.
ここではrdpContract.parmRecord(args.record()は、Menuitem argsパラメータから得られたレコードをdata contractクラスに転送し、その後data provider classでdata contractのparmRecord()から得られたレコード処理データでよい.
SSRSレポートでデータソースとしてQueryを使用する場合は、preRunModifyContractメソッドでもレポートのQueryオブジェクトを取得して処理すればよいので、Queryオブジェクトを取得して使用できる
または
最後に、SrsRdpSampleReportControllerを実行するためにMenu Itemを作成すればよい.
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を作成すればよい.