AX 2012 - create a SSRS report that takes ID as a parameter and displays the associated Sales order

Today we will learn on how to create a sales report that takes sales id as a parameter and print the sales order corresponding to the supplied sales id


       Create a temporary table named TEC_SALESINVOICETMP with Tabletype: tempDB
Make 3 Classes:-
 [DataContractAttribute]

class SalesReportDC
{
    RecId      recid;
}

[DataMemberAttribute("RecId")]
public RecId parmSalesRecid(RecId _recid =recid)
{
recid = _recid;
return recid;
}
-----------------------------------------------------------------------------
class SalesReportController extends SrsReportRunController
{

}
protected void preRunModifyContract()
{

    SalesReportDC  contract;
    RecId           recid;
    ;
    contract = this.parmReportContract().parmRdpContract() as SalesReportDC;
    contract.parmSalesRecid(this.parmArgs().record().RecId);

}
public static void main(Args _args)
{
    SalesReportController controller = new SalesReportController();
    controller.parmReportName(ssrsReportStr(SalesReportRDP, SalesReport));  //reportname,design
    controller.parmArgs(_args);
   // controller.setRange(_args, controller.parmReportContract().parmQueryContracts().lookup(controller.getFirstQueryContractKey()));

    //if (controller.prompt())
   // {
        controller.startOperation();
    //}
}
-----------------------------------------------------------------
[SRSReportParameterAttribute(classStr(SalesReportDC))]
class SalesReportRDP extends  SRSReportDataProviderBase
{
    TEC_SalesInvoiceTmp     salesInvoiceTmp; //temptable
   // SalesLine       salesline;
    //InventTable     inventtable;
    //SalesTable      salestable;
    CustInvoiceJour     custinvoicejour;
    CustInvoiceTrans    custinvoicetrans;
    RecId           recId;
}
[SRSReportDataSetAttribute(tableStr(TEC_SalesInvoiceTmp))]
public TEC_SalesInvoiceTmp getSalesInvoiceTmp()
{
    select salesInvoiceTmp;
    return salesInvoiceTmp;
}
private void insertData()
{
    SalesTable          salesTable;
   //  select salesTable   where salesTable.SalesId    ==  custinvoicejour.SalesId;
    salesTable                       = custinvoicejour.salesTable();
    salesInvoiceTmp.ItemId           = custinvoicetrans.ItemId;
    SalesInvoiceTmp.DeliveryDate     = salesTable.DeliveryDate;
    SalesInvoiceTmp.SalesId          = custinvoicetrans.SalesId;
    SalesInvoiceTmp.SalesName        = salesTable.SalesName;
    SalesInvoiceTmp.Price            = custinvoicetrans.SalesPrice;
    SalesInvoiceTmp.NameAlias        = custinvoicetrans.itemName();
    SalesInvoiceTmp.insert();
}
public void processReport()
{
    SalesReportDC           salesReportContract = this.parmDataContract();
    Query                   query = new Query();
    QueryBuildDataSource    qbds,qbds1,qbds2;
    QueryRun                qr;
    ;

    recId               =   salesReportContract.parmSalesRecid();
    qbds = query.addDataSource(tableNum(custinvoicejour));
    qbds1 = qbds.addDataSource(tableNum(custinvoicetrans));
    qbds.addRange(fieldNum(CustInvoiceJour,recId)).value(queryValue(recid));
    qbds1.relations(true);

    qbds1.joinMode(JoinMode::InnerJoin);

    qr = new QueryRun(query);

    while(qr.next())
    {
        custinvoicejour       =   qr.get(tableNum(custinvoicejour));
        custinvoicetrans      =   qr.get(tableNum(custinvoicetrans));
        //salestable       =   qr.get(tableNum(salestable));
        this.insertData();
    }

   // select salesInvoiceTmp where salesInvoiceTmp.ItemId == salesReportContract.parmSalesRecid();
    super();
}

 Now create a menu item – Output type



Drag the menu item in Menu.

Now go to visual studio and design the report.  Select precision design. And after designing add to AOT and Publish.

Now view your report in AX.






No comments:

Post a Comment