こんにちは、にいるです。
今回は、Apexを使用した「オブジェクトの全項目を取得する方法」について説明したいと思います。
・【ヘルプ】Schema 名前空間
・【ヘルプ】DescribeFieldResult クラス
・【ヘルプ】PicklistEntry クラス
1.全項目データを取得する方法
項目を取得するといえば、SOQLが浮かぶかと思いますが、SOQLではSQLのように*で全取得することができません。
SOQLで項目指定に*が使えないのはガバナ制限のためだと思います。
この書き方はできない!
なので、違う方法で取得します。
ここでは、下記のコードで取引先項目を全て取得したいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// ① オブジェクトを指定してオブジェクトの情報を取得します。 Schema.SObjectType s = Schema.getGlobalDescribe().get('Account'); // ② 項目情報を取得するためにDescribeSObjectResult型に変換 Schema.DescribeSObjectResult sd = s.getDescribe(); // ③ .fields.getMap()でAccountの全項目を取得してMapに格納 Map<String, Schema.SObjectField> sMap = sd.fields.getMap(); // ④ Mapからfor文で中身を取り出していく for (Schema.SObjectField ss : sMap.values()) { System.debug('ラベル名 = ' + ss.getDescribe().getLabel()); System.debug('API名 = ' + ss.getDescribe().getName()); } |
①get()メソッドに指定したオブジェクトの情報を取得しています。getのあとを任意のオブジェクトに変更すれば好きなオブジェクトの情報を取得できます。
②Schema.DescribeFieldResultクラスを使用します。
③Map型にAccountの全項目を代入しています。
④最後は③で取得したMapの中身がどうなっているかを確認しています。
■デバッグ結果
メソッドと変数しか使用していなく、あとでカスタム項目を足したとしても動的に動いているので問題なく取れると思います。
ただ多すぎるとガバナ制限にどこかで引っかかるかもしれません。
ちなみに全オブジェクトのデータを取得するには①を下記のようにMap型にしておけば、全部取れます。
1 2 3 |
// ⑤ ①のgetメソッドを使用せずに全てのオブジェクトを取得する場合はMapで型にすることで全取得可能です。 Map<String, Schema.SObjectType> s = Schema.getGlobalDescribe(); System.debug('●s● = '+ s); |
2.まとめ
いかがでしたでしょうか。
Schema.DescribeSObjectResultを使用すれば、オブジェクトの項目を一覧で欲しい時、もしくは特定の項目を全オブジェクトで横断的に使用していてそのチェックをするという場合に使用できると思います。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!
コメント