function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
TShinchiTShinchi 

選択リストの値を取得してプルダウン表示する方法

選択リストの選択値を取得して、VisualForceページ上に取得した選択リストの選択値を使ったプルダウンを表示したいと考えています。

 

http://kuryuryu.blog51.fc2.com/blog-category-6.html

 

などを参考に、任意の選択値でページにプルダウンを表示することはできました。

 

やりたいことは、例えばある項目Aで、選択値(選択肢)として、'AAA'、'BBB'の二択があったときに、この'AAA'と'BBB'をApexクラスで取得して、

プルダウン表示するということです。

SOQLで、ある項目の選択値をとってきたりできるのでしょうか。

 

よろしくお願いします。

minoawminoaw

項目設定で定義されている選択肢を表示するということでしょうか。

単に標準の編集画面と同様の選択リストを表示したいのであれば
apex:selectList ではなく apex:inputField を使用するのがapexを書く必要がなくて楽かと思います。

Apexで項目の選択肢をList<SelectOption>にするコードを書くとすると、

 

    public List<SelectOption> getItems() {
        List<SelectOption> options = new List<SelectOption>();
        DescribeFieldResult f = SObjectType.Account.fields.Type;
        List<PicklistEntry> entries = f.getPicklistValues();
        for (PicklistEntry e : entries) {
            if (e.isActive()) {
                options.add(new SelectOption(e.getValue(), e.getLabel()));
            }
        }
        return options;
    }

のようになるかと思います。

このコードではAccount(取引先)オブジェクトのType(種別)項目を取得しています。

 

Apexで選択肢を作る方法だと、

項目間連動を無視して定義されている選択肢がすべて表示されることになりますので

その点にはご注意ください。

 

 

 

TShinchiTShinchi

ご回答ありがとうございます。

 

> 項目設定で定義されている選択肢を表示するということでしょうか。

 

はい。そうです。

 

> 単に標準の編集画面と同様の選択リストを表示したいのであれば
> apex:selectList ではなく apex:inputField を使用するのがapexを書く必要がなくて楽かと思います。

 

この場合、コントローラーで紐付けられていないオブジェクトの項目も指定できるのでしょうか。

 

対象のVFページ - 対象のVFに紐づけれれたコントローラ - 商談

 

とあった際に、VFページから、商談の選択リスト(StageName)などをとって、プルダウンで表示したいと考えています。

 

<apex:inputField value="{!Oppourtunity.StageName}" />

 

などとしてみましたが、コンパイルエラーになりました。

 

> Apexで項目の選択肢をList<SelectOption>にするコードを書くとすると、

 

    public List<SelectOption> getItems() {
        List<SelectOption> options = new List<SelectOption>();
        DescribeFieldResult f = SObjectType.Account.fields.Type;
        List<PicklistEntry> entries = f.getPicklistValues();
        for (PicklistEntry e : entries) {
            if (e.isActive()) {
                options.add(new SelectOption(e.getValue(), e.getLabel()));
            }
        }
        return options;
    }

> のようになるかと思います。

> このコードではAccount(取引先)オブジェクトのType(種別)項目を取得しています。

 

こちらの方法で試したところ、無事、目的のプルダウンを作れました。

ありがとうございます。

 

 

minoawminoaw

> この場合、コントローラーで紐付けられていないオブジェクトの項目も指定できるのでしょうか。

 

できます。

コントローラの中でOpportunity型の変数をもち、inputFieldのvalueでこの変数の項目と紐付ければ可能です。

 

public MyController {
    public Opportunity opp { get; set; }
    public MyController() {
        opp = new Opportunity();
    }
}
<apex:inputField value="{!opp.StageName}" />

ですがこちらの方法でも、どのみちクラスの変更が伴うでしょうし、

項目間連動等がないのであれば selectList を使用するのと大差はないですね。

 

TShinchiTShinchi

> > この場合、コントローラーで紐付けられていないオブジェクトの項目も指定できるのでしょうか。

 

> できます。

> コントローラの中でOpportunity型の変数をもち、inputFieldのvalueでこの変数の項目と紐付ければ可能です。

 

public MyController {
    public Opportunity opp { get; set; }
    public MyController() {
        opp = new Opportunity();
    }
}
<apex:inputField value="{!opp.StageName}" />

> ですがこちらの方法でも、どのみちクラスの変更が伴うでしょうし、

> 項目間連動等がないのであれば selectList を使用するのと大差はないですね。

 

なるほど。ありがとうございます。

今回は項目間連動を考慮しないので、selectListを使う方法でやってみることにしました。