trigger OpportunityRemoteUpdate on Opportunity (after update, after delete) {
System.debug('OpportunityRemoteUpdate');
}
Данный триггер срабатывает в случае insert, update, clone, delete
Есть ли смысл писать
trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after clone, after delete) {}
?
trigger OpportunityRemoteUpdate on Opportunity (after update, after delete) { System.debug('OpportunityRemoteUpdate'); } Данный триггер срабатывает в случае insert, update, clone, delete Есть ли смысл писать trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after clone, after delete) {} ?
OpportunityRemoteUpdate должен срабатывать только после update и после delete (как написано в параметрах)
т.е. "Данный триггер срабатывает в случае insert, update, clone, delete" не верно
при insert и при clone срабатывать не должен.
Другое дело если у вас на opportunity висит сложная логика (другой триггер), который может запускать update после insert (clone это тот же самый insert) то в этом случае вы увидите сообщение в дебаге. Такое поведение скорее ошибка проектирования, но я пару раз с таким встречался на оргах заказчиков
так что
trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after clone, after delete)
во первых не правильно - нет такого after clone
во вторых да - есть смысл писать если вы хотите охватить все события.
Писать триггеры это одна из сложнейших задач в salesforce. И части из-за неправильного проектирования они становятся источниками проблем.
OpportunityRemoteUpdate должен срабатывать только после update и после delete (как написано в параметрах) т.е. "Данный триггер срабатывает в случае insert, update, clone, delete" не верно при insert и при clone срабатывать не должен. Другое дело если у вас на opportunity висит сложная логика (другой триггер), который может запускать update после insert (clone это тот же самый insert) то в этом случае вы увидите сообщение в дебаге. Такое поведение скорее ошибка проектирования, но я пару раз с таким встречался на оргах заказчиков так что trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after clone, after delete) во первых не правильно - нет такого after clone во вторых да - есть смысл писать если вы хотите охватить все события. Писать триггеры это одна из сложнейших задач в salesforce. И части из-за неправильного проектирования они становятся источниками проблем.
Я открывал дебагер и смотрел выполняется ли мой триггер.
в случае события after update срабатывает для insert update и clone
но не срабатывает для delete
Поэтому и сделал trigger OpportunityRemoteUpdate on Opportunity (after update, after delete) {}
Тоесть вроди бы отрабатывается для всех событий.
Не выполнится ли тригер дважды для события insert если написать trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after delete) {}
?
Я открывал дебагер и смотрел выполняется ли мой триггер. в случае события after update срабатывает для insert update и clone но не срабатывает для delete Поэтому и сделал trigger OpportunityRemoteUpdate on Opportunity (after update, after delete) {} Тоесть вроди бы отрабатывается для всех событий. Не выполнится ли тригер дважды для события insert если написать trigger OpportunityRemoteUpdate on Opportunity (after insert, after update, after delete) {} ?
Так сложно по вашим словам понять что у вам на орге происходит.
Триггер срабатывает на определенную DML операцию. Их есть всего три: insert, update, delete (есть еще upsert но пока голову ей не забывайте). Сlone не относится к DML операциям и ничего не делает с базой данных. Он просто создает копию объекта.
Вот как только происходит одна из этих трех операций (insert, update, delete) срабатывает триггер, у которого написано когда и после какой команды срабатывать.
Т.е. если вы делаете insert, то сработает в вашем случае after insert - триггер запустится. Тоже самое с остальными командами.
Если вы хотите чтобы срабатывало только после update и delete, то так и указывайте (after update, after delete)
Так сложно по вашим словам понять что у вам на орге происходит. Триггер срабатывает на определенную DML операцию. Их есть всего три: insert, update, delete (есть еще upsert но пока голову ей не забывайте). Сlone не относится к DML операциям и ничего не делает с базой данных. Он просто создает копию объекта. Вот как только происходит одна из этих трех операций (insert, update, delete) срабатывает триггер, у которого написано когда и после какой команды срабатывать. Т.е. если вы делаете insert, то сработает в вашем случае after insert - триггер запустится. Тоже самое с остальными командами. Если вы хотите чтобы срабатывало только после update и delete, то так и указывайте (after update, after delete)