Batch ApexでAggregate SOQL集計クエリと結果の使用

前回の投稿には、インタフェースDatabase.Batchableを継承したスケージュール可能なApex一括処理バッチを作成しましたが、 “GROUP BY”での集計クエリと結果のSOQL、例:SUM(), MAX(), COUNT()、を使用したい場合、単なるDatabase.Batchable<AggregateResult>に継承を変更することで解決できません、 次のようなコンパイルエラーが発生するためです :

Class must implement the global interface method: Iterable<AggregateResult> start(Database.BatchableContext) from Database.Batchable<AggregateResult>

次のサンプルコードをこのような問題を説明できます。

この問題を解決するには、インタフェースIterator<AggregateResult>Iterable<AggregateResult>を継承したApexクラスの使用することが今まで1つ有効的な解決策です。

実装概要は下記のようになります。
1. インタフェースIterator<AggregateResult>を継承したApexクラスを作成する
2. インタフェースIterable<AggregateResult>を継承したApexクラスを作成する
3. Batch ApexをDatabase.Batchable<AggregateResult>に継承し、start処理にIterable<AggregateResult>を使用する

早速はじめましょう。

インタフェースIterator<AggregateResult>

次のソースコードで1つApexクラス”AggregateResultIterator”を作成します。

インタフェースIterable<AggregateResult> Apex class

次のソースコードで1つApexクラス”AggregateResultIterable”を作成します。

一括処理バッチの修正

バッチの継承元をインタフェースDatabase.Batchable<AggregateResult>に変更し、start処理にDatabase.QueryLocatorを代わりに、Iterable<AggregateResult>とAggregateResultIterableを使用します。 次のようになります :

動作確認

SampleAggregateBatchを実行して、デバッグログを確認します。

問題なく実行できました! : )

Enjoy it!

Related Post

スケージュール可能なApex一括処理バッチの実装... To use batch Apex, you have to create an Apex class that implements interface Database.Batchable in Salesforce, like the following sample code: https://gist.github.com/919ab1cbae98a114c2a8e46197bd2f63 Execute batch Then you can use Database.executebatch method to execute it. https://gist.g...
Node.jsでMangoDB+SalesforceのHeroku Schedulerバッチを作る... In previous post,I had shared how to 《Access Salesforce data via APIs(JSForce) from Outside Service》. In this post I will share about how to write a Heroku Scheduler batch for synchronizing MangoDB data to Salesforce with Node.js, like the below outline picture. ※I have no doubt that there hav...
Sublime Text 3でSalesforceの爆速開発環境を構築... Why Sublime Text 3 ? 仕事でSFDC開発2年ほど経験し、いつもEclipse+Force.com IDEの開発環境(Eclipse IDE環境構築はこちらを参照)を使用しています。使いにくいとは思わないですが、若干足りない処があります。例え: 1.APEX、VFのアシストがサポートされれない ※アシスト機能が使えないことはプログラマーとしては、まるでEmeditorでPerlコーディングのような。 2.なかなか重い ※たまり重くて落ちることがありますし、再開したら、開いたコードをSalesforceサーバーに強制的に上書きする可能性もあります。 3.良いブラ...
Salesforce標準ページのURLパラメータまとめ... Salesforceの標準ページには様々なパラメータが使われています、このパラメータを活用して、普段なかなか手が出ない標準ページでも少しカスタマイズができます。 注意: 下記に全てパラメータ値がUTF-8でエンコードする必要あります。 ログインページ Salesforce組織にURLからログインしてアクセス方法が2つあります。 1. https:/// パラメータ 説明 un ユーザID pw パスワード ...