Обновление триггеров для 2 объектов рекурсивно в salesforce

#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 , чтобы второй не пытался обновить начальную запись.