ヘッダーをスキップ

Oracle® Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発 リリース2.0.1 E57593-01 |
| 目次

前 | 次 |

# 5 MAF AMXページの作成

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

この章には次の項が含まれます:

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

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

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

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

MAF AMXは、サポートされるすべてのプラットフォームで動作が同一となるアプリケーション機能を作成できる一連のUIコンポーネントを提供するモバイル・アプリケーション・フレームワーク(MAF)内のサブフレームワークです。MAF AMXでは、ページ・エディタへのドラッグにより、UIコンポーネントを宣言的に使用できます。一般的なMAF AMXアプリケーション機能には、様々なパス経由でナビゲートできる、相互に接続されたいくつかのページが含まれます。

MAF AMXアプリケーション機能を使用すると、一緒に使用することでアプリケーションの機能を実行できる2種類のオブジェクトを作成できます。

- 定義した機能を実行し、ユーザー用に情報を表示するビュー

- 作成する各ビューによるユーザーのナビゲーションを定義するタスク・フロー

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

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

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

- 第3章「モバイル・アプリケーション開発のスタート・ガイド」

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

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

注意: MAF機能エディタを使用してアプリケーションの一部としてオブジェクトを作成する場合、Oracle Enterprise Pack for Eclipseにより、後で変更できないオブジェクトのIDが作成されます。

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

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

NavigationというMAFサンプル・アプリケーション(「ファイル」→「新」→「MAFサンプル」を選択してから「Navigation」を選択)には、循環ナビゲーション、ルーターなど様々なナビゲーション技術の使用方法が示されています。

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

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

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

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

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

パレットで、タスク・フロー要素をドラッグしてフロー構造内に配置することで、独自のMAF AMXアプリケーション機能のバインド・タスク・フローを宣言的に作成できます。それらの要素を相互に関連付けて配置すると、Oracle Enterprise Pack for Eclipseは、ナビゲーションがMAF AMXアプリケーション機能で動作するために必要なXMLメタデータを`task-flow-definition.xml`ファイル(デフォルト)に作成します。タスク・フロー定義ファイルのソースを編集することもできます。

始める前に:

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

Oracle Enterprise Pack for Eclipseでタスク・フローを作成するには、`maf-feature.xml`ファイルからバインド・タスク・フローを作成します。詳細は、第4.11.1項「アプリケーション・コンテンツの定義方法」を参照してください。

図5-1 MAF機能エディタでのタスク・フロー・ファイルの作成

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

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

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

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

### 5.2.2 タスク・フロー・アクティビティおよび制御フローに関する必知事項

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

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

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

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

MAFタスク・フロー・デザイナは表5-2に示す制御フローをサポートしています。

表5-2 制御フロー

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

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

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

図5-2に、`task-flow-definition.xml`というタスク・フロー・ファイル例を示します。このファイルでは、制御フローはタスク・フロー・コール`CallFlow`によって`Call1`から`Call2`に方向付けられます。(第5.2.7項「「戻る」ナビゲーションのMAFサポートに関する必知事項」を参照)。

図5-2 タスク・フロー・ファイル

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

MAFタスク・フロー作成ユーティリティを使用してタスク・フローを作成すると、図5-2に示すように、タスク・フロー・ダイアグラムおよびパレットが自動的に表示されます。タスク・フロー・ダイアグラムは、そこにパレットからのアクティビティおよびタスク・フローをドラッグ・アンド・ドロップできるビジュアル・エディタです。図5-2に示す「ソース」タブをクリックしてタスク・フロー・ファイルを直接編集することもできます。詳細は、第5.2.5項「タスク・フロー・アクティビティの追加および使用方法」を参照してください。

### 5.2.5 タスク・フロー・アクティビティの追加および使用方法

タスク・フロー・ダイアグラマを使用してパレットからオプションを選択し、アクティビティ、ビューおよび制御フローをドラッグ・アンド・ドロップします。

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

1. プロジェクト・エクスプローラで、タスク・フロー・ソース・ファイル(`task-flow-definition.xml`など)をダブルクリックし、タスク・フロー・ダイアグラムとパレットを表示します。ダイアグラマにはタスク・フロー・エディタが表示されます。「パレット」には、MAFタスク・フローで使用できるコンポーネントが自動的に表示されます。

