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();
...
}
rdp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
rdp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
11 Temmuz 2014 Cuma
17 Haziran 2014 Salı
AX 2012 Add validate method, groupping and labeling parameters with RDP class
Class Declaration:
[
DataContractAttribute,
SysOperationGroupAttribute("DateGroup", "Date Range", "1", FormArrangeMethod::Vertical),
SysOperationGroupAttribute("Other", "Other Filters", "1", FormArrangeMethod::Vertical)
]
class myContract implements SysOperationValidatable
{
...
}
Parm method:
[DataMemberAttribute('StartDate'),
SysOperationGroupMemberAttribute("DateGroup"),
SysOperationDisplayOrderAttribute("1")]
public StartDate parmStartDate(StartDate _StartDate = startDate)
{
startDate = _StartDate;
return StartDate;
}
Validate method:
public boolean validate()
{
boolean isValid = true;
if ( !endDate || !StartDate)
isValid = checkfailed("You have to enter first/last dates!..");
return isValid;
}
[
DataContractAttribute,
SysOperationGroupAttribute("DateGroup", "Date Range", "1", FormArrangeMethod::Vertical),
SysOperationGroupAttribute("Other", "Other Filters", "1", FormArrangeMethod::Vertical)
]
class myContract implements SysOperationValidatable
{
...
}
Parm method:
[DataMemberAttribute('StartDate'),
SysOperationGroupMemberAttribute("DateGroup"),
SysOperationDisplayOrderAttribute("1")]
public StartDate parmStartDate(StartDate _StartDate = startDate)
{
startDate = _StartDate;
return StartDate;
}
Validate method:
public boolean validate()
{
boolean isValid = true;
if ( !endDate || !StartDate)
isValid = checkfailed("You have to enter first/last dates!..");
return isValid;
}
AX 2012 Add Query to SSRS report when developing with RDP
Add query attribute to data provider class:
[
SRSReportQueryAttribute (querystr(Cust)),
SRSReportParameterAttribute(classstr(myReportContract))
]
class myReportDP extends SRSReportDataProviderBase
{
...
}
Get query like this:
[SysEntryPointAttribute(false)]
public void processReport()
{
QueryRun qRun;
Query query;
...
query = this.parmQuery();
...
Do not forget make Dynamics Filter property to true at SSRS report Dataset if you want to see select query button.
[
SRSReportQueryAttribute (querystr(Cust)),
SRSReportParameterAttribute(classstr(myReportContract))
]
class myReportDP extends SRSReportDataProviderBase
{
...
}
Get query like this:
[SysEntryPointAttribute(false)]
public void processReport()
{
QueryRun qRun;
Query query;
...
query = this.parmQuery();
...
Do not forget make Dynamics Filter property to true at SSRS report Dataset if you want to see select query button.
4 Şubat 2014 Salı
AX 2012 - Test RDP class at Axapta side
How do you test your RDP classes developed for SSRS reports at AX side?
DGHCreditDetailsDP dp = new DGHCreditDetailsDP();
DGHCreditDetailsDC dc = new DGHCreditDetailsDC();
Query q;
dc.parmTransDate(str2Date("28.12.2013",123));
q = dp.parmQuery();
q.dataSourceTable(tableNum(BankAccountTrans)).addRange(Fieldnum(BankAccountTrans,accountid)).value("102 02 034 002");
dp.parmDataContract(dc);
dp.processReport();
DGHCreditDetailsDP dp = new DGHCreditDetailsDP();
DGHCreditDetailsDC dc = new DGHCreditDetailsDC();
Query q;
dc.parmTransDate(str2Date("28.12.2013",123));
q = dp.parmQuery();
q.dataSourceTable(tableNum(BankAccountTrans)).addRange(Fieldnum(BankAccountTrans,accountid)).value("102 02 034 002");
dp.parmDataContract(dc);
dp.processReport();
Kaydol:
Kayıtlar (Atom)