SSRS DP Class don't accept table or container data types as parm method. I searched at forums and saw str data type adviced. But I think this's not best approach. At last learned best way already in standard AX SSRS reports. At this link there's a PDF file tells look for check report. I generated this report with look form ChequeDP and ChequeController classes:
Controller class:
class declaration:
class myController extends SrsReportRunController
{
#define.ReportName('myreport.Report')
myTMPTable myTMPTable;
}
public static void main(Args _args)
{
SysLastValue SysLastValue;
myController controller = new myController();
controller.parmReportName(#ReportName);
controller.parmArgs(_args);
controller.DeleteTmpData();
controller.init();
controller.startOperation();
}
protected void prePromptModifyContract()
{
SrsTmpTblMarshallerContract contract = this.parmReportContract().parmRdpContract() as SrsTmpTblMarshallerContract;
new SRSReportRunPermission().assert();
contract.parmTmpTableDataRecId(SRSTmpTblMarshaller::SendTmpTblToDataProvider(myTMPTable));
}
public void init()
{
FormDataSource ds;
TransDate transDate;
VendTrans vendTrans;
if (!this.parmArgs() ||
!this.parmArgs().record() ||
this.parmArgs().dataset() != tableNum(VendTrans))
throw error("Report should be call with correct parameter!..");
ds = this.parmArgs().record().dataSource();
vendTrans = ds.getFirst(1);
transDate = vendTrans.transDate;
PaymentReceipt.VendAccount = vendTrans.AccountNum;
for (vendTrans = ds.getFirst(1); vendTrans != null; vendTrans = ds.getNext())
{
myTMPTable.Date = vendTrans.TransDate;
...
myTMPTable.insert();
}
}
DP Class:
// <ETG - memre > GN: T: 11.07.2014 A:
[SRSReportParameterAttribute(classStr(SrsTmpTblMarshallerContract))]
public class mpDP extends SRSReportDataProviderBase
{
myTMPTAble myTMPTable;
}
private void initTmpTable()
{
SrsTmpTblMarshallerContract contract = this.parmDataContract() as SrsTmpTblMarshallerContract;
new SRSReportRunPermission().assert();
myTMPTable = SRSTmpTblMarshaller::getTmpTbl(contract.parmTmpTableDataRecId());
SRSTmpTblMarshaller::deleteTmpTblData(contract.parmTmpTableDataRecId());
CodeAccessPermission::revertAssert();
}
public void processReport()
{
CompanyInfo Company;
VendTable vendTable;
AmountMST amount;
TempStr NumtoTxt;
LedgerJournalTrans LedgerTrans;
this.initTmpTable();
...
}