【问题标题】:Query range not equal to zero查询范围不为零
【发布时间】:2014-05-13 20:26:43
【问题描述】:

我在 AX 2012 R2 环境中。

我想向 HcmEmployment 表添加一个查询范围并过滤掉 LegalEntity 值 = 0 的行。

以下代码在运行时失败,出现异常“Invalid Range”。

qbrLegalEntity = qbds.addRange(fieldNum(HcmEmployment, LegalEntity));
strRangeCondition = '(%1 != %2)';
qbrLegalEntity.value(strFmt(strRangeCondition, 
                        fieldStr(HcmEmployment, LegalEntity),
                        queryValue("0")));

是否可以对这个范围条件进行编码?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    不要让它变得更难:

    qbds.addRange(fieldNum(HcmEmployment,LegalEntity)).value(SysQuery::valueNot(0));
    

    查询表达式失败的原因是使用了引用零的queryValue("0")。将其更改为 0 也可以,但又太费力了。

    更短的是:

    qbds.addRange(fieldNum(HcmEmployment,LegalEntity)).value('!0');
    

    要诊断查询错误,请查看生成的 SQL:

    info(qbds.toString());
    

    【讨论】:

    • 抱歉,出现同样的错误 - 无效范围。 SysQuery::valueNot 和 value 方法都返回一个字符串,而 LegalEntity 是一个 int。因此,“无效范围”消息是有道理的。我错过了什么吗?
    • 你一定搞砸了别的东西。 SysQuery::valuevalueNot 返回一个字符串,因为这是 value 函数接受的唯一内容。
    • 从 HcmEmployment(HcmEmployment) 中选择 HcmWorker.RecId = HcmEmployment.Worker AND ((NOT (LegalEntity = 0)))
    • 我犯了一个错误。我的 queryBuildDataSource 指向了错误的表。代码现在运行时没有“无效范围”异常。但是,它不会产生预期的结果。未强制执行范围(不等于 0)。查询的字符串表示如下: SELECT FROM HcmEmployment(HcmEmployment) WHERE HcmWorker.RecId = HcmEmployment.Worker AND ((NOT (LegalEntity = 0)))
    • 这是联接的一部分吗?如果没有适当的上下文,很难猜测问题出在哪里。如果您发布表格或其他内容,机会会更好。此外,上述问题已得到解答,因此最好发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 2013-07-13
    • 2015-06-25
    • 1970-01-01
    • 2019-05-20
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多