ヘッダーをスキップ

Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.1.0.0 E64867-01 |
| 目次

前 | 次 |

# 12 MAF AMXページの作成

この章では、MAF AMXアプリケーション機能の作成方法について説明します。

この章の内容は次のとおりです。

- 第12.1項「MAF AMXアプリケーション機能の概要」

- 第12.2項「タスク・フローの作成」

- 第12.3項「ビューの作成」

## 12.1 MAF AMXアプリケーション機能の概要

MAF AMXはモバイル・アプリケーション・フレームワーク(MAF)内のサブフレームワークであり、サポートされるすべてのプラットフォームで動作が同一となるアプリケーション機能を作成できる一連のUIコンポーネントを備えています。MAF AMXを使用すると、UIコンポーネントをページ・エディタにドラッグして、宣言的に使用できます。通常、MAF AMXアプリケーション機能には相互に接続された複数のページがあり、様々なパスを経由してこれらのページ間を移動できます。

注意: モバイル・デバイスのインタフェースを開発する際には、画面領域が非常に限られているということを常に意識する必要があります。また、一部のモバイル・デバイスではタッチスクリーンが使用できません。

詳細は、次を参照してください。

- 第2章「MAFアプリケーション開発のスタート・ガイド」

- 第13章「MAF AMXユーザー・インタフェースの作成」

- 第14章「MAF AMXでのバインディングの使用とデータ・コントロールの作成」

## 12.2 タスク・フローの作成

タスク・フローにより、MAF AMXページ間のナビゲーションを定義できます。JDeveloperのアプリケーション・ワークスペース(第2.2項「MAFアプリケーションの作成」を参照)を使用して、タスク・フローを設計することにより、MAF AMXアプリケーション機能のユーザー・インタフェースの作成を開始できます。MAF AMXでは、ナビゲーション・ケースとナビゲーション・ルールを使用してタスク・フローを定義します。これらの定義は、`ViewController-task-flow.xml`というデフォルト名のファイルに格納されています(第12.2.3項「ViewController-task-flow.xmlファイルに関する必知事項」を参照)。

(開発コンピュータの``jdev_install`/jdeveloper/jdev/extensions/oracle.maf/Samples`ディレクトリ内の`PublicSamples.zip`ファイルにある) NavigationというMAFサンプル・アプリケーションには、循環ナビゲーション、ルーターなど様々なナビゲーション技術の使用方法が示されています。

MAFでは、バインド・タスク・フローとバインドなしタスク・フローの両方を持つMAF AMXアプリケーション機能を作成できます。第12.2.12項「バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項」で説明しているように、バインド・タスク・フローはタスク・フロー定義とも呼ばれ、アプリケーションの再利用可能な部分を表します。MAFでは、バインド・タスク・フローにはエントリ・ポイントが1つありますが、終了ポイントはありません。バインド・タスク・フローには、アクティビティと制御フロー・ルールの独自のコレクションに加え、独自のメモリー・スコープとマネージドBean存続期間が含まれます。他のバインド・タスク・フロー特性として、入力パラメータの受入れ(第12.2.12.3.1項「バインド・タスク・フローへのパラメータ渡し」)や戻り値の生成(第12.2.12.3.2項「バインド・タスク・フローの戻り値の構成」)などがあります。

アプリケーション機能にバインド・タスク・フローを作成するには、MAF AMXタスク・フロー・デザイナを使用します。タスク・フローの概要エディタと同様、このツールにはダイアグラマ(第12.2.4,項「MAFタスク・フロー・ダイアグラマに関する必知事項」を参照)が含まれており、ここで、「コンポーネント」ウィンドウからアクティビティと制御フローをドラッグ・アンド・ドロップすることにより(第12.2.2項「タスク・フロー・アクティビティと制御フローに関する必知事項」)、タスク・フローを構築します。その後、「プロパティ」ウィンドウを使用して、これらのアクティビティとそれらの間の遷移を定義します。

タスク・フローがすでに作成されている場合を除き、新しいMAF AMXページが作成されると、MAFでは自動的にデフォルトのバインドなしタスク・フロー(`adfc-mobile-config.xml`ファイル)が生成されます。

各タスク・フローはアプリケーション機能としてMAFアプリケーションに追加できます。詳細は、第5.3項「アプリケーション機能のコンテンツをMAF AMXページまたはタスク・フローとして定義する方法」を参照してください。

### 12.2.1 タスク・フローの作成方法

タスク・フローはタスク・フロー自体と、複数のアクティビティ、そしてそれらのアクティビティ間の制御フロー・ルールで構成されています(第12.2.2項「タスク・フロー・アクティビティと制御フローに関する必知事項」を参照)。通常、アクティビティの大半は、フロー内の異なるページを示すビュー・アクティビティです。メソッドや操作をコールする必要がある場合(ページのレンダリング前など)は、メソッド・コール・アクティビティをそのアクティビティから次の適切なアクティビティまでの制御フロー・ケースとともに使用します。別なタスク・フローをコールする場合は、タスク・フロー・コール・アクティビティを使用します。フローにブランチ化が必要な場合は、ルーター・アクティビティを使用します。バインド・タスク・フローの最後で、リターン・アクティビティを使用してフローを終了し、そのバインド・タスク・フローをコールしたフローに制御を戻します。

ナビゲーション・ダイアグラマを使用して、MAF AMXアプリケーション機能のバインド・タスク・フローを宣言的に作成します。ダイアグラマを使用すると、JDeveloperによって、MAF AMXアプリケーション機能でナビゲーションが機能するために必要なXMLメタデータが`ViewController-task-flow.xml`ファイル(デフォルト)に作成されます。

始める前に

タスク・フローを設計するには、MAFアプリケーションにビュー・コントローラ・プロジェクト・ファイル(第2章「MAFアプリケーション開発のスタート・ガイド」を参照)が含まれている必要があります。

MAFでタスク・フローを作成するには、次の2つの方法があります。

- バインド・タスク・フローは`maf-feature.xml`ファイルから作成できます。詳細は、第5.3項「アプリケーション機能のコンテンツをMAF AMXページまたはタスク・フローとして定義する方法」を参照してください。

- JDeveloperの「新規ギャラリ」を使用できます。詳細は、次の手順を参照してください。

「新規ギャラリ」からタスク・フローを作成するには:

1. JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAFタスク・フロー」の順に選択します(図12-1を参照)。「OK」をクリックします。

   図12-1 新しいMAFタスク・フローの作成

3. 「MAFタスク・フローの作成」ダイアログ(図12-2を参照)で、新しいタスク・フローのファイル名と場所を指定して「OK」をクリックし、図12-3に示すナビゲーション・ダイアグラマで新しい`<Name>``-flow.xml`ファイルを開きます。

   注意: タスク・フローは、MAFアプリケーションのビュー・コントローラ・プロジェクトのHTMLルート内に作成する必要があります。

   注意: 同じパターンですでに存在するバインド・タスク・フローの数に従って、JDeveloperによってタスク・フローの数が増分されます。

   図12-2 「MAFタスク・フローの作成」ダイアログ

   図12-3 新しい空白のタスク・フロー

4. 「コンポーネント」ウィンドウで、「MAFタスク・フロー」を選択します。

   ヒント: 「コンポーネント」ウィンドウが表示されていない場合は、メイン・メニューから「ウィンドウ」→「コンポーネント」を選択します。デフォルトでは、「コンポーネント」ウィンドウはJDeveloperの右上部に表示されます。

5. 「MAFタスク・フロー」→「コンポーネント」を選択し、使用するコンポーネントを選択してダイアグラムにドラッグ・アンド・ドロップします。図12-4に示すように、JDeveloperでは新たに追加されたコンポーネントを使用してダイアグラムが再描画されます。

   図12-4 タスク・フローへのコンポーネントの追加

   タスク・フローへのアクティビティの追加方法の詳細は、第12.2.5項「タスク・フロー・アクティビティの追加方法と使用方法」を参照してください。

   制御フローの追加方法の詳細は、第12.2.6項「制御フローの定義方法」を参照してください。

   新しいタスク・フローの動作を定義する方法の詳細は、第12.2.1.1項「新しいバインド・タスク・フローの動作に関する必知事項」を参照してください。

「概要」タブを開き、概要エディタを使用してナビゲーション・ルールとナビゲーション・ケースの作成することもできます。概要エディタを使用したナビゲーション作成の詳細は、[F1]キーで参照できます。

また、「ソース」エディタでページを直接編集して、タスク・フロー・ファイルに手動で要素を追加することもできます。「ソース」エディタでファイルを開くには、「ソース」タブをクリックします。

注意: 手動でタスク・フロー・ファイルを編集する場合は、MAF AMXページ、JavaScriptファイルおよびCSSファイルを参照するすべてのドキュメント・ファイル名で大文字と小文字が区別されることに注意してください。 特殊文字(アンダースコアなど)がファイル名に使用されている場合は、モバイル・デバイスの仕様を参照して、その文字の使用がサポートされているかどうかを確認する必要があります。

MAF AMXアプリケーション機能にナビゲーションを定義した後は、ページを作成したり、ナビゲーションを使用するコンポーネントを追加することができます。ページでのナビゲーション・コンポーネントの使用方法の詳細は、第12.2.6項「制御フローの定義方法」を参照してください。

MAF AMXアプリケーション機能にタスク・フローを定義した後は、ビュー・ファイルをダブルクリックしてMAF AMXビューにアクセスできます。詳細は、第12.3項「ビューの作成」を参照してください。

#### 12.2.1.1 新しいバインド・タスク・フローの動作に関する必知事項

新しいバインド・タスク・フローが作成されると、MAFは自動的に`page-flow-scope-behavior`要素を`<Name>``-flow.xml`ファイルに追加します。この要素は、最上位の`task-flow-definition`要素の子として追加されます。

注意: `page-flow-scope-behavior`要素は、新規作成したタスク・フローが以前のバージョンのMAFを使用して構築されたプロジェクトに作成された場合でも、すべてのタスク・フローに追加されます。

`page-flow-scope-behavior`要素の値はデフォルトで`push-new`に設定され、新しいタスク・フローの概要エディタとソース・エディタ、および`task-flow-definition`要素の「プロパティ」ウィンドウに表示されます(図12-5を参照)。

図12-5 タスク・フローの「ページ・フロー・スコープの動作」

「ページ・フロー・スコープの動作」が`push-new`に設定されている場合、新しいページ・フロー・スコープが作成され、古い`pageFlowScope`の変数は保存されて、スタックにプッシュされます。これにより、タスク・フロー・・リターン実行時に、以前のページ・フロー・スコープをリストアできます。「ページ・フロー・スコープの動作」が`preserve`に設定されている場合、タスク・フロー・コールを実行してタスク・フローが開始されたときに、`pageFlowScope`の変数はクリアされないので、新しいタスク・フローの変数には古い値が格納されます。

既存のタスク・フローに`page-flow-scope-behavior`要素が存在しない場合は、この要素を`push-new`または`preserve`として定義する必要があります。

`pageFlowScope`の詳細は、第14.3.5.2項「マネージドBeanカテゴリについて」を参照してください。

### 12.2.2 タスク・フロー・アクティビティと制御フローに関する必知事項

タスク・フローは、アクティビティ、およびアクティビティ間の遷移を定義する制御フロー・ケースで構成されます。

MAFタスク・フロー・デザイナは表12-1に示すアクティビティをサポートしています。

表12-1 タスク・フロー・アクティビティ

アクティビティ | 説明
--- | ---
表示 | MAF AMXページを表示します。詳細は、第12.2.5.1項「ビュー・アクティビティの追加」を参照してください。
メソッド・コール | メソッド(通常はマネージドBean上のメソッド)を起動します。メソッド・コール・アクティビティをMAF AMXアプリケーション機能の制御フローの任意の位置に配置して、制御フロー・ルールに基づいてロジックを起動できます。詳細は、第12.2.5.3項「メソッド・コール・アクティビティの追加」を参照してください。 タスク・フローに含まれるメソッド・コールに渡すパラメータを指定することもできます。これらには、MAF AMXタスク・フロー内のメソッド・コール・アクションの標準パラメータが含まれます。デザイナを使用してメソッドを生成する場合、デザイナにより必要な引数およびタイプが追加されます。 実行時にタスク・フロー内のメソッド・コールのパラメータを定義し、メソッド・コール自体にパラメータを渡してこれを使用できます。詳細は、「タスク・フロー・アクティビティの追加および使用方法」の部を参照してください。
ルーター | 式言語(EL)式を評価し、その式の値に基づいて結果を戻します。その後、このような結果を使用して、タスク・フローの他のアクティビティに制御をルーティングします。詳細は、第12.2.5.2項「ルーター・アクティビティの追加」を参照してください。
タスク・フロー・コール | バインドなしタスク・フローまたはバインド・タスク・フローからバインド・タスク・フローをコールします。タスク・フロー・コール・アクティビティでは、同じMAF AMXアプリケーション機能内にあるバインド・タスク・フローをコールできますが、別のMAF AMXアプリケーション機能またはライブラリに追加された機能アーカイブ・ファイル(FAR) (第8章「MAFアプリケーション・コンテンツの再使用」を参照)からバインド・タスク・フローをコールすることもできます。 タスク・フロー・コール・アクティビティは、タスク・フロー入力パラメータおよび戻り値をサポートします。 詳細は、第12.2.5.4項「タスク・フロー・コール・アクティビティの追加」を参照してください。
タスク・フロー・リターン | アプリケーションの制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。タスク・フロー・リターンは、バインド・タスク・フロー内でのみ使用できます。詳細は、第12.2.5.5項「タスク・フロー・リターン・アクティビティの追加」を参照してください。

MAFタスク・フロー・デザイナでは、表12-2にリストされた制御フローがサポートされています。

表12-2 制御フロー

制御フロー | 説明
--- | ---
制御フロー・ケース | MAF AMXアプリケーション機能内で、あるアクティビティから次のアクティビティに制御を渡す方法を指定します。詳細は、第12.2.6.1項「制御フロー・ケースの定義」を参照してください。
ワイルドカード制御フロー・ルール | IDがワイルドカード式と一致するアクティビティからの制御フロー・ケースを表します。詳細は、第12.2.6.2項「ワイルドカード制御フロー・ルールの追加」を参照してください。

### 12.2.3 ViewController-task-flow.xmlファイルに関する必知事項

`ViewController-task-flow.xml`ファイルを使用すると、「コンポーネント」ウィンドウからMAF AMXタスク・フロー・コンポーネントをダイアグラマにドラッグ・アンド・ドロップすることにより、ビュー(MAF AMXページ)間の相互作用を設計できます。

図12-6に、`Products-flow.xml`というタスク・フロー・ファイル例を示します。このファイルでは、制御フローは`products`ページから`productdetails`ページに方向付けられます。`productdetails`ページから`products`ページに戻るには、組込みの`__back`ナビゲーションが使用されます(第12.2.7項「MAFの戻るナビゲーションのサポートに関する必知事項」を参照)。

図12-6 タスク・フロー・ファイル

### 12.2.4 MAFタスク・フロー・ダイアグラマに関する必知事項

図12-6に示すように、MAFタスク・フロー作成ユーティリティを使用してタスク・フローを作成すると、タスク・フロー・ダイアグラムおよび「コンポーネント」ウィンドウが自動的に表示されます。タスク・フロー・ダイアグラムはビジュアル・エディタであり、「コンポーネント」ウィンドウまたは「アプリケーション」ウィンドウからのアクティビティとタスク・フローをここにドラッグ・アンド・ドロップできます。詳細は、第12.2.5項「タスク・フロー・アクティビティの追加方法と使用方法」を参照してください。

### 12.2.5 タスク・フロー・アクティビティの追加方法と使用方法

タスク・フロー・ダイアグラマを使用して、アクティビティ、ビューおよび制御フローをドラッグ・アンド・ドロップします。

始める前に

図12-7に示すように、「コンポーネント」ウィンドウから「MAFタスク・フロー」を選択する必要があります。

MAFタスク・フローにアクティビティを追加するには:

1. 「アプリケーション」ウィンドウで、タスク・フロー・ソース・ファイル(`ViewController-task-flow.xml`など)をダブルクリックして、図12-7に示すようなタスク・フロー・ダイアグラムおよび「コンポーネント」ウィンドウを表示します。ダイアグラマにはタスク・フロー・エディタが表示されます。「コンポーネント」ウィンドウには、MAFタスク・フローで使用できるコンポーネントが自動的に表示されます。

2. 「コンポーネント」ウィンドウからダイアグラムにアクティビティをドラッグします。ダイアグラムにビュー・アクティビティをドラッグしてダブルクリックすると、MAF AMXページの作成ウィザードを起動できます(第12.2.5.1項「ビュー・アクティビティの追加」を参照)。

図12-7 タスク・フロー・エディタのダイアグラマ

注意: 各バインド・タスク・フローに関連付けられているデフォルトのアクティビティがあります。

#### 12.2.5.1 ビュー・アクティビティの追加

タスク・フロー・アクティビティの主要なタイプの1つに、MAF AMXページを表示するビュー・アクティビティがあります。

タスク・フローのソース・ファイル内のXMLメタデータは、ビュー・アクティビティを物理MAF AMXページと関連付けます。`id`属性ではビュー・アクティビティが識別されます。

タスク・フローのビュー・アクティビティは、実行中に相互に制御を受け渡すように構成できます。たとえば、あるビュー・アクティビティ(ビュー・アクティビティA)から次のビュー・アクティビティ(ビュー・アクティビティB)に制御を渡すには、ビュー・アクティビティAと関連付けられたページ上にコマンド・コンポーネント(ボタンやリンクなど)を構成します。これを行うには、コマンド・コンポーネントのAction属性を、起動するタスク・フロー・アクティビティ(ビュー・アクティビティBなど)に対応する制御フロー・ケース`from-outcome`に設定します。実行時に、エンド・ユーザーは、コマンド・コンポーネントを起動することで制御フロー・ケースを初期化します。UIコンポーネントのAction属性の定数値または動的値のいずれかを使用して、あるビュー・アクティビティから別のアクティビティに移動できます。

- コンポーネントのAction属性の定数値は、常に同じ制御フロー・ケースをトリガーするアクション結果です。エンド・ユーザーがコンポーネントをクリックすると、その制御フロー・ケースに指定されているアクティビティが実行されます。代替の制御フローはありません。

- コンポーネントのAction属性の動的値はマネージドBeanまたはメソッドにバインドされます。メソッド・バインディングにより返される値によって、次に起動する制御フロー・ケースが決定されます。たとえば、メソッドはページ上でユーザー入力を検証し、入力が有効な場合はある値を返し、入力が無効な場合は別の値を返します。これらの異なるアクション値はそれぞれ別個のナビゲーション・ケースをトリガーするため、アプリケーションが移動可能なターゲット・ページは2つのいずれかになります。

詳細は、第12.2.9項「UIコンポーネントを使用したアクション結果の指定方法」を参照してください。

