7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Salesforce】項目の表示ラベルを一括で取得する

Last updated at Posted at 2019-11-26

今回はApexで項目の表示ラベルを汎用的に一括で取得する方法をご紹介します。

#よく見かける項目の表示ラベル取得の方法

example
String accNameLabel = Schema.SObjectType.Account.fields.Name.label;

この書き方でも問題なく取得することはできますが、
例えばLightningComponent等で作成したTableのcolumnが10列以上ある場合...

example
String accNameLabel = Schema.SObjectType.Account.fields.Name.label;
String accPhoneLabel = Schema.SObjectType.Account.fields.Phone.label;
String accFaxLabel = Schema.SObjectType.Account.fields.Fax.label;
String accCustomLabel = Schema.SObjectType.Account.fields.CustomField__c.label;
etc...

上記のように同じようなコードを何回も記述する必要があります...

#サンプルコード
まず、上記で紹介した書き方のようにオブジェクトタイプを書かずに汎用的に使えるメソッドにしたいと考えました。また、"Key:API名,Value:表示ラベル"のようなMapがあれば使いやすいだろうとと思い、作成したのが下記のコードになります。

example
public static Map<String,String> getFieldLabelMap(String sObjectName){
    Map<String,String> fieldLabelMap = new Map<String,String>();

    for(Schema.SObjectField field : Schema.getGlobalDescribe().get(sObjectName).getDescribe().fields.getMap().values()){
        fieldLabelMap.put(field.getDescribe().getName(), field.getDescribe().getLabel());
    }

    return fieldLabelMap;
}

上記のメソッドを一つ用意しておけば標準オブジェクトでもカスタムオブジェクトでも問題なく取得することができます。

####ちょっとしたデメリット
項目を指定せず一括で取得しているため、項目の削除やAPI名の変更時などにSalesforceがチェックするApex使用箇所には該当しません。(動的SOQLの利用でも同じことが言えますね)
あたりまえですが、項目の削除やAPI名の変更等を行うときはきちんと影響調査してから行いましょう。

#おまけ SOQLでの"SELECT * "としての利用法
上記コードを少し書き換えるだけで、"SELECT * "の動きも実現することができます。

example
public static List<sObject> getAllFieldRecords(String sObjectName){
    List<String> fieldNameList = new List<String>();

    for(Schema.SObjectField field : Schema.getGlobalDescribe().get(sObjectName).getDescribe().fields.getMap().values()){
        fieldNameList.add(field.getDescribe().getName());
    }
    String fieldQuery = String.join(fieldNameList, ',');
    List<sObject> sObjects = Database.query('SELECT ' + fieldQuery + ' FROM ' + sObjectName);

    return sObjects;
}

カスタム項目のみを取得したい場合、リスト格納前に下記のifを書きます。

example
if(field.getDescribe().getName().endsWith('__c')){

}
7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?