オブジェクト「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; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/10 22:40
2020/10/11 06:46
2020/10/12 10:06
2020/10/12 10:20
2020/10/13 00:19