また、ターゲット・ビュー・アクティビティに制御を渡す前に、値が必ず`true`になるEL式を記述できます。タスク・フローにある制御フロー・ケースの`<if>`子要素の値としてEL式を記述します。

例12-1および例12-2に、ビュー・アクティビティ間で制御を渡した場合の処理内容を示します。

例12-1は、バインド・タスク・フローまたはバインドなしタスク・フローのXMLソース・ファイルに定義された制御フロー・ケースを示します。

例12-1 XMLソース・ファイルで定義された制御フロー・ケース

    <control-flow-rule>
       <from-activity-id>Start</from-activity-id>
          <control-flow-case>
             <from-outcome>toOffices</from-outcome>
             <to-activity-id>WesternOffices</to-activity-id>
          </control-flow-case>
    </control-flow-rule>

例12-2に示すように、Startビュー・アクティビティに関連付けられているMAF AMXページ上のボタンで、`action`属性として`toOffices`が指定されます。エンド・ユーザーがボタンをクリックすると、制御フロー・メタデータで`to-activity-id`として指定された`WesternOffices`アクティビティに制御フローが渡されます。

例12-2 ビュー・アクティビティで定義された静的ナビゲーション・ボタン

    <amx:commandButton text="Go" id="b1" action="toOffices">

詳細は、次を参照してください。

- 第12.2.5.1項「ビュー・アクティビティの追加」

- 第12.3.1.2項「MAF AMXページの作成」

前述のとおり、ビュー・アクティビティは、メタデータ内で実際のMAF AMXページと関連付けられており、タスク・フローに追加されるとこのページが表示されます。ビュー・アクティビティを追加するには、「コンポーネント」ウィンドウからドラッグ・アンド・ドロップします。実際のMAF AMXページを作成するには、「ダイアグラム」ウィンドウでビュー・アクティビティをダブルクリックして、表示されたダイアログでページの特性を定義します(図12-30「「MAF AMXページの作成」ダイアログ」を参照)。ビュー・アクティビティは、「アプリケーション」ウィンドウ内のMAF AMXファイルを概要エディタの「ダイアグラム」タブにドラッグ・アンド・ドロップして作成することもできます。

バインド・タスク・フローを作成する場合、特定のアクティビティをデフォルト・アクティビティとして指定できます(第12.2.12項「バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項」を参照)。これにより、バインド・タスク・フローが実行されるたびに、この特定のアクティビティが最初に実行されます。デフォルトでは、JDeveloperはタスク・フローに追加した最初のアクティビティをデフォルトにします。別のアクティビティに変更する場合は、「ダイアグラム」ウィンドウ内で該当するアクティビティを右クリックし、「アクティビティのマーク」→「デフォルト・アクティビティ」の順に選択します(図12-8を参照)。

図12-8 デフォルト・アクティビティの定義

#### 12.2.5.2 ルーター・アクティビティの追加

EL式の実行時の評価に基づいて、ルーター・アクティビティを使用し、制御をアクティビティにルーティングします。

各制御フローは、異なるルーター・ケースに対応できます。各ルーター・ケースでは、次の要素を使用して、制御が次にルーティングされるアクティビティを選択します。

- `expression`: 実行時の値が`true`または`false`になるEL式

  ルーター・アクティビティは、`true`を返すEL式に対応する結果を返します。

- `outcome`: EL式が`true`に評価された場合にルーター・アクティビティから返される値

  制御フロー・ケース上でルーター・ケースの`outcome`が`from-outcome`と一致する場合は、制御フロー・ケースがポイントするアクティビティに制御が渡されます。ルーター・アクティビティのケースがいずれも`true`に評価されない場合、またはルーター・アクティビティのケースが指定されていない場合は、ルーターの「デフォルト結果」フィールドで指定されている`outcome`が使用されます(存在する場合)。

ルーティング条件をEL式で表現できる場合は、ルーター・アクティビティを使用することを検討してください。ルーター・アクティビティを使用すると、タスク・フローの条件に関するより多くの情報を示すことができます。

ルーター・アクティビティをダイアグラム上にドラッグすると、「プロパティ」ウィンドウを使用して式を作成し、その式の評価によりどの制御フロー・ルールに従うかを決定できます。「プロパティ」ウィンドウを使用して、ルーター・アクティビティの「アクティビティID」および「デフォルト結果」を構成し、ルーター・ケースをルーター・アクティビティに追加します。

「アクティビティID」属性を定義する際は、タスク・フローのソース・ファイル内にルーター・アクティビティを識別する値を記述します。

「デフォルト結果」属性を定義する際は、いずれの制御フロー・ケースの値もtrueに評価されない場合、または制御フロー・ケースが指定されていない場合に、ルーター・アクティビティが制御を渡すアクティビティを指定します。

追加するルーター・ケースごとに、図12-49に示す「ケース」セクションで「追加」(+)をクリックして、値を指定します。

図12-9 ルーター・アクティビティの構成

- 式: 実行時の値が`true`または`false`になるEL式。

  たとえば、ビュー・アクティビティの入力テキスト・フィールドにある値を参照するには、次のようなEL式を記述します。

      #{pageFlowScope.value=='view2'}

  このEL式が`true`を返すと、「結果」フィールドで指定した結果がルーター・アクティビティによって呼び出されます。

- 結果: 「式」で指定したEL式が`true`を返す場合にルーター・アクティビティによって呼び出される結果。

  タスク・フロー・ダイアグラムの結果ごとに制御フロー・ケースまたはワイルドカード制御フロー・ルールを作成します。たとえば、制御フロー・ケースの結果ごとに、対応する`from-outcome`があることを確認します。

ルーター・アクティビティを使用して制御フローを構成すると、JDeveloperによって、ルーター・アクティビティのプロパティに指定した値に基づいて、値がタスク・フローのソース・ファイルに書き込まれます。

#### 12.2.5.3 メソッド・コール・アクティビティの追加

メソッド・コール・アクティビティをダイアグラム上にドラッグすると、「プロパティ」ウィンドウを使用して、コールするメソッドを構成できます。

メソッド・コール・アクティビティを使用して、アプリケーション機能の制御フロー内のどこからでもMAF AMXアプリケーション機能ロジックを起動する、カスタム・メソッドまたは組込みメソッドをコールします。ページ表示前の初期化、ページ終了後のクリーンアップ、例外処理などのタスクを実行するメソッドを指定できます。

制御フロー・ケースを指定してメソッドの終了後に制御を渡すメソッドに対して結果を設定できます。結果は次のいずれかとして指定できます。

- `fixed-outcome`: 正常完了時に、メソッドから常に戻される単一の結果(例: `success`)。メソッドが正常に完了しないと結果は戻されません。メソッド・タイプがvoidの場合、`to-string`ではなく`fixed-outcome`を指定する必要があります。

  この結果を定義するには、「プロパティ」ウィンドウで「固定結果」フィールドを設定します(図12-10を参照)。

- `to-string`: `true`として指定した場合、メソッドによって戻されたJavaオブジェクトに対して`toString()`メソッドがコールされ、それに基づく結果が得られます。たとえば、`toString`メソッドから`editBasicInfo`が戻された場合、ナビゲーションは`editBasicInfo`という名前の制御フロー・ケースに移動します。

  この結果を定義するには、「プロパティ」ウィンドウで「toString()」フィールドを設定します(図12-10を参照)。

「データ・コントロール」ウィンドウからタスク・フロー・ダイアグラム内のメソッド・コール・アクティビティにデータ・コントロール操作を直接ドロップして、メソッド・コール・アクティビティを既存のメソッドに関連付けることができます。また、メソッドおよび操作をタスク・フロー・ダイアグラムに直接ドラッグすることもできます。これを行うと、新しいメソッド・コール・アクティビティが自動的に作成されます。メソッドにEL式およびその他のオプションを指定できます。

デフォルト値を変更する場合は、「アクティビティID」フィールドでそのアクティビティ識別子を変更して、メソッド・コールを構成します。新規の値を入力すると、ダイアグラムのメソッド・コール・アクティビティの下に新しい値が表示されます。

「メソッド」フィールドには、コールするメソッドを識別するEL式を入力します。

注意: EL式内のバインディング変数は現在のバインディング・コンテナからバインディングを参照します。バインディング変数を指定するには、バインディング・コンテナ定義またはページ定義を指定する必要があります。詳細は、第12.3.3.5項「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照してください。

図12-10 メソッド・コール・アクティビティの構成

式ビルダーを使用してメソッドのEL式を作成することもできます。

- 「メソッド」フィールドのプロパティ・エディタから、「メソッド式ビルダー」を選択します。

- 「式ビルダー」ダイアログで、起動するメソッドにナビゲートして選択します。

  メソッド・コール・アクティビティでマネージドBeanメソッドを起動する場合は、ダイアログでメソッド・コール・アクティビティをダブルクリックします。これによってダイアログが呼び出され、そこで起動するマネージドBeanメソッドを指定できます。

メソッドのパラメータおよび戻り値を指定するには、「プロパティ」ウィンドウの「パラメータ」セクションを使用します(図12-10を参照)。メソッド・コール・アクティビティを既存のメソッドに関連付けることによってパラメータをまだ作成していない場合は、「追加」(+)をクリックして次のように設定することにより、パラメータを追加します。

- クラス: パラメータ・クラスを入力します。たとえば、`java.lang.Double`のように指定します。

- 値: パラメータの値を取得するEL式を入力します。次に例を示します。

      #{pageFlowScope.shoppingCart.totalPurchasePrice}

- 戻り値: メソッドの戻り値を格納する場所を識別するEL式を入力します。次に例を示します。

      #{pageFlowScope.Return}

#### 12.2.5.4 タスク・フロー・コール・アクティビティの追加

タスク・フロー・コール・アクティビティを使用して、バインドなしタスク・フロー(第12.2.12.1項「バインドなしタスク・フロー」を参照)またはバインド・タスク・フロー(第12.2.12.2項「バインド・タスク・フロー」を参照)からバインド・タスク・フローをコールできます。このアクティビティによって、同じMAF AMXアプリケーション機能内または別のMAF AMXアプリケーション機能にあるバインド・タスク・フローをコールできます。

コールされたバインド・タスク・フローでは、デフォルト・アクティビティが最初に実行されます。バインド・タスク・フロー・コールの数に制限はありません。たとえば、コール先のバインド・タスク・フローから別のバインド・タスク・フローをコールでき、さらにそこから次々にコールできるため、各タスク・フローが一連のタスク内のリンクとなっている連鎖タスク・フローが作成されます。

バインド・タスク・フローにパラメータを渡すには、タスク・フロー・コール・アクティビティに入力パラメータの値を指定する必要があります。これらの値は、コール先のバインド・タスク・フローの入力パラメータ定義と一致している必要があります。詳細は、第12.2.5.4.2項「タスク・フロー・コール・アクティビティへの入力パラメータの指定」を参照してください。

注意: タスク・フロー・コール・アクティビティの入力パラメータの値は、コール元のタスク・フロー内で値を取得する場所を指定します。 コール先のタスク・フローの入力パラメータ定義の値は、値が渡されたときにコール先のバインド・タスク・フロー内で値を格納する場所を指定します。

注意: バインド・タスク・フローがタスク・フロー・コール・アクティビティに関連付けられると、バインド・タスク・フローで設定されている入力パラメータ定義に基づいて、自動的に入力パラメータがタスク・フロー・コール・アクティビティに挿入されます。したがって、実行する必要があるのは、タスク・フロー・コール・アクティビティの入力パラメータへの値の割当てのみです。

デフォルトでは、すべてのオブジェクトは参照渡しされます。プリミティブ型(`int`、`long`、`boolean`など)は常に値で渡されます。

バインド・タスク・フローからコール元に戻り値が渡される方法は、入力パラメータが渡される方法と類似しています。詳細は、第12.2.12.3.2項「バインド・タスク・フローの戻り値の構成」を参照してください。

タスク・フロー・コール・アクティビティを使用するには:

1. タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールします(第12.2.5.4.1項「タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール」を参照)。

2. パラメータをバインド・タスク・フローに渡す場合は、入力パラメータをタスク・フロー・コール・アクティビティに指定します(第12.2.5.4.2項「タスク・フロー・コール・アクティビティへの入力パラメータの指定」を参照)。

##### 12.2.5.4.1 タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール

コール側のバインドまたはバインド・タスク・フローまたはバインドなしタスク・フローにタスク・フロー・コール・アクティビティを追加し、バインド・タスク・フローをコールします。

バインド・タスク・フローをコールする手順:

1. 「ダイアグラム」ビューで、バインド・タスク・フロー・ファイルを開きます。

2. 「コンポーネント」ウィンドウで、「コンポーネント」→「アクティビティ」を選択します。

3. タスク・フロー・コール・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。

4. 次のオプションのいずれかを選択して、コール先タスク・フローを識別します。

   - 新しくドロップしたタスク・フロー・コール・アクティビティをダブルクリックして、新しいバインド・タスク・フローの設定を定義するための「MAFタスク・フローの作成」を開きます(図12-2「MAFタスク・フローの作成」ダイアログを参照)。

   - 「アプリケーション」ウィンドウから既存のバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップします。

   - 起動するバインド・タスク・フローの名前がわかっている場合は、次の手順を実行します。

     1. 「ダイアグラム」ビューで、タスク・フロー・コール・アクティビティを選択します。

     2. 「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」リストから「静的」を選択します。

     3. 「ドキュメント」フィールドに、コールするバインド・タスク・フローのソース・ファイル名を入力します。

     4. 「ID」フィールドには、コール先のバインド・タスク・フローのXMLソース・ファイルに含まれているバインド・タスク・フローIDを入力します(図12-11を参照)。

     図12-11 バインド・タスク・フローを起動するタスク・フロー・コール・アクティビティ

   - 起動するバインド・タスク・フローの名前がわからない場合、実行時のエンド・ユーザーによって異なる場合は、次の手順を実行します。

     1. 「ダイアグラム」ビューで、タスク・フロー・コール・アクティビティを選択します。

     2. 「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」リストから「動的」を選択します。

     3. 式ビルダーを使用して、「動的タスク・フロー参照」プロパティ・フィールドの値を設定します。実行時に起動するバインド・タスク・フローのIDを識別するEL式を記述します。

##### 12.2.5.4.2 タスク・フロー・コール・アクティビティへの入力パラメータの指定

タスク・フロー・コール・アクティビティとそのコール先のバインド・タスク・フローの間でパラメータをマップするには、まずコール先のバインド・タスク・フローの入力パラメータ定義を指定する方法をお薦めします。その後、「アプリケーション」ウィンドウからバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップできます。タスク・フロー・コール・アクティビティの入力パラメータは、バインド・タスク・フローの入力パラメータ定義に基づいて自動的に作成されます。詳細は、第12.2.12.3.1項「バインド・タスク・フローへのパラメータ渡し」を参照してください。

当然ながら、最初にタスク・フロー・コール・アクティビティに入力パラメータを指定することも可能です。最初に定義した場合にも、コール先のバインド・タスク・フローの入力パラメータ定義がタスク・フロー・コール・アクティビティに関連付けられた時点で、その入力パラメータ定義に基づいて自動的に置換されます。

コール先のバインド・タスク・フローをまだ作成していない場合にも、タスク・フロー・コール・アクティビティに入力パラメータを指定する方法は便利です。この時点で指定することで、バインド・タスク・フローのコール時にタスク・フロー・コール・アクティビティが最終的にマップされる予定の入力パラメータを特定できます。

入力パラメータを指定するには:

1. 「ダイアグラム」ビューで、タスク・フロー・ファイルを開き、タスク・フロー・コール・アクティビティを選択します。

2. 「プロパティ」ウィンドウで「パラメータ」セクションを開き、「追加」(+)をクリックして、「入力パラメータ」リストで次のように新しい入力パラメータを指定します。

   - 名前: 入力パラメータを識別する名前を入力します。

   - 値: パラメータ値を識別するEL式を入力します。EL式は、コール元のタスク・フロー内で値を取得する場所を指定します。たとえば、次のようにEL式を入力します。

         #{pageFlowScope.callingTaskflowParm}

     デフォルトでは、すべてのオブジェクトは参照渡しされます。プリミティブ型(`int`、`long`、`boolean`など)は常に値で渡されます。

3. 入力パラメータを指定すると、対応する入力パラメータ定義をコール先のバインド・タスク・フローに指定できます。詳細は、第12.2.12.3.1項「バインド・タスク・フローへのパラメータ渡し」を参照してください。

#### 12.2.5.5 タスク・フロー・リターン・アクティビティの追加

タスク・フロー・リターン・アクティビティは、MAF AMXアプリケーション機能の制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。タスク・フロー・リターン・アクティビティは、バインド・タスク・フロー内でのみ使用できます。

タスク・フロー・リターン・アクティビティ・アイコンを囲むグレーの円は、そのアクティビティがバインド・タスク・フローの終了ポイントであることを示します。各バインド・タスク・フローには、0以上のタスク・フロー・リターン・アクティビティを指定できます。

各タスク・フロー・リターン・アクティビティには、コール元のタスク・フローに戻される`outcome`を指定します。

起動するタスク・フローに戻される`outcome`は、エンド・ユーザー・アクションによって異なります。起動元のタスク・フローによって次のアクションを決定するように、起動元のタスク・フローの制御フロー・ケースを構成できます。制御フロー・ケースの「結果(自)」プロパティをタスク・フロー・リターン・アクティビティの`outcome`からの戻り値に設定し、結果に基づくアクションを起動します。これにより、コール先タスク・フローからの戻り値に基づいて制御フローが決まります。

タスク・フロー・リターン・アクティビティを追加するには:

1. 「ダイアグラム」ビューで、バインド・タスク・フロー・ファイルを開きます。

2. 「コンポーネント」ウィンドウで、「コンポーネント」→「アクティビティ」を選択します。

3. タスク・フロー・リターン・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。

4. 「プロパティ」ウィンドウ(図12-12を参照)で、「一般」セクションを開き、「名前」フィールドに結果を入力します。

   タスク・フロー・リターン・アクティビティは、現在のバインド・タスク・フローが存在する場合に、この結果をコール元タスク・フローに返します。タスク・フロー・リターン・アクティビティごとに1つのみ結果を指定できます。コール元のタスク・フローには、戻された時点の制御フローを処理する制御フロー・ルールを定義する必要があります。詳細は、第12.2.6項「制御フローの定義方法」を参照してください。

5. 「動作」セクションを開き、「再入力」リストでいずれかのオプションを選択します。

   バインド・タスク・フローにreentry-not-allowedを指定した場合も、エンド・ユーザーはモバイル・デバイスの戻るボタンをクリックするとバインド・タスク・フロー内のページに戻ることができます。ただし、エンド・ユーザーがそのページでボタンのアクティブ化などのなんらかの操作を行うと、バインド・タスク・フローを不正に再開したことを示す例外(`InvalidTaskFlowReentry`など)がスローされます。

