You need to sign in to do that
Don't have an account?
thsr
@トリガ内でバッチを呼び出す回数を限定する方法??
下記のトリガにて、バッチを入れない場合は、1000件をインポートしてもOKですが、
バッチ処理を入れると一部しかインポートできません。。。
ログを見ると、batchが10回実行されたようです。たぶん大量データの場合、トリガは100件ずつ処理されてるようで、こういう結果になったと思いますが、
ここでバッチを2回のみ実行したい場合はどうすればいいのでしょうか?
ご教授いただければ幸いです。
trigger T01 on Obj01__c (after insert) {
if(Trigger.isAfter){
//前略
insert Obj02lists;//別のオブジェクトへのinsert処理(一括対応)
//バッチを実行
batchをコール;//<----★一括インポート時、ここで2回のみ実行したいのですが。。。。
}
}
以上、よろしくお願いいたします。
トリガー内でバッチのコールをするのは非常に危険です。
どうしても行うのであれば、トリガーやバッチの仕様をきちんと調べてからにしましょう。
Apexのリファレンスに書いてあります。
ちなみにトリガーのバッチサイズのMAXは(たしか)200なので、この設計方法だと1000件投入すると
最低でも5回はバッチをコールします。
バッチサイズが100なら10回コールします。
回避方法としてはAsyncApexJobオブジェクトを調べれば、その時点でバッチが何個起動されているか分かるので、
2個以上起動している場合はコールしない、というようなIF文を入れる方法はありますが、
それで要件を満たすのか分からないのでなんとも・・・
All Answers
トリガー内でバッチのコールをするのは非常に危険です。
どうしても行うのであれば、トリガーやバッチの仕様をきちんと調べてからにしましょう。
Apexのリファレンスに書いてあります。
ちなみにトリガーのバッチサイズのMAXは(たしか)200なので、この設計方法だと1000件投入すると
最低でも5回はバッチをコールします。
バッチサイズが100なら10回コールします。
回避方法としてはAsyncApexJobオブジェクトを調べれば、その時点でバッチが何個起動されているか分かるので、
2個以上起動している場合はコールしない、というようなIF文を入れる方法はありますが、
それで要件を満たすのか分からないのでなんとも・・・
ありがとうございました。とても参考になりました。
またよろしくお願いします。