Dynamics AX Blog - Posts from March 2019
These posts are machine-translated.
Filter a FormdataSource by financial dimensionsIf you only want to display data records of a table that contain certain financial dimensions in a form, you can do this by overwriting the init() of the FormDataSource as follows:
public void init()
{
super();
SysQuery::addDimensionAttributeRange(salesTable_ds.query(),
salesTable_ds.name(),
fieldStr(Salestable, DefaultDimension),
DimensionComponent::DimensionAttribute,
'1001',
'CostCenter');
}
You can also call addDimensionAttributeRange() multiple times, so you can filter for multiple dimensions simultaneously. clearDimensionRangesFromQuery() removes such filters: SysQuery::clearDimensionRangesFromQuery(salesTable_ds.query())
|
|
|
|
|
|
|

If you want to run through the contents of a temporary table with a QueryRun, you have to use the method setRecord() of the QueryRun object.
Simple example
static void Job1(Args _args) { TmpFrmVirtual tmpFrmVirtual; InventTable inventTable; Query q; QueryRun qr; QueryBuildDataSource qbds1, qbds2; TmpFrmVirtual populateTmpFrmVirtual() { TmpFrmVirtual tmpFrmVirtualLocal; tmpFrmVirtualLocal.clear(); tmpFrmVirtualLocal.ItemId = "A0001"; tmpFrmVirtualLocal.insert(); tmpFrmVirtualLocal.clear(); tmpFrmVirtualLocal.ItemId = "A0002"; tmpFrmVirtualLocal.insert(); tmpFrmVirtualLocal.clear(); tmpFrmVirtualLocal.ItemId = "A0003"; tmpFrmVirtualLocal.insert(); return tmpFrmVirtualLocal; } q = new Query(); qbds1 = q.addDataSource(tableNum(TmpFrmVirtual)); qr = new QueryRun(q); qr.setRecord(populateTmpFrmVirtual()); while (qr.next()) { tmpFrmVirtual = qr.get(tableNum(tmpFrmVirtual)); info(tmpFrmVirtual.ItemId); } }