AX QueryService 2012“OR”查询 - 如何?

时间:2017-03-23 17:16:15

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

任何人都可以通过查询服务向我推荐如何进行“OR”查询的正确方向吗?

为了进行“AND”查询,我可以简单地添加两个(或更多)“范围” - 这种爵士乐:

        // build and add our new filter
        QueryDataRangeMetadata range = new QueryDataRangeMetadata
        {
            TableName = dataSource.Table,
            FieldName = fieldName,
            Value = fieldValue,
            Enabled = true
        };

        dataSource.Ranges[ranges.Length - 1] = range;

..但是如何做一个“OR”?

3 个答案:

答案 0 :(得分:1)

AX查询中的OR可以通过以下任何树方法进行:

  1. 添加其他查询范围on the same field
  2. 拥有comma-separated
  3. 的范围
  4. 使用query expression
  5. 如果OR涉及不同的表,请参见this question

    这些选项也应该应用查询服务。

答案 1 :(得分:1)

...感谢您的建议,但最终我认为这对我没有多大帮助: - (

1.在同一个字段上添加另一个查询范围

=>不幸的是,我需要查询一个不同的字段..基本上“WHERE A = 1或B = 2”类型的东西..

  1. 使用逗号分隔值
  2. =>遗憾的是,它也不适用于单独的字段

    1. 使用查询表达式
    2. =>不幸的是,我无法让这个工作,并且我想到它实际上并不是“AX查询服务2012”(根据标题)的功能,这是我正在使用的技术(看起来它是内在的东西)斧头??)。请注意,在定义Range时,需要QueryDataRangeMetadata实例的“FieldName”属性(并且没有 - 逗号分隔的字段名称不起作用)。

      从好的方面来说,我现在已经开始工作了:-) ...我这样做的方法是将表格两次添加为两个不同的数据源到查询 - 看起来很讨厌,但是男人要做什么......

      再次感谢 - OLI。

答案 2 :(得分:0)

我过去曾用过这个:

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

可能不是最干净的方法,但会完成这项工作。