6. 「トランザクションの終了」ドロップダウン・リストから、次のいずれかのオプションを選択します。

   - コミット: 選択すると、既存のトランザクションをデータベースにコミットします。

   - ロールバック: 選択したトランザクションをコール先のタスク・フローの以前のエントリまでロールバックします。これを指定すると、新しいトランザクションはバインド・タスク・フローに入って開始された当初の状態までロールバックされるため、トランザクションを取り消すのと同じ効果があります。

     commitとrollbackのいずれも指定しないと、トランザクションはコール元のバインド・タスク・フローによって閉じられるまで開いたままになります。

図12-12 タスク・フロー・リターン・アクティビティの構成

#### 12.2.5.6 ページ定義ファイルのあるタスク・フロー・アクティビティの使用

ページ定義ファイルは、実行時にデータを移入するバインディング・オブジェクトを定義します。通常、MAF AMXアプリケーション機能で、ページUIコンポーネントをデータ・コントロールにバインドするために使用されます。次のタスク・フロー・アクティビティも、ページ定義ファイルを使用してデータ・コントロールにバインドできます。

- メソッド・コール: 「データ・コントロール」ウィンドウからタスク・フローにデータ・コントロール操作をドラッグ・アンド・ドロップして、メソッド・コール・アクティビティを作成したり、既存のメソッド・コール・アクティビティにドロップすることができます。いずれの場合も、メソッド・コール・アクティビティが、データ・コントロール操作にバインドされます。

- ルーター: ページ定義ファイルをルーター・アクティビティと関連付けることで、バインディング・コンテナが作成されます。このバインド・コンテナは実行時にルーター・アクティビティ・ケースのEL式を評価し、ルーター・アクティビティが正しいバインド値を参照していることを確認します。各ルーター・アクティビティ・ケースは、EL式が`true`に評価された場合に戻される結果を指定します。そのため、ページ定義ファイルには、`true`または`false`の評価結果となるデータ・コントロール操作だけを追加します。

- タスク・フロー・コール: ページ定義ファイルをタスク・フロー・コール・アクティビティと関連付けることで、バインディング・コンテナが作成されます。実行時にタスク・フロー・コール・アクティビティから入力パラメータが渡されると、バインド・コンテナが起動します。バインド・コンテナはタスク・コール元のタスク・フローからコール先のタスク・フローに入力パラメータが渡される際に、フロー・コール・アクティビティがバインド値を参照する場合は、正しい値を参照していることを確認します。

- ビュー: ビュー・アクティビティをページ定義ファイルと直接関連付けることはできません。かわりに、ビュー・アクティビティが参照するページを関連付けます。

タスク・フローの「ダイアグラム」ウィンドウで、前述のタスク・フロー・アクティビティ(ビュー・アクティビティを除く)のいずれかを右クリックすると、ページ定義ファイルが存在しない場合にページ定義ファイルを作成できるオプションがポップアップ・メニューに表示されます。ページ定義ファイルが存在する場合、JDeveloperではページ定義ファイルに移動するためのすべてのタスク・フロー・アクティビティのポップアップ・メニュー・オプションが表示されます(第12.3.1.5項「ページ定義ファイルへのアクセス」を参照)。また、ページ定義ファイルに関連付けられたメソッド・コール・アクティビティを右クリックすると、JDeveloperで「バインディングの編集」ポップアップ・メニュー・オプションが表示されます。

ページ定義ファイルに関連付けられたタスク・フロー・アクティビティでは、タスク・フロー・アクティビティ・アイコンの右下にアイコンが表示されます。

タスク・フロー・アクティビティにページ定義ファイルを関連付けるには:

1. 「ダイアグラム」ビューで、ページ定義ファイルを作成するタスク・フロー・アクティビティを右クリックし、ポップアップ・メニューから「ページ定義の作成」を選択します。

2. 作成されたページ定義ファイルに、タスク・フロー・アクティビティの実行時に参照させたいバインドを追加します。

ページ定義ファイルの詳細は、第12.3.3.5項「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照してください。

前述の手順を完了すると、デザインタイムに、タスク・フロー・アクティビティのページ定義ファイルがJDeveloperによって生成されます。ページ定義ファイルのファイル名は、元のタスク・フローと、タスク・フロー・アクティビティ名または起動するデータ・コントロール操作から構成されます。JDeveloperは作成されたページ定義ファイル内で、タスク・フロー・アクティビティからバインドへのEL式も生成します。実行時にバインディング・コンテナは、タスク・フロー・アクティビティのEL式が正しい値を参照していることを確認します。

### 12.2.6 制御フローの定義方法

MAF AMXアプリケーション機能内で制御フローを定義するには、次のタスク・フロー・コンポーネントを使用します。

- 制御フロー・ケース(第12.2.6.1項「制御フロー・ケースの定義」を参照)

- ワイルドカード制御フロー・ルール(第12.2.6.2項「ワイルドカード制御フロー・ルールの追加」を参照)

#### 12.2.6.1 制御フロー・ケースの定義

制御がアクティビティから次のアクティビティに渡される方法を指定する制御フロー・ケース・コンポーネントを使用してナビゲーションを作成できます。制御フローを作成するには、「コンポーネント」ウィンドウから「制御フロー・ケース」を選択します。次に、制御フロー・ケースをソース・アクティビティに接続し、さらにターゲット・アクティビティに接続します。ソースおよびターゲット・アクティビティを接続すると、JDeveloperでは、次のものが作成されます。

- `control-flow-rule`: `from-activity-id`を使用してソース・アクティビティを識別します。

- `control-flow-case`: `to-activity-id`を使用してターゲット・アクティビティを識別します。

MAFタスク・フロー・ダイアグラムで制御フロー・ケースを直接定義するには:

1. 「ダイアグラム」ビューで、タスク・フロー・ソース・ファイルを開きます。

2. 「コンポーネント」ウィンドウから「制御フロー・ケース」を選択します。

3. ダイアグラムで、ソース・アクティビティをクリックし、次にターゲット・アクティビティをクリックします。ダイアグラムに制御フロー・ケースが追加されます。アクティビティ間に追加された各線は、制御フロー・ケースを表します。`from-outcome`には、MAF AMX UIコンポーネントのaction属性に指定された値と照合される値が含まれています。

4. `from-outcome`を変更するには、ダイアグラムの制御フローの隣のテキストを選択します。デフォルトでは、これはワイルドカード文字です。

5. `from-activity-id`(ソース・アクティビティの識別子)や`to-activity-id`(ターゲット・アクティビティの識別子)を変更するには、ダイアグラムの矢印のどちらかの端を新規のアクティビティにドラッグします。

#### 12.2.6.2 ワイルドカード制御フロー・ルールの追加

MAFタスク・フローでは、後方ワイルドカード(`foo*`)や単一ワイルドカード文字を含む制御フロー`from-activity-id`を表すワイルドカード制御フロー・ルールがサポートされています。ワイルドカード制御フロー・ルールは、「コンポーネント」ウィンドウからドラッグ・アンド・ドロップすることにより、バインドなしタスク・フローまたはバインド・タスク・フローに追加できます。ワイルドカード制御フロー・ルールを構成するには、「プロパティ」ウィンドウを使用します。

ワイルドカード制御フロー・ルールを追加するには:

1. 「ダイアグラム」ビューで、タスク・フロー・ソース・ファイルを開きます。

2. 「コンポーネント」ウィンドウで「ワイルドカード制御フロー・ルール」を選択して、ダイアグラムにドロップします。

3. 「コンポーネント」ウィンドウで、「制御フロー・ケース」を選択します。

4. タスク・フロー・ダイアグラムで、制御フロー・ケースをワイルドカード制御フロー・ルールから(任意のアクティビティ・タイプの)ターゲット・アクティビティにドラッグします。

5. デフォルトでは、ワイルドカード制御フロー・ルールの後のラベルは*です。これは、「アクティビティID(自)」要素の値です。この値を変更するには、ダイアグラムでワイルドカード制御フロー・ルールを選択します。ワイルドカード制御フロー・ルールの「プロパティ」ウィンドウで、 「アクティビティID(自)」フィールドに新しい値を入力します。便利な規則は、ワイルドカード制御フロー・ルールをその目的を表す形式でキャストすることです。たとえば、`project*`と入力します。新しいラベルでは、ワイルドカードは後続の文字である必要があります。

   ヒント: タスク・フロー・ダイアグラムの概要エディタで、「アクティビティID(自)」の値も変更できます。

6. オプションで、「プロパティ」ウィンドウで、「動作」セクションを開き、「If」フィールドにEL式を記述します(このEL式が`true`に評価されると、「アクティビティID(至)」にで指定されたアクティビティに制御が渡されます)。

#### 12.2.6.3 制御フロー・ルールのメタデータに関する必知事項

例12-3に、タスク・フロー・ソース・ファイルの制御フロー・ルール要素の一般的な構文を示します。

例12-3 制御フロー・ルール定義

    <control-flow-rule>
       <from-activity-id>from-view-activity</from-activity-id>
       <control-flow-case>
          <from-action>actionmethod</from-action>
          <from-outcome>outcome</from-outcome>
          <to-activity-id>destinationActivity</to-activity-id>
          <if>#{myBean.someCondition}</if>
       </control-flow-case>
       <control-flow-case>
       ...
       </control_flow-case>
    </control-flow-rule>

制御フロー・ルールは、次のメタデータで構成されます。

- `control-flow-rule`: 制御フロー・ケース要素の必須ラッパー要素。

- `from-activity-id`: 制御フロー・ルールの発生元となるアクティビティの識別子(`source`など)。

  `from-activity-id`の後方ワイルドカード(*)文字がサポートされています。ルールは、ワイルドカードのパターンに一致するすべてのアクティビティに適用されます。たとえば、`login*`は、リテラル`login`で始まるすべての論理アクティビティID名と一致します。メタデータに(後方ワイルドカードではなく)単一のワイルドカード文字を指定すると、ダイアグラムで、制御フローが自動的にワイルドカード制御フロー・ルール・アクティビティに変換されます。詳細は、第12.2.6.2項「ワイルドカード制御フロー・ルールの追加」を参照してください。

- `control-flow-case`: 制御フロー・ルールの各ケースの必須ラッパー要素。それぞれのケースで、同じソース・アクティビティに対して異なる制御フローを定義します。制御フロー・ルールには、少なくとも1つの制御フロー・ケースが必要です。

- `from-action`: 指定されたアクション・メソッドからの結果にのみルールの適用を制限するオプション要素。アクション・メソッドは、ELバインディング式(`#{backing_bean.cancelButton_action}`など)として指定されます。

  例12-3では、結果が`actionmethod`から戻された場合にのみ制御が`destinationActivity`に渡されます。

  `from-action`の値は、ビュー・アクティビティから発生する制御フローのみに適用され、その他のアクティビティ・タイプからのものには適用されません。`from-action`では、ワイルドカードはサポートされていません。

- `from-outcome`: 特定の元のアクティビティ結果に基づき、続いて起こる制御フロー・ケースを識別する要素。考えられるすべての元のアクティビティの結果は、制御フロー・ケースと適合する必要があります。

  `from-action`要素と`from-outcome`要素の両方を空のままにすると、ケースはアクティビティに対して定義されたその他の制御フロー・ケースでは識別されないすべての結果に適用されるため、アクティビティのデフォルト・ケースが作成されます。`from-outcome`では、ワイルドカードはサポートされていません。

- `to-activity-id`: 制御フロー・ケースが実行される場合にナビゲーションのルーティング先となるアクティビティの完全な識別子が含まれる必須要素。各制御フロー・ケースは、異なる`to-activity-id`を指定できます。

- `if`: EL式の値を受け取るオプション要素。実行時にEL式の値が`true`の場合は、`to-activity-id`要素によって識別されたアクティビティに制御フローを渡します。

#### 12.2.6.4 制御フロー・ルールの評価に関する必知事項

実行時、タスク・フローは、最も具体的な一致から最も具体的でない一致まで制御フロー・ルールを評価して、アクティビティ間の次の遷移を決定します。評価は次の優先度に基づいて行われます。

1. `from-activity-id`、`from-action`、`from-outcome`: 最初に3つの要素すべてで一致の検索が実行されます。

2. `from-activity-id`、`from-outcome`: 3つの要素すべてで一致が見つからなかった場合は、これらの要素で検索が実行されます。

3. `from-activity-id`: 前述の組合せでの検索で一致が見つからなかった場合、この要素のみで検索が実行されます。

### 12.2.7 MAFの戻るナビゲーションのサポートに関する必知事項

図12-13に示すタスク・フロー例では、アクション結果の値に基づいて、viewA→viewB→viewDまたはviewA→viewC→viewDという2つの別のパスを経由してviewDに到達する可能性があります(第12.2.9項「UIコンポーネントを使用したアクション結果の指定方法」を参照)。

図12-13 戻るナビゲーションのあるタスク・フロー

どちらのナビゲーション・パスを経由したかを追跡した後、`__back`ナビゲーション・フローを直接実装することも理論的には可能ですが、特に、モバイル・デバイスでは画面領域が限られているためにナビゲーション順序に従わない遷移が非常に頻繁に起こる事実を考慮すると、手間がかかり、エラーも発生しやすくなります。MAFでは、組込みの`__back`ナビゲーションがサポートされているため、タスク・フロー全体にわたる後方移動が可能です。つまり、経由したパスに関する情報を適用することにより、同じパスを経由する後方ナビゲーションを実行します。たとえば、最初のナビゲーションがviewA→viewC→viewDというパスで行われた場合、`ViewD`で__backオプションを実行すると、MAFは自動的に、ViewB経由ではなくViewAからViewCにエンド・ユーザーを移動します。

詳細は、次を参照してください:

- 第12.2.3項「ViewController-task-flow.xmlファイルに関する必知事項」

- 第12.2.10項「マネージドBeanの作成および参照方法」

- 第13.3.5.7項「戻るボタン・ナビゲーションの有効化」

### 12.2.8 ドラッグによりページ・ナビゲーションを有効にする方法

ナビゲーション・ドラッグ動作の操作を使用することによって、異なるMAF AMXページ間のナビゲーションを有効にできます。詳細は、第13.3.27項「ドラッグ・ナビゲーションを有効にする方法」を参照してください。

### 12.2.9 UIコンポーネントを使用したアクション結果の指定方法

「プロパティ」ウィンドウを使用して、次のUIコンポーネントのいずれかの`action`属性を該当する制御フロー・ケース`from-outcome`に設定して次のタスク・フロー・アクティビティに導くことにより、アクション結果を指定できます。

- コマンド・ボタン(第13.3.5項「ボタンの使用方法」を参照)

- コマンド・リンク(第13.3.6項「リンクの使用方法」を参照)

- リスト・アイテム

UIコンポーネントの「アクション」フィールド(図12-14を参照)を使用して、特定のMAF AMXページの1つ以上のタスク・フローで定義される可能性のあるアクション結果のリストから選択を行います。

図12-14 アクションの設定

戻るアクション(`__back`)は、各リストに自動的に追加され、前に参照したページへのナビゲーションを可能にします。

注意: MAF AMXページは、バインド・タスク・フローとバインドなしタスク・フローの両方で参照でき、その場合、両方のタスク・フローからのアクション結果が「アクション」選択リストに含まれます。

### 12.2.10 マネージドBeanの作成および参照方法

MAFアプリケーションでマネージドBeanを作成および使用して、追加データを格納したり、カスタム・コードを実行することができます。JDeveloperの通常の編集メカニズムを使用して、マネージドBeanを参照したり、適用可能なフィールドに対してマネージドBeanへの参照を作成できます。詳細は、第14.4項「マネージドBeanの作成と使用」を参照してください。

図12-15に、「プロパティ」ウィンドウのactionプロパティに対する`「編集」`オプションを示します。このオプションをクリックすると、図12-16に示す「プロパティの編集」ダイアログが表示されます。

図12-15 「編集」ダイアログ

図12-16 アクションの「プロパティの編集」ダイアログ

表12-7には、「プロパティ」ウィンドウで「編集」オプションを選択できるMAF AMX属性がリストされています。

表12-3 編集可能な属性

プロパティ | 要素
--- | ---
`action` | `amx:commandButton`
`action` | `amx:commandLink`
`action` | `amx:listItem`
`action` | `amx:navigationDragBehavior`
`action` | `dvtm:chartDataItem`
`action` | `dvtm:ieDataItem`
`action` | `dvtm:timelineItem`
`action` | `dvtm:area`
`action` | `dvtm:marker`
`actionListener` | `amx:listItem`
`actionListener` | `amx:commandButton`
`actionListener` | `amx:commandLink`
`binding` | `amx:actionListener`
`mapBoundsChangeListener` | `dvtm:geographicMap`
`mapInputListener` | `dvtm:geographicMap`
`moveListener` | `amx:listView`
`rangeChangeListener` | `amx:listView`
`selectionListener` | `amx:listView`
`selectionListener` | `amx:filmStrip`
`selectionListener` | `dvtm:areaDataLayer`
`selectionListener` | `dvtm:pointDataLayer`
`selectionListener` | `dvtm:treemap`
`selectionListener` | `dvtm:sunburst`
`selectionListener` | `dvtm:timelineSeries`
`selectionListener` | `dvtm:nBox`
`selectionListener` | `dvtm:areaChart`
`selectionListener` | `dvtm:barChart`
`selectionListener` | `dvtm:bubbleChart`
`selectionListener` | `dvtm:comboChart`
`selectionListener` | `dvtm:lineChart`
`selectionListener` | `dvtm:funnelChart`
`selectionListener` | `dvtm:pieChart`
`selectionListener` | `dvtm:scatterChart`
`valueChangeListener` | `amx:inputDate`
`valueChangeListener` | `amx:inputNumberSlider`
`valueChangeListener` | `amx:inputText`
`valueChangeListener` | `amx:selectBooleanCheckbox`
`valueChangeListener` | `amx:selectBooleanSwitch`
`valueChangeListener` | `amx:selectManyCheckbox`
`valueChangeListener` | `amx:selectManyChoice`
`valueChangeListener` | `amx:selectOneButton`
`valueChangeListener` | `amx:selectOneChoice`
`valueChangeListener` | `amx:selectOneRadio`
`valueChangeListener` | `dvtm:statusMeterGauge`
`valueChangeListener` | `dvtm:dialGauge`
`valueChangeListener` | `dvtm:ratingGauge`
`viewportChangeListener` | `dvtm:areaChart`
`viewportChangeListener` | `dvtm:barChart`
`viewportChangeListener` | `dvtm:comboChart`
`viewportChangeListener` | `dvtm:lineChart`

その他のどのプロパティに対しても「編集」をクリックすると同様のダイアログが表示されますが、図12-17に示すように「アクション結果」オプションはありません。

図12-17 アクション・リスナーの「プロパティの編集」ダイアログ

このダイアログは、マネージドBeanを作成するか、actionプロパティに使用可能なアクション結果を選択できることを示しています。

