2009年9月17日木曜日

[SFDC]:Apex選択リスト・レコードタイプの値を取得・Visualforceへの活用

以下で選択リストの値を動的に取れます。

// Schema.DescribeFieldResult F = Account.hogehoge__c.getDescribe() の 呼び出しは10回までです。
Schema.DescribeFieldResult F = Account.hogehoge__c.getDescribe();
List<Schema.PicklistEntry> P = F.getPicklistValues();

for (PicklistEntry i : p){
System.debug(i);
}

以下はレコードタイプ
Schema.DescribeSObjectResult R = Account.SObjectType.getDescribe();
List<Schema.RecordTypeInfo> RT = R.getRecordTypeInfos();

for (RecordTypeInfo i : RT){
System.debug(i);
}

DescribeFieldResult・DescribeSObjectResultの詳細はリファレンス見たほうがはやい

2013/12/05 追記
用途として、VFページでの選択リストの生成があげられると思います。
VFページでの検索条件に選択リストを作成するパターンとしては、
1.検索条件用のエンティティを利用する(inputFiled)
2.自前で作成
3.2.で作成する際にDescribeを併用する

1のメリットはメンテが不要になりますが、柔軟な指定ができません。
2.はリスト値追加時にメンテが必要になります(Apexなのでデプロイする必要がある)
3.はメンテが不要で、柔軟にもなります。

ということで、私がよく使うコードを紹介。

// 定義するとこ
// 取引先.業種
public String sIndustry {get;set;}
public List sIndustrySL {
  get {
    List wSL = new List();
    wSL.add(new SelectOption('none','--指定しない--'));
    wSL.add(new SelectOption('','*未入力'));
    for (Schema.PicklistEntry pe : Account.sIndustry.getDescribe().getPicklistValues()) {
      wSL.add(new SelectOption(pe.getValue(), pe.getLabel()));
    }
    return wSL;
  }
  set;
}

//検索条件を生成する箇所
String str = '';
if (!'none'.equals(sIndustry)) {
  if (sIndustry == null) {
    str = str + ' AND Industry = \'\'';
  } else {
    str = str + ' AND Industry = \'' + sIndustry + '\'';
  }
}

これで、条件にしないパターン、値がないパターン、それぞれのパターンを網羅できます。
複数選択はまた別の機会に。

0 件のコメント: