過去の質問でいくつか書いてきたのでまとめておきたいと思います。
具体的なサンプルコード
- 取引先の所有者が変更された場合に取引責任者の所有者も変更する
- 取引責任者の件数をカウントするApexトリガー
- 更新/追加されたレコードを含めないで親子関係のレコードを処理する
- 拡張メモの内容を取引先オブジェクトに更新する
- 拡張メモの内容を取引先オブジェクトに更新する2
- 添付ファイルの名称取得
- 商談でアップロードしたファイル(PDF、エクセルなど)を自動的に指定ライブラリに格納する方法
- 取引先の所有者を変更した時に、商談の所有者を変更するトリガー
- Notes と Notes & Attachments にApexトリガーでレコードを作成する
- freeeとSalesforceとの取引連携(freee for Salesforceを使う方法)
- FeedComment Trigger のテストクラス
- Caseを複製するトリガー
- 多対多リレーションの重複禁止 Apexトリガーでの対応
- 関連するレコードを結びつけたい
- 復元を防止する処理について(undeleteトリガ)
- Choosing Between Before and After Triggers in Salesforce
Apex バッチ
- Apexバッチのサンプル
- CaseMilestone TargetDate on Case
- Batch process which periodically archive SObjects to Big Objects
エラー、障害
We tried to insert Opportunity records as part of the challenge check, but the insert failed. Error: thException: OPP_INSERT | System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, ClosedOpportunityTrigger: execution of AfterInsert caused by: System.DmlException: Insert failed. First exception on row 0 with id 00T2w00001ATNBGEA5; first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an insert call: [Id] Trigger.ClosedOpportunityTrigger: line 12, column 1: [] Show Less
インサートの場所が違っていた。ループの中で行っていたため
関連資料
Map<Id, Account> mapAccount = new Map<Id, Account>([SELECT Id, Name FROM Account WHERE Id=:Trigger.New[0].AccountId]);
for(Contact cont: Trigger.new){
if(cont.Id != null && mapAccount.containsKey(cont.AccountId)){
t.AccountName__c = mapAccount.get(cont.AccountId).Name;
}
}