Visualforce ページからのフロー変数値の設定
フローを Visualforce ページに埋め込むと、<apex:param> コンポーネントを使用して、変数、sObject 変数、コレクション変数、および sObject コレクション変数の初期値を設定できます。
次の表に、Visualforce を使用して、フローの変数、sObject 変数、および sObject コレクション変数値を設定できる方法を示します。
| 方法 | 変数 | sObject 変数 | コレクション変数 | sObject コレクション変数 |
|---|---|---|---|---|
| コントローラを使用しない | ![]() |
|||
| 標準コントローラを使用する | ![]() |
![]() |
||
| 標準リストコントローラを使用する | ![]() |
|||
| カスタム Apex コントローラを使用する | ![]() |
![]() |
![]() |
![]() |
| インタビューマップを使用する | ![]() |
![]() |
![]() |
![]() |
コントローラを使用しない変数値の設定
この例では、インタビューの開始時に myVariable を値 01010101 に設定します。
1<apex:page>
2
3 <flow:interview name="flowname">
4
5 <apex:param name="myVariable" value="01010101"/>
6
7 </flow:interview>
8
9</apex:page>標準コントローラを使用した変数値の設定
標準 Visualforce コントローラでレコードのデータを渡して変数または sObject 変数を設定できます。この例では、インタビューの開始時に myVariable の初期値を Visualforce 式 {!account} に設定します。
1<apex:page standardController="Account" tabStyle="Account">
2
3 <flow:interview name="flowname">
4
5 <apex:param name="myVariable" value="{!account}"/>
6
7 </flow:interview>
8
9</apex:page>標準リストコントローラを使用した sObject コレクション変数値の設定
sObject コレクション変数は値の配列を表すため、標準リストコントローラまたはカスタム Apex コントローラを使用する必要があります。この例では、インタビューの開始時に myCollection を {!accounts} の値に設定します。
1<apex:page standardController="Account" tabStyle="Account" recordSetVar="accounts">
2
3 <flow:interview name="flowname">
4
5 <apex:param name="myCollection" value="{!accounts}"/>
6
7 </flow:interview>
8
9</apex:page>カスタム Apex コントローラを使用した変数値の設定
標準コントローラよりも詳細に Visualforce ページを制御する必要がある場合、変数値を設定するカスタム Apex コントローラを作成し、Visualforce ページでそのコントローラを参照します。この例では、インタビューの開始時に Apex を使用して myVariable を特定の取引先の ID に設定します。
1public class MyCustomController {
2
3 public Account apexVar {get; set;}
4
5
6
7 public MyCustomController() {
8
9 apexVar = [
10
11 SELECT Id, Name FROM Account
12
13 WHERE Name = ‘Acme’ LIMIT 1];
14
15 }
16
17}1<apex:page controller="MyCustomController">
2
3 <flow:interview name="flowname">
4
5 <apex:param name="myVariable" value="{!apexVar}"/>
6
7 </flow:interview>
8
9</apex:page>この例では、Apex を使用して、sObject コレクション変数 myAccount を Name が Acme のすべてのレコードの Id および Name 項目値に設定します。
1public class MyCustomController {
2
3 public Account[] myAccount {
4
5 get {
6
7 return [
8
9 SELECT Id, Name FROM account
10
11 WHERE Name = 'Acme'
12
13 ORDER BY Id
14
15 ] ;
16
17 }
18
19 set {
20
21 myAccount = value;
22
23 }
24
25 }
26
27 public MyCustomController () {
28
29 }
30
31}1<apex:page id="p" controller="MyCustomController">
2
3 <flow:interview id="i" name="flowname">
4
5 <apex:param name="accountColl" value="{!myAccount}"/>
6
7 </flow:interview>
8
9</apex:page>インタビューマップを使用した変数値の設定
この例では、インタビューの開始時にインタビューマップを使用して accVar の値を特定の取引先の ID に設定します。
1public class MyCustomController {
2
3 public Flow.Interview.TestFlow myflow { get; set; }
4
5
6
7 public MyCustomController() {
8
9 Map<String, Object> myMap = new Map<String, Object>();
10
11 myMap.put('accVar', [SELECT Id FROM Account
12
13 WHERE Name = 'Acme' LIMIT 1]);
14
15 myflow = new Flow.Interview.ModemTroubleShooting(myMap);
16
17 }
18
19}1<apex:page controller="MyCustomController">
2
3 <flow:interview name="flowname" interview="{!myflow}"/>
4
5</apex:page>インタビューの開始時に accVar の値を新規取引先に設定する同様の例を次に示します。
1public class MyCustomController {
2
3 public Flow.Interview.TestFlow myflow { get; set; }
4
5
6
7 public MyCustomController() {
8
9 Map<String, List<Object>> myMap = new Map<String, List<Object>>();
10
11 myMap.put('accVar', new Account(name = 'Acme'));
12
13 myflow = new Flow.Interview.ModemTroubleShooting(myMap);
14
15 }
16
17}1<apex:page controller="MyCustomController">
2
3 <flow:interview name="flowname" interview="{!myflow}"/>
4
5</apex:page>次の例では、対応付けを使用して文字列コレクション変数 (stringCollVar) と数値コレクション変数 (numberCollVar) にそれぞれ 2 つの値を追加します。
1public class MyCustomController {
2
3 public Flow.Interview.flowname MyInterview { get; set; }
4
5
6
7 public MyCustomController() {
8
9 String[] value1 = new String[]{'First', 'Second'};
10
11 Double[] value2 = new Double[]{999.123456789, 666.123456789};
12
13 Map<String, Object> myMap = new Map<String, Object>();
14
15 myMap.put('stringCollVar', value1);
16
17 myMap.put('numberCollVar', value2);
18
19 MyInterview = new Flow.Interview.flowname(myMap);
20
21 }
22
23}1<apex:page controller="MyCustomController">
2
3 <flow:interview name="flowname" interview="{!MyInterview}" />
4
5</apex:page>