Salesforce - 在 Salesforce 中从 Object 层次结构和错误处理中删除多条记录的最佳方式
Salesforce - Best way to delete multiple records from an Object hierarchy and error handling in Salesforce
上下文:
我们想删除案例中的多条记录及其 related/child objects。 child objects 几乎没有相关的 objects。有4到5层级如下
- 案例
- --任务
- -----孩子 1
- --------孩子2
------------孩子3
相关 objects 与级联删除设置为 false 的 master-child 关系。
目前我们批量删除案例的方式如下
- 收集批次中的所有案例
- 收集批处理中所有案例的所有任务
- 收集批次中所有 Cases 的所有 Child1 记录
- 收集批次中所有 Cases 的所有 Child2 记录
- 收集批次中所有 Cases 的所有 Child3 记录
然后使用批量删除批量删除每组记录。优点是我们每批只有 5 次删除,并且不会达到调控器限制。
然而这个过程的缺点是,当上述任何步骤中的删除出现错误时,整个事务将被回滚。虽然我们可以得到哪个删除导致了他的错误,但我们不能角色回退 objects 仅与该特定案例相关。
问题:
- 是否有更好的方法来处理删除记录和child
记录。
- 有没有办法只回滚案例和 child
有错误的记录
使用自下而上的方法和批处理。
例如从 Child3 开始。收集每个相关 object 和案例 object 中需要清除的所有记录。然后批量删除。
- 孩子 3
- --孩子2
- -----孩子 1
- --------任务
- ------------案例
有两种方法:
声明方式:
使用Process Event和Process Builder/flow字段计数在每个object小于350。这种方法的好处是你不用写代码。
使用 Apex class:
编写apex代码获取所有需要purged/deleted的相关object并批量执行。
a) 设置batch size为1,删除时出错,只回滚相关记录。
b) 如果批大小设置为大于 1,则整个批将回滚。在这种情况下,您需要识别 parent (Case object) id 并将它们标记为错误,re-read 作为批处理的一部分回滚的所有其他记录和 运行 再次。在此方法中,识别失败记录(如果记录在 child3 中失败)及其根 parent(案例)id 可能具有挑战性。
上下文: 我们想删除案例中的多条记录及其 related/child objects。 child objects 几乎没有相关的 objects。有4到5层级如下
- 案例
- --任务
- -----孩子 1
- --------孩子2
------------孩子3
相关 objects 与级联删除设置为 false 的 master-child 关系。
目前我们批量删除案例的方式如下
- 收集批次中的所有案例
- 收集批处理中所有案例的所有任务
- 收集批次中所有 Cases 的所有 Child1 记录
- 收集批次中所有 Cases 的所有 Child2 记录
- 收集批次中所有 Cases 的所有 Child3 记录
然后使用批量删除批量删除每组记录。优点是我们每批只有 5 次删除,并且不会达到调控器限制。
然而这个过程的缺点是,当上述任何步骤中的删除出现错误时,整个事务将被回滚。虽然我们可以得到哪个删除导致了他的错误,但我们不能角色回退 objects 仅与该特定案例相关。
问题:
- 是否有更好的方法来处理删除记录和child 记录。
- 有没有办法只回滚案例和 child 有错误的记录
使用自下而上的方法和批处理。
例如从 Child3 开始。收集每个相关 object 和案例 object 中需要清除的所有记录。然后批量删除。
- 孩子 3
- --孩子2
- -----孩子 1
- --------任务
- ------------案例
有两种方法:
声明方式: 使用Process Event和Process Builder/flow字段计数在每个object小于350。这种方法的好处是你不用写代码。
使用 Apex class: 编写apex代码获取所有需要purged/deleted的相关object并批量执行。
a) 设置batch size为1,删除时出错,只回滚相关记录。
b) 如果批大小设置为大于 1,则整个批将回滚。在这种情况下,您需要识别 parent (Case object) id 并将它们标记为错误,re-read 作为批处理的一部分回滚的所有其他记录和 运行 再次。在此方法中,识别失败记录(如果记录在 child3 中失败)及其根 parent(案例)id 可能具有挑战性。