Salesforce: Как предотвратить 'upsert' (выполненный из задания apex) записи, если запись имеет поле флажка, помеченное как false? - PullRequest
0 голосов
/ 31 мая 2019

Вопрос Salesforce:

Мы должны обновить учетные записи из запланированного задания.Вставка новых записей не является проблемой, но существующие записи следует обновлять только в том случае, если для конкретного поля флажка установлено значение true (иначе обновление не требуется).Также, поскольку мы знаем, что апекс-код запускается из системного контекста.

Я ищу способ, который НЕ включает извлечение записи из кода путем поиска с использованием Id, а затем проверки значения этого поля перед добавлением.

Спасибо за помощь.

Код

List<Account> accountList = new List<Account>(accountsToUpdate);           
upsert accountList MY_COMPOSITE_KEY__c;

1 Ответ

0 голосов
/ 01 июня 2019

Сделать правило проверки просто имеет Your_Checkbox__c в качестве условия ошибки.Или сделайте триггер before insert, before update для учетной записи (если у вас его еще нет), который проверит все записи в trigger.new и вызовет addError() для них.Правило валидации немного предпочтительнее, потому что оно просто config, без кода.

Проблема с любым из них состоит в том, что оно приведет к смерти всей вашей транзакции.Если ваш пакет обновляет 200 учетных записей, и у одной из них есть этот флажок - этот сбой заблокирует их обновление.Это сделано для того, чтобы убедиться, что состояние системы стабильно (читайте об «атомарных операциях» или «ACID»), вы не хотите, чтобы данные были наполовину обновлены ...

Так что, вероятно, вам придется уменьшить этопозвонив по номеру Database.upsert(accountsToUpdate, External_ID__c, false);, чтобы сохранить то, что он может, и не выбрасывать исключения ...

...