2. アクティビティを「パレット」からダイアグラムにドラッグします。

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

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

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

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

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

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

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

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

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

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

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

例5-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>

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

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

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

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

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

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

前述のとおり、ビュー・アクティビティは、メタデータで、タスク・フローへの追加時に表示される実際のMAF AMXページに関連付けられています。ビュー・アクティビティは、「パレット」からドラッグ・アンド・ドロップすることによって追加します。「ダイアグラム」ウィンドウで「ビュー」アクティビティを右クリックして実際のMAF AMXページを作成し、次に表示されるダイアログ(図5-15「新しいMAFページ作成ダイアログ」を参照)でページの特性を定義できます。ビュー・アクティビティは、プロジェクト・エクスプローラのMAF AMXファイルを概要エディタの「ダイアグラム」タブにドラッグ・アンド・ドロップして作成することもできます。

バインド・タスク・フローを作成する場合、特定のアクティビティをデフォルト・アクティビティに指定できます(第5.2.12項「バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項」を参照)。それにより、バインド・タスク・フローの実行時は常にこの特定のアクティビティを最初に実行できます。デフォルトでは、OEPEはタスク・フローに追加した最初のアクティビティをデフォルトにします。別のアクティビティに変更する場合は、「ダイアグラム」ウィンドウで該当するアクティビティを右クリックし、「ページ定義の作成」を選択します(図5-3を参照)。

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

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

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

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

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

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

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

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

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

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

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

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

追加するルーター・ケースごとに、図5-4に示すように、「制御フロー・ケース」セクションの「追加」( + )をクリックして値を指定します。

図5-4 ルーター・アクティビティの構成

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

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

      #{pageFlowScope.value=='view2'}

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

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

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

ルーター・アクティビティを使用して制御フローを構成する場合に、OEPEでは、ルーター・アクティビティのプロパティに指定した値に基づいて、タスク・フローのソース・ファイルに値を記述します。

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

メソッド・コール・アクティビティをダイアグラム上にドラッグすると、「新規オブジェクト」ダイアログを使用して、コールするメソッドを構成できます。

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

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

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

  この結果は、「プロパティ」ウィンドウの「固定結果」フィールドを設定することで定義します。

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

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

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

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

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

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

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

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

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

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

- クラス: パラメータ・クラスを入力します。たとえば、`java.lang.Double`です。

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

      #{pageFlowScope.shoppingCart.totalPurchasePrice}

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

      #{pageFlowScope.Return}

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

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

コールされたバインド・タスク・フローでは、デフォルト・アクティビティが最初に実行されます。バインド・タスク・フロー・コールの数に制限はありません。たとえば、コール先のバインド・タスク・フローからは別のバインド・タスク・フローをコールでき、さらにそのバインド・タスク・フローからも次々にコールできるため、各タスク・フローがタスク間を結び付けるタスク・フロー・チェーンを作成できます。

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

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

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

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

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

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

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

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

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

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

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

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

2. パレットの「アクティビティ」ペインから、タスク・フロー・コール・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。

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

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

   - プロジェクト・エクスプローラから既存のバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

入力パラメータを指定する手順:

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

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

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

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

         #{pageFlowScope.callingTaskflowParm}

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

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

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

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

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

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

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

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

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

2. パレットの「アクティビティ」ペインから、タスク・フロー・リターン・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- `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`(ターゲット・アクティビティの識別子)を変更するには、ダイアグラムの矢印のどちらかの端を新規のアクティビティにドラッグします。

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

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

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

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

2. 「パレット」で「ワイルドカード制御フロー・ルール」を選択し、ダイアグラムにドロップします。

3. 「パレット」で「制御フロー・ケース」を選択します。

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

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

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

6. オプションとして、「プロパティ」ウィンドウでは、「動作」セクションを開いて、値が`true`になる必要がある、「If」フィールド内のEL式を記述した後に、「アクティビティID(至)」によって識別されたアクティビティに制御を渡すことができます。

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

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

