网格中一列中多个数据源的数据

时间:2014-12-03 18:38:10

标签: axapta microsoft-dynamics dynamics-ax-2012 ax

我今天已被抛出相当的情景。基本上,我有一个包含记录的表(ProjTransPosting),该表与许多类似结构的表(ProjCostTrans,ProjRevenueTrans等)相关。它们通过TransId关联,但每个TransId只涉及多个子表中的一个(意味着如果ProjCostTrans中存在137的TransId,则ProjRevenueTrans中的TransId不能为137)。子表的模式是相同的。

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

在失败的情况下,我被迫安排我的数据源执行以下操作:SELECT ProjTransPosting LEFT JOIN ProjCostTrans LEFT JOIN ProjRevenueTrans ...这个问题是,每个子表我都是附加的,它是' s创建其他列,其他列的值都为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和4,但很明显,因为这种情况下的值分布在多个列中,所以用户无法做到这一点。

理想情况下,地图会"结合"将这些列合并为一个然后用户可以轻松过滤它。关于如何处理这个的任何想法?

2 个答案:

答案 0 :(得分:4)

尝试创建union query,然后创建view based on that query

地图应该使用only in X++,而不是表单中的数据源。

答案 1 :(得分:1)

这听起来像是AX 2012中表继承的完全目的。

http://msdn.microsoft.com/en-us/library/gg881053.aspx

何时使用:

http://msdn.microsoft.com/en-us/library/gg843731.aspx

编辑:在此处添加我的评论,以使其更加完整。

我们假设您有三个表TabPetTabPetCatTabPetDog,其中TabPet是超类型表,其他表是死者。

如果您将两个记录分别插入TabPetCatTabPetDog(共4个),则它们都会有唯一的记录。让我们说TabPetCat获得5637144580和5637144581. TabPetDog获得5637144582和5637144583。

如果您打开TabPet,您会看到5637144580,5637144581,5637144582和5637144583。

那么你要做的是让你的表ProjTransPosting成为超类型,然后是ProjCostTransProjRevenueTrans等后代表。除非transId确实是必要的,否则你可以摆脱它,只使用RecId