修改表单上的查询字符串以根据其他字段

时间:2017-03-10 07:00:50

标签: axapta dynamics-ax-2012 x++

我有一个查询表单,该表单适用于带有自定义查询的视图。表单有过滤器,我在表单视图的executeQuery方法中使用它来添加各个字段的范围。

新要求是根据查询中的两个字段进行过滤。 示例:PurchLine表是查询中的一个表。

需要新的范围:

if PurchLine.ItemId != “” then 
    filter by PurchLine.PurchStatus == None 

但是,如果Item具有SPECIFIC值,

then filter by PurchStatus == Received.  

(好的,这只是一个例子!)。

我无法根据Item字段修改我的查询以在PurchStatus上添加范围。

我确切知道查询的字符串值必须如何查看,但如何修改查询字符串?

当前查询字符串如下所示(如果我在executeQuery中使用super断点):

SELECT FIRSTFAST * FROM OpenPOLinesView(OpenPOLinesView) WHERE ((CreatedDateTime<='2016-11-30T23:59:59')) AND ((VendAccount = N'S000001048'))

我想在最后添加:

AND (((ItemId = N'') AND (PurchStatus = 0)) OR ((ItemId = N'XXX123') AND (PurchStatus = 2)))

如何在代码中修改查询字符串?

1 个答案:

答案 0 :(得分:3)

您可以使用查询表达式,例如

queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))',
                      fieldStr(InventTable, ItemType),
                      any2int(ItemType::Service),
                      any2int(ItemType::Item),
                      fieldStr(InventTable, ProjCategoryId),
                      queryValue("Spares")));

有关详细信息,请参阅此链接Using Expressions in Query Ranges [AX 2012]