【Salesforce】クエリロケータの書き方について
バッチ処理のStartメソッドで返さなければいけない、Database.QueryLocatorというものがあります。
Database.getQueryLocatorで取得することが出来るのですが、その引数は2種類あります。
SOQLの文字列を渡すものと、SObjectのリストを渡すものです。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database.htm#apex_methods_system_database
SOQLの文字列を渡す場合は特に問題ないのですが、SObjectのリストを渡す場合は少し注意が必要なようです。
例えば、このようなコードを書いた場合です。
List<Account> accountList; Database.QueryLocator locator; // 取引先のリストを取得する accountList = [select Id from Account]; // クエリロケータを作成する locator = Database.getQueryLocator(accountList); // Argument must be an inline query.
一見大丈夫そうに見えるのですが、保存時にエラーが発生します。
Argument must be an inline query.
引数はインラインのクエリで、とのことです。
つまり
Database.QueryLocator locator; // クエリロケータを作成する locator = Database.getQueryLocator( [select Id from Account] );
これであればエラー無く通ります。
訳あって1つのバッチクラスで複数のクエリロケータを使い分ける必要がありましたが、これで解決できました。
No comments.