<flow:interview> を使用した高度な例
<flow:interview> コンポーネントは、複雑な Visualforce の相互作用を簡単に開発できるようにするために設計されています。カスタムコントローラを作成してフロー内の追加機能にアクセスできます。カスタムコントローラを使用すると、相互にやりとりできる複数のコンポーネントを含むページを作成できます。独自の Apex 型によって組織内のすべてのフローを個別に参照でき、フロー内の変数にはメンバー変数としてアクセスできます。
次の例では、一意の名前「ModemTroubleShooting」を持つフローは Flow.Interview.ModemTroubleShooting として参照されます。マークアップでは、ページの他の部分でフロー変数の値を表示する方法を示します。
上記のマークアップのコントローラは、次のようになります。
カスタムコントローラを使用する場合、フローコンストラクタのフローの先頭で変数の初期値も設定できます。<apex:param> タグを使用して値を設定する場合、コンストラクタを使用して変数を渡すことは省略可能で、必須ではありません。
次は、コンストラクタのフロー変数の値を設定するカスタムコントローラの例です。
Flow.Interview クラスで getVariableValue メソッドを使用して、Visualforce コントローラがフロー変数の値にアクセスできるようにすることができます。変数は、Visualforce ページに埋め込まれたフローか、サブフロー要素でコールされる別のフローに含まれている場合があります。変数値は、これらのうちインタビューが現在実行されているフローから返されます。指定された変数がフロー内に見つからない場合、メソッドは null を返します。このメソッドは、コンパイル時ではなく実行時にのみ変数の存在を確認します。
次のサンプルでは、getVariableValue メソッドを使用してフローからブレッドクラム (ナビゲーション) 情報を取得します。そのフローにサブフロー要素が含まれ、参照される各フローにも vaBreadCrumb 変数が含まれる場合、どのフローでインタビューが実行されているかに関わらず、ブレッドクラムをユーザに提供できます。
次の表に、フローと Apex との間での、サポートされているデータ型の名前付けの違いを示します。
| フロー | Apex |
|---|---|
| text | String |
| number | decimal |
| currency | decimal |
| date | date、dateTime |
| Boolean | Boolean |
Apex コードのテストを記述する適切な方法として、次に ModemTroubleShootingCustomSetVariables のテストクラスを作成する単純な例を挙げます。
reRender 属性の設定
reRender 属性を使用することにより、<flow:interview /> コンポーネントはページ全体を更新することなくフローを再表示します。