我在Dynamics AX 2012中有一个AOT查询,它包含HcmWorker和HcmEmployment表(以及其他表)。我的问题是,当我创建报告(而非SSRS)或以其他方式使用此查询时,我只会让员工在HcmEmployment中获得有效的时间状态。
我希望让所有在此表中都有记录的员工,即使他们目前没有工作 - 只有一次。最佳解决方案是从当前就业的HcmEmployment(如果存在)获取记录,否则记录开始日期之前的最后一个记录" now"。但是,我可以接受一个与上一个开始日期相连的解决方案。
我更喜欢一种解决方案,每次我使用它时都不需要添加代码(即在AOT查询中解决它)。
我已尝试在代码的查询中设置validTimeStateDateTimeRange属性,如果员工有多个就业,则会导致重复的行。
如果我将HcmEmployment数据源设置为ExistsJoin和firstOnly,那么它在视图中工作,但不在报告上(仍然是重复记录):(在报告上使用此视图不是一个选项,因为用户需要能够从HcmEmployment过滤DefaultDimension。
我该如何解决这个问题?
答案 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
的查询。