図12-16に示す「アクション結果」リストには、特定のMAF AMXページが属するすべてのタスク・フローからのアクション結果が含まれています。また、このリストには、前に参照したページに戻るための`__back`ナビゲーション結果が含まれています(詳細は第12.2.9項「UIコンポーネントを使用したアクション結果の指定方法」を参照してください)。ページがタスク・フローの一部ではない場合、`__back`が「アクション結果」リストで使用可能な唯一の結果です。使用可能なアクション結果のいずれかを選択し、「OK」をクリックすると、アクション・プロパティ値は、適切なEL式(`commandButton`の場合、次のとおり)で更新されます。

    <amx:commandButton action="goHome"/>

「メソッド・バインディング」オプション(図12-16を参照)では、新しいマネージドBeanクラスを作成したり、既存のマネージドBeanクラスを選択することができます。

新しいマネージドBeanクラスを作成するには:

1. 「マネージドBean」フィールドの横にある「新規」をクリックし、図12-18に示す「マネージドBeanの作成」ダイアログを開きます。

   図12-18 「マネージドBeanの作成」ダイアログ・ボックス

   MAFでは、次のスコープがサポートされています。

   - `application`

   - `view`

   - `pageFlow`

   MAFアプリケーションまたはMAF AMXアプリケーション機能に対してマネージドBeanを宣言すると、マネージドBeanはインスタンス化されて適切なスコープ内で識別され、Beanのプロパティが解決されてそのメソッドがELを介してコールされます。詳細は、第14.3項「EL式の作成」を参照してください。

2. マネージドBeanおよびクラス名を指定し(図12-19を参照)、「OK」をクリックします。

   図12-19 マネージドBean名およびクラスの設定

   例12-4は、新たに作成されたマネージドBeanクラスを示しています。このMAF AMXページが含まれるタスク・フローが、Beanを参照するように更新されます。

   例12-4 新しいマネージドBeanクラス

       <managed-bean id="__3">
          <managed-bean-name>MyBean</managed-bean-name>
          <managed-bean-class>mobile.MyBean</managed-bean-class>
          <managed-bean-scope>application</managed-bean-scope>
       </managed-bean>

   注意: 特定のMAF AMXページがバインド・タスク・フローおよびバインドなしタスク・フローの一部である場合、これら両方のタスク・フローがマネージドBeanエントリで更新されます。

3. 「メソッド」フィールドの横にある「新規」をクリックして(図12-16および図12-17を参照)、図12-20に示す「メソッドの作成」ダイアログを開きます。

   図12-20 「メソッドの作成」ダイアログ

   このダイアログを使用して、マネージドBeanメソッド名を指定します(図12-21を参照)。

   図12-21 マネージドBeanメソッドのネーミング

   完了すると、選択したプロパティ値が適切なEL式で更新されます(`commandButton`の場合は次のようになります)。

       <amx:commandButton action="#{MyBean.getMeHome}"/>

   マネージドBeanクラスも、例12-5に示すとおり、新たに作成されたメソッドを含むように更新されます。

   例12-5 マネージドBeanクラスの新しいメソッド

       package mobile;

       public class MyBean {
          public MyBean() {
          }

          public String getMeHome() {
             // Add event code here...
             return null;
          }
       }

既存のマネージドBeanを選択するには:

1. 図12-22に示す「マネージドBean」リストから選択を行います。

   図12-22 マネージドBeanの選択

   アクション結果と同様、「マネージドBean」リストには、このMAF AMXページが含まれるすべてのタスク・フローからのマネージドBeanが移入されます。

   注意: MAF AMXページがどのタスク・フローにも属していない場合でも、マネージドBeanは作成できます。

詳細は、次を参照してください。

- 第14.3.5.2項「マネージドBeanカテゴリについて」

- APIDemo (開発コンピュータ上の``jdev_install`/jdeveloper/jdev/extensions/oracle.maf/Samples`ディレクトリ内の`PublicSamples.zip`ファイルに配置されているMAFサンプル・アプリケーション)。

### 12.2.11 ページ遷移スタイルの指定方法

タスク・フローでページ遷移スタイルを定義することにより、ビューから別のビューへのMAF AMXページの遷移方法を指定できます。MAF AMXページの遷移動作は次のとおりです。

- フェード・イン

- 左からスライド・イン

- 右からスライド・イン

- 下からスライド・アップ

- 上からスライド・ダウン

- 始点からスライド・イン

- 終点からスライド・イン

- 下からフリップ・アップ

- 上からフリップ・ダウン

- 左からフリップ

- 右からフリップ

- 始点からフリップ

- 終点からフリップ

- なし

始点および終点からスライド・インと、始点および終点からフリップは、iOSプラットフォームおよびAndroid 4.2以降のプラットフォームで右から左(RTL)のテキスト方向に対応するために使用されます。通常は、左と右ではなく、始点と終点の遷移スタイルを使用することをお薦めします。

`例12-6`のように`control-flow-case`(制御フロー・ケース・コンポーネント)のtransition属性を変更することによって、遷移スタイルを設定します。

例12-6 遷移スタイルの設定

    <control-flow-rule id="__1">
       <from-activity-id>products</from-activity-id>
       <control-flow-case id="__2">
          <from-outcome>details</from-outcome>
          <to-activity-id>productdetails</to-activity-id>
          <transition>fade</transition>
       </control-flow-case>
    </control-flow-rule>

`図12-23`に示すように、「プロパティ」ウィンドウでは、transition属性は「動作」の下にあります。デフォルトの遷移スタイルは`slideLeft`です。

図12-23 「プロパティ」ウィンドウでの遷移スタイルの設定

ヒント: タスク・フローを定義する際は、`control-flow-case`の`transition`値を論理的になるように指定する必要があります。たとえば、戻るナビゲーションの目的で左から右への遷移が発生する場合、右にスライドすることにより遷移が前のページに戻る必要があります。

### 12.2.12 バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項

タスク・フローでは、MAF AMXアプリケーション機能内で制御フローを定義するためのモジュールのアプローチが提供されています。アプリケーション機能は単一の大規模なページ・フローとして表すのではなく、再利用可能な一連のタスク・フローに分割できます。各タスク・フローには、アプリケーション機能のナビゲーション・グラフの一部が含まれます。タスク・フロー内のノードはアクティビティを表しています。アクティビティ・ノードは、ページの表示、アプリケーション・ロジックの実行、別のタスク・フローのコールなど、シンプルな論理的操作を表しています。アクティビティ間の遷移は制御フロー・ケースと呼ばれます。

MAF AMXでは、次の2種類のタスク・フローがあります。

1. バインドなしタスク・フロー: 対話によってユーザーがタスクを完了できるようにする一連のアクティビティ、制御フロー・ルールおよびマネージドBeanです。バインドなしタスク・フローは、バインド・タスク・フローに含まれていない、MAF AMXアプリケーション機能内のすべてのアクティビティおよび制御フローで構成されています。

2. バインド・タスク・フロー: タスク・フローの特殊な形式であり、バインドなしタスク・フローとは異なり、単一エントリ・ポイントが存在し、終了ポイントは存在しません。これには、アクティビティと制御フロー・ルールの独自のコレクションに加え、独自のメモリー・スコープとマネージドBean存続期間が含まれます。

バインドなしタスク・フローまたはバインド・タスク・フローに追加可能なアクティビティ・タイプの説明は、第12.2.2項「タスク・フロー・アクティビティと制御フローに関する必知事項」を参照してください。

通常のMAF AMXアプリケーション機能には、アプリケーション機能の作成時に作成された1つのバインドなしタスク・フローと、1つ以上のバインド・タスク・フローの組合せが含まれます。実行時、MAFアプリケーションは、バインドなしタスク・フローに追加されたアクティビティからバインド・タスク・フローをコールできます。

#### 12.2.12.1 バインドなしタスク・フロー

各MAF AMXアプリケーション機能には必ず、そのアプリケーション機能に対する1つ以上のエントリ・ポイントを提供するバインドなしタスク・フローが1つ含まれています。エントリ・ポイントはビュー・アクティビティによって表されます。デフォルトでは、バインドなしタスク・フローのソース・ファイルは`adfc-mobile-config.xml`ファイルです。

図12-24に、MAF AMXアプリケーション機能からのバインドなしタスク・フローのダイアグラムを示します。このタスク・フローにはいくつかのビュー・アクティビティが含まれており、いずれもアプリケーション機能へのエントリ・ポイントになっています。

図12-24 バインドなしタスク・フローのダイアグラム

次のことが該当する場合、バインドなしタスク・フローを使用することを検討してください。

- タスク・フローを別のタスク・フローによってコールする必要がない場合

- MAF AMXアプリケーション機能に複数のエントリ・ポイントがある場合

- 指定されたアクティビティをタスク・フロー内で最初に実行する(デフォルト・アクティビティ)必要がない場合

バインドなしタスク・フローはバインド・タスク・フローをコールできますが、別のタスク・フローからバインドなしタスク・フローをコールすることはできません。

#### 12.2.12.2 バインド・タスク・フロー

デフォルトでは、IDEによって、バインド・タスク・フローのソース・ファイルのファイル名が提案されます(第12.2.1項「タスク・フローの作成方法」を参照)。このファイル名は、実行するタスクの目的を表す名前に変更できます。

バインド・タスク・フローからは別のバインド・タスク・フローをコールでき、さらにそこからも次々にコールできます。コールに深さ制限はありません。

図12-25に、MAF AMXアプリケーション機能からのバインド・タスク・フローのダイアグラムを示します。

図12-25 バインド・タスク・フローのダイアグラム

バインド・タスク・フローを作成する理由は次のとおりです。

- バインド・タスク・フローでは常に、バインド・タスク・フローの開始直後に実行する必要のある単一エントリ・ポイントとなるデフォルト・アクティビティが指定されます。

- 同じMAF AMXアプリケーション機能または他のMAF AMXアプリケーション機能内で再利用可能です。

- バインド・タスク・フロー内で使用するマネージドBeanはいずれも、ページ・フロー・スコープで指定できるため、残りのMAF AMXアプリケーション機能からは分離されます。これらのマネージドBean(およびページ・フロー・スコープ)は、タスク・フローが完了した際に自動的に解放されます。

バインド・タスク・フローの主な特性の概要を次に示します。

- 明確に定義された境界: バインド・タスク・フローは、プライベート制御フロー・ルール、アクティビティおよびマネージドBeanの独自のセットで構成されます。コール元は、バインド・タスク・フロー境界内におけるページ名、メソッド・コール、子バインド・タスク・フロー、マネージドBean、制御フロー・ルールの内部知識を必要としません。データ・コントロールはタスク・フロー間で共有できます。

- 単一のエントリ・ポイント: バインド・タスク・フローには、タスク・フロー内の他のすべてのアクティビティより前に実行されるデフォルト・アクティビティである単一のエントリ・ポイントがあります。

- ページ・フロー・メモリー・スコープ: バインド・タスク・フロー内のアクティビティ間でデータを受け渡すためのメモリー・スコープとして、ページ・フロー・スコープを指定できます。ページ・フロー・スコープは、バインド・タスク・フローの各インスタンスに対する一意の記憶域を定義します。その存続期間はバインド・タスク・フローであり、requestスコープより長く、sessionスコープより短くなっています。

- 指定可能: バインド・タスク・フローには、バインド・タスク・フローのXMLソース・ファイル内の一意の識別子とXMLソース・ファイルのファイル名を指定することによりアクセスできます。

- 再利用可能: アクティビティ・グループ全体を単一のエンティティ、つまりバインド・タスク・フローとして指定し、そのバインド・タスク・フローをMAFアプリケーション内の別のMAF AMXアプリケーション機能で再利用できます。

  また、既存のバインド・タスク・フローは、コールすることにより再利用できます。

  さらに、タスク・フロー・テンプレートを使用して、様々なバインド・タスク・フローで再利用するための共通の動作を取得できます。

- パラメータおよび戻り値: コール元は、入力パラメータをバインド・タスク・フローに渡し、そこから戻り値を受け入れることができます(第12.2.12.3.1項「バインド・タスク・フローへのパラメータ渡し」および第12.2.12.3.2項「バインド・タスク・フローの戻り値の構成」を参照)。

  また、バインド・タスク・フロー間でデータ・コントロールを共有できます。

- メタデータのオンデマンド・ロード: バインド・タスク・フローのメタデータは、バインド・タスク・フローの開始時にオンデマンドでロードされます。

#### 12.2.12.3 タスク・フローのパラメータの使用

タスク・フローには入力パラメータを受け入れてパラメータ値を戻す機能があるため、タスク・フローのデータを操作できる他、タスク・フロー間でデータを共有できます。これらの機能を使用して、MAF AMXアプリケーション機能でのタスク・フローの再利用を最適化できます。

図12-26に、pageFlowスコープ内のユーザーに関する情報を保持する入力パラメータ定義を指定するタスク・フローを示します。

図12-26 タスク・フローの入力パラメータ

タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールする場合、標準のEL式を使用してパラメータ値を指定できます。たとえば、次のEL式の構文を使用してパラメータを指定できます。

-     #{bindings.bindingId.inputValue}

-     #{CustomerBean.zipCode}

`inputValue`をEL式に追加することで、実際のバインディング・オブジェクトではなく、バインディングの値をパラメータに確実に割り当てることができます。

##### 12.2.12.3.1 バインド・タスク・フローへのパラメータ渡し

コール先のバインド・タスク・フローは、コール元のタスク・フローまたはタスク・フロー・バインディングから入力パラメータを受け取ることができます。

入力パラメータをバインド・タスク・フローに渡すには、次のうち1つ以上を指定します。

- コール元のタスク・フローにあるタスク・フロー・コール・アクティビティの入力パラメータ: 入力パラメータは、コール元のタスク・フローでパラメータ値が格納される場所を指定します。

- コール先のバインド・タスク・フローの入力パラメータ定義: 入力パラメータ定義は、コール先のバインド・タスク・フローで実行時にパラメータ値を取得できる場所を指定します。

コール元のタスク・フローにあるタスク・フロー・コール・アクティビティで定義する入力パラメータおよびコール先のバインド・タスク・フローの入力パラメータ定義と同じ名前を指定します。これを行うことで、コール先のバインド・タスク・フローに入力パラメータ値をマップできます。

入力パラメータの値を参照するEL式を指定しない場合は、valueのEL式のデフォルト値を実行時に次のように設定します。

    #{pageFlowScope.parmName}

ここで、`parmName`は、入力パラメータ名に入力した値です。

コール先のバインド・タスク・フローの入力パラメータ定義では、必要に応じて入力パラメータを指定できます。入力パラメータが実行時またはデザインタイムに値を受け取らない場合、タスク・フローは、そのタスク・フローを含むMAFアプリケーションのログ・ファイル内に警告を生成します。必要に応じて指定しない入力パラメータは、タスク・フロー・コール・アクティビティの作成時に無視できます。

タスク・フロー・コール・アクティビティを使用してタスク・フローをコールする場合は、タスク・フロー・コール・アクティビティの入力パラメータを参照渡しまたは値渡しにできます(第12.2.5.4.2項「タスク・フロー・コール・アクティビティへの入力パラメータの指定」を参照)。デフォルトでは、プリミティブ・タイプ(`int`、`long`、`boolean`など)が値渡し(`pass-by-value`)されます。

コール先のタスク・フローは、終了時にコール元のタスク・フローに値を戻すことができます。詳細は、第12.2.12.3.2項「バインド・タスク・フローの戻り値の構成」を参照してください。

入力パラメータをバインド・タスク・フローに渡す場合、コール元のタスク・フローとコール先のタスク・フローの両方で値を定義します。

始める前に

- コール元のタスク・フローとコール先のタスク・フローを作成します。コール元のタスク・フローはバインド・タスク・フローにすることも、バインドなしタスク・フローにすることもできます。コール先のタスク・フローはバインドにする必要があります。タスク・フローの作成の詳細は、第12.2.1項「タスク・フローの作成方法」を参照してください。

- タスク・フロー・コール・アクティビティをコール元のタスク・フローに追加します。

図12-27には、ビュー・アクティビティがタスク・フロー・コール・アクティビティに制御を渡す例が示されています。

図12-27 コール元のタスク・フロー

入力パラメータをバインド・タスク・フローに渡すには:

1. エンド・ユーザーが実行時にバインド・タスク・フローにパラメータとして渡される値を入力する際に使用する入力コンポーネントを含むMAF AMXページを開きます。

   注意: 開いたMAF AMXページは、コール元のタスク・フローにあるビュー・アクティビティによって参照される必要があります。

2. MAF AMXページで、エンド・ユーザーが実行時に値を入力する入力テキスト・コンポーネントを選択します。

3. 「プロパティ」ウィンドウで、「共通」セクションを開き、「値」フィールドに入力テキスト・コンポーネントの値を入力します。

   手動で、または式ビルダーを使用して、EL式としての値を指定できます(例: `#{pageFlowScope.inputValue}`)。

4. 「アプリケーション」ウィンドウで、コールするタスク・フローをダブルクリックして開いた後、ビューを「概要」タブに切り替え、「パラメータ」ナビゲーション・タブを選択します。

5. 「入力パラメータの定義」セクションで、「追加」(+)をクリックして新しいエントリを指定します(図12-26を参照)。

   - 「名前」フィールドに、パラメータの名前(`inputParm1`など)を入力します。

   - 「値」フィールドに、手動で、または式ビルダーを使用して、パラメータ値を格納および参照するEL式(`#{pageFlowScope.inputValue}`など)を入力します。

6. 「アプリケーション」ウィンドウで、コール先のバインド・タスク・フローを起動するタスク・フロー・コール・アクティビティを含むコール元タスク・フローをダブルクリックします。

7. 「アプリケーション」ウィンドウで、コール元のタスク・フローのダイアグラムにあるタスク・フロー・コール・アクティビティの最上部に、コール先のバインド・タスク・フローをドラッグ・アンド・ドロップします。これにより、バインド・タスク・フローへのタスク・フロー参照が自動的に作成されます。図12-28に示すように、タスク・フロー参照には次のものが含まれます。

   - バインド・タスク・フローのID (`id`): バインド・タスク・フローの`task-flow-definition`要素の属性

   - IDを含むタスク・フローのソース・ファイルを指すドキュメント名

   図12-28 タスク・フローの参照

8. タスク・フロー・コール・アクティビティの「プロパティ」ウィンドウで、「パラメータ」を開いて、「入力パラメータ」セクションを表示します。

   - 入力パラメータを識別する名前の入力: 入力パラメータが定義されているタスク・フロー・コール・アクティビティにバインド・タスク・フローをドロップしたため、名前はすでに指定されています。同じ入力パラメータ名を維持する必要があります。

   - パラメータ値(`#{pageFlowScope.param1}`など)の入力: タスク・フロー・コール・アクティビティの入力パラメータの値によって、コール元のタスク・フローでパラメータ値が格納される場所が指定されます。コール先のタスク・フローの入力パラメータ定義の値は、値が渡された後にコール先のバインド・タスク・フロー内で使用するために値が取得される場所を指定します。