例5-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名と一致します。メタデータに(後方ワイルドカードではなく)単一のワイルドカード文字を指定すると、ダイアグラムで、制御フローが自動的にワイルドカード制御フロー・ルール・アクティビティに変換されます。詳細は、第5.2.6.2項「ワイルドカード制御フロー・ルールの追加」を参照してください。

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

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

  例5-3では、outcomeが`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`要素によって識別されたアクティビティに制御フローを渡します。

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

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

1. `from-activity-id`、`from-action`、`from-outcome`: 最初に、3つの要素すべての一致を検索します。

2. `from-activity-id`、`from-outcome`: 3つすべての要素で一致がない場合は、これらの要素を検索します。

3. `from-activity-id`: 前述の組合せの検索で一致がなかった場合は、この要素のみで検索します。

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

図5-6に示すタスク・フローの例では、アクション結果の値(第5.2.9項「UIコンポーネントを使用したアクション結果の指定方法」を参照)に基づき、viewDに達するための2つの異なるパス(viewAからviewBを経由してviewD、またはviewAからviewCを経由してviewDのいずれか)を受け取ることができます。

図5-6 「戻る」ナビゲーションを使用したタスク・フロー

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

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

- 5.2.3項「task-flow-definition.xmlファイルに関する必知事項」

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

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

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

ナビゲーションのドラッグ動作を使用することで、いずれかのMAF AMXページから別のページへのナビゲーションを有効化できます。詳細は、第6.3.26項「ドラッグ・ナビゲーションの有効化」を参照してください。

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

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

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

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

- リスト・アイテム

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

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

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

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

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

タスク・フローの(アイコンではなく)名前をクリックすると、図5-7に示す「プロパティの編集」ダイアログが表示されます。

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

表5-5は、「プロパティ」ウィンドウの「編集」オプションを使用できるMAF AMX属性を示しています。

表5-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:horizontalBarChart`
`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:horizontalBarChart`
`viewportChangeListener` | `dvtm:lineChart`

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

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

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

    <amx:commandButton action="goHome"/>

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

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

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

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

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

   - `application`

   - `view`

   - `pageFlow`

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

2. [Tab]キーを押して「名前」フィールドから「クラス」名前フィールドに進みます(図5-9を参照)。クラス名を入力するか、「参照」ボタンをクリックして選択します。

   図5-9 マネージドBeanの名前およびクラスの設定

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

   例5-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. 選択したプロパティ値を、次の`commandButton`などの適切なEL式で編集します。

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

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

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

       package mobile;

       public class MyBean {
          public MyBean() {
          }

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

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

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

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

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

- フェード・イン

- 左からスライド・イン

- 右からスライド・イン

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

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

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

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

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

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

- 左からフリップ

- 右からフリップ

- 始点からフリップ

- 終点からフリップ

- なし

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

注意: Androidプラットフォームではフリップを有効にできません。

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

例5-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>

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

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

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

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

MAF AMXのタスク・フローには、バインドとバインドなしの2種類があります。

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

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

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

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

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

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

注意: バインドなしタスク・フローに対して追加ソース・ファイルを作成できますが、MAF AMXアプリケーション機能では、実行中のすべてのソース・ファイルが`adfc-mobile-config.xml`ファイルにまとめられます。

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

図5-10 バインドなしモバイル・タスク・フローのダイアグラム

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

- タスク・フローを別のタスク・フローからコールする必要がない。

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

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

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

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

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

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

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

図5-11 バインド・モバイル・タスク・フローのダイアグラム

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

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

- これは、同一または別のMAF AMXアプリケーション機能内で再利用可能です。

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

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

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

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

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

- 指定可能: バインド・タスク・フローにアクセスするには、バインド・タスク・フローのXMLソース・ファイルに記述されている一意の識別子とXMLソース・ファイルのファイル名を指定します。

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

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

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

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

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

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

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

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

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

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

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

-     #{bindings.bindingId.inputValue}

-     #{CustomerBean.zipCode}

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

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

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

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

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

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

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

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

    #{pageFlowScope.parmName}

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

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

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

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

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

始める前に:

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

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

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

図5-13 コール元のタスク・フロー

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

1. エンド・ユーザーが実行時にパラメータとしてバインド・タスク・フローに渡される値を入力する入力コンポーネントを含むMAF AMXページを開きます。コール元のタスク・フローにあるビュー・アクティビティによって、開いたMAF AMXページを参照する必要があることに注意してください。

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

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

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

4. コールするタスク・フローをプロジェクト・エクスプローラでダブルクリックして開き、ビューを「概要」タブに切り替え、「パラメータ」ナビゲーション・タブを選択します。

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

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

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

6. プロジェクト・エクスプローラで、コール先のバインド・タスク・フローを起動するタスク・フロー・コール・アクティビティを含むコール元タスク・フローをダブルクリックします。

7. プロジェクト・エクスプローラで、コール先のバインド・タスク・フローをドラッグし、コール元のタスク・フローのダイアグラム内のタスク・フロー・コール・アクティビティの上にドロップします。これにより、バインド・タスク・フローに対するタスク・フローの参照が自動的に作成されます。図5-14に示すように、タスク・フローの参照には次のものが含まれています。

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

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

   図5-14 タスク・フローの参照

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

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

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

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

完了すると、OEPEでは、選択した値に基づいて、コール元のタスク・フローとコール先のタスク・フローのソース・ファイルに対しエントリを記述します。

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

例5-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>

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

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

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

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

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

始める前に:

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

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

1. コールするタスク・フローをプロジェクト・エクスプローラでダブルクリックして開き、ビューを「概要」タブに切り替え、「パラメータ」ナビゲーション・タブを選択します。

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

   - 「名前」フィールドで、戻り値を識別する名前(たとえば`returnValue1`)を入力します。

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

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

3. プロジェクト・エクスプローラで、コール元のタスク・フローをダブルクリックします。

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

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

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

   - 戻り値を格納する場所を指定するEL式で表した値(たとえば`#{pageFlowScope.ReturnValueDefinition}`)。手順2で戻り値の定義を定義した場合は、「値」フィールドに入力した値と一致する必要があります。

