はじめに
選択リスト値を動的に取得する方法がわからなかったので、まとめます
取得方法
選択リスト値を取得するコードです
ある項目の選択リスト値を取り出しています。
オブジェクト名と項目値を変更して匿名実行すると、
何が取り出せるのか見れます。
ある1項目の選択リスト値を取り出す
// ⓵ メタデータ取得
Schema.DescribeFieldResult o = sObjectName__c.fieldName__c.getDescribe();
// ⓶ ⓵の情報からgetPicklistValuesメソッドで,その項目の選択リスト値を取得
List<Schema.PicklistEntry> v = o.getPicklistValues();
// ⓷ 選択リスト最初の値を取り出す
Schema.PicklistEntry first = v[0];
// ⓸ 取り出した最初の1つの情報の値を確認
System.debug('●Label =' + first.getLabel());
System.debug('●Value =' + first.getValue());
System.debug('●Active =' + first.isActive());
イメージ:
⓵getDescribe()で、項目の全体的な情報を取得する。項目型、最大文字数など。その項目の詳細情報みたいな。
このメソッドの返り値がDescribe Field Result。
⓶getPicklistValues()メソッドで、選択リストの値を取得する
⓷ ⓶をするとList型で返ってくるので、1番目の値を取り出している
⓸ 値をdebugで確認している
方法
テストで使うために、選択リスト値の一番目の値を取り出すメソッドを作りました
共通メソッド
// 任意の選択リスト項目から一番目の値を返すメソッド
private static String getFirstPicklistValue(Schema.SObjectField field) {
// メタデータを取得し、さらに選択リスト値を取得する
List<Schema.PicklistEntry> values = field.getDescribe().getPicklistValues();
// 空じゃなければ、1番目の値を返す
return values.isEmpty() ? null : values[0].getValue();
}
↓ 使うときイメージ
使うときイメージ
customObject obj = new customObject();
// 選択リスト値最初の値を設定する
obj.pickListField__c = getFirstPicklistValue(customObject.pickListField__c);
おわりに
テストクラス作るときに、項目が多かったのでメソッド化しました
それにしてもSalesforceが用意してくれるメソッドは便利ですね
参考