我想我可能在AX 2009上发现了一个有趣的错误,我不确定如何继续。
我正在尝试撰写新报告,并根据LedgerTrans表的过帐字段过滤此报告的其中一个条件。但是,似乎在执行报告时,将解析枚举Purchase, receipt
的标签而不考虑引号。这通常不会有问题,但本例中的枚举标签包含逗号。结果是,在运行时,查询对话框显示为:Purchase, consumption, __ILLEGAL_VALUE__.
即使我使用枚举值或名称,我也会得到此结果。报告必须保持交互状态,但必须锁定此字段,因此我们无法让用户在运行时调整查询。
此时我不想更改标签本身,但如果这是解决这个问题的唯一方法,我会的。有没有其他人遇到这个,或者知道我们如何克服它?
答案 0 :(得分:2)
我之前遇到过这种情况。有时可接受的选项是将条件值硬编码为OR语句,而不是逗号分隔列表:
((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) || (LedgerTrans.Posting == LedgerPostingType::PurchConsump))
可以输入范围过滤器框,也可以通过x ++代码设置为范围值:
ledgerPostingRange.value("((LedgerTrans.Posting == LedgerPostingType::PurchReceipt) ||
(LedgerTrans.Posting == LedgerPostingType::PurchConsump))");
AX不会尝试将这些转换为标签,因此它们会保留为不同的值,而不是呈现为标签。请注意,需要使用括号才能正确解析它。
由于 ILLEGAL_VALUE 即使在尝试使用标签中包含逗号的单个值时也会出现,因此可以对单个值执行相同操作:
ledgerPostingRange.value("(LedgerTrans.Posting == LedgerPostingType::PurchReceipt)");
答案 1 :(得分:0)
我肯定会改变标签!但作为一种解决方法,您可以使用枚举值的数字。
如果经常查询该字段,您可以将该字段放在对话框中,然后更改查询:
ledgerPostingRange.value(ledgerPostingType ? int2str(ledgerPostingType) : '');