質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

Q&A

解決済

2回答

7130閲覧

salesforce Apex カスタム項目の表示ラベルを取得したい

salty_

総合スコア15

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

0グッド

0クリップ

投稿2020/10/10 15:04

編集2020/10/14 08:27

オブジェクト「User」の中にカスタム項目「baseNo」があります。
「baseNo」は選択リスト型で
値:東京
API参照名:1
というような作りになっております。

API参照名は下記のコードで取得できています(前任者が作成)

クラスの定義部分で gUser = [ SELECT id, Name FROM User]; とuserオブジェクトからIDを取ってきて private Decimal getBaseCode(Id uId) { Decimal result = null; for (User rec : gUser) { if (rec.Id == uId) { //現在のレコードとUserのIDが同じときに result = Decimal.valueOf(rec.baseNo__c); //baseNoのAPI参照名(例では1)を返す break; } } return result; }

今回、このbaseNoのAPI参照名ではなく表示ラベルも取得し、画面上に表示させる改修を頼まれ、
上記のコードを見よう見まねで作ってみたのですがうまくいきません。

private String getBaseName(Id uId) { String result = null; for (User rec : gUser) { if (rec.Id == uId) { result = rec.baseNo__c.getLabel();        ↑この部分です。baseNo__c の表示ラベルを取得したいのですが… } } return result; }

salesforce、apexともに携わって2週間ほどですが、他に分かる人がおらず大変困っております。trailheadと並行して勉強中なので、(javaでの開発もありません)基本もわかっていない部分があると思います。どなたか助言をいただけないでしょうか。よろしくお願いします。

追記①:解決しました!

//元からあったクラス定義部分のgUserにbaseNo__cを追加 gUser = [ SELECT id, Name,baseNo__c FROM User]; //現在のレコードとgUserのIDを照合して、一致したらbaseNo__cを返す private String getBaseName(Id uId) { String result = null; for (User rec : gUser) { if (rec.Id == uId) { Schema.DescribeFieldResult o = User.baseNo__c.getDescribe(); List<Schema.PicklistEntry> v = o.getPicklistValues(); //baseNo__cのデータを取得 for(Schema.PicklistEntry s : v){ if(rec.baseNo__c == s.getValue()){ result = s.getLabel(); } } } } // コール元に返す return result; }

正直まだ完全に理解できておりませんが、皆様に助言いただいたSchemaというキーワードで
試行錯誤してたどり着きました。もっと勉強します。

追記②:一番最初これで行けると思ったがこれだとガバナ制限に引っかかってテスト通らず却下。

//クラス定義部分に追加 ここでbaseNo__cのラベルを取得 gBaseName = [ SELECT id,Name,toLabel(baseNo__c) FROM User ]; //現在のレコードとList gBaseNameのIDを照合して、一致したらbaseNo__cを返す //この時、toLabel()にしなくてもラベルが返ってくる。 private String getBaseName(Id uId) { String result = null; for (User rec : gBaseName) { if (rec.Id == uId) { result = rec.baseNo__c; } } // コール元に返す return result; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

カスタム表示ラベル
上記画像の様に作った場合

Apex での表示ラベルの取得

class

1 result = System.Label.Label01;

で取得できますが

処理を見る限りなんだけど

class

1 result = Schema.SObjectType.User.Fields.baseNo__c.label;

こっち?

投稿2020/10/10 16:33

編集2020/10/12 10:17
kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salty_

2020/10/10 22:40

kuma_kuma_様 ご回答ありがとうございます!!早速試してみたのですが、申し訳ありません、私の勘違いで表示ラベルではなく上記画像の「カスタム項目表示ラベル」を表示させたいのでした…。(表示ラベルと値は、同意かと思っておりました) 2つめのコードを試したところ 「値」が表示されましたので 「カスタム項目表示ラベル」にするべくLabelをValueにすればいいのかな?と思い 最後の部分を result = Schema.SObjectType.User.Fields.baseNo__c.Value; にしてみたのですが、エラーで動かず。。もう少し自分でも調べてみますがもしご教示いただければ幸いですm(_ _)m
kuma_kuma_

2020/10/11 06:46

?両方書いておいたんだけど... 1. 「カスタム項目表示ラベル」 2. 「表示ラベル(項目)」
salty_

2020/10/12 10:06

kuma_kuma_様 ご回答ありがとうございました。その後試行錯誤した結果、追記に書いたコードでラベル名を取得することが出来ました。自分の力では全く前に進めなかったので非常に助かりました。ありがとうございました!
salty_

2020/10/13 00:19

おっしゃる通りでした…テストすると引っかかってしまいました。今から修正してみます…
guest

0

余談ですが、

Schema名前空間では各種オブジェクトのメタデータ(ラベル名、項目の型)などの情報を取得することができます。

Schema名前空間

// Userオブジェクトのすべての項目のラベルを取得 Schema.DescribeSObjectResult d = User.sObjectType.getDescribe(); Map<String, Schema.SObjectField> mapFields = d.fields.getMap(); for (String fieldname : mapFields.keySet()) { System.debug(mapFields.get(fieldname).getDescribe().getLabel()); }

投稿2020/10/10 17:20

comefigo

総合スコア1051

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salty_

2020/10/12 07:43

ご回答ありがとうございます。大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問