// 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();
}
}
Subscribe to:
Post Comments (Atom)
D365 F&O X++ code Update_Recordset and SkipDataMethods still calling update method
D365 F&O X++ code Update_Recordset and SkipDataMethods still calling update method It sounds like you're encountering an issue where...
-
X++ code to read the Excel file static void RB_ReadExcel(Args _args) { SysExcelApplication application; SysExcelWorkbooks w...
-
//Create a new job and paste the code static void RB_ReadTextFile(Args _args) { Filename ...
-
// Create a job and paste the below code .. static void RB_validateEmail(Args _args) { Str email; Str MatchEmail...
No comments:
Post a Comment