問題
Opportunity opp = [select id, stagename from Opportunity Limit 1];
上記のコードがある場合、開発者はどのようにstagename項目のラベルを取得できますか。
- “opp.stagename.label”を呼び出す
- “opp.stagename.getdescribe().getlabel()”を呼び出す
- “opportunity.stagename.label”を呼び出す
- “opportunity.stagename.getdescribe().getlabel()”を呼び出す
正解
- “opp.stagename.label”を呼び出す
- “opp.stagename.getdescribe().getlabel()”を呼び出す
- “opportunity.stagename.label”を呼び出す
- “opportunity.stagename.getdescribe().getlabel()”を呼び出す
解説
それぞれの選択肢の理由について説明します。
□ “opp.stagename.label”を呼び出す
これは不正解です。SalesforceのApexでは、オブジェクトや項目のラベルに直接アクセスするプロパティとして.labelは存在しません。opp.stagenameはStageName項目の値を取得するだけであり、ラベル情報を直接取得することはできません。
□ “opp.stagename.getdescribe().getlabel()”を呼び出す
これは不正解です。getDescribe()メソッドはSObject型や項目のメタデータに関する情報を取得する際に使用されますが、opp.stagenameは単なる値であり、メタデータ情報を持たないため、このメソッドを呼び出すことはできません。
□ “opportunity.stagename.label”を呼び出す
これは不正解です。ApexでOpportunity.StageNameのラベルを取得する場合、この構文はサポートされていません。Opportunityはオブジェクトであり、項目に対するラベルを直接的にこの方法で取得することはできません。
□ “opportunity.stagename.getdescribe().getlabel()”を呼び出す
これは正解です。この構文を使用することで、Opportunity.StageName項目のメタデータにアクセスし、そのラベルを取得できます。Schema.SObjectField.getDescribe()を呼び出すことで項目に関するメタデータ情報を取得し、getLabel()メソッドでそのラベルを取得できます。
実践
各選択肢を確認するコードは以下の通りです。設定<開発者コンソール<匿名実行ウィンドウ(Ctrl+E)に張り付けて、確認してみましょう。
Opportunity opp = [SELECT Id, StageName FROM Opportunity LIMIT 1];
// "opp.stagename.label"を呼び出す
// System.debug('A: ' + opp.StageName.label);
// "opp.stagename.getdescribe().getlabel()"を呼び出す
// System.debug('B: ' + opp.StageName.getDescribe().getLabel());
// "opportunity.stagename.label"を呼び出す
// System.debug('C: ' + Opportunity.StageName.label);
// "opportunity.stagename.getdescribe().getlabel()"を呼び出す
System.debug('D: ' + Opportunity.StageName.getDescribe().getLabel());
コメント
コメント一覧 (2件)
デベロッパーの問題を整理して、答えを解読して、本当にありがとうございます。
Salesforceデベロッパーの勉強が楽になる。
試験対策:第142問について、
答えの2番目のコードを実行して、エラーが出ました。
4番目のコードを実行すると項目のラベルが表示されます。
ウさん
ご指摘ありがとうございます。確かに、メタデータにアクセスするにはSchemaクラスを使用する必要がありました。選択肢Bはopp.StageName.getDescribe() は値に対してメタデータを取得しようとしているためエラーとなります。解説を適切に修正いたしました。