完了すると、OEPEでは、構成したコール元のタスク・フローのソース・ファイルに対しエントリを記述します。

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

例5-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>

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

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

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

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

## 5.3 ビューの作成

MAFアプリケーションを作成すると、Oracle Enterprise Pack for Eclipseは、アセンブリ・プロジェクトおよびアプリケーション・プロジェクトと連動するビュー・プロジェクトを自動的に作成します。追加のビュー・プロジェクトを作成することもできます。次のセクションでは、ビューの作成および操作に関する重要な側面について説明します。

- MAF AMXページ構造の理解(第5.3.1.1項「MAF AMXページ構造の解釈」を参照)

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

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

- データ・コントロールのビューへの追加(第5.3.2.3項「データ・コントロールのビューへの追加」を参照)

### 5.3.1 MAF AMXページの操作方法

MAF AMXページはXMLファイルによって表されます。

#### 5.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>

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

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

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

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

MAFでは、MAF AMXページを作成する別の方法を2通り提供しています。

- 「新」メニューから(「ファイル」→「新」→「MAFページ」)

- ビュー・プロジェクトの「内容の表示」フォルダを右クリックして、「新」→「MAFページ」を選択

始める前に:

MAF AMXページを作成するには、MAFアプリケーションにビュー・プロジェクト・フォルダ(第3章「モバイル・アプリケーション開発のスタート・ガイド」を参照)が含まれている必要があります。ビュー・プロジェクトの「内容の表示」フォルダ以外に作成したファイルは、デプロイされたアプリケーションに含められません。

「ファイル」メニューからMAF AMXページを作成するには:

1. OEPEのトップレベル・メニューから「ファイル」をクリックし、「新」→「MAFページ」を選択します。

2. 「新規MAFページ」ダイアログで、AMXページを作成するMAFアプリケーションの「ビュー」フォルダを参照します。(1つのアプリケーションに複数のビュー・プロジェクトが存在する場合があることに注意してください。)

3. 新しいファイルの名前と必要に応じて場所を入力(またはデフォルトをそのまま使用)します。

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

   - ヘッダー

   - プライマリ

   - セカンダリ

   - フッター

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

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

   図5-15 新しいMAFページ作成ダイアログ

   注意: MAFでは、ページのファセットの選択を保持し、後に続く「新規MAF AMXページ」ダイアログが開かれるたびに適用します。

