【Salesforce】SOQLでFIELDS()関数を使って簡単に全項目を取得する方法

この記事でわかること
  • SOQLでFIELDS()関数を使って簡単に全項目を取得する方法
  • FIELDS()関数の制限事項

SalesforceのSOQLではSQLのように「*(アスタリスク)」を記述して全項目を取得するような便利な書き方ができません。

ですが、すべての項目名を列挙しなくても全項目を取得する方法はあります。

そこで当記事では、SOQLで項目名をすべて列挙せずに全項目を取得する方法について紹介していきます。

なしば
なしば

SQLユーザには普通の事なのかもしれませんが、リリースされたときは革新的だと思った機能です!

FIELDS()関数を使用する

SOQLには様々な関数が用意されていますが、「FIELDS()」関数はSpring’21でリリースされた比較的新しめの機能です。

FIELDS()関数を使用すれば、SQLの「*(アスタリスク)」に近い感覚で全項目を取得することができます。

FIELDS()関数の使い方

FIELDS()関数は次のように記述して使用します。

SOQL
SELECT FIELDS(ALL) FROM Account limit 200
FIELDS()関数を使用したクエリの結果

FIELDS()関数のバリエーション

FIELDS()関数のバリエーションは下記の3通りです。

種別詳細
FIELDS(ALL)対象オブジェクトの全項目を取得
FIELDS(CUSTOM)対象オブジェクトのカスタム項目をすべて取得
FIELDS(STANDARD)対象オブジェクトの標準項目をすべて取得

FIELDS()関数の制限事項

便利なFIELDS()関数ですが、制限事項がいくつかあります。

制限事項
  • ALLとCUSTOMの場合は「LIMIT 200」をつける必要がある
  • クエリの実行ユーザに参照権限がない項目は取得されない
  • 項目名が重複するような書き方はNG

ALLとCUSTOMの場合は「LIMIT 200」をつける必要がある

FIELDS(ALL)とFIELDS(CUSTOM)を使用する場合は、「LIMIT 200」をつけないとエラーでクエリを実行できません。

LIMIT 200がない場合のエラー

ただ、厳密には200レコード以下に絞り込めるクエリになっていれば問題ないので、LIMITを200より小さくしたり、次のように取得件数が選択的なクエリになっていれば実行は可能のようです。

SQOL
SELECT FIELDS(ALL) FROM Account WHERE Id = '0011000001KSEU2AAP'
選択的なクエリ

クエリの実行ユーザに参照権限がない項目は取得されない

FIELDS()関数は項目レベルセキュリティが適用されるため、実行ユーザにアクセス権のある項目しか取得されません。

ApexトリガやApexコントローラなど、システム権限以外で動作する可能性のある処理で使用する場合は注意が必要です。

項目名が重複するような書き方はNG

次のような書き方は取得する項目に重複が発生するためエラーとなります。

SOQL
SELECT Id, FIELDS(ALL) FROM Account limit 200

FIELDS(ALL)でもIdを取得してしまうため、重複になってしまいます。

重複さえ発生しなければ良いので、次のような書き方はOKです。

SOQL
SELECT Id, FIELDS(CUSTOM) FROM Account limit 200
なしば
なしば

ID以外の標準項目が不要な場合はALLを使用するよりも上記の書き方の方が良いかもしれないですね。

まとめ

Apexクラスに項目名を直接記述していると、項目を削除する場合にいちいちApexクラスの修正が必要になるので面倒だったりするので、FIELDS()関数の登場でかなり便利になったかと思います。

制限事項は注意が必要ですが、使えそうな場面では積極的に利用してみてはいかがでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です