使用 1:n DeleteActions

Use 1:n DeleteActions

如何为 1:n table 关系使用 DeleteActions?

示例:

Table A ("id")
('foo')
,('bar')
,('blup')

Table B: ("id", "tableAId1", "tableAId2")
(1, 'foo', 'blup')
,(2, 'bar', 'foo')

我在 tableB 上有两个关系:

TableB:tableAId1 -> TableA:id
TableB:tableAId2 -> TableA:id

如果删除 table A 中的 'foo',则应删除 table B 中的两个数据集。

我在 table A 上尝试了一个删除操作,引用带有级联选项的 table B,导致 只有数据集 1 在 table B被删除了。

我在 table A 上尝试了两个相同的删除操作,引用带有级联选项的 table B,导致 table 锁定数据库。

我知道在 table A 上覆盖 delete() 方法,但是如果使用 tableA.doDelete().

则不安全

在 AX 2009 和以前的版本中,对 table 的删除操作仅遵循其中一个关系(第一个按字母顺序排序)。 table 只能作为删除操作应用一次。

你最好的选择是使用你的主人 table 的 delete 方法中的 delete_from 进行你自己的级联删除。如果您执行 doDelete,它不会删除子记录。那么就不要使用 doDelete 方法!

在 AX 2012 中,您可以明确指定删除操作要遵循的关系。如果您指定不同的关系,您可以多次应用相同的 table。

这是一个不错的功能,但也是 table 扩展数据类型上的关系不得不消亡的原因之一。