Apexトリガの連続呼び出し回数の上限突破したら、どうなった?こうなった!【Salesforce】

読者の皆様、どうも~ コムコム.comです。
またまたヘルプで入ったプロジェクトで、遭遇したトラブルについてです。
※ヘルプ案件でしか、トラブルに遭遇しないのは気のせいでしょうか・・・

Apexトリガ処理で、「今まで見たことのないエラーが発生したので、調査して欲しい」と依頼があり調査しました。
その時のエラーメッセージは、以下の内容で、直訳すると【最大トリガ深度を超えました】となります。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
エラーになったTriggerクラス名: maximum trigger depth exceeded Result trigger event AfterInsert for [XXXXXXXXXX,・・・]
Opportunity trigger event AfterUpdate for [XXXXXXXXXX] ・・・

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

調査した結果、海外サイトで同じエラーメッセージが出た際に、Apexトリガを再帰的に16回以上呼ぶと今回と同じエラーが発生すると記載がありました。
今回エラーになったApexトリガは、after update処理で動作し、Apexトリガに設定しているオブジェクトを更新したため無限ループに陥った
と判断し、処理を書き換えたら、エラーを回避出来ました。
と、前置きはこれぐらいで、Apexトリガを再帰的に16回以上呼ぶと本当にエラーになるのか検証してみました。

Sandbox環境に以下のトリガとテスト用のオブジェクトを作成して、実行してみました。
(count__c【実行回数】は数値型になります。)

trigger TriggersTest on オブジェクト名 (after Insert,after update) { 

  //トリガー実行時に作成されたレコードを取得 
  List<オブジェクト名 > TriggersTestList = new List<オブジェクト名 >(); 
  TriggersTestList = trigger.new; 

  //保存用のオブジェクトを作成 
  List<オブジェクト名> saveList = new List<オブジェクト名>(); 

  if(TriggersTestList[0].count__c < ループさせる回数){ 
    //設定 
    TriggersTest__c newTest = new オブジェクト名(id = TriggersTestList[0].Id , count__c = TriggersTestList[0].count__c + 1 ); 
    //更新処理 
    saveList.add(newTest); 
    update saveList; 
  }
}

ループさせる回数に15を設定して、count__c【実行回数】に0を入れて「保存」ボタンを押下すると、Apexトリガが実行された結果、以下の通りとなり、count__c【実行回数】の値が15回書き換わったことがわかりました。
この結果から、16回【値が書き換わる処理で15回+最後の値が書き換わらない処理で1回】Apexトリガが動いたことになります。

今度は、Apexトリガを17回動かすため、ループさせる回数に16を設定して、先ほどと同様にすると以下の通りとなり、エラーとなりました。

また、Apexトリガのガバナ制限を調べてみるとSalesforceのApex ガバナ制限に該当する項目がありました。

insert、update、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 16

(Salesforce Developer の制限および割り当てクイックリファレンスのApex ガバナ制限 より抜粋)

Apexトリガで、Triggerの起動対象に設定しているオブジェクトに対して、登録・更新処理をする事は基本ないと思いますが、もし実施することがある場合は最大16回までなら大丈夫である事を頭の片隅に置いとくといいかもしれません。