【Salesforce】【Apex】オブジェクトと項目のラベル名を動的に取得する

こんにちは。
最近めっきり寒くなってきましたね。 私はカレー作りにハマって1週間の半分以上はカレー生活をしています。 寒い日はこれに限りますね

さて、
Salesforce でApex クラスを実装していると、テキスト内にオブジェクトや項目のラベル名を使いたい場合があります。
ラベル名を直書きしてもシステム上問題はないのですが、稼働中にオブジェクトや項目のラベル名を変える事になった場合直書きした個所も一緒に修正する必要があります。
修正の手数も増えてしまうので面倒ですね。

そこで、
Salesforce の管理画面で設定したオブジェクトや項目のラベル名、 API 名から検索して該当する要素のラベル名を直接取得する方法について記載します。

オブジェクトのラベル名

オブジェクトに関係する情報を呼び出すためには「DescribeSObjectResult」クラスを呼び出す必要があります。

developer.salesforce.com

下記の処理のようにクラスを辿っていき、getLabel() でオブジェクトでラベル名を取得します。

    /**
     * オブジェクトのラベル名を取得
     * @param sObjectTypeName           オブジェクトのAPI名
     * @return                          オブジェクトのラベル名
     */
    public String getSObjectLabel(String sObjectTypeName) {
        // sObjectType 名に対応する DescribeSObjectResult を取得
        List<Schema.DescribeSObjectResult> results 
            = Schema.describeSObjects(new List<String>{sObjectTypeName});
        
        // 最初の要素を取得
        DescribeSObjectResult result = results.get(0);

        // DescribeSObjectResult からラベル名を取得する関数を呼び出し
        return DescribeSObjectResult.getLabel();
    }

項目のラベル名

項目に関係する情報を呼び出すためには「DescribeFieldResult」クラスを呼び出す必要があります。

developer.salesforce.com

前述のオブジェクト(DescribeSObjectResult)取得まで実行します。
下記を参考に該当するクラスまで辿っていき、こちらも getLabel() でオブジェクトでラベル名を取得します。

    /**
     * 項目のラベル名を取得
     * @param sObjectTypeName           オブジェクトのAPI名
     * @param filedName                 項目のAPI名
     * @return                          項目のラベル名
     */
    public String getSObjectFieldLabel(String sObjectTypeName, String fieldName) {
        // sObjectType に紐づく DescribeSObjectResult を取得
        List<Schema.DescribeSObjectResult> describeSObjectResults
            = Schema.describeSObjects(sObjectTypeName);
        DescribeSObjectResult describeSObjectResult 
            = describeSObjectResults.get(0);

        // 項目の API 名をキーにした SObjectField のマップを取得
        Map<String, Schema.SObjectField> sObjectTypeFields 
            = describeSObjectResult.fields.getMap();

        // 引数のフィールド名に紐づく DescribeFieldResult のデータを取得
        Schema.DescribeFieldResult describeFieldResult 
            = sObjectTypeFields.get(fieldName).getDescribe();
        
        // DescribeFieldResult からラベル名を取得する関数を呼び出し
        return describeFieldResult.getLabel();
    }

以上です。

今回はラベル名を取り上げましたが、「DescribeSObjectResult」 クラスと 「DescribeFieldResult 」 クラスは他の要素も取得できます。
これらの要素を使うと、より運用しやすいコードになりますので是非参考になさってください。

©︎2017-2018 WebSandBag