レコードタイプの選択を、Visualforceで行いたい時があります。
標準のレコードタイプ選択画面であれば、ログインしているユーザのプロファイルに応じたリストが表示されますが、 そのリストをApexで作成する場合のメモです。
[サンプルコード] ※Sample__cは適宜置き換えてください。
List<RecordTypeInfo> rtlist = Sample__c.SObjectType.getDescribe().getRecordTypeInfos();
List<SelectOption> rtoptions = new List<SelectOption>();
for( RecordTypeInfo rt : rtlist ){
//System.debug(' getName() : ' + rt.getName() +
// '/ getRecordTypeId(): ' + rt.getRecordTypeId()+
// '/ isActive(): ' + rt.isActive() +
// '/ isAvailable(): ' + rt.isAvailable() +
// '/ isMaster: ' + rt.isMaster());
if( rt.isMaster() == false && rt.isAvailable() == true ){
rtoptions.add( new SelectOption(rt.getRecordTypeId() , rt.getName() ) );
}
}
//System.debug(rtoptions);
上のコードでプロファイルに応じたリストが取得できます。
ポイントは次です。
- RecordTypeInfo.getName() は、翻訳が指定されていれば翻訳された後の値となります。
- RecordTypeInfo.isAvailable()で、プロファイルで利用可能かが判断できます。RecordTypeInfo.isActive()がfalseの場合は、RecordTypeInfo.isAvailable()は常にfalseとなります。
- RecordTypeInfo.isMaster()がtrueの場合、"マスタ"レコードタイプが取得できますが除外しています。
最後に
RecordTypeオブジェクトでは、RecordTypeInfo.isActive()までしか取得できず、ログインユーザが利用できるレコードタイプを一覧化するには、getRecordTypeInfos()を使う必要があります。
Schema.getGlobalDescribe()を使えば、文字列で指定したオブジェクトの利用可能なレコードタイプ一覧を取得する関数を作成することが可能になります。