#salesforce #apex-code
#система salesforce #apex-code
Вопрос:
У меня есть пара объектов (1 пользовательский объект, называемый объектом назначения и события), которые я пытаюсь синхронизировать. Итак, у меня есть по 1 триггеру для каждого объекта, который выполняет поиск и обновляет записи. Проблема в том, что эти триггеры будут продолжать выполняться рекурсивно, поскольку каждый раз, когда обновляется назначение, событие также обновляется, и триггеры продолжают срабатывать, и, конечно, salesforce его не принимает.
Есть идеи, как это преодолеть?
Спасибо
Ответ №1:
Самый простой способ — создать класс apex, содержащий статическую логическую переменную, инициализированную значением false. Затем в каждом из ваших триггеров вы должны проверять состояние этой переменной:
trigger MyTrigger on MyObject (after update)
{
if(CStaticTracker.bHasTriggerFired == false)
{
CStaticTracker.bHasTriggerFired = true;
// do your work and update the other object here
// shouldn't need this but let's play safe!
CStaticTracker.bHasTriggerFired = false;
}
}
В результате, конечно, при запуске одного из триггеров для этой переменной будет установлено значение true, и рекурсивный триггер не сможет выполнить любую логику, содержащуюся в операторе if . Конечно, это все равно может вызвать некоторое каскадирование, но оно прекратится, как только вы не вызовете другое обновление в одном из триггеров.
Удачи!
Комментарии:
1. Во втором триггере я должен проверить наличие CStaticTracker. bHasTriggerFired == false ?
2. Возможно, вы захотите использовать два логических значения для указания состояния каждого из них, но я думаю, что в вашем случае вам просто нужен один и тот же код в обоих
CStaticTrack.bHasTriggerFired == false
, чтобы второй не пытался обновить начальную запись.