function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
thsrthsr 

@トリガ内でバッチを呼び出す回数を限定する方法??

下記のトリガにて、バッチを入れない場合は、1000件をインポートしてもOKですが、

バッチ処理を入れると一部しかインポートできません。。。

ログを見ると、batchが10回実行されたようです。たぶん大量データの場合、トリガは100件ずつ処理されてるようで、こういう結果になったと思いますが、

ここでバッチを2回のみ実行したい場合はどうすればいいのでしょうか?

ご教授いただければ幸いです。


trigger T01 on Obj01__c (after insert) {
    if(Trigger.isAfter){

       //前略
       insert Obj02lists;//別のオブジェクトへのinsert処理(一括対応)

        //バッチを実行
        batchをコール;//<----★一括インポート時、ここで2回のみ実行したいのですが。。。。
    }  
}

 

以上、よろしくお願いいたします。

Best Answer chosen by Admin (Salesforce Developers) 
ikouikou

トリガー内でバッチのコールをするのは非常に危険です。

どうしても行うのであれば、トリガーやバッチの仕様をきちんと調べてからにしましょう。
Apexのリファレンスに書いてあります。

 

ちなみにトリガーのバッチサイズのMAXは(たしか)200なので、この設計方法だと1000件投入すると
最低でも5回はバッチをコールします。
バッチサイズが100なら10回コールします。

 

回避方法としてはAsyncApexJobオブジェクトを調べれば、その時点でバッチが何個起動されているか分かるので、
2個以上起動している場合はコールしない、というようなIF文を入れる方法はありますが、
それで要件を満たすのか分からないのでなんとも・・・

All Answers

ikouikou

トリガー内でバッチのコールをするのは非常に危険です。

どうしても行うのであれば、トリガーやバッチの仕様をきちんと調べてからにしましょう。
Apexのリファレンスに書いてあります。

 

ちなみにトリガーのバッチサイズのMAXは(たしか)200なので、この設計方法だと1000件投入すると
最低でも5回はバッチをコールします。
バッチサイズが100なら10回コールします。

 

回避方法としてはAsyncApexJobオブジェクトを調べれば、その時点でバッチが何個起動されているか分かるので、
2個以上起動している場合はコールしない、というようなIF文を入れる方法はありますが、
それで要件を満たすのか分からないのでなんとも・・・

This was selected as the best answer
thsrthsr

ありがとうございました。とても参考になりました。

またよろしくお願いします。