Axapta 网格中一列中来自多个数据源的数据

Axapta 网格中一列中来自多个数据源的数据,axapta,microsoft-dynamics,dynamics-ax-2012,ax,Axapta,Microsoft Dynamics,Dynamics Ax 2012,Ax,我今天完全被抛到了这个场景中。本质上,我有一个表(ProjTransPosting)存储记录,该表与许多类似结构的表(ProjCostTrans、ProjRevenueTrans等)相关。它们通过TransId进行关联,但每个TransId将只关联一个子表(这意味着如果ProjCostTrans中存在137个TransId,那么ProjRevenueTrans中就不会有137个TransId)。子表的架构是相同的 因此,我最初的想法是创建一个映射,并从各个子表中创建映射。然后我将使用这个映射作为

我今天完全被抛到了这个场景中。本质上,我有一个表(ProjTransPosting)存储记录,该表与许多类似结构的表(ProjCostTrans、ProjRevenueTrans等)相关。它们通过TransId进行关联,但每个TransId将只关联一个子表(这意味着如果ProjCostTrans中存在137个TransId,那么ProjRevenueTrans中就不会有137个TransId)。子表的架构是相同的

因此,我最初的想法是创建一个映射,并从各个子表中创建映射。然后我将使用这个映射作为表单中的数据源,这样所有内容都可以显示在一列中。我创建了映射和子表之间的所有关系以及与父表的关系。我将Map作为数据源放在表单中,这导致了一个空白网格,尽管我不知道为什么。在任何给定的时间,映射对象是否只能由一种表类型的映射?我认为这样做的目的是,它可以是通用的,可以作为许多记录类型的缓冲区。我想走这条路,因为这肯定会实现我的目标

由于失败,我被迫安排数据源执行如下操作:选择ProjTransPosting LEFT JOIN ProjCostTrans LEFT JOIN ProjRevenueTrans。。。问题是,我添加的每个子表都在创建附加列,而其他列的值都为NULL(在AX中为空)。所以我有这样的想法:

Parent.TransId   ChildA.Field   ChildB.Field   ChildC.Field
1                NULL           1256           NULL
2                1395           NULL           NULL
3                NULL           4762           NULL
4                NULL           NULL           1256
通常,用户会处理显示额外列的麻烦,但他们也希望能够过滤所有子表中的字段。在我上面的例子中,他们希望能够过滤“1256”,结果将返回TransIds 1和TransIds 4,但很明显,由于本例中的值分布在多个列中,用户无法完成这一操作

理想情况下,地图会将这些列“组合”成一列,然后用户可以轻松地对其进行过滤。有没有关于如何进行此操作的想法?

尝试创建一个,然后创建一个


映射应该被使用,而不是作为表单中的数据源。

这听起来像是AX 2012中表继承的确切目的

何时使用:

编辑:在此处添加我的评论,使之成为更完整的答案

假设您有三个表
TabPet
TabPetCat
TabPetDog
,其中
TabPet
是超类型表,其他表是死者

如果在
TabPetCat
TabPetDog
中分别插入两条记录(总共4条),则它们都将具有唯一的RecID。假设
TabPetCat
得到5637144580和5637144581
TabPetDog
获取5637144582和5637144583

如果打开
选项卡pet
,您将看到5637144580、5637144581、5637144582和5637144583


因此,您要做的是将表
ProjTransPosting
设为超类型,然后将
ProjCostTrans
projrelenuetrans
等子表。除非确实需要
transId
,否则您可以将其去掉,只使用
RecId

,除非表之间没有RecId链接,只有这个transId。是的,但您自己说过,任何表中一次只存在1个
transId
。因此,使用
RecId
并将
TransId
保留在父表中。您的任务是对现有表/模式进行此更改,还是控制其开发?这仍然不起作用。只有当RefRecId仅与一个表相关时,才可能使用RefRecId。两个不同的表可以有相同的RecId,它不知道哪个表是正确的。我认为您不完全了解AX 2012的表继承是如何工作的。假设您有三个表
TabPet
TabPetCat
TabPetDog
,其中
TabPet
是超类型表,其他表是死者。如果在
TabPetCat
TabPetDog
中分别插入两条记录(总共4条),则它们都将具有唯一的RecID。假设
TabPetCat
得到5637144580和5637144581
TabPetDog
获取5637144582和5637144583。如果打开
TabPet
,您将看到5637144580、5637144581、5637144582和5637144583。因此,您要做的是将表
ProjTransPosting
作为超类型,然后将
ProjCostTrans
projrelenuetrans
等子表。除非确实需要
transId
,否则您可以将其去掉,只使用
RecId
。我正在用这些注释编辑我的答案,这样你可以更容易地看到格式。