こんにちは、管理人の@Salesforce.Zです。
コーダーなら、クエリを書きますよね。普段は全然問題なし、なにもきにしないが、300個の項目取得や オブジェクトのレコードをまるまるコピーする時に厄介じゃないですか
今回、オブジェクトの項目をすべて取得するメソッドを書きました。このメソッドを使用禁止でも、 匿名コンソールなどで、実行すれば、結果をコピペに使ってもあり。なので、どうぞ。 もちろん、ご指摘も歓迎です。
読んだら得ること
★ オブジェクトの全項目を取得するメソッド ★ メソッドの実行結果をDAOクラスにコピペ
目次
全項目取得メソッド
全項目取得メソッド使用禁止の場合、コピペ(ほしい項目のみ)
//取引先のすべて項目のマップ取得 Map<String, Schema.sObjectField> omap = Account.sObjectType.getDescribe().fields.getMap(); String query = ''; Set<String> result = New Set<String>{}; for(String s: omap.keySet()) { // カスタム項目だけ選択 if (s.endsWith('__c')) { query += ', '; query += s; result.add(s); } } system.debug('この結果をDAOクラスにコピペ ' + query);
コピペ問題点
コンソール匿名など、デバッグ結果からコピペを行う場合、100項目以上のような大きい設定オブジェクト(sObject)の場合、System.debug()の結果が field1c, field2c, ...}となり、表示しきれない。やっぱりメソッド化して、全部SELECTステートメントの後につないだほうが一番いい
メソッド化
public Set<String> getFieldApi(SObjectType sObjectType){ Map<String, SObjectField> fields = sObjectType.getDescribe().fields.getMap(); Set<String> result = new Set<String>(); String query = ''; for(String key :fields.keySet()){ if (key.endsWith('__c')) { query += ', '; query += key; result.add(key); } } system.debug('この結果をDAOクラスにコピペ項目数: ' + result.size()); return result; } system.debug('この結果をDAOクラスにコピペ :' + getNameField(Account.SObjecttype ));
メソッド化にしても、デバッグだけで、確認する場合、表示しきれない、大した問題ではないと思うかたもいるが 些細なことでも気になるので、表示しきれてほしい。
デバッグ専用メソッド化(改善版)
/** * オブジェクトの全項目API取得 */ public Set<String> getFieldApi(SObjectType sObjectType){ Map<String, SObjectField> fields = sObjectType.getDescribe().fields.getMap(); Set<String> result = new Set<String>(); String query = ''; for(String key :fields.keySet()){ if (key.endsWith('__c')) { query += ', '; query += key; result.add(key); } } system.debug('この結果をDAOクラスにコピペ項目数: ' + result.size()); return result; }
コンソール匿名で、getFieldApiメソッドをコール
Set<String> fldList = getFieldApi(Account.SObjecttype ); String query1 = ''; String query2 = ''; String query3 = ''; Integer index = 0; for(String api :fldList){ if(index < 20){ query1 += ' , '; query1 += api; }else if(index < 40){ query2 += ' , '; query2 += api; }else{ query3 += ' , '; query3 += api; } index++; } system.debug('この結果をDAOクラスにコピペ(query1) ' + query1); system.debug('この結果をDAOクラスにコピペ(query2) ' + query2); system.debug('この結果をDAOクラスにコピペ(query3) ' + query3);
項目数に応じて、ifステートメントの条件を適切に変更すれば、全部表示しきれることができる
ここまで、やる必要があるかどうか、また別として、これで、コンソール匿名で、全部表示しきれることができる。