Salesforce 認定 Platform デベロッパー 上級 無料問題 2 / 10 ・ 分野2: ロジックとプロセスの自動化
ケース(Case)に、別々のチームが作った before insert のトリガが2つある。トリガ A は優先度を決め、トリガ B はその優先度を見て担当のキューを決める。テストでは動いたが、本番で B が A より先に動いたように見える事象が出た。ドキュメントの説明に合うものはどれか。
- 同じオブジェクトのトリガは、トリガ名のアルファベット順に動く
- 同じイベントの複数のトリガの実行の順は、保証されていない
- トリガは作成した日時の順に実行され、古いトリガから先に動く
- 保存した API バージョンが新しいトリガほど、先に実行される
正解と解説を見る
正解: B
正解の理由
ドキュメントの実行順の注意として、同じオブジェクトの同じイベントにトリガが複数定義されているとき、トリガの実行の順は保証されないと書かれている。例として、ケースに before insert のトリガが2つあり新しいケースを入れたとき、2つのトリガのどちらが先に動くかは保証されない。B が A の結果に頼るなら、1つのトリガから順に処理を呼ぶ形にまとめる必要がある。
違う選択肢
「トリガは作成した日時の順に実行され、古いトリガから先に動く」… ドキュメントは、同じオブジェクトの同じイベントに複数のトリガがあるとき、実行の順は保証されないと書く。作成の日時で順が決まる仕組みは無い。
「同じオブジェクトのトリガは、トリガ名のアルファベット順に動く」… 名前の順で決まるとは書かれておらず、実行の順は保証されない。順に頼る処理は、1つのトリガの中で順に呼ぶ形にまとめる。
「保存した API バージョンが新しいトリガほど、先に実行される」… API バージョンで実行の順が決まるとは書かれていない。同じイベントのトリガの順は保証されない。
設計の勘所
オブジェクトごとにトリガを1つにし、処理の中身はハンドラのクラスに分けて、呼ぶ順をコードで決める形にすると、この問題を避けられる。チームが分かれていても、トリガを足す前にそのオブジェクトの既存のトリガを確かめる取り決めにしておく。