実行時、コール先のタスク・フローは入力パラメータを使用できます。コール先のタスク・フローの入力パラメータ定義で値として`pageFlowScope`を指定した場合、コール先のバインド・タスク・フローのどこでもパラメータ値を使用できます。たとえば、コール先のバインド・タスク・フローのビュー・アクティビティにパラメータ値を渡すことができます。

完了すると、選択した値に基づいて、コール元のタスク・フローとコール先のタスク・フローのソース・ファイルにエントリが書き込まれます。

例12-7は、バインド・タスク・フローで指定された入力パラメータ定義を示しています。

例12-7 入力パラメータ定義

    <task-flow-definition id="sourceTaskflow">
    ...
       <input-parameter-definition>
          <name>inputParameter1</name>
          <value>#{pageFlowScope.parmValue1}</value>
          <class>java.lang.String</class>
       </input-parameter-definition>
    ...
    </task-flow-definition>

例12-8は、例12-7に示したバインド・タスク・フローをコールするタスク・フロー・コール・アクティビティの入力パラメータ・メタデータを示しています。実行時に、タスク・フロー・コール・アクティビティはバインド・タスク・フローをコールして、そのvalue要素で指定された値を渡します。

例12-8 タスク・フロー・コール・アクティビティの入力パラメータ

    <task-flow-call id="taskFlowCall1">
    ...
       <input-parameter>
          <name>inputParameter1</name>
          <value>#{pageFlowScope.newCustomer}</value>
          <pass-by-value/>
       </input-parameter>
    ...
    </task-flow-call>

##### 12.2.12.3.2 バインド・タスク・フローの戻り値の構成

コール先のタスク・フローにある戻り値の定義を構成し、実行時に戻り値を取得するコール元のタスク・フローのタスク・フロー・コール・アクティビティにパラメータを追加します。

始める前に

バインド・タスク・フローまたはバインドなしタスク・フローを(コール元のタスク・フローに対して)作成し、バインド・タスク・フローを(コール先のタスク・フローに対して)作成します。詳細は、第12.2.1項「タスク・フローの作成方法」を参照してください。

コール先のバインド・タスク・フローの戻り値を構成するには:

1. 「アプリケーション」ウィンドウで、コールするタスク・フローをダブルクリックして開いた後、ビューを「概要」タブに切り替え、「パラメータ」ナビゲーション・タブを選択します。

2. 「戻り値の定義」セクションで、「追加」(+)をクリックして戻り値を指定します(図12-26を参照)。

   - 「名前」フィールドに、戻り値を識別する名前(`returnValue1`など)を入力します。

   - 「クラス」フィールドに、戻り値のデータ型を定義するJavaクラスを入力します。デフォルト値は`java.lang.String`です。

   - 「値」フィールドに、手動で、または式ビルダーを使用して、戻り値を読み取る場所を指定するEL式(`#{pageFlowScope.ReturnValueDefinition}`など)を入力します。

3. 「アプリケーション」ウィンドウで、コール元のタスク・フローをダブルクリックします。

4. 「ダイアグラム」ビューでタスク・フロー・ページを開いた状態で、「コンポーネント」ウィンドウから「コンポーネント」→「アクティビティ」を選択し、タスク・フロー・コール・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。

5. タスク・フロー・コール・アクティビティの「プロパティ」ウィンドウで、「パラメータ」セクションを開き、「戻り値」エントリの「追加」(+)をクリックして、戻り値を定義する次の値を追加します。

   - 戻り値を識別する名前(たとえば`returnValue1`)。これは、手順2で戻り値の定義を定義したときに「名前」フィールドに入力した値と一致している必要があります。

   - 戻り値を格納する場所を指定する、EL式としての値(`#{pageFlowScope.ReturnValueDefinition}`など)。

完了すると、構成したコール元のタスク・フローのソース・ファイルにエントリが書き込まれます。

例12-9では、コール元のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリの例を示しています。

例12-9 戻り値を構成するためのコール元のタスク・フローのメタデータ

    <task-flow-call id="taskFlowCall1">
       <return-value id="__3">
          <name id="__4">returnValue1</name>
          <value id="__2">#{pageFlowScope.ReturnValueDefinition}</value>
       </return-value>
    </task-flow-call>

例12-10では、コール先のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリの例を示しています。

例12-10 戻り値を構成するためのコール先のタスク・フローのメタデータ

    <return-value-definition id="__2">
       <name id="__3">returnValue1</name>
       <value>#{pageFlowScope.ReturnValueDefinition}/</value>
       <class>java.lang.String</class>
    </return-value-definition>

実行時に、コール先のタスク・フローが値を返します。この構成の場合は、コール元のタスク・フローにあるタスク・フロー・コール・アクティビティがその値を取得します。

## 12.3 ビューの作成

MAF AMXビューの作成は、次のことから開始できます。

- MAF AMXページ構造に関する理解(第12.3.1.1項「MAF AMXページ構造の解釈」)

- MAF AMXページの編集とプレビュー(第12.3.1.4項「UIエディタの使用方法」を参照)

- MAF AMXページへのコンポーネントのドラッグ・アンド・ドロップ(第12.3.2項「MAF AMXページへのUIコンポーネントの追加方法」を参照)

- ビューへのデータ・コントロールの追加(第12.3.3項「MAF AMXページへのデータ・コントロールの追加方法」を参照)

### 12.3.1 MAF AMXページの使用方法

MAF AMXページはXMLファイルで表されます。

#### 12.3.1.1 MAF AMXページ構造の解釈

MAF AMXファイルの基本構造は次のとおりです。

    <amx:view>
       <amx:panelPage id="pp1">
          <amx:facet name="header">
             <amx:outputText id="ot1" value="Welcome"/>
          …
          </amx:facet>
       </amx:panelPage>
    </amx:view>

データ可視化コンポーネント(第13.5項「データ視覚化の指定」を参照)を除き、UI要素は`<amx>`名前空間の下で宣言されます。

詳細は、第12.3.1.3項「MAF AMXページの作成時に行われる処理」を参照してください。

#### 12.3.1.2 MAF AMXページの作成

MAF AMXファイルは、MAFアプリケーションのビュー・コントローラ・プロジェクトに含まれています。これらのファイルは、「MAF AMXページの作成」ダイアログを使用して作成します。

MAFでは、MAF AMXページの作成方法がこれ以外に2通りあります。

- 「新規ギャラリ」から

- 既存のタスク・フローから

始める前に

MAF AMXページを作成するには、MAFアプリケーションにビュー・コントローラ・プロジェクト・ファイルが含まれている必要があります(第2章「MAFアプリケーション開発のスタート・ガイド」を参照)。

「新規ギャラリ」からMAF AMXページを作成するには:

1. JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」の順に選択します(図12-29を参照)。「OK」をクリックします。

   図12-29 MAF AMXページの作成

3. 図12-30に示すように、「MAF AMXページの作成」ダイアログで、新しいファイルの名前および(必要な場合は)場所を入力します。

4. オプションで、ページ・レイアウトの一部としてどのファセットを新しいMAF AMXページに含めるかを選択することもできます。

   - ヘッダー

   - プライマリ

   - セカンダリ

   - フッター

   詳細は、第12.3.1.3項「MAF AMXページの作成時に行われる処理」および第13.2.7項「ファセット・コンポーネントの使用方法」を参照してください。

   注意: ファセットを選択または選択解除すると、変更されたページの外観を反映するよう、ページを表すイメージは動的に変わります。

   図12-30 「MAF AMXページの作成」ダイアログ

   注意: ファセットの選択はMAFによって保持され、それ以降に「MAF AMXページの作成」ダイアログが開かれるたびにその選択が適用されます。

5. 「MAF AMXページの作成」ダイアログで、「OK」をクリックします。

タスク・フローのビュー・コンポーネントからMAF AMXページを作成するには:

1. ダイアグラマでタスク・フロー・ファイルを開きます(図12-7「タスク・フロー・エディタのダイアグラマ」、第12.2.1項「タスク・フローの作成方法」および第12.2.4項「MAFタスク・フロー・ダイアグラマに関する必知事項」を参照)。

2. タスク・フローのビュー・コンポーネントをダブルクリックして、図12-30に示す「MAF AMXページの作成」ダイアログを開き、新しいファイルの名前および(必要な場合は)場所を入力します。「OK」をクリックします。

#### 12.3.1.3 MAF AMXページの作成時に行われる処理

「MAF AMXページの作成」ダイアログを使用してMAF AMXページを作成すると、JDeveloperによって物理ファイルが作成されて、ビュー・コントローラ・プロジェクトの`Web Content`ディレクトリに追加されます。

図12-31に示す「アプリケーション」ウィンドウでは、`「Webコンテンツ」`ノードに、新たに作成された`department.amx`というMAF AMXファイルが含まれています。

図12-31 「アプリケーション」ウィンドウのMAF AMXファイル

JDeveloperは、コンポーネント・ライブラリをインポートし、ページを表示するために必要なコードの追加も行います。このコードは、図12-31に示す「ソース」エディタに表示されます。

図12-33に、ページの作成時に「MAF AMXページの作成」ダイアログの「ページ・ファセット」セクションにリストされたすべてのファセット・タイプを選択した場合に(図12-32を参照)、「プレビュー」ペインおよび生成されたMAF AMXコードがどのようになるかを示します。

図12-32 すべてのファセットが選択された「MAF AMXページの作成」ページ

図12-33 すべてのファセットが含まれるMAF AMXページ

すべてのファセットを選択して作成したページ(図12-32および図12-33を参照)では、次の点に注意してください。

- ヘッダーは出力テキスト・コンポーネントで作成されます。これはこのコンポーネントが通常ページ・タイトルに使用されるためです。

- プライマリおよびセカンダリのアクションは、ボタン・コンポーネントで作成されます。これは、これが通常のパターンであるためです。

- フッターの場合、1つだけ群を抜いているパターンはないため、デフォルトでは出力テキスト・コンポーネントで作成されます。これは、このコンポーネントがいくつかのパターンで使用されており、JDeveloperが監査違反のある初期コードを生成することを回避できるためです。

- ヘッダー・ファセットを追加せずにプライマリ・アクションまたはセカンダリ・アクションのいずれかを追加しても、ヘッダー・セクションは「MAF AMXページの作成」ダイアログの「ページ・ファセット」セクションに表示されます。

図12-34に、いずれのファセットも選択していない「MAF AMXページの作成」ページの「ページ・ファセット」セクションを示し、図12-35に、「プレビュー」ペインおよび生成されたMAF AMXコードを示します。

図12-34 ファセットが選択されていない「MAF AMXページの作成」ページ

図12-35 ファセットを含まないMAF AMXページ

#### 12.3.1.4 UIエディタの使用方法

最初にJDeveloperに表示されるとき、ページは「ソース」エディタに表示されます。WYSIWYG環境でページを表示するには、「プレビュー」ペイン(「プレビュー」タブをクリックしてアクセスします)を使用します。

図12-36に、新たに作成された`department.amx`というMAF AMXページに対して選択された「プレビュー」タブを示します。まだMAF AMX UIコンポーネントやデータ・コントロールが移入されていないため、このページは空白です。

図12-36 新たに作成されたページの「プレビュー」ペイン

図12-36に示す「プレビュー」ペインのツールバーを使用すると、次のことができます。

- 「ページのリフレッシュ」をクリックすると、MAF AMXページの表示をリフレッシュできます。

- 「ページのロードを中止」をクリックすると、ページのロードを中止できます。

- ドロップダウンリストから別のフォーム・ファクタを選択すると、ページのフォーム・ファクタを変更できます。フォーム・ファクタの詳細は、『Oracle Mobile Application Frameworkのインストール』のフォーム・ファクタに応じた開発環境の構成に関する項を参照してください。

- ドロップダウン・リストから別のパーセント値を選択すると、表示のスケーリングを変更できます。モバイル・デバイスは様々なサイズおよび密度で表示されるため、「プレビュー」ペインでは、MAF AMXページでのスケーリングの効果を確認できます。

  注意: スケーリングは縦と横の両方のモードで使用できます。

- 「縦向きの表示」または「横向きの表示」を選択することにより、表示の向きをそれぞれ横または縦に変更できます。

- 使用可能なアプリケーション機能のドロップダウン・リストから、MAF AMXページの機能コンテンツを選択します。デフォルトでは、「機能コンテンツが選択されていません」が表示されます。

ソース・エディタでページのソースを表示するには、図12-31 「「アプリケーション」ウィンドウのMAF AMXファイル」に示された「ソース」タブをクリックします。JDeveloperの左下部にある「構造」ウィンドウ(図12-31および図12-36を参照)には、ページが階層形式で表示されます。詳細は、第12.3.2.1項「「プレビュー」の使用方法」を参照してください。

#### 12.3.1.5 ページ定義ファイルへのアクセス

MAF AMXでは、JDeveloperの「ページ定義に移動」機能がサポートされているため(図12-37および第12.3.3.5項「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照)、バインディング情報をすばやく見つけて編集できるようにするポップアップ・メニューを使用することで、MAF AMXページ定義に移動できます。

図12-37 「ページ定義に移動」を使用してアクセスしたページ定義ファイル

次の場所から「ページ定義に移動」オプションを含むポップアップ・メニューを起動できます。

- ソース・エディタ(図12-38)

  図12-38 「ソース」エディタからの「ページ定義に移動」

- 「アプリケーション」ウィンドウ(図12-39)

  図12-39 「アプリケーション」ウィンドウからの「ページ定義に移動」

- 「構造」ウィンドウ(図12-40)

  図12-40 「構造」ペインからの「ページ定義に移動」

さらに、図12-41のように、メイン・メニューの「ツール」→「プリファレンス」の下で定義されている「ページ定義に移動」ショートカット・キーを使用して、ページ定義ファイルを開くこともできます。

図12-41 「プリファレンス」から「ページ定義」を開く

#### 12.3.1.6 ページ・コンテンツの共有

MAF AMXページのコンテンツの共有を有効にできます。フラグメント(`fragment`)は、MAF AMXページ要素の再利用可能な部分(属性やファセットなど)をテンプレートで表されるコンテンツに挿入できるようにする動的な宣言コンポーネントです。これにより、アプリケーション内の様々なページでフラグメント・テンプレートを再利用することで、アプリケーションのルック・アンド・フィールを標準化できます。

MAF AMXフラグメント・ファイル(`.amxf`)をMAF AMXページまたは別のフラグメント・ファイルにドラッグ・アンド・ドロップして、フラグメントへの参照を作成し、その属性を定義できます(第12.3.1.6.1項「フラグメント・コンテンツの構成」を参照)。フラグメント・ファイルはプロジェクト内部に存在し、「アプリケーション」ウィンドウからドロップできます。

始める前に

MAFアプリケーションにビュー・コントローラ・プロジェクトが含まれていることを確認してください。

ビュー・コントローラ・プロジェクトに、MAF AMXページも、ページの作成元のMAF AMXページ・タスク・フローも含まれない場合は、タスク・フロー・ダイアグラムで「表示」アイコンをダブルクリックするか、「新規ギャラリ」から「クライアント層」→「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」を選択することにより、「MAF AMXページの作成」ダイアログを起動できます(第12.3.1.2項「MAF AMXページの作成」を参照)。

「新規ギャラリ」からフラグメントを作成するには:

1. JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ・フラグメント」の順に選択します(図12-42を参照)。「OK」をクリックします。

   図12-42 新しいフラグメントの作成

3. 図12-43に示すように、「MAF AMXページ・フラグメントの作成」ダイアログに新しいフラグメントのファイル名と場所を入力します。「OK」をクリックします。

   図12-43 「MAF AMXページ・フラグメントの作成」ダイアログ

   ダイアログへの入力が完了すると、新しく作成したファイルがJDeveloperのソース・エディタ内に開きます(図12-44を参照)。

   図12-44 フラグメント・ファイル

4. 「構造」ウィンドウで「フラグメント」を右クリックし、「フラグメントの中に挿入」を選択します。新しいフラグメントに移入する要素として、「属性」、属性リスト、「説明」、「ファセット」または「ポップアップ」を選択します(図5-45を参照)。

   図12-45 フラグメントへの移入

5. 引き続き、「構造」ビューでフラグメントの子を右クリックして適切な値を選択することにより、フラグメントの「属性」および他の子を定義します(図12-46を参照)。

   図12-46 フラグメントの属性の定義

   フラグメントを定義するには、「コンポーネント」ウィンドウで「MAF AMXフラグメント」を選択して、その要素をMAF AMXフラグメント・ファイルにドラッグ・アンド・ドロップする方法もあります(図12-47を参照)。

   図12-47 フラグメント要素のドラッグ・アンド・ドロップ

例12-11は、`fragment1.amxf`という名前のMAF AMXフラグメント・ファイルを示しています。

例12-11 フラグメント定義

    <amx:fragmentDef
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
       xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
       <fragment xmlns="http://xmlns.oracle.com/adf/mf/amx/fragment" id="f1">
          <description id="d1">Description of the fragment</description>
          <facet id="f2">
             <description id="d4">Description of the facet</description>
             <facet-name id="f3">facet1</facet-name>
          </facet>
          <attribute id="a1">
             <description id="d2">Description of an attribute</description>
             <attribute-name id="a2">text</attribute-name>
             <attribute-type id="at1">String</attribute-type>
             <default-value id="d3">defaultValue</default-value>
          </attribute>
       </fragment>
       <amx:panelGroupLayout id="pgl1">
          <amx:facetRef facetName="facet1" id="fr1"/>
          <amx:outputText value="#{text}" id="ot1"/>
       </amx:panelGroupLayout>
    </amx:fragmentDef>

フラグメントのコンテンツをMAF AMXページに含めるには、フラグメント・コンポーネントを作成し(第13.2.13項「フラグメント・コンポーネントの使用方法」を参照)、その`src`属性を任意のフラグメント・ファイルに設定します。例12-12は、MAF AMXページに追加された`fragment`要素を示しています。この要素は、そのページ・コンテンツとして`fragment1.amxf`を指しています。同時に、ファセット定義MAF AMXコンポーネントに対応する`facetRef`要素は、その`facet` (MAF AMXファセット・コンポーネント)として`facet1`を指しています。`facetRef`要素は、`.amxf`ファイルの`fragmetDef`内でのみ指定できます。MAF AMX `attribute`要素を子として指定することにより、属性を`facetRef`に渡すことができ、これにより、`attribute`の値を介してフラグメントからファセットにEL変数を渡すことができます。

例12-12 MAF AMXページのフラグメント

    <?xml version="1.0" encoding="UTF-8" ?>
    <amx:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
              xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
       <amx:panelPage id="pp1">
          <amx:panelGroupLayout layout="vertical"
                                id="itemPgl"
                                styleClass="amx-style-groupbox">
             <amx:fragment id="f1"
                           src="/simpleFragment.amxf"
                <amx:attribute id="a1"
                               name="text"
                               value="defaultValue" />
                <amx:facet name="facet">
                   <amx:outputText id="ot5" value="Fragment"/>
                </amx:facet>
             </amx:fragment>
          </amx:panelGroupLayout>
       </amx:panelPage>
    </amx:view>

