我今天已被抛出相当的情景。基本上,我有一个包含记录的表(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,但很明显,因为这种情况下的值分布在多个列中,所以用户无法做到这一点。
理想情况下,地图会"结合"将这些列合并为一个然后用户可以轻松过滤它。关于如何处理这个的任何想法?
答案 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
编辑:在此处添加我的评论,以使其更加完整。
我们假设您有三个表TabPet
,TabPetCat
,TabPetDog
,其中TabPet
是超类型表,其他表是死者。
如果您将两个记录分别插入TabPetCat
和TabPetDog
(共4个),则它们都会有唯一的记录。让我们说TabPetCat
获得5637144580和5637144581. TabPetDog
获得5637144582和5637144583。
如果您打开TabPet
,您会看到5637144580,5637144581,5637144582和5637144583。
那么你要做的是让你的表ProjTransPosting
成为超类型,然后是ProjCostTrans
,ProjRevenueTrans
等后代表。除非transId
确实是必要的,否则你可以摆脱它,只使用RecId
。