5. 「新規MAF AMXページ」ダイアログの「終了」をクリックします。

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

1. ダイアグラマでタスク・フロー・ファイルを開きます(第5.2.1項「タスク・フローの作成方法」および第5.2.4項「MAFタスク・フロー・ダイアグラマに関する必知事項」を参照)

2. タスク・フローのビュー・コンポーネントをダブルクリックして図5-15に示す「MAF AMXページの作成」ダイアログを開き、新しいファイルの名前と必要に応じて場所を入力します。「OK」をクリックします。

#### 5.3.1.3 MAF AMXページの作成時の処理

「MAF AMXページの作成」ダイアログを使用してMAF AMXページを作成すると、Oracle Enterprise Pack for Eclipseは物理ファイルを作成し、これをビュー・コントローラ・プロジェクトの`「内容の表示」`ディレクトリに追加します。

図5-16に示すプロジェクト・エクスプローラでは、`「Webコンテンツ」`ノードに、新しく作成された`department.amx`というMAF AMXファイルが含まれています。

図5-16 プロジェクト・エクスプローラのMAF AMXファイル

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

すべてのファセットを選択してページを作成した場合、次の点に注意してください。

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

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

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

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

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

図5-17 ファセットが選択されていないMAF AMXページの作成

図5-18 ファセットがないMAF AMXページ

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

注意: この機能は、OEPE実行時のみに利用でき、手動で実行する必要があります。設計時の機能としては利用できません。

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

MAF AMXでは、Oracle Enterprise Pack for Eclipseのページ定義に移動機能をサポートしており、バインディング情報を迅速に見つけて編集できるようにするポップアップ・メニューを使用することで、MAF AMXのページ定義にナビゲートできます(図5-19および第5.3.2.3.5項「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照)。

図5-19 「ページ定義」エディタ

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

- ソース・エディタ(図5-20)

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

- アプリケーション・ウィンドウ(図5-21に示すとおり、ページを右クリックして「次で開く」→「その他」を選択し、次に「ページ定義エディタ」を選択)

  図5-21 アプリケーション・ウィンドウからページ定義への移動

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

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

MAF AMXフラグメント・ファイル( `.amxf`)をMAF AMXページまたは別のフラグメント・ファイルにドラッグ・アンド・ドロップすることで、フラグメントへの参照を作成し、その属性を定義できます。フラグメント・ファイルはプロジェクト内にあり、プロジェクト・エクスプローラ・ウィンドウから、「ソース」エディタで開いているターゲット・ソース・ファイルにドロップできます。

始める前に:

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

ビュー・プロジェクトに、MAF AMXページまたはMAF AMXページのタスク・フロー(ここからページを作成します)が含まれていない場合、タスク・フロー・ダイアグラムのビュー・アイコンをダブルクリックして「MAF AMXページの作成」ダイアログを開くことができます(第5.3.1.2項「MAF AMXページの作成」を参照)。

「ファイル」メニューからフラグメントを作成するには:

1. Oracle Enterprise Pack for Eclipseのトップレベル・メニューから「ファイル」をクリックし、「新」→「MAFページ」を選択します。

2. 「新規MAFページ」ダイアログで、「ページ・フラグメント」ボタンをクリックして選択します。「内容の表示」ノードを開き、必要に応じてわかりやすいファイル名を入力してから、「終了」をクリックします(図5-22を参照)。ページ・フラグメントではファセットは選択できないことに注意してください。

   図5-22 新しいフラグメントの作成

3. ダイアログが完了すると、新しく作成されたファイルがOracle Enterprise Pack for Eclipseの「ソース」エディタで開かれます(図5-23を参照)。

   図5-23 フラグメント・ファイル

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

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

例5-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>

フラグメントは次のものをサポートしています。

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

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

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

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

FragmentDemoおよびCompGalleryというMAFサンプル・アプリケーションでは、フラグメントの作成および使用方法を示します。これらのサンプル・アプリケーションは、「ファイル」→「新」→「MAFサンプル」から利用できます。

