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になります.
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);
   }
}