結論
・insert / update の場合、200件ごとにトリガーを実行する
・delete / undelete の場合、全件でトリガーを実行する
・DML単位で before、after の順でイベントを処理する
====== 検証 ======
1.トリガー作成
trigger XXXXXXTrigger on XXXXXX__c (before insert, before update, before delete, after insert, after update, after delete, after undelete) {
if (Trigger.Isbefore && Trigger.Isinsert) {
system.debug('before insert:' + Trigger.size);
}
if (Trigger.Isafter && Trigger.Isinsert) {
system.debug('after insert:' + Trigger.size);
}
if (Trigger.Isbefore && Trigger.Isupdate) {
system.debug('before update:' + Trigger.size);
}
if (Trigger.Isafter && Trigger.Isupdate) {
system.debug('after update:' + Trigger.size);
}
if (Trigger.Isbefore && Trigger.Isdelete) {
system.debug('before delete:' + Trigger.size);
}
if (Trigger.Isafter && Trigger.Isdelete) {
system.debug('after delete:' + Trigger.size);
}
if (Trigger.Isafter && Trigger.Isundelete) {
system.debug('after undelete:' + Trigger.size);
}
}
2.executeAnonymous で下記のコードを実行する
Savepoint sp = Database.setSavepoint();
System.debug('Insert 処理');
List<XXXXXX__c> xxList = new List<XXXXXX__c>();
for (Integer i=0;i<1000;i++) {
xxList.add(new XXXXXX__c());
}
insert xxList;
System.debug('update 処理');
update xxList;
System.debug('delete 処理');
delete xxList;
System.debug('undelete 処理');
undelete xxList;
Database.rollback(sp);
3.出力ログ一覧
16:27:04:003 USER_DEBUG [3]|DEBUG|Insert 処理
16:27:04:106 USER_DEBUG [3]|DEBUG|before insert:200
16:27:04:652 USER_DEBUG [7]|DEBUG|after insert:200
16:27:11:213 USER_DEBUG [3]|DEBUG|before insert:200
16:27:11:880 USER_DEBUG [7]|DEBUG|after insert:200
16:27:18:322 USER_DEBUG [3]|DEBUG|before insert:200
16:27:18:962 USER_DEBUG [7]|DEBUG|after insert:200
16:27:25:083 USER_DEBUG [3]|DEBUG|before insert:200
16:27:25:780 USER_DEBUG [7]|DEBUG|after insert:200
16:27:31:773 USER_DEBUG [3]|DEBUG|before insert:200
16:27:32:405 USER_DEBUG [7]|DEBUG|after insert:200
16:27:39:166 USER_DEBUG [10]|DEBUG|update 処理
16:27:40:681 USER_DEBUG [11]|DEBUG|before update:200
16:27:41:145 USER_DEBUG [15]|DEBUG|after update:200
16:27:42:493 USER_DEBUG [11]|DEBUG|before update:200
16:27:42:950 USER_DEBUG [15]|DEBUG|after update:200
16:27:44:229 USER_DEBUG [11]|DEBUG|before update:200
16:27:44:711 USER_DEBUG [15]|DEBUG|after update:200
16:27:46:549 USER_DEBUG [11]|DEBUG|before update:200
16:27:47:029 USER_DEBUG [15]|DEBUG|after update:200
16:27:48:448 USER_DEBUG [11]|DEBUG|before update:200
16:27:48:942 USER_DEBUG [15]|DEBUG|after update:200
16:27:48:962 USER_DEBUG [13]|DEBUG|delete 処理
16:27:49:462 USER_DEBUG [19]|DEBUG|before delete:1000
16:27:55:448 USER_DEBUG [23]|DEBUG|after delete:1000
16:27:55:476 USER_DEBUG [16]|DEBUG|undelete 処理
16:28:13:820 USER_DEBUG [27]|DEBUG|after undelete:1000