UI Builder report is used to manipulate the request form rendered by the AX framework before a report is executed. The request form for a report is generated by the framework based on the meta data provided by the contract class.
Below are the steps that are required to manage the User Interface of a report
- Create a UI builder class by extending the class SrsReportDataContractUIBuilder.
- We will have to create event handlers for the control on the report contract.
- The event handlers created in step 2 will have to be attached to the control created by the reporting framework using the PostBuild method of the UIBuilder class.
- The contract class has to be modified to include a reference to the UIBuilder class. This is done by including the SysOperationContractProcessingAttribute on the contact class declaration.
[
DataContractAttribute
,SysOperationContractProcessingAttribute(classstr(STPLedgerBalanceReportUIBuilder))
]
class STPLedgerBalanceReportUIBuilder extends SrsReportDataContractUIBuilder
{
STPLedgerBalanceReportContract contract ;
}
public void build()
{
super();
Contract = this.dataContractObject();
}
public void lookup(FormStringControl _control)
{
container cnt;
Query query = new Query();
QueryBuildDataSource qbds, qbdsCI;
QueryBuildRange range, rangeDA;
qbds = query.addDataSource(tableNum(USERDATAAREAFILTER));
range = qbds.addRange( fieldNum( UserDataAreaFilter, User) );
range.value( SysQuery::value( curUserId())) ;
qbdsCI = qbds.addDataSource( tableNum( CompanyInfo) );
qbdsCI.addLink( fieldNum( UserDataAreaFilter, DataArea) , fieldNum( CompanyInfo, DataArea) );
qbdsCI.joinMode(JoinMode::InnerJoin);
if ( Global::hasTableAccess( tableNum( STPRowDefinitionLine) , AccessType::Delete) == false )
{
rangeDA = qbds.addRange( fieldNum( UserDataAreaFilter, DataArea) );
rangeDA.value( SysQuery::value( curext()) );
}
qbds.fields().clearFieldList();
qbds.fields().addField(fieldNum(USERDATAAREAFILTER, DataArea));
qbdsCI.fields().addField ( fieldNum( CompanyInfo,Name) ) ;
SysLookupMultiSelectGrid::lookup(query, _control, _control, cnt);
}
public void postBuild()
{
DialogField companyList;
super();
companyList = this.bindInfo().getDialogField( this.dataContractObject(), methodStr(STPLedgerBalanceReportContract, parmCompanyList) ) ;
companyList.registerOverrideMethod(
methodStr(FormStringControl, lookup),
methodStr(STPLedgerBalanceReportUIBuilder,Lookup),
this);
}
public void getFromDialog()
{
super();
}