0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apex トリガーのサンプルコード

Last updated at Posted at 2022-08-01

まとめページに戻る

過去の質問でいくつか書いてきたのでまとめておきたいと思います。

具体的なサンプルコード

Apex バッチ

エラー、障害

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;
    }
} 

add.Error

1つのレコードの中で複数のAdd.Errorがあれば最初のAdd.Errorのところで処理が中断すると思います。よって複数のチェックがあってもエラーになったチェックで止まります。

回避策としては、チェック時にエラーになってもAdd.Errorを使わずに、
例えば、エラーメッセージを格納するようなString型のList変数に保存したり、String型の変数にエラー内容を連結します。

トリガーの更新処理の直前で、これらの変数に値が入っていれば、ここでAdd.Errorにその変数の内容を設定すれば、全てのチェックでのエラー内容が表示できると思います。

https://salesforce.stackexchange.com/questions/175728/how-to-write-a-trigger-with-two-adderror-conditions-at-different-places-on-the-s

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?