フラグメントは、その属性を介してすべての情報を受け取ります。個々の属性を定義する以外に、フラグメントにリストとして渡す一連の属性を定義でき、それらをフラグメント定義で繰り返し使用できます。詳細は、第12.3.1.6.2項「フラグメントへの属性リストおよびメタデータの受渡し」を参照してください。

注意: フラグメント・ファイル(`.amxf`)内で使用されるEL式は検証されません。

フラグメントでは、次のものがサポートされています。

- 埋込みポップアップ(第13.2.8項「ポップアップ・コンポーネントの使用方法」を参照)。

- 1つ以上の他の親ページまたはフラグメントに配置できる再利用可能なユーザー・インタフェース。これにより、バインディングを含まず他のコンポーネントで構成されるコンポーネントを作成できます。

- 独自のファセットの定義。これにより、ヘッダー・ファセット、サマリー・ファセットおよび詳細ファセットを定義するレイアウト・コンポーネントなどのコンポーネントを作成し、各ファセットに独自のスタイル・クラスとルック・アンド・フィールを設定できます。

- 属性とコレクションの両方を持つデータ・モデル。

MAFサンプル・アプリケーション(FragmentDemoおよびCompGallery)によって、フラグメントの作成方法と使用方法を示します。これらのサンプル・アプリケーションは、開発コンピュータ上の``jdev_install`/jdeveloper/jdev/extensions/oracle.maf/Samples`ディレクトリの`PublicSamples.zip`ファイル内にあります。

##### 12.3.1.6.1 フラグメント・コンテンツの構成

MAF AMXフラグメント・ファイル(`.amxf`)をMAF AMXページまたは別のフラグメント・ファイルにドラッグ・アンド・ドロップすると、「フラグメント・コンテンツの構成」ダイアログ(図12-48を参照)が表示されます。このダイアログが表示されると、フラグメントの直接の子として定義されたすべてのフラグメント属性を指定できます。

注意: 「フラグメント・コンテンツの構成」ダイアログでは、ファセット・コンポーネント、ポップアップ・コンポーネント、属性リストおよびそのアーティファクトは使用できません。

図12-48 「フラグメント・コンテンツの構成」ダイアログ

図12-49は、MAF AMXフラグメント・ファイル(そのコンテンツは例12-11を参照)をMAF AMXファイルにドラッグ・アンド・ドロップしたときに表示される「フラグメント・コンテンツの構成」ダイアログを示しています。

図12-49 値が表示された「フラグメント・コンテンツの構成」ダイアログ

ダイアログに入力する際は、次の点を考慮してください。

- フラグメントで必須として定義された属性を構成する場合は、属性名の末尾にアスタリスク(*)が表示されます。

- 必須の属性値をすべて定義するまで、ダイアログの「OK」ボタンは無効です。

- フラグメント属性のデフォルト値が指定されており、同時に`required`プロパティが定義されていて`true`に設定されている場合、この属性は必須として扱われません(デフォルト値が優先されます)。この場合は、次のようになります。

  - フラグメントに監査警告が表示されます。

  - 「フラグメント・コンテンツの構成」ダイアログで、属性の名前にアスタリスクが追加されず、この属性は必須として扱われません。

- 「タイプ」列に、フラグメントからの`attribute-type`要素の値が表示されます。これは、(Javaクラスとは異なり)属性タイプの説明として使用されます。

  注意: `attribute-type`はフラグメントで必須要素ですが、その値を定義しなかった場合は、ドロップするフラグメントで未指定として表示されることがあります。この場合、ダイアログにデフォルト値として「文字列」が表示されます。

- 「値」列では、フラグメントの属性に渡す値を指定できます。値を入力するには、タイピングするか、省略記号(…)をクリックしてELビルダーを起動し、EL式を指定します。フラグメント内の特定の属性に`default`要素が存在する場合、このデフォルト値はその属性の「値」列で指定されています。デフォルト値はオーバーライドできます。

- フラグメント内にこの属性に対する`description`要素が存在する場合、異なる属性の行を切り替えると、ダイアログの下部に「属性の説明」フィールドが表示されます。description要素が定義されていない場合、「属性の説明」フィールドは空白になります。

- 「フラグメント・コンテンツの構成」ダイアログを使用して属性の追加、削除または並替えを行うことはできません。

##### 12.3.1.6.2 フラグメントへの属性リストおよびメタデータの受渡し

フラグメント属性を定義する場合、MAFでは次の操作を実行できます。

- 動的属性の受渡し

- 各属性とメタデータとの関連付け(第12.3.1.6.2項「フラグメントへの属性リストおよびメタデータの受渡し」を参照)

- フラグメント定義内の属性に対するループ処理

- 属性内での動的属性のネスト

- あるフラグメントから埋込みフラグメントへの動的属性の受渡し

表12-4には、属性のリストを渡すことを可能にする、MAF AMX `fragment`の直接および間接の子要素がリストされています。

表12-4 フラグメントの属性関連の子要素

子属性名 | 説明
--- | ---
`attributeList` | フラグメントに渡す属性リストを定義します。MAF AMX `fragment`要素または`attributeSet`要素の直接の子にすることができます。 親要素には、子`attributeList`要素をいくつでも定義できます。 `attributeList`要素は、その`ref`属性を介して別の`attributeList`から参照できます。 異なるフラグメント間で属性リストを参照渡しできますが、この場合は、両方の属性リストに同じメタデータが含まれている必要があります。
`attributeSet` | MAF AMX `attributeList`の子として指定できます。 MAF AMX `attributeListIterator`の繰り返し中に使用される属性のセットを定義します。配列内の1つのアイテムとして考えることができます。 親`attributeList`要素には、子`attributeList`要素をいくつでも定義できます。
`attributeListIterator` | MAF AMX `attributeList`を使用します。スタンプ設定に関してMAF AMXイテレータと同様の動作をしますが、属性の公開方法は異なり、その`name`属性によってイテレータは`attributeList`に結合されます。 ある`attributeListIterator`が別のattributeListIterator内でネストされている場合、`name`は(`attributeListIterator`により現在処理中の`attributeSet`の子である) `attributeList`を指している必要があります。 繰り返しの間、定義された属性名がEL変数として公開されます。コール元から属性が提供されていない場合や、属性にデフォルト値がない場合は、値`adf.mf.api.OptionalFragmentArgument`がEL変数として使用されます。この条件は、空のELキーワードを使用することによりテストできます(例: `rendered="#{not (empty myAttribute)}"`)。

属性およびその値の詳細は、Oracle Fusion Middleware Oracle Mobile Application Frameworkのタグ・リファレンスを参照してください。

例12-13は、属性リストをMAF AMXフラグメントに渡す基本的な方法を示しています。

例12-13 基本属性リストの受渡し

    <amx:fragment src="something.amxf">
       <amx:attributeList name="attributeToPass" ref="nameOfAnOuterAttributeList" />
    </amx:fragment>

例12-14は、MAF AMXファイル内に子`attributeList`が定義されている`fragment`要素を示しています。

例12-14 属性リスト定義

    <amx:fragment src="summaryView.amxf">
       <amx:attributeList name="attrs">
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.firstName}"/>
             <amx:attribute name="displayType" value="string" />
          </amx:attributeSet>
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.lastName}"/>
             <amx:attribute name="displayType" value="string" />
          </amx:attributeSet>
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.homePhone}"/>
             <amx:attribute name="displayType" value="phone" />
          </amx:attributeSet>
       </amx:attributeList>
    </amx:fragment>

例12-15は、MAF AMXファイルの`fragment`要素内で定義されているネストされた`attributeList`要素を示しています。

例12-15 ネストされた属性リストの定義

    <amx:fragment src="summaryView.amxf">
       <amx:attributeList name="attrs">
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.firstName}"/>
             <amx:attribute name="displayType" value="string" />
          </amx:attributeSet>
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.lastName}"/>
             <amx:attribute name="displayType" value="string" />
          </amx:attributeSet>
          <amx:attributeSet>
             <amx:attribute name="attribute" value="#{bindings.homePhone}"/>
             <amx:attribute name="displayType" value="phone" />
          </amx:attributeSet>
          <amx:attributeSet>
             <amx:attributeList name="subAttributes">
                <amx:attributeSet>
                   <amx:attribute name="attribute"
                                  value="#{bindings.spouseFirstName}"/>
                   <amx:attribute name="displayType"
                                  value="string" />
                </amx:attributeSet>
                <amx:attributeSet>
                   <amx:attribute name="attribute"
                                  value="#{bindings.spouseLastName}"/>
                   <amx:attribute name="displayType"
                                  value="string" />
                </amx:attributeSet>
             </amx:attributeList>
             <amx:attribute name="label" value="Spouse"/>
          </amx:attributeSet>
       </amx:attributeList>
    </amx:fragment>

例12-16は、定義済の属性リスト・コンポーネントがフラグメント定義内でどのように使用されるかを示しています。`amxf:attribute-list`タグは、属性リストのメタデータを定義しています。このタグは、`amxf:fragment`または別の`amxf:attribute-list`タグの子として宣言する必要があり、その有効な子タグは`amxf:name`、`amxf:description`、`amxf:attribute-list`および`amxf:attribute`です。子`name`は必須であり、現在のXMLノード内で一意である必要があります。nameを同じレベルで宣言されている`amxf:attribute`と同一にすることもできますが、このようなネーミング慣例はお薦めしません。

例12-16 フラグメント定義での属性リストの使用方法

    <amx:fragmentDef
       xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
       xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
       <fragment xmlns="http://xmlns.oracle.com/adf/mf/amx/fragment">
          <attribute-list>
             <name>attributes</name>
             <attribute>
                <attribute-name>attribute</attribute-name>
             </attribute>
             <attribute>
                <attribute-name>displayType</attribute-name>
             </attribute>
             <attribute>
                <attribute-name>label</attribute-name>
             </attribute>
             <attribute-list>
                <name>subAttributes</name>
                <attribute>
                   <attribute-name>attribute</attribute-name>
                </attribute>
                <attribute>
                   <attribute-name>displayType</attribute-name>
                </attribute>
             </attribute-list>
          </attribute-list>
       </fragment>
       ...
       <amx:attributeListIterator name="attributes">
          <amx:panelLabelAndMessage label="#{attribute.hints.label}"
                                    id="plam1"
                                    rendered="#{not (empty attribute)}">
             <amx:outputText value="#{attribute.inputValue}" id="ot1"/>
          </amx:panelLabelAndMessage>
          <amx:outputText value="#{label}"
                          id="ot2"
                          rendered="#{not (empty label)}"/>
          <amx:attributeListIterator name="subAttributes"
                                     rendered="#{not (empty subAttributes)}">
             <amx:panelLabelAndMessage label="#{attribute.hints.label}"
                                       id="plam2"
                                       rendered="#{not (empty attribute)}">
                <amx:outputText value="#{attribute.inputValue}" id="ot3"/>
             </amx:panelLabelAndMessage>
          </amx:attributeListIterator>
       </amx:attributeListIterator>
       ...
    </amx:fragmentDef>

`attribute-list`、`attribute-set`および`attribute`の各タグは、`fragment`ノード内で次のものを定義するために使用できます。

- 使用できる属性リスト・コンポーネント

- フラグメントのコール元のページを検証するために必要な情報

### 12.3.2 MAF AMXページへのUIコンポーネントの追加方法

MAF AMXページの作成後は、ページへのMAF AMX UIコンポーネントの追加を開始できます。

「コンポーネント」ウィンドウを使用して、MAF AMXコンポーネントおよびMAF AMXデータ視覚化コンポーネントをページにドラッグ・アンド・ドロップできます。コンポーネントを追加すると、必要な宣言的ページ・コードが追加され、各コンポーネント属性に特定の値が設定されます。

「コンポーネント」ウィンドウには、MAF AMXコンポーネントがカテゴリ別に表示されます(図12-50を参照)。

- 一般コントロール

- テキストおよび選択

- データ・ビュー

- レイアウト。次のサブカテゴリがあります。

  - 対話型コンテナおよびヘッダー

  - セカンダリ・ウィンドウ

  - コア構造

- 操作。次のサブカテゴリがあります。

  - 動作

  - リスナー

  - バリデータおよびコンバータ

特定のコンポーネントの追加および使用については、第13.3項「UIコンポーネントの作成と使用方法」を参照してください。

また、「コンポーネント」ウィンドウには、MAF AMXデータ視覚化コンポーネントもカテゴリ別に表示されます(図12-50を参照)。

- 共通: 次のサブカテゴリがあります。

  - チャート

  - ゲージ

  - マップ

  - その他

- 共有子タグ

- その他のタイプ固有の子タグ: 次のサブカテゴリがあります。

  - チャート

  - ゲージ

  - NBox

  - テーマ・マップ

  - 時系列

  - サンバーストおよびツリーマップ

始める前に

MAFアプリケーションには、ビュー・コントローラ・プロジェクトが含まれている必要があり、このプロジェクトには、MAF AMXページまたはページの作成元のMAF AMXページのタスク・フローが含まれている場合と含まれていない場合があります。

第12.3.1.2項「MAF AMXページの作成」で説明したように、タスク・フロー・ダイアグラムで「表示」アイコンをダブルクリックするか、「新規ギャラリ」から「クライアント層」→「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」を選択することにより、「MAF AMXページの作成」ダイアログを起動できます。

UIコンポーネントをページに追加するには:

1. ソース・エディタでMAF AMXページを開きます(デフォルト)。

2. 図12-50に示すように、「コンポーネント」ウィンドウで、メニューを使用して「MAF AMX」を選択します。

   ヒント: 「コンポーネント」ウィンドウが表示されていない場合は、JDeveloperのメイン・メニューから「ウィンドウ」→「コンポーネント」を選択します。デフォルトでは、「コンポーネント」はJDeveloperの右上部に表示されます。

   図12-50 MAF AMXの「コンポーネント」ウィンドウ

3. 使用するコンポーネントを選択し、「ソース」エディタまたは「構造」ウィンドウにドラッグ・アンド・ドロップします。「プレビュー」ペインにコンポーネントをドロップすることはできません。

   注意: MAF AMXページを作成する際、UIコンポーネントは、「パネル・グループ・レイアウト」などのUIコンテナにのみドロップできます。

   新たに追加されたコンポーネントを使用して、JDeveloperで「プレビュー」ペインのページが再描画されます。

あるいは、次のようにして、「構造」ウィンドウからUIコンポーネントおよびデータ視覚化コンポーネントを追加することもできます。

1. 「構造」ウィンドウで、別のコンポーネントを挿入するための開始ポイントとして使用する既存のコンポーネントを選択します。

2. 図12-51に示すように、選択したコンポーネントを右クリックして、「<コンポーネント>の前に挿入」、「<コンポーネント>の中に挿入」または「<コンポーネント>の後ろに挿入」のいずれかのオプションを選択します。

   図12-51 「構造」ウィンドウからのコンポーネントの挿入

3. ポップアップ・メニューから、「MAF AMX」または「MAF AMXデータ視覚化」を選択します。

   - 図12-52に示すように、「MAF AMX」を選択すると、「MAF AMXアイテムの挿入」ダイアログが開き、ページに追加するUIコンポーネントを選択できます。

     図12-52 MAF AMXコンポーネントの挿入

   - 図12-53に示すように、「MAF AMXデータ視覚化」を選択すると、「MAF AMXデータ視覚化アイテムの挿入」ダイアログが開き、ページに追加するデータ視覚化コンポーネントを選択できます。

     図12-53 MAF AMXデータ視覚化コンポーネントの挿入

     新たに追加されたコンポーネントを使用して、JDeveloperで「プレビュー」ペインのページが再描画されます。

#### 12.3.2.1 「プレビュー」の使用方法

MAF AMXファイルを使用してユーザー・インタフェースを構築する際、JDeveloperの「プレビュー」では、iOSとAndroidの両方のプラットフォームに対してWYSIWYGサポートを提供します。図12-54に示すように、ビューを分割した状態で、MAF AMXコンポーネントをMAF AMXファイルに追加すると、コード・ビューはソース・エディタから、UIビューは「プレビュー」ペインから同時に確認できます。これにより、ソースを変更してすぐに、iOSとAndroidの両方のプラットフォームで、そのアプリケーションの変更されたルック・アンド・フィールを表示できます。

図12-54 デザイン・ビューとソース・ビューの分割

デザイン・ビューとソース・ビューを同時に確認できる以外に、複数のデザイン・ビューを同時に開いて使用し、それぞれを異なるプラットフォームおよび画面サイズに設定できます。様々なデバイスのデザイン・ビューの組合せを開くことで、様々なプラットフォームおよびフォーム・ファクタに対し、同時に、異なる向きでアプリケーションを開発できます。図12-55は、上段がiPhone、下段が75%のスケーリングのiPadの分割画面を示しています。「プレビュー」ペインは、JDeveloperのデフォルトの分割機能を使用して分割できます。

図12-55 複数のデザイン・ビュー

注意: 無効なMAF AMXファイルであっても、MAF AMXページはレンダリングされます。エラーはコンポーネントのエラー・アイコンで示されます。マウスをエラー・アイコンの上に移動すると、エラーの詳細を表示できます。

#### 12.3.2.2 UIコンポーネントの構成

UIコンポーネントをページにドロップした後、「プロパティ」ウィンドウ(デフォルトではJDeveloperの右下部に表示)を使用して、各コンポーネントの属性値を設定できます。

ヒント: 「プロパティ」ウィンドウが表示されていない場合は、JDeveloperのメイン・メニューから「ウィンドウ」→「プロパティ」を選択します。

図12-56に、出力テキスト・コンポーネントの属性が表示された「プロパティ」ウィンドウを示します。

図12-56 「プロパティ」ウィンドウ

コンポーネント属性の設定手順:

1. 属性を設定するコンポーネントを選択します。「構造」ウィンドウでコンポーネントを選択するか、「ソース」エディタで直接そのタグを選択することができます。

2. 「プロパティ」ウィンドウで、設定する属性が含まれているセクションを開きます。

   ヒント: 一部の属性は、複数のセクションに表示されます。あるセクションで値を入力または変更すると、他のセクションでもその値が変更されます。「プロパティ」ウィンドウの最上部の検索フィールドに属性名を入力して、属性を検索できます。

3. 「プロパティ」ウィンドウで、フィールドに値を直接入力するか、フィールドにリストがある場合はそのリストを使用して、値を選択します。フィールドの右にあるリストを使用して、値の設定に使用できるツールを含むポップアップを起動することもできます。これらのツールは、特定のプロパティ・エディタ(「編集」を選択して開く)または値のEL式の作成に使用できる式ビルダー(「式ビルダー」または該当する場合は「メソッド式ビルダー」を選択して開く)です。式ビルダーの使用の詳細は、第14.3.2項「EL式の作成方法」を参照してください。

