Salesforce batch Database.Statefulメソッド
1666 ワード
salesforceのバックグラウンド計算ではbatchをよく使用しますが、batchのgetquerylocatorメソッドを使用してビッグデータ量のデータセットをクエリーし、insert、delete、updateなどのexecuteメソッドに渡して処理します.しかし、私たちは通常、一部の仕事をしています.時には、前のbatchがqueryから出てきた大きなデータセットを簡単な演算をして、後ろのbatchに値を伝えて処理を続けたいだけです.executeでは、insert、delete、update式の動作はありません.この時、私たちは対像が空の場合に遭遇します.では、この場合、batchにDatabaseを1つ多く実装する必要があります.Statefulの方法でできます
次のプログラムはbatchが実行されると、あなたのSummaryはfinishの中で0になります.
次のプログラムは、Finishプログラムでdebug結果が123
次のプログラムはbatchが実行されると、あなたのSummaryはfinishの中で0になります.
global class SummarizeAccountTotal implements
Database.Batchable{
global final String Query;
global integer Summary;
global SummarizeAccountTotal(String q){Query=q;
Summary = 0;
}
global Database.QueryLocator start(Database.BatchableContext BC){
return Database.getQueryLocator(query);
}
global void execute(
Database.BatchableContext BC,
List scope){
Summary = 123;
}
global void finish(Database.BatchableContext BC){
System.debug(Summary);
}
}
次のプログラムは、Finishプログラムでdebug結果が123
global class SummarizeAccountTotal implements
Database.Batchable, Database.Stateful{
global final String Query;
global integer Summary;
global SummarizeAccountTotal(String q){Query=q;
Summary = 0;
}
global Database.QueryLocator start(Database.BatchableContext BC){
return Database.getQueryLocator(query);
}
global void execute(
Database.BatchableContext BC,
List scope){
Summary = 123;
}
global void finish(Database.BatchableContext BC){
System.debug(Summary);
}
}