### 5.3.2 MAF AMXページへのUIコンポーネントおよびデータ・コントロールの追加方法

MAF AMXページを作成すると、ページへのMAF AMX UIコンポーネントおよびデータ・コントロールの追加を開始できます。

#### 5.3.2.1 UIコンポーネントの追加

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

「パレット」には、MAF AMXコンポーネントがカテゴリ別に表示されます。

- 制御フロー

- アクティビティ

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

「パレット」には、MAF AMXデータ視覚化コンポーネントもカテゴリ別に表示されます。

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

  - チャート

  - ゲージ

  - マップ

  - その他

- 共有子タグ

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

  - チャート

  - ゲージ

  - NBox

  - テーマ・マップ

  - 時系列

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

始める前に:

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

「MAF AMXページの作成」ダイアログを起動するには、第5.3.1.2項「MAF AMXページの作成」で説明するように、タスク・フロー・ダイアグラムでビュー・アイコンをダブルクリックするか、「新」→「MAFページ」を選択します。

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

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

2. 「パレット」の「タグ」パネルで、「MAF AMX」を選択します。

   ヒント: 「パレット」が(閉じられているために)表示されていない場合、メインOEPEメニューから「ウィンドウ」→「新規ウィンドウ」を選択します。これにより、「パレット」を表示するOEPEの新しいインスタンスが作成されます。デフォルトでは、「パレット」はOEPEの左下角に表示されます。

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

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

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

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

注意: この機能は、OEPE実行時のみに利用でき、手動で実行する必要があります。設計時の機能としては利用できません。

#### 5.3.2.3 データ・コントロールのビューへの追加

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

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

方法によっては、様々なタイプのデータ・コントロールをMAF AMXページの「構造」ウィンドウに挿入できます。図5-24に、「パレット」の「タグ」ペインで利用できるデータ・コントロールを示します。

図5-24 「パレット」のHTMLコントロール・タグ

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

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

