在AOT查询中规避有效时间状态

时间:2012-04-24 11:09:20

标签: axapta dynamics-ax-2012

我在Dynamics AX 2012中有一个AOT查询,它包含HcmWorker和HcmEmployment表(以及其他表)。我的问题是,当我创建报告(而非SSRS)或以其他方式使用此查询时,我只会让员工在HcmEmployment中获得有效的时间状态。

我希望让所有在此表中都有记录的员工,即使他们目前没有工作 - 只有一次。最佳解决方案是从当前就业的HcmEmployment(如果存在)获取记录,否则记录开始日期之前的最后一个记录" now"。但是,我可以接受一个与上一个开始日期相连的解决方案。

我更喜欢一种解决方案,每次我使用它时都不需要添加代码(即在AOT查询中解决它)。

我已尝试在代码的查询中设置validTimeStateDateTimeRange属性,如果员工有多个就业,则会导致重复的行。

如果我将HcmEmployment数据源设置为ExistsJoin和firstOnly,那么它在视图中工作,但不在报告上(仍然是重复记录):(在报告上使用此视图不是一个选项,因为用户需要能够从HcmEmployment过滤DefaultDimension。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

我“解决了”我自己的问题......

由于某种原因,报告未正确地从AOT查询继承属性(ExistsJoin)。在报告中再次删除查询后,查询init方法中的一些编译和以下代码,它可以工作:)不再有重复的记录!

this.query().validTimeStateDateTimeRange(DateTimeUtil::minValue(), 
                                         DateTimeUtil::maxValue());

答案 1 :(得分:0)

正如我所看到的,你有相互矛盾的选择:

  

我想让所有在此表中有记录的员工,即使他们没有当前的工作

  

用户需要能够从HcmEmployment

过滤DefaultDimension

如果用户过滤了就业,那么如果未选择就业,员工是否应该打印?

你可能想要什么:

  • 如果不对HcmEmployment进行过滤,请停用该数据源(属性Enabled)。

  • 如果对HcmEmployment进行过滤,请使用现有联接。

在这两种情况下,通过独立选择找到maxof(ValidFrom),maxof(ValidTo)。

查看this answer,了解如何按代码编辑查询属性。

或制作两份报告,一份是否有HcmEmployment的查询。