アフィリエイト広告を利用しています

広告

posted by fanblog

2018年06月02日

sfdc バッチでの集計関数

SFDCの導入にあたって、
バッチを使う場合が少なくないか
と思います。
特に月初に
請求書を作ったり、
未払い請求書を管理したり
することがあります。

その時にバッチが要望次第に
登場する場合があります。


さらに集計する必要の時も
ありえます。
今回、集計関数を
バッチ内で使うようにします。
※本来、バッチで集計関数は使用できませんよう。
直接使うと下記のようなエラーがあります。
Aggregate query does not support queryMore(), use LIMIT to restrict the results to a single batch

そこで、バッチでの集計関数の使用について
今回、共有します。

必要なもの

インタフェースIterator

public class SearchResultIterator Implements Iterator<AggregateResult>{
    public AggregateResult [] results {get;set;}
    public Integer index {get;set;}

    public SearchResultIterator(String query){
        this.index = 0;
        results = Database.query(query);
    }

    public boolean hasNext(){
        return results !=null && !results.isEmpty() && index < results.size();
    }

    public AggregateResult next(){
        return results[index++];
    }
}

インタフェースIterable Apex class

public class SearchResultIterable implements Iterable<AggregateResult>{
	private String query;

    public SearchResultIterable(String soql){
    	this.query = soql;
  	}

    public Iterator<AggregateResult> Iterator(){
        return new SearchResultIterator(this.query);
    }
}

バッチクラス

global class SampleAggregateBatch implements Database.Batchable<AggregateResult> {
  // The batch job starts
  global Iterable<AggregateResult> start(Database.BatchableContext bc){
    String query = 'SELECT COUNT(Id) cnt, AccountId FROM Contact GROUP BY AccountId';
    return new SearchResultIterable(query);
  } 
  // The batch job executes and operates on one batch of records
  global void execute(Database.BatchableContext bc, List<sObject> scope){ 
    for(sObject sObj : scope) {
      AggregateResult ar = (AggregateResult)sObj;
      System.debug('>>>> COUNT : ' + ar.get('cnt'));
    }
  }
  // The batch job finishes
  global void finish(Database.BatchableContext bc){ }
}

動作確認

// Run batch apex
SampleAggregateBatch batch = new SampleAggregateBatch();
Database.executebatch(batch, 200);

// Debug log output
11:36:35.0 (14518157)|USER_DEBUG|[11]|DEBUG|>>>> COUNT : 1
11:36:35.0 (14903974)|USER_DEBUG|[11]|DEBUG|>>>> COUNT : 3
11:36:35.0 (15035196)|USER_DEBUG|[11]|DEBUG|>>>> COUNT : 1

まとめ

SFDCのサポートのアドバイスによるともう一つ方法があります。
興味あるかた、リンクへどうぞ!

help.salesforce.com

posted by Jude at 07:30 | Comment(0) | バッチ
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

いつもお世話になります。ブログ引越しになったので最新のSFDC情報はこちらへ SFU_CRT_BDG_Pltfrm_App_Blder_RGB.jpg SFU_CRT_BDG_Admin_RGB.jpg
プロフィール
Judeさんの画像
Jude
こんにちは、自由が欲しいJudeっす。最近ネットビジネスを始まった。結婚はしていないが、会社の残業が大嫌い、何しても周りの人に迷惑をかけないように、社会に負の影響を与えないように常に意識してる。残業のない国になるため、できるところでコツコツ貢献しておる。、国民のみんなきっともっと幸せと信じている。
プロフィール
<< 2019年01月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
検索
月別アーカイブ
日別アーカイブ
最新コメント
ファン
×

この広告は30日以上新しい記事の更新がないブログに表示されております。