2012-04-02 80 views
2

我想我可能在AX 2009中发现了一个有趣的错误,但我不确定如何继续。AX 2009:报告范围枚举解析枚举值逗号?

我正在尝试编写一个新报告,并且此报告的其中一个条件将根据LedgerTrans表的Posting字段进行过滤。但是,似乎报表要执行时,解析枚举Purchase, receipt的标签时不考虑引号。这通常不会成为问题,但本例中的枚举标签包含逗号。结果是,运行查询对话框时显示:Purchase, consumption, __ILLEGAL_VALUE__.即使使用枚举值或名称,我也会得到此结果。该报告必须保持交互式,但该字段必须锁定,因此我们无法让用户在运行时调整查询。

在这一点上,我不想改变标签本身,但如果它是解决这个问题的唯一方法,我会的。有没有其他人遇到过这种情况,或者知道我们如何克服它?

回答

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)"); 
0

我肯定会改变标签!但作为一种解决方法,您可以改为使用枚举值的数字。

如果字段被查询,你可以把该领域的对话,然后更改查询:

ledgerPostingRange.value(ledgerPostingType ? int2str(ledgerPostingType) : ''); 
+0

我试图使用的数值的枚举,但它仍然取得了相同的结果。同时我会更改标签,但这显然不是理想的结果,尤其是因为这是一个系统枚举。 有趣的是,如果你在用户端输入它,这个功能就可以正常工作,而不是如果你在报告(可能还有其他)查询中预先定义了它。 – kingofzeal 2012-04-03 18:22:50