「プロパティ」ウィンドウを使用して属性値を設定または変更すると、入力された値に合致するように、属性のページ・ソースがJDeveloperで自動的に変更されます。

ヒント: 「ソース」エディタでページを直接編集することで、いつでも属性値を変更できます。「ソース」エディタにページを表示するには、ページの下部の「ソース」タブをクリックします。

#### 12.3.2.3 要素識別子とその監査に関する必知事項

「コンポーネント」ウィンドウからコンポーネントをドロップするか、データ・コントロールをドラッグ・アンド・ドロップすることにより要素を追加すると、MAFによって一意の要素識別子(`id`)が生成され、自動的にMAF AMXページに挿入されます。これは、MAF AMXページ内で、同じページ内の類似したコンポーネントでもそれぞれを識別する有効な識別子となります。

MAFには、次のことを行う識別子監査ユーティリティが用意されています。

- MAF AMXページにおける識別子の存在と一意性を確認する。

- 識別子が存在しない場合、または一意でない場合は、要素の必須`id`属性ごとにエラーを報告する。

- 自動修正により、識別子の問題が報告されると、要素の一意の`id`が生成される。

図12-57および図12-58に、ソース・エディタと「構造」ペインの識別子エラー・レポートをそれぞれ示します。

図12-57 「ソース」エディタの要素識別子監査

図12-58 「構造」ペインの要素識別子監査

`id`に加え、監査ユーティリティでは「ポップアップ表示動作」操作の`popupId`および`alignId`属性をチェックします(第13.2.8項「ポップアップ・コンポーネントの使用方法」を参照)。

図12-59および図12-60に、ソース・エディタの「ポップアップ表示動作」の「ポップアップID」属性と「位置合せID」属性のエラー・レポートをそれぞれ示します。

図12-59 「ソース」エディタのポップアップID属性監査

図12-60 「ソース」エディタの位置合せID属性監査

詳細は、『Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイド』のJavaプロジェクトの監査とモニタリングに関する項を参照してください。

### 12.3.3 MAF AMXページへのデータ・コントロールの追加方法

MAF AMXページの作成後は、ページへのデータ・コントロールの追加を開始できます。

データ・コントロール要素を「データ・コントロール」ウィンドウからドラッグして「構造」ウィンドウまたはソース・エディタのいずれかにドロップすることで、MAF AMXビューでデータバインドされたUIコンポーネントを作成できます。「データ・コントロール」ウィンドウからこれらのいずれかの場所にアイテムをドラッグすると、ドロップしたアイテムに対して使用できるデフォルトのUIコンポーネントのポップアップ・メニューが表示されます。目的のUIコンポーネントを選択すると、そのコンポーネントがMAF AMXページに挿入されます。また、関連ページ定義ファイルにバインディング情報が作成されます。そのようなファイルが存在しない場合は、JDeveloperによって作成されます。MAFには、新しいデータ・コントロールの場所を知らせる、データ・コントロールのドロップ用のビジュアル・インジケータが用意されています。

注意: データ・コントロールは、基礎となるXMLスキーマで許可された場所にのみドロップできます。

方法によっては、様々なタイプのデータ・コントロールをMAF AMXページの「構造」ウィンドウに挿入できます。

コレクションの属性をドロップすることにより、様々な入力および出力コンポーネントを作成できます。ページにデータ・コントロール操作をドロップすることにより、ボタンおよびリンク・コンポーネントも作成できます。

これらの各操作に対し、MAF AMXボタンにそれぞれのアクション・リスナーが追加されます。

データ・コントロールの属性および操作は、次の1つ以上のMAF AMX UIコンポーネントとしてドロップできます(第13.3項「UIコンポーネントの作成と使用方法」を参照)。

- ボタン

- リンク

- 入力日

- ラベル付入力日

- 入力テキスト

- ラベル付入力テキスト

- 出力テキスト

- ラベル付出力テキスト

- イテレータ

- リスト・アイテム

- リスト・ビュー

- ブール・チェックボックスの選択

- ブール・スイッチの選択

- ボタンを1つ選択

- 選択肢を1つ選択

- ラジオ・ボタンを1つ選択

- チェックボックスを複数選択

- 選択肢を複数選択

- 日時の変換

- 数値の変換

- フォーム

- 読取り専用フォーム

- パラメータ・フォーム

次の日付および数値タイプがサポートされています。

- `java.util.Date`

- `java.sql.Timestamp`

- `java.sql.Date`

- `java.sql.Time`

- `java.lang.Number`

- `java.lang.Integer`

- `java.lang.Long`

- `java.lang.Float`

- `java.lang.Double`

JDeveloperでの「データ・コントロール」ウィンドウの使用方法の詳細は、第14.6項「「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成」を参照してください。

#### 12.3.3.1 属性のドラッグ・アンド・ドロップ

MAF AMXページにすでにパネル・フォーム・レイアウト・コンポーネントが含まれているか、すべてのフィールドを追加する必要がない場合は、データ・コントロールから個別の属性をドロップできます。属性タイプに応じて、次のように異なるデータ・バインディング・メニュー・オプションが提供されます。

##### 12.3.3.1.1 日付

このカテゴリは、MAF入力日およびラベル付MAF入力日のコントロールを作成するためのオプションを提供します。図12-61に、属性を「データ・コントロール」ウィンドウからMAF AMXページのソース・エディタまたは「構造」ウィンドウにドラッグすると表示される日付コントロールを追加するためのポップアップ・メニューを示します。

図12-61 日付コントロールのポップアップ・メニュー

##### 12.3.3.1.2 単一選択

このカテゴリは、次のコントロールを作成するためのオプションを提供します。

- MAFボタンを1つ選択

- MAF選択肢を1つ選択

- MAFラジオ・ボタンを1つ選択

- MAFブール・チェックボックスの選択

- MAFブール・スイッチの選択

図12-62に、属性を「データ・コントロール」ウィンドウからMAF AMXページのソース・エディタまたは「構造」ウィンドウにドラッグすると表示される選択コントロールを追加するためのポップアップ・メニューを示します。

図12-62 選択コントロールのポップアップ・メニュー

既存のMAF AMXページを使用している場合、「MAFボタンを1つ選択」オプションまたは「MAF選択肢を1つ選択」オプションを選択すると、適切な「リスト・バインディングの編集」ダイアログが表示されます(図12-63を参照)。まったく新しいMAF AMXページにコントロールをドロップした場合には、かわりに「アクション・バインディングの編集」ダイアログが開かれます。「OK」をクリックすると、「リスト・バインディングの編集」が開かれます。

注意: 単一選択またはブール選択のコンポーネントとして任意のデータ・コントロール属性をドロップするたびに、それぞれ「リスト・バインディングの編集」または「Booleanバインディングの編集」が表示されます。

図12-63 ボタンを1つ選択コントロールおよび選択肢を1つ選択コントロールの「リスト・バインディングの編集」ダイアログ

「MAFラジオ・ボタンを1つ選択」オプションを選択すると、図12-64に示すような、別の「リスト・バインディングの編集」ダイアログが表示されます。

図12-64 ラジオ・ボタンを1つ選択コントロールの「リスト・バインディングの編集」ダイアログ

「MAFブール・チェックボックスの選択」オプションまたは「MAFブール・スイッチの選択」オプションを選択すると、図12-65に示すような、別の「リスト・バインディングの編集」ダイアログが表示されます。

図12-65 ブール・チェック・ボックスおよびスイッチの選択コントロールの「リスト・バインディングの編集」ダイアログ

##### 12.3.3.1.3 テキスト

このカテゴリは、次のコントロールを作成するためのオプションを提供します。

- MAF入力テキスト

- ラベル付MAF入力テキスト

- MAF出力テキスト

- ラベル付MAF出力テキスト

図12-66に、属性を「データ・コントロール」ウィンドウからMAF AMXページのソース・エディタまたは「構造」ウィンドウにドラッグすると表示されるテキスト・コントロールを追加するためのポップアップ・メニューを示します。

図12-66 テキスト・コントロールのポップアップ・メニュー

#### 12.3.3.2 操作のドラッグ・アンド・ドロップ

属性に加え、操作とカスタム・メソッドもドラッグ・アンド・ドロップできます。操作やメソッドのタイプによって、次のように様々なデータ・バインディング・メニュー・オプションが提供されます。

##### 12.3.3.2.1 操作

これはデータ・コントロール操作のカテゴリです。次のオプションがあります(図12-67を参照)。

- MAFボタン

- MAFリンク

- MAFパラメータ・フォーム

図12-67 操作のポップアップ・メニュー

注意: 操作またはメソッドを、リスト・ビュー・コントロールの子としてドロップすると、ポップアップ・メニューは表示されず、リスト・アイテムが自動的に作成されます。これは、リスト・ビュー・コントロールの直接の子としてドロップできる有効なコントロールが他にないためです。生成されるリスト・アイテムに対して、JDeveloperにより次のようなバインディングが作成されます。
    <amx:listItem actionListener="#{bindings.getLocation.execute}"/>

##### 12.3.3.2.2 メソッド

これはカスタム・メソッドのカテゴリです。次のオプションがあります(図12-68を参照)。

- MAFボタン

- MAFリンク

- MAFパラメータ・フォーム

図12-68 メソッドのポップアップ・メニュー

「MAFパラメータ・フォーム」オプションでは、フォームに挿入するメソッドまたは操作の引数に加え、各引数に対してそれぞれのコントロールも選択できます(図12-69を参照)。

図12-69 「フォーム・フィールドの編集」ダイアログ

「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。

    <amx:panelFormLayout id="pfl1">
       <amx:inputText id="it1"
                      value="#{bindings.empId.inputValue}"
                      label="#{bindings.empId.hints.label}" />
    </amx:panelFormLayout>
    <amx:commandButton id="cb1"
                       actionListener="#{bindings.ExecuteWithParams1.execute}"
                       text="ExecuteWithParams1"
                       disabled="#{!bindings.ExecuteWithParams1.enabled}"/>

生成されるバインディングの詳細は、第12.3.3.4項「生成されるバインディングに関する必知事項」を参照してください。

MAFパラメータ・フォームでサポートされるコントロールのタイプは次のとおりです。

- MAF入力日

- ラベル付MAF入力日

- MAF入力テキスト

- ラベル付MAF入力テキスト

- ラベル付MAF出力テキスト

#### 12.3.3.3 コレクションのドラッグ・アンド・ドロップ

コレクションをドラッグ・アンド・ドロップできます。コレクションのタイプによって、次のように様々なデータ・バインディング・メニュー・オプションが提供されます。

##### 12.3.3.3.1 複数選択

このカテゴリは、複数選択コントロールを作成するためのオプションを提供します。このカテゴリでは次のコントロールが作成されます(図12-70を参照)。

- MAFチェックボックスを複数選択

- MAF選択肢を複数選択

図12-70 複数選択コントロールのポップアップ・メニュー

作成するコントロールのタイプとして「MAF選択肢を複数選択」または「MAFチェックボックスを複数選択」を選択すると、「リスト・バインディングの編集」ダイアログが表示されます(図12-71を参照)。

図12-71 複数選択コントロールの「リスト・バインディングの編集」ダイアログ

##### 12.3.3.3.2 フォーム

このカテゴリは、MAF AMXパネル・フォームのコントロールを作成する場合に使用します。このカテゴリでは次のコントロールが作成されます(図12-72を参照)。

- MAFフォーム

- MAF読取り専用フォーム

図12-72 フォーム・コントロールのポップアップ・メニュー

作成するフォームのタイプとして「MAFフォーム」を選択すると、JDeveloperウィザードが起動され、ここで、フォームに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(図12-73を参照)。

図12-73 MAFフォームの「フォーム・フィールドの編集」ダイアログ

「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。

    <amx:panelFormLayout id="pfl1">
       <amx:panelLabelAndMessage id="plam1" label="#{bindings.jobId.hints.label}">
          <amx:outputText id="ot1" value="#{bindings.jobId.inputValue}" />
       </amx:panelLabelAndMessage>
       <amx:inputText id="it4"
                      value="#{bindings.title.inputValue}"
                      label="#{bindings.title.hints.label}" />
       <amx:inputText id="it5"
                      value="#{bindings.minSalary.inputValue}"
                      simple="true" />
       <amx:inputText id="it3"
                      value="#{bindings.maxSalary.inputValue}"
                      simple="true" />
    </amx:panelFormLayout>

生成されるバインディングの詳細は、第12.3.3.4項「生成されるバインディングに関する必知事項」を参照してください。

MAFフォームでサポートされるコントロールのタイプは次のとおりです。

- MAF入力日

- ラベル付MAF入力日

- MAF入力テキスト

- ラベル付MAF入力テキスト

- ラベル付MAF出力テキスト

注意: MAF出力テキストは、MAFスキーマで定義される有効なパネル・フォーム・レイアウトの子要素ではないため、サポートされていません。

作成するフォームのタイプとして「MAF読取り専用フォーム」を選択すると、JDeveloperウィザードが起動され、ここで、フォームに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(図12-74を参照)。

図12-74 MAF読取り専用フォームの「フォーム・フィールドの編集」ダイアログ

「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。

    <amx:panelFormLayout id="pfl1">
       <amx:panelLabelAndMessage id="plam4"
                                 label="#{bindings.jobId.hints.label}">
          <amx:outputText id="ot4" value="#{bindings.jobId.inputValue}" />
       </amx:panelLabelAndMessage>
       <amx:panelLabelAndMessage id="plam1"
                                 label="#{bindings.title.hints.label}">
          <amx:outputText id="ot1" value="#{bindings.title.inputValue}" />
       </amx:panelLabelAndMessage>
       <amx:panelLabelAndMessage id="plam3"
                                 label="#{bindings.minSalary.hints.label}">
          <amx:outputText id="ot3" value="#{bindings.minSalary.inputValue}" />
       </amx:panelLabelAndMessage>
       <amx:panelLabelAndMessage  id="plam2"                               label="#{bindings.maxSalary.hints.label}">
          <amx:outputText id="ot2" value="#{bindings.maxSalary.inputValue}" />
       </amx:panelLabelAndMessage>
    </amx:panelFormLayout>

生成されるバインディングの詳細は、第12.3.3.4項「生成されるバインディングに関する必知事項」を参照してください。

MAF読取り専用フォームでは、ラベル付MAF出力テキストのみがサポートされています。

##### 12.3.3.3.3 イテレータ

これは、子コンポーネントのあるMAF AMXイテレータを作成するためのオプションを提供します(図12-75を参照)。

図12-75 イテレータ・コントロールのポップアップ・メニュー

作成するコントロールのタイプとして「MAFイテレータ」を選択すると、JDeveloperウィザードが起動され、ここで、イテレータに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(デフォルトの選択は「ラベル付MAF出力テキスト」です。図12-76を参照してください)。

図12-76 MAFイテレータの編集ダイアログ

「イテレータの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。

    <amx:iterator id="i1"
                  var="row"
                  value="#{bindings.jobs.collectionModel}">
       <amx:panelLabelAndMessage id="plam6"
                                 label="#{bindings.jobs.hints.jobId.label}">
          <amx:outputText id="ot6" value="#{row.jobId}" />
       </amx:panelLabelAndMessage>
       <amx:panelLabelAndMessage id="plam5"
                                 label="#{bindings.jobs.hints.title.label}">
          <amx:outputText id="ot5" value="#{row.title}" />
       </amx:panelLabelAndMessage>
       <amx:inputText id="it1"
                      value="#{row.bindings.minSalary.inputValue}"
                      label="#{bindings.jobs.hints.minSalary.label}" />
       <amx:inputText id="it2"
                      value="#{row.bindings.maxSalary.inputValue}"
                      label="#{bindings.jobs.hints.maxSalary.label}" />
    </amx:iterator>

生成されるバインディングの詳細は、第12.3.3.4項「生成されるバインディングに関する必知事項」を参照してください。

MAFイテレータでサポートされるコントロールのタイプは次のとおりです。

- MAF入力テキスト

- ラベル付MAF入力テキスト

- MAF出力テキスト

- ラベル付MAF出力テキスト

##### 12.3.3.3.4 リスト・ビュー

これは、子コンポーネントのあるMAF AMXリスト・ビューを作成するためのオプションを提供します(図12-77を参照)。

図12-77 リスト・ビュー・コントロールのポップアップ・メニュー

作成するコントロールのタイプとして「MAFリスト・ビュー」を選択すると、図12-78に示すような「ListViewギャラリ」が開かれ、リスト・ビューに特定のレイアウトを選択できます。

図12-78 ListViewギャラリ

表12-5は、「ListViewギャラリ」に表示される、サポートされるリスト・フォーマットを示しています。

表12-5 リスト・フォーマット

フォーマット | 要素行の値
--- | ---
シンプル | テキスト
メイン-サブ・テキスト | メイン・テキスト 従属テキスト
開始-終了 | 開始テキスト 終了テキスト
四分円 | 上部の開始テキスト 上部の終了テキスト 下部の開始テキスト 下部の終了テキスト

選択したリスト・フォーマットの「ListViewギャラリ」に表示されている「バリエーション」(図12-78を参照)は、区切りか先頭イメージのいずれかまたは両方を追加するためのオプションで構成されています。

- 先頭イメージのあるバリエーションを選択すると、イメージ行が「リスト・アイテム・コンテンツ」表(図12-79を参照)に追加されます。

- 区切りのあるバリエーションを選択すると、「区切り属性」フィールドがデフォルトの「区切りなし」ではなく、リスト内の最初の属性にデフォルトで設定され、「区切りモード」フィールドにそのデフォルト値の「すべて」が移入されます。

「ListViewギャラリ」に表示されている「スタイル」オプション(図12-78を参照)では、シェブロンを抑制することも、凹枠スタイル・リストを使用することも、その両方を行うこともできます。

- この選択によって、「リスト・ビューの編集」ダイアログ(図12-79を参照)の状態は変更されません。影響するのは、生成されるMAF AMXマークアップのみです。

- 凹枠リストのあるスタイルを選択すると、生成されたMAF AMXマークアップの`listView`要素に`adfmf-listView-insetList`スタイル・クラスが設定されます。

次に、凹枠リストのあるシンプル・フォーマットの例を示します。

    <amx:listView var="row"
                  value="#{bindings.employees.collectionModel}"
                  fetchSize="#{bindings.employees.rangeSize}"
                  styleClass="adfmf-listView-insetList"
                  showMoreStrategy="autoScroll"
                  bufferStrategy="viewport"
                  id="listView2">
       <amx:listItem id="li2">
          <amx:outputText value="#{row.employeename}" id="ot3"/>
       </amx:listItem>
    </amx:listView>

「ListViewギャラリ」の「説明」ペインは、現在選択されているバリエーションに基づいて更新されます。フォーマットには、メイン・スタイルの簡単な説明が示され、その後に選択したバリエーションの詳細が続きます。4つのリスト・フォーマットに、それぞれ4つのバリエーションがあり、表12-6に示す16の固有の説明が提供されています。

