Axapta 修改表单上的查询字符串以添加基于其他字段的筛选器

Axapta 修改表单上的查询字符串以添加基于其他字段的筛选器,axapta,dynamics-ax-2012,x++,Axapta,Dynamics Ax 2012,X++,我有一个查询表,从一个自定义查询视图工作。表单有过滤器,我在表单上视图的executeQuery方法中使用它来添加各个字段的范围 新的要求是根据查询中的两个字段进行筛选。 示例:PurchLine表是查询中的一个表 需要一个新的范围: if PurchLine.ItemId != “” then filter by PurchLine.PurchStatus == None 但是,如果项目具有特定值 then filter by PurchStatus == Received.

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

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

需要一个新的范围:

if PurchLine.ItemId != “” then 
    filter by PurchLine.PurchStatus == None 
但是,如果项目具有特定值

then filter by PurchStatus == Received.  
(好的,这只是一个例子!)

我无法修改我的查询,以便根据项目字段在PurchStatus上添加范围

我确切地知道查询的字符串值必须是什么样子,但是如何修改查询字符串呢

当前查询字符串如下所示(如果我在executeQuery中的super上设置了断点):


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

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

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

有关详细信息,请参阅此链接。

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

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

有关详细信息,请参阅此链接。

成功了,谢谢!我在状态上添加了一个范围,并且能够检查ItemId字段。它起作用了,谢谢!我在状态上添加了一个范围,并且能够检查ItemId字段。
queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))',
                      fieldStr(InventTable, ItemType),
                      any2int(ItemType::Service),
                      any2int(ItemType::Item),
                      fieldStr(InventTable, ProjCategoryId),
                      queryValue("Spares")));