Use of Complex Query Ranges in
Dynamics AX
1.
Adding a query with a datasource.
query =
new Query();
dsInventTable = query.addDataSource(tableNum(InventTable));
// Add our range
queryBuildRange = dsInventTable.addRange(fieldNum(InventTable, DataAreaId));
2.
Simple criteria
Lets find the record where the value of ItemId
field is Item1. Take note of the single quotes and parenthesis surrounding the
entire expression.
queryBuildRange.value(strFmt('(ItemId
== "%1")', queryValue("Item1")));
Find records where the ItemType is Service. Note the use of any2int().
queryBuildRange.value(strFmt('(ItemType == %1)', any2int(ItemType::Service)));
Find records where the ItemType is Service or
the ItemId is Item1. Note the nesting of the parenthesis in this example.
queryBuildRange.value(strFmt('((ItemType
== %1) || (ItemId == "%2"))', any2int(ItemType::Service),
queryValue("Item1")));
Find records where the modified date is after
1st January 2000. Note the use of Date2StrXpp() to format the date correctly.
queryBuildRange.value(strFmt('(ModifiedDate
> %1)', Date2StrXpp(01012000)));
3.
Complex criteria with combined AND and OR
clauses
We need to find those records where the ItemType
is Service, or both the ItemType is Item and the ProjCategoryId is Spares. This
is not possible to achieve using the standard QueryRange syntax.
queryBuildRange.value(strFmt('((%1
== %2) || ((%1 == %3) && (%4 == "%5")))',fieldStr(InventTable,
ItemType),any2int(ItemType::Service),any2int(ItemType::Item),fieldStr(InventTable,
ProjCategoryId),queryValue("Spares")));
-Harry
Use of Complex Query Ranges in Dynamics AX
1. Adding a query with a datasource.
query = new Query();
dsInventTable = query.addDataSource(tableNum(InventTable));
// Add our range
queryBuildRange = dsInventTable.addRange(fieldNum(InventTable, DataAreaId));
Lets find the record where the value of ItemId field is Item1. Take note of the single quotes and parenthesis surrounding the entire expression.
queryBuildRange.value(strFmt('(ItemId == "%1")', queryValue("Item1")));
Find records where the ItemType is Service. Note the use of any2int().
queryBuildRange.value(strFmt('(ItemType == %1)', any2int(ItemType::Service)));
Find records where the ItemType is Service or the ItemId is Item1. Note the nesting of the parenthesis in this example.
queryBuildRange.value(strFmt('((ItemType == %1) || (ItemId == "%2"))', any2int(ItemType::Service), queryValue("Item1")));
Find records where the modified date is after 1st January 2000. Note the use of Date2StrXpp() to format the date correctly.
queryBuildRange.value(strFmt('(ModifiedDate > %1)', Date2StrXpp(01012000)));
We need to find those records where the ItemType is Service, or both the ItemType is Item and the ProjCategoryId is Spares. This is not possible to achieve using the standard QueryRange syntax.
queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))',fieldStr(InventTable, ItemType),any2int(ItemType::Service),any2int(ItemType::Item),fieldStr(InventTable, ProjCategoryId),queryValue("Spares")));