背景
- 例えば以下のような選択リスト項目「PickList__c」があるとします
表示ラベル | API参照名 |
---|---|
ラベルA | a |
ラベルB | b |
ラベルC | c |
- これを単純にSOQLでselectしてもAPI参照名の方しか取得できません
HogeObject__c row = [Select PickList__c From HogeObject__c LIMIT 1];
System.debug(row.PickList__c); // 「a」など、API参照名の方のみが表示される
- 余談ですが、このSOQLの書き方だと取得結果が0件だった場合にExceptionが発生するので、良い書き方ではありません
表示ラベルの取得方法
- 選択リストの表示ラベルを取得するためには
tolabel
関数を使用します
HogeObject__c row = [Select tolabel(PickList__c) From HogeObject__c LIMIT 1];
System.debug(row.PickList__c); // 「ラベルA」など、表示ラベルの方のみが表示される
両方取得する場合
- 両方取得する場合も見ていきましょう
HogeObject__c row = [Select PickList__c, tolabel(PickList__c) From HogeObject__c LIMIT 1]; // エラー
- 残念ながらこの書き方ではエラーになります
- PickList__cを2つselectしており、重複してしまうためです
- この場合、表示ラベルの方に別名をつけてあげましょう
- SOQLでは通常、項目に別名をつけることはできませんが、
tolabel
関数の使用時は指定がサポートされています(As句は不要です)
- SOQLでは通常、項目に別名をつけることはできませんが、
HogeObject__c row = [Select PickList__c, tolabel(PickList__c) PickListLabel From HogeObject__c LIMIT 1];
System.debug(row.PickList__c); //「a」など、API参照名の方のみが表示される
System.debug(row.get('PickListLabel'); // 「ラベルA」など、表示ラベルの方のみが表示される
- 上記の書き方で表示ラベル、API参照名の両方が取得できます
- 別名を使う場合、取得の仕方が異なる(getが必要)ので注意してください