Labyrinth of Wisdom

-This is My Archive-


【Salesforce】独自クラスのオブジェクトを作成して画面に表示 (内部クラス)

一通りプログラミングやってきた方には基本的なことだと思うので今さらな内容だと思うんですが、独自クラスでオブジェクトを作るという事の意味が何となく分かったのでメモ。

内部クラスInnerClass

TestInnerClassControllerクラスにInnerClassのリスト型変数icListをフィールド変数としてセットし、get/setしてVFから値を取得・配置できるようにします。

public class TestInnerClassController{

    // フィールド変数
    public InnerClass[] icList {get; set;}
}

このInnerClassという型はSalesforceで用意されている型ではないので、自分でどういう型なのかを設定してやる必要があります。

これが独自クラスを作成するという事になります。

今回はTestInnerClassControllerクラスの中にInnerClassクラスを作るので、内部クラスになります。

    // 内部クラス
    public class InnerClass{
        public String name {get; set;}
        public Integer age {get; set;}
    }

このInnerClassクラスはどういう型なのかというと、String型の変数nameとInteger型の変数ageを変数として持っており、get/setできるようにしています。

これでInnerClassクラスの設定は終わりました。

独自クラスを扱う

InnerClassクラスの設定が終わったので、Salesforceで用意されているString型のように呼び出して使用することが出来ます。

コンストラクタでicListをnewします。

for文を3回ループさせて、icListに要素を追加していきます。

InnerClass型なので、変数nameageを使うことが出来ます。

    // コンストラクタ
    public TestInnerClassController(){
        icList = new List<InnerClass>();
        for(Integer i=0; i<3; i++){
            InnerClass ic = new InnerClass();
            ic.name = 'テスト太郎' + i +'号';
            ic.age = 20 + i;
            icList.add(ic);
        }
        System.debug(icList);
    }

VFで表示する

独自クラスの変数icListに値が格納されたので、Visualforceのapex:pageBlockTableタグなどで複数件表示することが出来ます。

<apex:page controller="TestInnerClassController" >
    <apex:pageBlock title="内部クラステスト" >
        <apex:pageBlockTable value="{!icList}" var="ic">
            <apex:column >
                <apex:outputText value="{!ic.name}" />
            </apex:column>
            <apex:column >
                <apex:outputText value="{!ic.age}" />
            </apex:column>
        </apex:pageBlockTable>
    </apex:pageBlock>
</apex:page>

こんな感じになります。 f:id:Labyrinth_of_Wisdom:20180125111149p:plain

自分で独自クラスを定義してやれば、画面上だけで使用するチェックボックスとかを無駄にオブジェクトのカスタム項目に作らなくていいので便利ですね。

最終的なコントローラはこんな感じです。

public class TestInnerClassController{

    // フィールド変数
    public InnerClass[] icList {get; set;}

    // 内部クラス
    public class InnerClass{
        public String name {get; set;}
        public Integer age {get; set;}
    }

    // コンストラクタ
    public TestInnerClassController(){
        icList = new List<InnerClass>();
        for(Integer i=0; i<3; i++){
            InnerClass ic = new InnerClass();
            ic.name = 'テスト太郎' + i +'号';
            ic.age = 20 + i;
            icList.add(ic);
        }
        System.debug(icList);
    }
}