1

上下文: 我们想删除案例及其相关/子对象中的多条记录。子对象几乎没有相关对象。有4到5个层次结构如下

  • 案子
  • - 任务
  • -----孩子1
  • --------孩子2
  • ------------儿童3

      相关对象具有主子关系,级联删除设置为 false。

目前我们批量删除案例的方式如下

  1. 收集批次中的所有案例
  2. 收集批次中所有案例的所有任务
  3. 收集批次中所有案例的所有 Child1 记录
  4. 收集批次中所有 Cases 的所有 Child2 记录
  5. 收集批次中所有 Cases 的所有 Child3 记录

然后使用批量删除批量删除每组记录。优点是我们每批只有 5 次删除,而且我们不会达到州长限制。

然而,这个过程的缺点是,当上述任何步骤中的删除出错时,整个事务都会回滚。虽然我们可以得到哪个删除导致了他的错误,但我们不能只与那个特定情况相关的对象。

问题:

  1. 有没有更好的方法来处理记录和子记录的删除。
  2. 有没有办法只回滚有错误的案例和子记录
4

1 回答 1

0

与批处理一起使用自下而上的方法。

例如从 Child3 开始。收集每个相关对象和案例对象中需要清除的所有记录。然后批量删除。

  • 孩子3
  • --儿童2
  • -----孩子1
  • - - - - 任务
  • - - - - - -案子

有2种方式:

  1. 声明式方法: 使用 Process Event 和 Process Builder/flow 字段计数在每个对象中小于 350。这种方法的优点是您不必编写代码。

  2. 使用 Apex 类: 编写 apex 代码以获取所有需要清除/删除并批量执行的相关对象。

    a) 将批大小设置为 1,以便删除时出现任何错误,仅回滚相关记录。

    b) 如果批量大小设置为大于 1,则整个批次将回滚。在这种情况下,您需要识别父(案例对象)ID 并将它们标记为错误并重新读取作为批处理的一部分回滚的所有其他记录并再次运行。在这种方法中,识别失败的记录(如果记录在 child3 中失败)及其根父(案例)ID 可能具有挑战性。

于 2019-02-11T06:47:55.683 回答