class VendAccountQueryBuilder
VendTable что per company join c DirPartyTable что cross-company
X++:
public void initialize()
{
DataAreaId company;
VendAccount vendAccount;
DirPartyName vendName;
Query vendAccountQuery;
QueryBuildDataSource vendAccountQbds;
QueryBuildDataSource dirPartyTableQbds;
company = this.getArgs().parmCompany();
vendAccount = this.getArgs().parmVendAccount();
vendName = this.getArgs().parmVendName();
vendAccountQuery = new query();
if(!company)
{
//Company cannot be empty
throw AifFault::Fault("@SYS4007574", #NoSuchCompany);
}
vendAccountQuery.allowCrossCompany(true);
vendAccountQuery.addCompanyRange(SysQuery::value(company));
vendAccountQbds = vendAccountQuery.addDataSource(tableNum(VendTable));
vendAccountQbds.orderMode(OrderMode::OrderBy);
vendAccountQbds.addSelectionField(fieldNum(VendTable, AccountNum));
vendAccountQbds.addSortField(fieldNum(VendTable, AccountNum));
if (vendAccount)
{
vendAccountQbds.addRange(fieldNum(VendTable,AccountNum)).value(vendAccount);
}
dirPartyTableQbds = vendAccountQbds.addDataSource(tableNum(DirPartyTable));
dirPartyTableQbds.relations(true);
dirPartyTableQbds.addSelectionField(fieldNum(DirPartyTable, Name));
if (vendName)
{
dirPartyTableQbds.addRange(fieldNum(DirPartyTable, Name)).value(vendName);
}
query = vendAccountQuery;
queryRun = new QueryRun(query);
}