ステップ 1: データベーストリガを作成する
Invoice オブジェクトにトリガを作成します。
- [設定] から をクリックし、[Invoice (請求書)] をクリックします。
- [トリガ] まで下へスクロールし、[新規] をクリックします。
- エディタで、<name> を「DeleteRestrictInvoice」で置き換えます。
- 同様に、<events> を「before delete」で置き換えます。
- テンプレートのコードを次のコードで置き換えます。
ソースコードについては、https://gist.github.com/3605667を参照してください。
1trigger DeleteRestrictInvoice on Invoice__c (before delete) { 2 3// create a list of Invoices in Trigger.oldMap along with their Line Items 4List<Invoice__c> invoices = [Select i.Name, (Select Name From Line_Items__r) 5 From Invoice__c i 6 Where i.Id IN :Trigger.oldMap.keySet()]; 7 8// loop through the Invoices, attaching errors to those that have Line Items 9for (Invoice__c invoice : invoices) { 10 if (!invoice.Line_Items__r.isEmpty()) { 11 Trigger.oldMap.get(invoice.id).addError('Cannot delete Invoice with Line Items'); 12 } 13 } 14} - [保存] をクリックします。
もうひとこと...
- トリガは、DML 操作の前または後に起動できます。このチュートリアルのトリガは、Invoice オブジェクトの 1 つ以上のレコードを対象とする削除操作を実行する前に起動されます。
- トリガは、コンテキスト変数という特殊な変数にアクセスできます。簡単に言うと、古いコンテキスト変数と新しいコンテキスト変数によって、トリガを起動するコールによって更新される sObject の古いコピーと新しいコピーを取得できます。コードを見るとわかるように、コンテキスト変数は、トリガボディ内の処理の範囲を設定するのに便利です。
- FOR ループでは、トリガは検証エラーを品目を持つ請求書に追��するだけですが、これによって Force.com プラットフォームがトリガを起動したトランザクション (この場合は delete) をロールバックします。