Normally, creating report by using controller class when the report is attached to existing form in system. Now, I will show you the recommended structure when creating this kind of project as below:
* Project Name
+ Data Dictionary
- System Table
- Temporary Table
+ Classes
+ Form
+ Queries
+ VisualStudioAXModelProjects
+ SSRSReports
+ MenuItems
- Action
The purpose of creating above structure are:
- Project Name: For indicating name of project. You can put whatever name that fit to your project.
- Data Dictionary: For containing data dictionary group such as table, view, extended datatype ... etc
- Classes: For containing controller class and data provider base class
- Form: For containing all form related to your project
- Queries: For containing all queries related to your project
- VisualStudioAXModelProjects: For containing VisualStudioAXModelProjects. It is where you design RDLC report in Ms Visual Studio.
- SSRSReports: For containing all SSRSReports of your project
- MenuItems: For containing MenuItems with type Action that will be place on form that you need to open your report.
Here is further detail with coding in classes:
* Controller class
public class YourControllerClassName extends SrsReportRunController
{
InventTransferTable mmkInventTransferTable;
}
* setRange Method of Controller class
public void setRange(Args _args, Query _query)
{
QueryBuildDataSource mmkQBDS;
QueryBuildRange mmkQR;
if(_args && _args.dataset())
{
switch(_args.dataset())
{
case tableNum(InventTransferTable):
mmkInventTransferTable = _args.record();
break;
}
}
mmkQBDS = _query.dataSourceTable(tableNum(InventTransferTable));
mmkQBDS.clearRange(fieldNum(InventTransferTable, RecId));
mmkQR = mmkQBDS.addRange(fieldNum(InventTransferTable, RecId));
if(mmkInventTransferTable)
{
mmkQR.value(queryValue(mmkInventTransferTable.RecId));
}
}
* main Method of Controller Class
public static void main(Args _args)
{
DpcMmkSTController mmkController = new DpcMmkSTController();
mmkController.parmReportName(ssrsReportStr(rptST , mmkDesign));
mmkController.parmArgs(_args);
mmkController.setRange(_args,
mmkController.parmReportContract().parmQueryContracts().lookup(mmkController.getFirstQueryContractKey()));
mmkController.parmShowDialog(false);
mmkController.startOperation();
}
* Data Provider Base Class
[
SRSReportQueryAttribute(queryStr(qryDpcMmkST))
]
class DpcMmkSTDPB extends SRSReportDataProviderBase
{
tblSTHeaderTemp mmkTblSTHeaderTemp;
tblSTDetailTemp mmkTblSTDetailTemp;
}
* getHeader Method of Data Provider Base Class
[
SRSReportDataSetAttribute(tableStr(tblSTHeaderTemp))
]
public tblSTHeaderTemp getHeader()
{
select * from mmkTblSTHeaderTemp;
return mmkTblSTHeaderTemp;
}
* getLine Method of Data Provider Base Class
[
SRSReportDataSetAttribute(tableStr(tblSTDetailTemp))
]
public tblSTDetailTemp getLine()
{
select * from mmkTblSTDetailTemp;
return mmkTblSTDetailTemp;
}
* processReport Method of Data Provider Base Class
public void processReport()
{
Query mmkQ;
QueryRun mmkQR;
InventTransferTable mmkInventTransferTable;
;
mmkQ = this.parmQuery();
mmkQR = new QueryRun(mmkQ);
//mmkQR.prompt();
while(mmkQR.next())
{
mmkInventTransferTable = mmkQR.get(tableNum(InventTransferTable));
this.setHeader(mmkInventTransferTable);
this.setLine(mmkInventTransferTable);
}
}
* setHeader Method of Data Provider Base Class
private void setHeader(InventTransferTable _InventTransferTable)
{
CompanyInfo mmkCompanyInfo;
VendTable mmkVendTable;
InventLocation mmkInventLocation;
;
mmkcompanyInfo = CompanyInfo::find();
mmkTblSTHeaderTemp.clear();
mmkTblSTHeaderTemp.CompanyName = mmkCompanyInfo.Name();
mmkTblSTHeaderTemp.CompanyAddress = mmkCompanyInfo.postalAddress().Street;
mmkTblSTHeaderTemp.CompanyPhone = mmkCompanyInfo.phone();
mmkTblSTHeaderTemp.CompanyFax = mmkCompanyInfo.teleFax();
mmkTblSTHeaderTemp.CompanyLogo = FormLetter::companyLogo();
mmkTblSTHeaderTemp.TransferID = _InventTransferTable.TransferId;
mmkTblSTHeaderTemp.ShipDate = _InventTransferTable.ShipDate;
mmkTblSTHeaderTemp.ReceiveDate = _InventTransferTable.ReceiveDate;
mmkTblSTHeaderTemp.InventLocationIdFrom = _InventTransferTable.InventLocationIdFrom;
mmkInventLocation = InventLocation::find(_InventTransferTable.InventLocationIdFrom);
mmkTblSTHeaderTemp.InventLocationNameFrom = mmkInventLocation.Name;
mmkTblSTHeaderTemp.InventLocationIdTo = _InventTransferTable.InventLocationIdTo;
mmkInventLocation = InventLocation::find(_InventTransferTable.InventLocationIdTo);
mmkTblSTHeaderTemp.InventLocationNameTo = mmkInventLocation.Name;
mmkTblSTHeaderTemp.insert();
}
* setLine Method of Data Provider Base Class
private void setLine(InventTransferTable _InventTransferTable)
{
InventTransferLine mmkInventTransferLine;
InventBatch mmkInventBatch;
InventDim mmkInventDim;
InventTable mmkInventTable;
InventJournalTrans inventJournalTrans;
;
while select * from mmkInventTransferLine
where mmkInventTransferLine.TransferId == _InventTransferTable.TransferId
{
mmkTblSTDetailTemp.ItemId = mmkInventTransferLine.ItemId;
mmkTblSTDetailTemp.ItemName = mmkInventTransferLine.itemName();
mmkInventDim = InventDim::find(mmkInventTransferLine.InventDimId);
mmkTblSTDetailTemp.BatchNo = mmkInventDim.inventBatchId;
mmkInventBatch = InventBatch::find(mmkInventDim.inventBatchId, mmkInventTransferLine.ItemId);
mmkTblSTDetailTemp.ExpiryDate = mmkInventBatch.expDate;
mmkTblSTDetailTemp.UnitId = mmkInventTransferLine.UnitId;
mmkTblSTDetailTemp.QtyTransfer = mmkInventTransferLine.QtyTransfer;
//mmkTblSTDetailTemp.Model = InventTable::find(inventJournalTrans.ItemId).itemName(inventJournalTrans.inventDim());
mmkInventTable = InventTable::find(mmkInventTransferLine.ItemId);
mmkTblSTDetailTemp.Model = mmkInventTable.NameAlias;
mmkTblSTDetailTemp.insert();
}
}
No comments:
Post a Comment