Salesforce - лучший способ удалить несколько записей из иерархии объектов и обработки ошибок в Salesforce - PullRequest
0 голосов
/ 01 февраля 2019

Контекст: Мы хотели бы удалить несколько записей в Case и связанных с ним / дочерних объектах.Дочерние объекты имеют мало связанных объектов.Существует от 4 до 5 уровней иерархии следующим образом

  • Кейс
  • - Задание
  • ----- Child1
  • -------- Child2
  • ----------- Child3

    Связанные объекты имеют отношения master-child с каскадным удалением, установленным в false.

В настоящее время мы удаляем дела в пакете следующим образом

  1. Собираем все дела в пакете
  2. Собираем все задачи длявсе дела в партии
  3. собрать все записи Child1 для всех дел в партии
  4. собрать все записи Child2 для всех дел в партии
  5. собрать все записи Child3для всех дел в партии

Затем удалите каждый набор записей в партии, используя массовое удаление.Преимущество состоит в том, что у нас будет только 5 удалений на пакет, и мы не достигнем ограничений регулятора.

Однако недостатком этого процесса является то, что при удалении на любом из вышеперечисленных этапов возникает ошибка всей транзакции.откатывается.Хотя мы можем определить, какое удаление вызвало ошибку, мы не можем отыграть объекты, связанные только с этим конкретным случаем.

Вопрос:

  1. Есть ли что-нибудь лучшеспособ обработки удаления записей и дочерних записей.
  2. Есть ли способ откатить только дела и дочерние записи с ошибкой

1 Ответ

0 голосов
/ 11 февраля 2019

Используйте подход снизу вверх вместе с партией.

Например, начните с Child3.собрать все записи, которые необходимо очистить в каждом связанном объекте и объекте case.Затем удалите в пакетном режиме.

  • Child3
  • - Child2
  • ----- Child1
  • -------- Задача
  • ----------- Дело

Существует 2 способа:

  1. Декларативный метод: ИспользованиеProcess Event и Process Builder / число полей потока в каждом объекте меньше 350. Преимущество этого метода в том, что вам не нужно писать код.

  2. Использование Apexclass: Напишите апекс-код, чтобы получить все связанные объекты, которые необходимо очистить / удалить и выполнить в пакетном режиме.

    a) Установите размер пакета 1, чтобы при любой ошибке при удалении откатывались только связанные записи.

    b) Если размер партии превышает 1, вся партия будет откатываться.В этом случае вам необходимо идентифицировать родительский идентификатор (объект Case) и пометить их на наличие ошибок, перечитать все остальные записи, которые были откатаны как часть пакета, и снова запустить.В этом методе определение ошибочной записи (если записи не удалось в child3) и ее корневого родительского идентификатора (регистра) может быть сложной задачей.

...