Axapta 绕过AOT查询中的有效时间状态

Axapta 绕过AOT查询中的有效时间状态,axapta,dynamics-ax-2012,Axapta,Dynamics Ax 2012,我在Dynamics AX 2012中有一个AOT查询,它由HcmWorker和HcmEmployment表(以及其他表)组成。我的问题是,当我创建一个报告(不是SSRS)或以其他方式使用此查询时,我只会在Hcmememployment中获取具有有效时间状态的员工 我想让所有记录在此表中的员工,即使他们目前没有工作——而且只有一次。最佳解决方案是从hcmememployment获取当前雇用的记录(如果存在),否则获取开始日期在“现在”之前的最后一条记录。但是,我可以接受一个与最后开始日期合并的解

我在Dynamics AX 2012中有一个AOT查询,它由HcmWorker和HcmEmployment表(以及其他表)组成。我的问题是,当我创建一个报告(不是SSRS)或以其他方式使用此查询时,我只会在Hcmememployment中获取具有有效时间状态的员工

我想让所有记录在此表中的员工,即使他们目前没有工作——而且只有一次。最佳解决方案是从hcmememployment获取当前雇用的记录(如果存在),否则获取开始日期在“现在”之前的最后一条记录。但是,我可以接受一个与最后开始日期合并的解决方案

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

我曾尝试在“来自代码”的查询上设置validTimeStateDateTimeRange属性,如果员工有多个雇员,则会导致重复的行

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


如何解决此问题?

在我看来,您有相互冲突的选项:

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

以及:

用户需要能够从HcmEmployment中筛选DefaultDimension

如果用户对雇佣进行筛选,那么如果未选择雇佣,员工是否应为printet

您可能想要的:

  • 如果未在
    HcmEmployment
    上过滤,则禁用该数据源(属性
    已启用

  • 如果在
    HcmEmployment
    上进行筛选,请使用现有联接

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

查看如何按代码编辑查询属性


或者制作两份报告,一份带有或不带有对
hcmemememployment

的查询,在我看来,您有相互冲突的选项:

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

以及:

用户需要能够从HcmEmployment中筛选DefaultDimension

如果用户对雇佣进行筛选,那么如果未选择雇佣,员工是否应为printet

您可能想要的:

  • 如果未在
    HcmEmployment
    上过滤,则禁用该数据源(属性
    已启用

  • 如果在
    HcmEmployment
    上进行筛选,请使用现有联接

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

查看如何按代码编辑查询属性

或者制作两份报告,一份带有或不带有对
hcmemememployment

的查询,我“解决”了自己的问题

由于某些原因,报表没有从AOT查询中正确继承属性(
ExistsJoin
)。再次删除对报表的查询后,查询
init
方法中的某些编译和以下代码将正常工作:)不再有重复记录

this.query().validTimeStateDateTimeRange(DateTimeUtil::minValue(), 
                                         DateTimeUtil::maxValue());
我“解决”了我自己的问题

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

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

如果没有与用户筛选器匹配的记录,则不应打印员工。如果任何记录匹配,则应打印员工一次。您的解决方案需要在查询使用的每个位置(许多报告)编写大量代码,我希望避免这种情况。但是感谢您的建议:)然后选择第二个选项,使用
ExistsJoin
,然后在单独的选择中查找其余字段。如果我使用
ExistsJoin
,那么我仍然会得到重复的记录。您建议我如何使用
maxof
?我能看到它可以被使用的唯一方法是禁用HcmEmployment数据源,并且在遍历员工时,我可以检查他们是否有工作(通过使用用户范围)。不幸的是,在有大量员工的数据库中,性能会非常糟糕。这是一个解决方案,如果我没有找到一个更好的解决方案,我会考虑使用它。<代码>生存连接>代码将正常运行。对于其余的,我无能为力,因为这取决于具体的要求。如果没有与用户筛选器匹配的记录,则不应打印员工。如果任何记录匹配,则应打印员工一次。您的解决方案需要在查询使用的每个位置(许多报告)编写大量代码,我希望避免这种情况。但是感谢您的建议:)然后选择第二个选项,使用
ExistsJoin
,然后在单独的选择中查找其余字段。如果我使用
ExistsJoin
,那么我仍然会得到重复的记录。您建议我如何使用
maxof
?我能看到它可以被使用的唯一方法是禁用HcmEmployment数据源,并且在遍历员工时,我可以检查他们是否有工作(通过使用用户范围)。不幸的是,在有大量员工的数据库中,性能会非常糟糕。这是一个解决方案,如果我没有找到一个更好的解决方案,我会考虑使用它。<代码>生存连接>代码将正常运行。对于其余的,我不能帮助,因为这取决于确切的要求。