No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
トリガと実行の順序
レコードを insert、update、または upsert ステートメントを使用して保存すると、Salesforce は次のイベントを順番に実行します。
サーバで、Salesforce により次の手順が実行されます。
- 元のレコードがデータベースから読み込まれるか、upsert ステートメント用にレコードが初期設定されます。
- 要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。要求が標準 UI 編集ページから行われた場合は、Salesforce がシステム検証を実行して、レコードについて次の点を確認します。要求が Apex アプリケーションや SOAP API コールなどの他のソースから送信されている場合は、Salesforce がこのステップでシステム検証を実行しません。
- レイアウト固有のルールへの準拠
- レイアウトレベルおよび項目定義レベルで必要な値
- 有効な項目形式
- 最大項目サイズ
見積品目や商談品目など、複数行の品目が作成された場合、Salesforce はユーザ定義の入力規則を実行します。
- すべての before トリガが実行されます。
- すべての必須項目に null 以外の値が入力されていることの確認や、ユーザ定義の入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。Salesforce が標準 UI + 編集ページから要求が行われた場合に再度実行しない唯一のシステム検証は、レイアウト固有のルールの適用です。
- 重複ルールが実行されます。重複ルールが重複するレコードを特定してブロックアクションを実行した場合は、レコードが保存されず、after トリガやワークフロールールなどの後続のステップが実行されません。
- レコードはデータベースに保存されますが、まだ確定されません。
- すべての after トリガが実行されます。
- 割り当てルールが実行されます。
- 自動応答ルールが実行されます。
- ワークフロールールが実行されます。
- ワークフロー項目自動��新が存在する場合、レコードが再度更新されます。
- ワークフロー項目自動更新で項目値に新たな重複が生じた場合は、重複ルールが再度実行されます。
- ワークフロー項目自動更新でレコードが更新された場合、標準の入力規則に加えて、before update トリガおよび after update トリガがもう一度 (さらに 1 回のみ) 実行されます。カスタム入力規則は再実行されません。
- エスカレーションルールが実行されます。
- エンタイトルメントルールが実行されます。
- レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
- 親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親の親レコードの積み上げ集計項目が更新されます。親の親レコードに対して保存手順が実行されます。
- 条件に基づく共有の評価が実行されます。
- すべての DML 操作がデータベースで確定されます。
- メール送信など、確定後のロジックが実行されます。
その他の考慮事項
トリガを使用する場合、次の点に注意してください。
- 同一のイベントであるため、同一のオブジェクトに複数のトリガがある場合は、実行順序は保証されません。たとえ��、ケースに 2 つの before insert トリガがあり、この 2 つのトリガを実行する新規ケースレコードが挿入された場合、これらのトリガが実行される順序は保証されません。
- 部分的な完了が許可されている場合に DML コールが行われると、レコードの保存を 3 回まで試行できます。トリガは最初の試行時に実行され、その後の試行時に再実行されます。DML コールは、Database DML メソッドの allOrNone パラメータが false に設定されている場合、またはデフォルト設定で SOAP API をコールした場合に、部分的完了を許可します。詳細は、一括 DML 例外処理を参照してください。
- [リードの取引開始による入力規則とワークフロートリガの実行] が選択されており、リード取引開始によって作成された商談に Apex before トリガが関連付けられている場合、そのトリガは商談が作成された直後、かつ商談の取引先責任者ロールが作成される前に実行されます。詳細は、Salesforce オンラインヘルプの「リード設定のカスタマイズ」を参照してください。
-
before トリガを使用して商談レコードの [フェーズ] および [売上予測分類] を設定する場合、次のように動作します。
- [フェーズ] および [売上予測分類] を設定すると、商談レコードにはこれらの正確な値が含まれます。
- [フェーズ] を設定して [売上予測分類] を設定しない場合、商談レコードの [売上予測分類] はデフォルトで [フェーズ] トリガに関連付けられた値に設定されます。
- [フェーズ] を API コールで指定した値またはユーザインターフェースから受信した値にリセットすると、[売上予測分類] 値も API コールまたはユーザインターフェースによって入力されます。[売上予測分類] に値を指定せず、入力された [フェーズ] がトリガ [フェーズ] とは異なる場合、[売上予測分類] はデフォルトで [フェーズ] に関連付けられた値に設定されます。トリガ [フェーズ] と入力された [フェーズ] が同じ場合、[売上予測分類] はデフォルト値に設定されません。
- 商品に関連する商談をコピーする場合、次のイベントが順に発生します。
- 親商談が上記のイベントのリストに従って保存されます。
- 商談商品が上記のイベントのリストに従って保存されます。
- Trigger.old には、トリガを起動した特定の更新より前のオブジェクトのバージョンが含まれます。ただし、これには例外があります。レコードが更新された後にワークフロールールの項目自動更新がトリガされた場合、最後の更新トリガの Trigger.old にはワークフローの更新直前のオブジェクトのバージョンは含まれず、最初の更新が実行される前のオブジェクトのバージョンが含まれます。たとえば、既存のレコードに初期値が 1 の数値項目があるとします。ユーザがこの項目を 10 に更新し、ワークフロールールの項目自動更新が起動されて項目が 11 に増えます。ワークフローの項目自動更新後に起動される更新トリガでは、Trigger.old から取得されるオブジェクトの項目値は、通常の場合のように 10 ではなく元の値の 1 になります。