【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
型なので、変数name
とage
を使うことが出来ます。
// コンストラクタ 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>
こんな感じになります。
自分で独自クラスを定義してやれば、画面上だけで使用するチェックボックスとかを無駄にオブジェクトのカスタム項目に作らなくていいので便利ですね。
最終的なコントローラはこんな感じです。
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); } }