データ・コントロールの属性および操作は、次の1つ以上のMAF AMX UIコンポーネントとしてドロップできます(第6.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`

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

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

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

日付

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

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

単一選択

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

- MAFボタンを1つ選択

- MAF選択肢を1つ選択

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

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

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

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

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

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

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

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

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

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

テキスト

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

- MAF入力テキスト

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

- MAF出力テキスト

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

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

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

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

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

操作

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

- MAFボタン

- MAFリンク

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

図5-30 操作のポップアップ・メニュー

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

メソッド

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

- MAFボタン

- MAFリンク

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

図5-31 「プロパティ」ペインの「一般」タブでのメソッド・コールの編集

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

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

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

    <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}"/>

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

次にMAFパラメータ・フォームでサポートされるコントロールのタイプを示します。

- MAF入力日

- ラベル付MAF入力日

- MAF入力テキスト

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

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

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

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

複数選択

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

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

- MAF選択肢を複数選択

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

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

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

フォーム

このカテゴリは、MAF AMXパネル・フォーム・コントロールを作成するために使用されます。「パレット」の「HTML」ペインから「フォーム」を選択すると、OEPEには「新規フォーム」ダイアログが表示されます(図5-35を参照)。

図5-35 「新規フォーム」ダイアログ

メソッド(`get`または`post`)を選択し、目的のアクションを入力します。OEPEでは基本HTMLフォーム・タグがソースに追加され、「プロパティ」ペインから「値」フィールドを編集できます(図5-36を参照)。

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

イテレータ

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

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

「データ・コントロールのコンテンツでイテレータの生成」を選択すると、コンテンツが含まれるファイルを選択するための「参照」リンクが表示されます。

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

    <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>

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

次にMAFイテレータでサポートされるコントロールを示します。

- MAF入力テキスト

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

- MAF出力テキスト

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

リスト・ビュー

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

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

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

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

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

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

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

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

コンポーネント | データ・バインディング
--- | ---
ボタン |
    <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>

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

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

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

図5-39 ソース・ビューのDataBindings.cpxファイル

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

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

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

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

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

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

図5-40に、ドラッグ・アンド・ドロップ時に生成される`PageDef`ファイル例を示します。

図5-40 PageDefファイル

ページ定義ファイルでは、実行時にMAF AMX UIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。バインディングを持つすべてのMAF AMXページには、そのページで使用するバインディング・オブジェクトの定義が含まれる、対応するページ定義ファイルが必要です。ページ定義ファイルによって、すべてのバインディングに設計時アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。

「データ・コントロール」ウィンドウを初めて使用してページにコンポーネントを追加する際には、OEPEによって、そのページのページ定義ファイルが自動的に作成され、コンポーネントが参照する各バインディング・オブジェクトの定義が自動的に追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、OEPEによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。

デフォルトでは、ページ定義ファイルは、「ViewController」プロジェクトのApplication Sourcesノードにある`mobile.PageDefs`パッケージに含まれています。対応するMAF AMXページがデフォルト以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のペッケージに保存されます。

ページ定義ファイルを開く方法の詳細は、第5.3.1.5項「ページ定義ファイルへのアクセス」を参照してください。ページ定義ファイルを概要エディタで開くと、次のタブを使用してMAF AMXページのバインディング、コンテキスト・イベントおよびパラメータを表示し、構成できます。

- バインディングと実行可能ファイル: このタブでは、バインディング、実行可能ファイルおよび関連付けられたデータ・コントロールの3つの異なるタイプのオブジェクトが表示されます。バインディングと実行可能ファイルは、選択しないかぎりデータ・コントロールには表示されないことに注意してください。

  デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、OEPEではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。

- コンテキスト・イベント: MAF AMXアプリケーション機能内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。

- パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。静的値または静的値を割り当てるEL式を使用して、ページ定義ファイルのパラメータ値を定義できます。

概要エディタの項目(または「構造」ウィンドウの関連付けられたノード)をクリックすると、「プロパティ」ウィンドウを使用してその項目の属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集できます。

##### 5.3.2.3.6 MAF AMXエディタの「バインディング」タブの使用方法

OEPEの「バインディング」タブ(図5-41を参照)は、MAF AMXエディタにあります。ここには、特定のMAF AMXページに対して定義されたデータ・バインディングが表示されます。バインディングを選択すると、基盤となるデータ・コントロールへのリレーションシップが示され、`PageDef`ファイルへのリンクが提供されます。

図5-41 「バインディング」タブ

##### 5.3.2.3.7 使用されないバインディングの削除に関する必知事項

「構造」ウィンドウからMAF AMXコンポーネントを削除または切り取ると、使用されないバインディングは自動的にページから削除されます。

注意: 「ソース」エディタからコンポーネントを削除した場合には、バインディングは削除されません。

図5-42は、バインディングを参照するリスト・ビュー・コンポーネントの削除を示しています。削除すると、関連するバインディング・エントリが、対応する`PageDef.xml`ファイルから自動的に削除されます。

図5-42 バインドされたコンポーネントのページからの削除

図5-43では、ページからリスト・ビュー・コンポーネントを切り取ることにより、これを削除しています。

図5-43 バインドされたコンポーネントのページからの切取り

「切取り」をクリックすると、図5-44に示すような「ADFバインディングの削除の確認」ダイアログが表示され、該当するバインディングを削除するかどうかを選択するよう求められます。

図5-44 「ADFバインディングの削除の確認」ダイアログ

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

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

MAFは、次のことを行う識別子監査ユーティリティを提供しています。

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

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

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

図5-45および図5-46は、「ソース」エディタと「構造」ペインの識別子エラー・レポートをそれぞれ示しています。

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

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

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

図5-47および図5-48は、「ソース」エディタの「ポップアップ表示動作」の「ポップアップID」と「位置合せID」のエラー・レポートをそれぞれ示しています。

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

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

### 5.3.3 サーバー通信に関する必知事項

MAFによって使用されるセキュリティ・アーキテクチャでは、MAF AMXページをホストしているブラウザが、リソース取得のためにセキュア・サーバーへの接続に必要なセキュリティ情報にアクセスしないことが保証されます。これはMAF AMXページから行われるAJAXコールに直接影響し、これらのコールはサポートされていないため、MAF AMX UIコンポーネント内からのJavaScriptの使用は制限されます。サーバーとの通信は、埋込みJavaコード層から行う必要があります。