表12-6 リスト・ビューのフォーマットとバリエーション

リスト・フォーマット | バリエーション | 説明
--- | --- | ---
シンプル | 基本 | テキスト・フィールドは、リスト・アイテムの開始側に表示されます。
シンプル | 区切り | テキスト・フィールドは、リスト・アイテムの開始側に、アイテムが区切りによりグループ化されて表示されます。
シンプル | イメージ | テキスト・フィールドは、リスト・アイテムの開始側に、先頭イメージに続いて表示されます。
シンプル | 区切りおよびイメージ | テキスト・フィールドは、リスト・アイテムの開始側に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。
メイン-サブ・テキスト | 基本 | 目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に続きます。
メイン-サブ・テキスト | 区切り | 目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に続きます。リスト・アイテムは区切りによってグループ化されます。
メイン-サブ・テキスト | イメージ | 目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に先頭イメージに続いて表示されます。
メイン-サブ・テキスト | 区切りおよびイメージ | 目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。
開始-終了 | 基本 | テキスト・フィールドは、リスト・アイテムの両側に表示されます。
開始-終了 | 区切り | テキスト・フィールドは、リスト・アイテムの両側に、アイテムが区切りによりグループ化されて表示されます。
開始-終了 | イメージ | テキスト・フィールドは、リスト・アイテムの両側に、先頭イメージに続いて表示されます。
開始-終了 | 区切りおよびイメージ | テキスト・フィールドは、リスト・アイテムの両側に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。
四分円 | 基本 | テキスト・フィールドは、リスト・アイテムの四隅に表示されます。
四分円 | 区切り | テキスト・フィールドは、リスト・アイテムの四隅に、アイテムが区切りによりグループ化されて表示されます。
四分円 | イメージ | テキスト・フィールドは、リスト・アイテムの四隅に、先頭イメージに続いて表示されます。
四分円 | 区切りおよびイメージ | テキスト・フィールドは、リスト・アイテムの四隅に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。

「ListViewギャラリ」で選択し、「OK」をクリックすると、「リスト・ビューの編集」ウィザードが起動され、ここで図12-79に示すように、バインディング属性を選択したリスト・ビュー・フォーマットの要素にマップすることにより、リスト・アイテムのコンテンツを作成できます。

図12-79 MAF AMXリスト・ビューの編集ダイアログ

図12-79に示すダイアログに入力する際は、次の点を考慮してください。

- 最初のイメージは、選択したリスト・ビュー・フォーマットのメイン・コンテンツ要素を反映し、略図から基礎となる表の名前付き要素へのマッピングを提供します。

- 「要素」列の読取り専用セルは、選択したリスト・ビュー・フォーマットから導出されます。

- 「値バインディング」列の編集可能セルは、ドロップされたデータ・コントロール・ノードに基づいています。

- リスト・アイテムは、その特定要素に対してどちらが適切であるかによって、出力テキストまたはイメージ・コンポーネントのいずれかとして生成されます。

- 要素(行)数は選択したリスト・ビュー・フォーマットであらかじめ決まっているため、行を追加または削除することはできません。

- 要素の順序は変更できません。

- 「リスト・アイテム選択」は選択モードを示し、単一のアイテム選択(デフォルト)または選択なしのいずれかにできます。リスト・ビューの`showLinkIcon`属性は、選択モードに基づいて更新されます。選択モードが「なし」に設定されると、`showLinkIcon`属性は`false`に設定されます。それ以外の場合、`showLinkIcon`属性は変更されません(たとえば、デフォルトの`true`にデフォルト設定されます)。

  `listView`の次の属性を使用すると、選択モードの機能を有効にできます。

  - `selectionListener`: 選択リスナーへのメソッド参照を定義します。

  - `selectedRowKeys`: このコンポーネントの選択状態を示します。

  「単一アイテム」オプションを選択した場合、「リスト・ビューの編集」ダイアログでは自動的にこれらの属性が次のように設定されます。

  - `selectionListener`は`"bindings.treebinding.collectionModel.makeCurrent"`に設定されます。

  - `selectedRowKeys`は`"bindings.treebinding.collectionModel.selectedRow"`に設定されます。

  `selectionListener`属性には「編集」オプションがあり、これを「プロパティ」ウィンドウから使用して、マネージドBeanクラスおよび適切なマネージドBeanメソッドを他のリスナー属性と同様の方法で作成できます(図12-80および図12-81を参照)。

  図12-80 選択リスナー属性の編集

  図12-81 選択リスナーの編集ダイアログ

  例12-17は、MAF AMXファイル内の`listView`要素の選択関連属性を示しています。「リスト・ビューの編集」ダイアログで「単一アイテム」を選択すると、この宣言が生成されます(図12-79を参照)。

  例12-17 リスト・ビューの選択属性

      <amx:listView id="listView1"
                    var="row"
                    value="#{bindings.employees.collectionModel}"
                    fetchSize="#{bindings.employees.rangeSize}"
                    showMoreStrategy="autoScroll"
                    bufferStrategy="viewport"
                    selectionListener=
                        "#{bindings.employees.collectionModel.makeCurrent}"
                    selectedRowKeys=
                        "#{bindings.employees.collectionModel.selectedRow}">
         <amx:listItem id="listItem1">
            ...
         </amx:listItem>
      </amx:listView>

  「リスト・ビューの編集」ダイアログで「リスト・アイテム選択」オプションとして「なし」を選択した場合、`selectionListener`属性と`selectedRowKeys`属性は、デフォルト値がなく、MAF AMXファイル内に出現しないため、設定されません。同時に、リスト・アイテムの`showLinkIcon`属性は`false`に設定されます(例12-18を参照)。

  例12-18 リスト・ビューでの選択属性の省略

      <amx:listView id="listView1"
                    var="row"
                    value="#{bindings.employees.collectionModel}"
                    fetchSize="#{bindings.employees.rangeSize}"
                    showMoreStrategy="autoScroll"
                    bufferStrategy="viewport">
         <amx:listItem id="listItem1" showLinkIcon="false">
            ...
         </amx:listItem>
      </amx:listView>

  MAF AMXページとの間でナビゲーションが発生すると、リスト・ビューの選択状態が保持されます。

  注意: MAF AMXページ間で同じイテレータIDがある場合、選択されている行が考慮されます。たとえば、あるページに、イテレータが`employeesIterator`であるリスト・ビューとして`Employees`コレクションをドラッグした後、`「詳細」`ページを追加し、その`「詳細」`ページの従業員イテレータのIDが`employeesIterator`に設定されている場合は、選択されている行のみが考慮されます。

- 「区切り属性」フィールドのデフォルト値は「区切りなし」であり、この場合、「区切りモード」フィールドは無効です。デフォルト以外の値を選択する場合は、図12-82および図12-83に示すように、「区切りモード」パラメータを指定する必要があります。

  図12-82 区切り属性の指定

  図12-83 区切りモードの指定

  リスト・ビューの区切りの詳細は、第13.3.15項「リスト・ビューおよびリスト・アイテム・コンポーネントの使用方法」を参照してください。

  「リスト・ビューの編集」ダイアログで適切なオプションを選択すると、次のMAF AMXマークアップおよびデータ・バインディングが生成されます。

      <amx:listView id="listView1"
                    var="row"
                    value="#{bindings.employees.collectionModel}"
                    fetchSize="#{bindings.employees.rangeSize}"
                    showMoreStrategy="autoScroll"
                    bufferStrategy="viewport"
                    dividerAttribute="key"
                    dividerMode="firstLetter"
                    selectionListener=
                      "#{bindings.employees.collectionModel.makeCurrent}"
                    selectedRowKeys=
                      "#{bindings.employees.collectionModel.selectedRow}">
         <amx:listItem id="listItem1" >
            <amx:outputText value="#{row.key}"
                            styleClass="adfmf-listItem-subtext"
                            id="outputText1"/>
         </amx:listItem>
      </amx:listView>

  生成されるバインディングの詳細は、第12.3.3.4項「生成されるバインディングに関する必知事項」を参照してください。

  MAFリスト・ビューでサポートされるコントロールは次のとおりです。

  - MAF出力テキスト

  - MAFイメージ

#### 12.3.3.4 生成されるバインディングに関する必知事項

表12-7に、コンポーネントがドロップされたときにMAF AMXページに追加されるサンプル・バインディングを示します。

表12-7 サンプル・データ・バインディング

コンポーネント | データ・バインディング
--- | ---
ボタン |
    <amx:commandButton id="commandButton1"
                       actionListener="#{bindings.FindContacts.execute}"
                       text="FindContacts"
                       disabled="#{!bindings.FindContacts.enabled}">
    </amx:commandButton>
リンク |
    <amx:commandLink id="commandLink1"
                     actionListener="#{bindings.FindContacts.execute}"
                     text="FindContacts"
                     disabled="#{!bindings.FindContacts.enabled}">
    </amx:commandLink>
ラベル付入力日 |
    <amx:inputDate id="inputDate1"
                   value="#{bindings.timeStamp.inputValue}"
                   label="#{bindings.timeStamp.hints.label}">
    </amx:inputDate>
入力日 |
    <amx:inputDate id="inputDate1"
                   value="#{bindings.timeStamp.inputValue}">
    </amx:inputDate>
ラベル付入力テキスト |
    <amx:inputText id="inputText1"
                   value="#{bindings.contactData.inputValue}"
                   label="#{bindings.contactData.hints.label}">
    </amx:inputText>
入力テキスト |
    <amx:inputText id="inputText1"
                   value="#{bindings.contactData.inputValue}"
                   simple="true">
    </amx:inputText>
出力テキスト |
    <amx:outputText id="outputText1"
                   value="#{bindings.contactData.inputValue}">
    </amx:outputText>
ラベル付出力テキスト |
    <amx:panelLabelAndMessage id="panelLabelAndMessage1"
              label="#{bindings.contactData.hints.label}">
       <amx:outputText id="outputText1"
                       value="#{bindings.contactData.inputValue}"/>
    </amx:panelLabelAndMessage>
ブール・チェックボックスの選択 |
    <amx:selectBooleanCheckbox id="selectBooleanCheckbox1"
               value="#{bindings.contactData.inputValue}"
               label="#{bindings.contactData.label}">
    </amx:selectBooleanCheckbox>
ブール・スイッチの選択 |
    <amx:selectBooleanSwitch id="selectBooleanSwitch"
               value="#{bindings.contactData.inputValue}"
               label="#{bindings.contactData.label}">
    </amx:selectBooleanSwitch>
ボタンを1つ選択 |
    <amx:selectOneButton id="selectOneButton1"
               value="#{bindings.contactData.inputValue}"
               label="#{bindings.contactData.label}"
               required="#{bindings.contactData.hints.mandatory}">
       <amx:selectItems value="#{bindings.contactData.items}"/>
    </amx:selectOneButton>
選択肢を1つ選択 |
    <amx:selectOneChoice id="selectOneChoice1"
                    value="#{bindings.contactData.inputValue}"
                    label="#{bindings.contactData.label}">
       <amx:selectItems id="selectItems1"
                        value="#{bindings.contactData.items}"/>
    </amx:selectOneChoice>
チェックボックスを複数選択 |
    <amx:selectManyCheckbox id="selectManyCheckbox1"
                          value="#{bindings.AssetView.inputValue}"
                          label="#{bindings.AssetView.label}">
       <amx:selectItems id="selectItems1"
                        value="#{bindings.AssetView.items}"/>
    </amx:selectManyCheckbox>
ラジオ・ボタンを1つ選択 |
    <amx:selectOneRadio id="selectOneRadio1"
                   value="#{bindings.contactData.inputValue}"
                   label="#{bindings.contactData.label}"
       <amx:selectItems id="selectItems1"
                        value="#{bindings.contactData.items}"/>
    </amx:selectOneRadio>
選択肢を複数選択 |
    <amx:selectManyChoice id="selectManyChoice1"
                          value="#{bindings.AssetView.inputValue}"
                          label="#{bindings.AssetView.label}">
       <amx:selectItems id="selectItems1"
                        value="#{bindings.AssetView.items}"/>
    </amx:selectManyChoice>

#### 12.3.3.5 生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項

最初のドラッグ・アンド・ドロップ・イベントにより、次のディレクトリとファイルが生成されます。

図12-84に、ドラッグ・アンド・ドロップ時に生成される`DataBindings.cpx`ファイル例を示します。

図12-84 ソース・ビューでのDataBindings.cpxファイル

`DataBindings.cpx`ファイルでは、MAF AMXアプリケーション機能全体のバインディング・コンテキストが定義され、実行時にはこのメタデータからバインディング・オブジェクトが作成されます。コンポーネントがプロジェクトの外部で作成された後にインポートされた場合は、MAF AMXアプリケーション機能に2つ以上の`DataBindings.cpx`ファイルが存在する可能性があります。これらのファイルは個々のMAF AMXページをページ定義ファイルにマップし、どのデータ・コントロールをMAF AMXアプリケーション機能で使用するかを宣言します。実行時には、`DataBindings.cpx`ファイルにリストされたデータ・コントロールのみが、現在のMAF AMXアプリケーション機能で使用可能になります。

初めて「データ・コントロール」ウィンドウを使用してコンポーネントをページに追加した場合、または操作をアクティビティに追加した場合、JDeveloperによって自動的に、ViewControllerプロジェクトのデフォルト・パッケージ内に`DataBindings.cpx`ファイルが作成されます。`DataBindings.cpx`ファイルが作成されると、最初のページまたはタスク・フロー・アクティビティ用のエントリが自動的に追加されます。その後、「データ・コントロール」ウィンドウを使用するたびに、そのページまたはアクティビティ用のエントリがまだない場合は、エントリが`DataBindings.cpx`に追加されます。

JDeveloperにより`DataBindings.cpx`ファイルが作成されると、そのファイルを「ソース」ビュー(図12-84を参照)または概要エディタで開くことができます。

ファイルの「ページ・マッピング」(`pageMap`)セクションにより、IDを使用して各MAF AMXページまたはタスク・フロー・アクティビティが対応するページ定義ファイルにマップされます。「ページ定義の使用方法」(`pageDefinitionUsages`)セクションにより、ページ定義IDはMAF AMXアプリケーション機能内のページ定義ファイルの絶対パスにマップされます。「データ・コントロールの使用方法」(`dataControlUsages`)セクションは、ページ定義ファイル内で定義されているバインディング・オブジェクトによって使用されるデータ・コントロールを識別します。これらのマッピングにより、ページの起動時にバインディング・コンテナを初期化できます。

概要エディタを使用して、現在のID名をダブルクリックし、インラインで編集することで、ページ定義ファイルまたはデータ・コントロールのID名を変更できます。これを行うと、MAF AMXアプリケーション機能内のすべての参照が更新されます。ただし、JDeveloperで更新されるのはID名のみであり、ファイル名は更新されません。データ・コントロール名を予約語に変更しないようにしてください。

また、「構造」ウィンドウで`DataBindings.cpx`ファイルの要素をクリックし、「プロパティ」ウィンドウを使用してプロパティ値を変更することもできます。

図12-85に、ドラッグ・アンド・ドロップ時に生成される`PageDef`ファイル例を示します。

図12-85 PageDefファイル

ページ定義ファイルでは、実行時にMAF AMX UIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。バインディングを使用するMAF AMXページにはそれぞれ、そのページで使用されるバインディング・オブジェクトを定義する、対応するページ定義ファイルが存在する必要があります。ページ定義ファイルによって、すべてのバインディングへのデザインタイム・アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。

初めて「データ・コントロール」ウィンドウを使用してページにコンポーネントを追加すると、JDeveloperによって自動的に、そのページのページ定義ファイルが作成され、コンポーネントにより参照される各バインディング・オブジェクトの定義が追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、JDeveloperによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。

デフォルトでは、ページ定義ファイルは、ViewControllerプロジェクトのApplication Sourcesノードにある`mobile.PageDefs`パッケージに含まれています。対応するMAF AMXページがデフォルト以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のパッケージに保存されます。

ページ定義ファイルを開く方法の詳細は、第12.3.1.5項「ページ定義ファイルへのアクセス」を参照してください。概要エディタでページ定義ファイルを開いた場合、次のタブを使用して、MAF AMXページのバインディング、コンテキスト・イベントおよびパラメータを表示および構成できます。

- バインディングと実行可能ファイル: このタブには、3種類のオブジェクト(バインディング、実行可能ファイル、および関連付けられたデータ・コントロール)が表示されます。

  注意: バインディングと実行可能ファイルは、選択しないかぎりデータ・コントロールには表示されません。

  デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、JDeveloperではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。

- コンテキスト・イベント: MAF AMXアプリケーション機能内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。

- パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。静的値または静的値を割り当てるEL式を使用して、ページ定義ファイルのパラメータ値を定義できます。

概要エディタのアイテム(または「構造」ウィンドウの関連付けられたノード)をクリックすると、「プロパティ」ウィンドウを使用してそのアイテムの属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集することができます。

#### 12.3.3.6 MAF AMXエディタの「バインディング」タブの使用方法

JDeveloperの「バインディング」タブ(図12-86を参照)は、MAF AMXエディタで使用可能です。ここには、特定のMAF AMXページに対して定義されたデータ・バインディングが表示されます。バインディングを選択すると、基盤となるデータ・コントロールへのリレーションシップが示され、`PageDef`ファイルへのリンクが提供されます。

図12-86 「バインディング」タブ

#### 12.3.3.7 使用されないバインディングの削除に関する必知事項

「構造」ウィンドウからMAF AMXコンポーネントを削除または切り取ると、使用されないバインディングは自動的にページから削除されます。

注意: 「ソース」エディタからコンポーネントを削除した場合には、バインディングは削除されません。

図12-87は、バインディングを参照するリスト・ビュー・コンポーネントの削除を示しています。削除すると、関連するバインディング・エントリが、対応する`PageDef.xml`ファイルから自動的に削除されます。

図12-87 バインドされたコンポーネントのページからの削除

図12-88では、ページからリスト・ビュー・コンポーネントを切り取ることにより、これを削除しています。

図12-88 バインドされたコンポーネントのページからの切取り

「切取り」をクリックすると、図12-89に示すような「ADFバインディングの削除の確認」ダイアログが表示され、該当するバインディングを削除するかどうかを選択するよう求められます。

図12-89 「ADFバインディングの削除の確認」ダイアログ

### 12.3.4 サーバー通信に関する必知事項

MAFで使用されるセキュリティ・アーキテクチャでは、MAF AMXページをホストするブラウザに、セキュア・サーバーに接続してそのリソースを取得するために必要なセキュリティ情報へのアクセス権がないことを保証しています。これは、MAF AMXページから行うAJAXコールに直接的な影響があります。これらのコールはサポートされていないため、MAF AMX UIコンポーネント内からのJavaScriptの使用には制約があります。サーバーとの通信は、埋込みのJavaコード・レイヤーから行う必要があります。