Salesforce-从对象层次结构中删除多个记录和Salesforce中的错误处理的最佳方法

时间:2019-02-01 10:37:29

标签: salesforce salesforce-communities

上下文: 我们想删除Case及其相关/子对象中的多个记录。子对象几乎没有相关对象。层次结构分为4到5个级别

  • 案例
  • -任务
  • ----- Child1
  • -------- Child2
  • ----------- Child3

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

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

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

然后使用批量删除批量删除每组记录。这样做的好处是,每批只能删除5次,而且没有达到总督的限制。

但是,此过程的缺点是,如果上述任何步骤中的删除操作均出现错误,则会回滚整个事务。尽管我们可以获取导致错误的删除,但是我们不能角色化仅与特定情况有关的对象。

问题:

  1. 是否有更好的方法来处理记录和子项的删除 记录。
  2. 有没有办法只回退案件和孩子 有错误的记录

1 个答案:

答案 0 :(得分:0)

使用自底向上方法和批处理。

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

  • Child3
  • -Child2
  • ----- Child1
  • --------任务
  • -----------案例

有2种方法:

  1. 声明方法: 使用每个对象中的Process Event和Process Builder / flow字段数少于350。此方法的优点是您无需编写代码。

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

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

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