AX 2012 R3 X++ code to select multiple values in the SSRS report parameters

// Step 1: Create a contract class 
[
DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(AOCustParametersUIBuilder))
]
class RBCustDataContract implements SysOperationValidatable
{

    List             custAccountList;

}

// Step 2 : Create a parm method.
[
DataMemberAttribute(identifierStr(CustomerAccountList)),
AifCollectionTypeAttribute("@SYS14787", Types::String),
SysOperationLabelAttribute(literalStr("@SYS14787")),
SysOperationHelpTextAttribute(literalStr("@SYS14787")),
SysOperationDisplayOrderAttribute('1')
]
public List parmCustAccountList(List _custAccountList = custAccountList)
{
    custAccountList = _custAccountList;
    return custAccountList;
}

// Step 3: Create a UI Builder Class:
class AOCustParametersUIBuilder extends SysOperationAutomaticUIBuilder
{
    DialogField     dialogCust;
}

// Step 4 : Create a new build method.

public void build()
{
    RBCustDataContract       contract;

    contract = this.dataContractObject() as RBCustDataContract ;

    dialogCust   =   this.addDialogField(methodStr(RBCustDataContract , parmCustAccountList), contract);
 
}

// Step 5: Create a new lookup method for customer

private void custTableLookup(FormStringControl _control)
{
    Query       query;
    container   conCustTable;

    query = new Query(queryStr(CustTableSRS));

    SysLookupMultiSelectGrid::lookup(
    query,
    _control,
    _control,
    conCustTable);
}

// Step 6 : Create post build method.

public void postBuild()
{
    RBCustDataContract       contract;

    super();

    contract = this.dataContractObject() as RBCustDataContract       ;

    // multiselect lookup for Customer account
    dialogCust = this.bindInfo().getDialogField(contract,methodStr(RBCustDataContract       , parmCustAccountList));

    dialogCust.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(AOCustParametersUIBuilder , custTableLookup),this);
    if (dialogCust)
    {
        dialogCust.lookupButton(2);
    }
}

//Step 7:  Create postRun method if you need

public void postRun()
{
    //super();
}


// Step 8 :Create a Data Provider Class 

[
SRSReportParameterAttribute(classstr(RBCustDataContract ))
]
class RBCustDP extends  SRSReportDataProviderBase
{
    CustLedgerTmp _custLedgerTmp;  // declare the temporary table
}

//Step 9 :  Create a method to get the temporary table.

[SRSReportDataSetAttribute(tableStr(CustLedgerTmp ))]
public CustLedgerTmp getCustLedgerTmp ()
{
    select * from _custLedgerTmp;
        return _custLedgerTmp;
}

//Step 10 : Create a processReport method.

[SysEntryPointAttribute]
public void processReport()
{
     ListIterator                        custAccountListIterator;
     RBCustDataContract        dataContract;


   dataContract = this.parmDataContract();
   custAccountListIterator     = new ListIterator(dataContract.parmCustAccountList());

    // get the multi select value using ListIterator and apply your logic
    while(custAccountListIterator.more())
    {
        info(strfmt("%1",custAccountListIterator.value()));
        custAccountListIterator.next();
    }
}








No comments:

Post a Comment