Sunday, April 12, 2015

Create a New Report Project by Using Controller Class

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