SalesforceにおけるWebサービスコールアウトのテスト完全ガイド

Salesforce選択リストの値をレコードタイプに基づいて取得する方法


SalesforceのApexでレコードタイプに関連付けられた選択リスト値の交差を取得する方法を説明します。具体的には、Schema.PicklistEntry を活用して特定のレコードタイプに適用される選択リスト値を取得し、その値のリストを処理します。


実装手順

以下のコードでは、特定のオブジェクトの選択リスト値とレコードタイプを考慮して交差部分を取得する方法を示しています。

public class RecordTypePicklistIntersection {
    public static List<String> getPicklistValuesForRecordType(String objectName, String picklistFieldName, String recordTypeName) {
        List<String> picklistValues = new List<String>();

        try {
            // オブジェクトのメタデータを取得
            Schema.SObjectType sObjectType = Schema.getGlobalDescribe().get(objectName);
            Schema.DescribeSObjectResult describeResult = sObjectType.getDescribe();
            
            // 選択リストフィールドのメタデータを取得
            Schema.DescribeFieldResult fieldResult = describeResult.fields.getMap().get(picklistFieldName).getDescribe();

            // レコードタイプを取得
            Map<String, Schema.RecordTypeInfo> recordTypeInfoMap = describeResult.getRecordTypeInfosByDeveloperName();
            Schema.RecordTypeInfo recordTypeInfo = recordTypeInfoMap.get(recordTypeName);
            
            if (recordTypeInfo != null && recordTypeInfo.isAvailable()) {
                // 選択リスト値を取得
                List<Schema.PicklistEntry> picklistEntries = fieldResult.getPicklistValues();
                for (Schema.PicklistEntry entry : picklistEntries) {
                    if (entry.isActive()) {
                        picklistValues.add(entry.getLabel());
                    }
                }
            } else {
                throw new AuraHandledException('指定されたレコードタイプが見つかりません: ' + recordTypeName);
            }
        } catch (Exception e) {
            System.debug('エラー: ' + e.getMessage());
        }

        return picklistValues;
    }
}

使用方法

このメソッドを以下のように呼び出します:

List<String> picklistValues = RecordTypePicklistIntersection.getPicklistValuesForRecordType(
    'Account',          // オブジェクト名
    'Industry',         // 選択リストフィールド名
    'Customer_Account'  // レコードタイプ名
);

System.debug('取得した選択リスト値: ' + picklistValues);

補足説明

  1. Schema.DescribeFieldResultSchema.RecordTypeInfo の活用
    このコードでは、DescribeFieldResult.getPicklistValues() を使用して、選択リストのすべての値を取得し、isValidFor(recordTypeInfo) メソッドで特定のレコードタイプに適用可能な値をフィルタリングしています。

  2. 有効な選択リスト値のみの取得
    値が無効でない(isActive() == true)場合のみリストに追加します。

  3. 例外処理の追加
    エラーが発生した場合でも、適切なメッセージを表示するために例外処理を実装しています。

コメント