ヘッダーをスキップ
Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11gリリース1 (11.1.1.7.0)
B52028-05
  目次へ移動
目次

前
 
次
 

15 タスク・フロー・アクティビティの使用

この章では、ADFタスク・フローのアクティビティの使用方法について説明します。この章では、コンポーネント・パレットおよびそのプロパティに表示される各タスク・フロー・アクティビティの詳細を説明します。

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

15.1 アクティビティ・タイプの概要

アクティビティとは、タスク・フローの実行時に行われる作業を意味しています。タスク・フローの概要エディタにノードとして表示されます。ほとんどのアクティビティはバインド・タスク・フローと無制限タスク・フローの両方に追加できますが、アクティビティ・タイプによってはバインド・タスク・フローにのみ追加できるものもあります。

図15-1のバインド・タスク・フローには、アプリケーションをチェックアウトするために実行する次のアクティビティがあります。

  1. ユーザーがログイン前に選択した可能性のあるアイテムを、ログイン後に選択したアイテムと同期化するメソッドのコール

  2. ユーザーが現在選択しているアイテムを表示するページ(ビュー・アクティビティ)と注文をまとめた別のページ

  3. コール元の無制限タスク・フロー(図15-1を参照)に制御を戻すアクティビティ

図15-1 Fusion Order Demoアプリケーションのチェックアウト・バインド・タスク・フロー

チェックアウト・バインド・タスク・フロー。

タスク・フローは、アクティビティ、およびアクティビティ間の遷移を定義する制御フロー・ケースで構成されます。表15-1に、タスク・フローに追加できるアクティビティのタイプと制御フローを示します。

表15-1 タスク・フロー・アクティビティと制御フロー

アイコン コンポーネント名 説明
メソッド・コール・アクティビティ。

メソッド・コール

メソッド(通常、マネージドBeanのメソッド)を起動します。メソッド・コール・アクティビティは、制御フロー・ルールに基づいてアプリケーション・ロジックを起動するために、アプリケーションの制御フロー内のどこにでも配置できます。詳細は、15.5項「メソッド・コール・アクティビティの使用」を参照してください。

ワイルドカード制御フロー・ルール。


親アクション

バインド・タスク・フローで親ビュー・アクティビティに渡される結果を生成できるようにします。詳細は、15.9項「親アクション・アクティビティの使用」を参照してください。

ルーター・アクティビティ。

ルーター

EL式を評価し、式の値に基づいて結果を戻します。たとえば、クレジット確認タスク・フローのルーターは、前のメソッド・コールの戻り値を評価し、様々なケースに基づいて成功、失敗または再試行の結果を生成します。その後、このような結果を使用して、タスク・フローの他のアクティビティに制御をルーティングします。詳細は、15.4項「ルーター・アクティビティの使用」を参照してください。

セーブポイント・リストア・アクティビティ。

セーブポイント・リストア

後で使用するための保存の機能をサポートするアプリケーションで、アプリケーションの状態やデータなど、以前の永続保存ポイントをリストアします。詳細は、18.9項「タスク・フローのセーブポイントの使用」を参照してください。

タスク・フロー・コール・アクティビティ。

タスク・フロー・コール

無制限タスク・フローまたは別のバインド・タスク・フローからバインド・タスク・フローをコールします。詳細は、15.6項「タスク・フロー・コール・アクティビティの使用」を参照してください。

タスク・フロー・リターン・アクティビティ。


タスク・フロー・リターン

バインド・タスク・フローが完了し、コール元に制御が戻されるタイミングを指定します。(バインド・タスク・フローでのみ利用可能)。詳細は、15.7項「タスク・フロー・リターン・アクティビティの使用」を参照してください。

URLビュー・アクティビティ。

URLビュー

ADFリージョンのコンテキスト内からでも、ルート・ビュー・ポート(ブラウザ・ページなど)をURLにアドレス可能なリソースにリダイレクトします。詳細は、15.3項「URLビュー・アクティビティの使用」を参照してください。

ビュー・アクティビティ。

ビュー

JSFページやページ・フラグメントを表示します。同じページやページ・フラグメントを、複数のビュー・アクティビティで表すことができます。詳細は、15.2項「ビュー・アクティビティの使用」を参照してください。ページおよびページ・フラグメントの詳細は、20.3項「Webページの作成」を参照してください。

制御フロー・ケース。


制御フロー・ケース

アプリケーション内で、あるアクティビティから次のアクティビティに制御を渡す方法を指定します。詳細は、14.1.3項「制御フロー」を参照してください。

ワイルドカード制御フロー・ルール。


ワイルドカード制御フロー・ルール

IDがワイルドカード式と一致するアクティビティからの制御フロー・ケースを表します。たとえば、foo*などの後方ワイルドカードのある制御ケースfrom-activity-idを表すことができます。詳細は、14.3.4項「ワイルドカード制御フロー・ルールの追加方法」を参照してください。


表15-2に、タスク・フローに追加できる注釈(メモおよび添付ファイル)を示します。

表15-2 タスク・フロー・ダイアグラムの注釈

アイコン アイコン名 説明

ノート。


ノート

タスク・フロー・ダイアグラムに注釈を追加します。ダイアグラムでテキストを追加または編集するノートを選択します。

ノートの添付。


ノートの添付

ダイアグラムで既存のノートをアクティビティまたは制御フロー・ケースに添付します。


15.2 ビュー・アクティビティの使用

タスク・フロー・アクティビティの第1のタイプはビューで、これはJSFページまたはページ・フラグメントを表示します。ページ・フラグメントとは、別のJSFページのコンテンツとしてレンダリングされるJSF JSPドキュメントです。ページ・フラグメントは通常、バインド・タスク・フローで使用されます。バインド・タスク・フローはリージョンとしてページに追加できます。詳細は、17.2項「ADFリージョンの作成」を参照してください。

図15-2に、Fusion Order Demoアプリケーション内のhomeビュー・アクティビティを示します。

図15-2 ビュー・アクティビティ

タスク・フロー内のビュー・アクティビティ。

ヒント:

ビュー・アクティビティの左上にある+アイコンをクリックして、参照したページまたはページ・フラグメントのサムネイル・プレビューを表示します。


ビュー・アクティビティは、メタデータで物理的なJSFページまたはページ・フラグメントに関連付けられます。ビュー・アクティビティはid属性によって識別されます。ページまたはページ・フラグメント名は、タスク・フロー・メタデータ内の<page>要素で識別されます。

<view id="home">
   <page>/home.jspx</page>
 </view>

ビュー・アクティビティのIDとページ名は同じである必要はありません。

次に示すように、ページ・フラグメントのファイル拡張子は.jsffです。

<view id="Home">
   <page>WEB-INF/Home.jsff</page>
 </view>

15.2.1 ビュー・アクティビティの追加

ビュー・アクティビティ追加の手順は、タスク・フロー・ダイアグラムへのアクティビティの追加の手順とほぼ同じです。詳細は、14.3.1項「ADFタスク・フローへのアクティビティの追加方法」を参照してください。ビュー・アクティビティの追加後、アクティビティをダブルクリックして「JSF JSPページの作成」ウィザードを表示し、そこでページまたはページ・フラグメントを作成できます。また、このウィザードを使用してページまたはページ・フラグメントの特性を定義します。完成したページまたはページ・フラグメントは、自動的にビュー・アクティビティに関連付けられます。

既存のページまたはページ・フラグメントをアプリケーション・ナビゲータからドラッグして、ビュー・アクティビティの最上部にドロップすることもできます。

ページまたはページ・フラグメントをダイアグラムの他の場所にドラッグすると、そのページまたはページ・フラグメントに関連付けられた新しいビュー・アクティビティが自動的に作成されます。作成時には、ページまたはページ・フラグメントの名前に基づいて、そのビュー・アクティビティのデフォルトのidが自動的に生成されます(例: Home)。

15.2.2 ビュー・アクティビティ間の遷移

遷移とは、あるビュー・アクティビティの制御が別なビュー・アクティビティに移ることを意味します。たとえば、ページ上のボタンやリンクなどのUIコンポーネントを選択することで、実行時に制御フローを起動できます。UIコンポーネントのAction属性は、対応する制御フロー・ケースfrom-outcomeに設定して、次のタスク・フロー・アクティビティに導く必要があります。UIコンポーネントのAction属性の定数値または動的値のいずれかを使用して、あるビュー・アクティビティから別なアクティビティに移動できます。

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

    図15-3 「属性の編集」ダイアログ

    Action属性の「属性の編集」ダイアログ
  • 動的: コンポーネントのAction属性の値はマネージドBeanまたはメソッドにバインドされます。メソッド・バインディングの値により、実行される次の制御フロー・ケースが決定されます。

    たとえば、メソッドはページのユーザー入力を検証し、入力が有効な場合はある値を、入力が無効な場合は別の値を戻します。これらの異なるアクション値はそれぞれ別個のナビゲーション・ケースをトリガーし、アプリケーションは2つのターゲット・ページのいずれかに移動します。

データ・コントロール操作にバインドされるコンポーネントの詳細は、28.2項「メソッドを実行するためのコマンド・コンポーネントの作成」を参照してください。

15.2.2.1 ビュー・アクティビティへの遷移方法

開始する前に、ターゲット・ビュー・アクティビティと、コンポーネントの追加先JSFページがすでに存在している必要があります。コンポーネントのアクションは、ターゲット・アクティビティにつながる制御フロー・ケースのfrom-outcomeに基づいています。

ビュー・アクティビティに遷移するには:

  1. 次のいずれかの方法で、UIコンポーネントをJSFページに追加します。

    • JSFページを開きます。コンポーネント・パレットの「ADF Faces共通コンポーネント」リストで、ボタンやリンクなどのナビゲーションUIコンポーネントをJSFページにドラッグします。

    • JSFページを開きます。「データ・コントロール」パネルから、操作またはメソッドをJSFページにドラッグ・アンド・ドロップし、ポップアップ・メニューから「リッチ・コマンド・ボタン」または「リッチ・コマンド・リンク」を選択します。

  2. UIコンポーネントを選択して、「プロパティ・インスペクタ」を開きます。

  3. 「共通」ページでボタン・アクション・セクションを展開します。

  4. 「アクション」の隣のドロップダウン・メニューから、「編集」を選択します。

  5. 「アクション結果」を選択します。

  6. 「アクション結果」ドロップダウン・リストから値を選択します。

    リストには、ページに関連付けられているビュー・アクティビティに定義済のfrom-outcome制御フロー・ケースが含まれています。


    ヒント:

    UIコンポーネントのaction属性は、ナビゲーション・ケースをハードコードするリテラル文字列、または、引数なしでStringを戻すメソッドをポイントするメソッド・バインディング式のいずれかにバインドできます。その他のタイプのEL式にはバインドできません。


  7. 「OK」をクリックします。

15.2.2.2 アクティビティ間の遷移時の処理

例15-1は、バインド・タスク・フローまたは無制限タスク・フローのXMLソース・ファイルに定義された制御フロー・ケースの例です。

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

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

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

<af:commandButton text="Go" action="toOffices">

15.2.3 ビュー・アクティビティのブックマーク

無制限タスク・フロー内のビュー・アクティビティにのみ、ブックマークを使用できます。

ビュー・アクティビティに関連付けられたページにエンド・ユーザーがブックマークを付けると、そのビューのブラウザのアドレス・フィールドに表示されているURLがブックマークとして保存されます。ほとんどの場合、このURLはビューに関連付けられているページの再表示に使用できません。たとえば、URLにはMicrosoftのWindows OSの状態情報が含まれることがあり、それを使用してページを再表示することはできません。

ブックマークのURLには、ページ上の動的コンテンツを再現するための情報が含まれている必要があります。たとえば、エンド・ユーザーが顧客の連絡先情報を表示するページにブックマークを付ける場合、ブックマークのURLには、ページに加えてその顧客を識別する情報も必要です。これにより、ユーザーがブックマークを使用してそのページに戻ったときに、同じ顧客の連絡先情報を表示できるようになります。

ブラウザに表示されているページのURLをブックマークとして使用できることを確認するには、そのページに関連付けられているビュー・アクティビティがブックマーク可能であることを識別します。

実行時に、無制限タスク・フロー内のビュー・アクティビティがブックマーク可能として指定されているかどうかをViewBookmarkable()メソッドを使用して識別できます。メソッドはビュー・ポート・コンテキストとは離れて配置されています。

ビュー・アクティビティをブックマーク可能として指定すると、オプションで1つ以上のURLパラメータを指定できます。url-parameterの値はEL式です。EL式は、ブックマーク可能なURLが生成されたときにURLに含めるパラメータの取得元を指定します。また、ブックマーク可能なURLが参照解除されたときにURLから値を格納します。ブックマーク可能なビュー・アクティビティのURLを介してパラメータが渡されたときに変換および検証を実行するメソッドは、converterオプションで識別されます。

さらに、送信されたURLパラメータ値でアプリケーション・モデルが更新された後、およびビュー・アクティビティをレンダリングする前に起動されるメソッドをオプションで指定することもできます。このメソッドを使用して、URLパラメータのキー値に基づいて追加情報を取得できます。

ビュー・アクティビティをブックマーク可能として指定するかわりに、redirectオプションを指定できます。redirectによって、ADFコントローラはビュー・アクティビティ用に新規URLを作成します。ビュー・アクティビティの元のURLは使用されなくなります。詳細は、15.2.3.2項「HTTPリダイレクトの指定方法」を参照してください。

例15-3は、ブックマークを付けたビュー・アクティビティのURL構文を示しています。

例15-3 無制限タスク・フローのビュー・アクティビティのURL構文

<server root>/<app_context>/faces/<view activity id>?<param name>=<param value>&... 

ブックマークを付けたビュー・アクティビティのURL構文は、次のとおりです。

  • <server root>: サイト・レベルまたは管理レベルでカスタマイズして指定します(例: http://mycompany.com/internalApp)。

  • <app context>: Webアプリケーションのコンテキスト・ルートです(例: myapp)。コンテキスト・ルートはWebアプリケーションのベース・パスです。たとえば、<app_context>は、サーバー上のWEB-INFノードの物理的な場所にマップされます。

  • faces: Facesサーブレット・マッピングです。facesの値は、faces-config.xml構成ファイルを含むノードを指します。

  • <view activity id>: ブックマークを付けたビュー・アクティビティの識別子です(例: edit-customers.)。

  • <param name>: ブックマークを付けたビュー・アクティビティのURLパラメータの名前です(例: customer-id)。

  • <param value>: EL式から導出されたパラメータ値です(例: #{pageFlowScope.employee.id})。EL式の値は、文字列として表すことができる必要があります。

例15-4は、無制限タスク・フロー内のブックマーク可能なビュー・アクティビティ用のサンプルURLを示しています。

例15-4 ブックマーク可能なビュー・アクティビティのサンプルURL

http://mycompany.com/internalApp/MyApp/faces/edit-customers?customer-id=1234&...  

15.2.3.1 ブックマーク可能なビュー・アクティビティの作成方法

ブックマーク可能なビュー・アクティビティを作成するには、ビュー・アクティビティをブックマーク可能として指定し、ブックマークにURLパラメータを指定して、ブックマークが参照解除された後に実行されるメソッドを指定します。

ビュー・アクティビティをブックマーク可能として指定するには:

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

  2. 「プロパティ・インスペクタ」で、「ブックマーク」をクリックします。

  3. 「ブックマーク」ドロップダウン・リストで、「True」を選択します。

  4. 「URLパラメータ」セクションを展開して、ブックマークを付けるビュー・アクティビティのURLに含めるURLパラメータをオプションで追加します。

    • name: パラメータの名前。

    • value: 評価時にパラメータ値を指定する、設定可能なEL式(例: #{pageFlowScope.employeeID})。この値は文字列として表すことができる必要があります。

    • 「コンバータ」: (オプション)oracle.adf.controller.URLParameterConverterを実装するオブジェクトに対するEL式。

    「value」は、ブックマーク可能なURLが生成されたときにURLに含めるパラメータの取得元です。また、ブックマーク可能なURLが参照解除されたときにパラメータはここに格納されます。

    値に入力されたEL式からNULLが戻されると、そのパラメータはブックマークを付けたビュー・アクティビティのURLから削除されます。

    「name」および「value」を使用して、例15-4に示すように、ブックマーク・パラメータをビュー・アクティビティURLに追加します。

  5. 「コンバータ」フィールドには、各ブックマークのURLパラメータ値(#{pageFlowScope.employee.idConverter}など)に使用する値バインディングをオプションで入力できます。

    URLパラメータ・コンバータのgetAsObject()メソッドは、入力パラメータに単一文字列の値を取り、適切な型のオブジェクトを戻します。ADFコントローラでURLパラメータに対してコンバータ・メソッドが起動され、続いてパラメータ値がアプリケーションのモデル・オブジェクトに適用されます。同様に、コンバータのgetAsString()メソッドは、入力パラメータにオブジェクトを取り、URLで使用される文字列表現を戻します。

    JSFアプリケーションでは、送信ページのUIコンポーネントに指定されているコンバータおよびバリデータでデータ値が変換および検証されます。ブックマークURLを使用するFusion Webアプリケーションには、変換および検証を処理する送信ページがありません。そのため、各URLパラメータに使用するコンバータを指定するオプションが用意されています。

15.2.3.2 HTTPリダイレクトの指定方法

ビュー・アクティビティに指定されたredirectオプションは、ADFコントローラでビュー・アクティビティ・リクエストに対してHTTPリダイレクトを発行する必要があることを示します。リダイレクトされたリクエストによって、ビュー・アクティビティ用に新しいブラウザのURLが作成されます。ビューの元のURLは使用できなくなります。

指定すると、クライアントのGETリクエストによってリダイレクトが発生します。HTTP GETの場合、#{bindings} ELスコープは、ADFコントローラおよびADFモデル・レイヤーでページに新しいバインディング・コンテキストが設定されるまで無効です。そのため、リダイレクトされたビュー・アクティビティの入力パラメータはマップできません。

ビュー・アクティビティはブックマーク可能として識別するか、またはredirectオプションで識別しますが、両方で識別することはできません。


注意:

http://www.mycompany.org/x.htmlhttp://www.mycompany.org/y.htmlの内容をかわりに表示する場合、次のようなリフレッシュ方法は使用しないでください。

<META HTTP-EQUIV=REFRESH CONTENT="1; URL=http://www.example.org/bar">

この方法は「戻る」ボタンの動作に悪影響を及ぼすことがあります。エンド・ユーザーがブラウザの「戻る」ボタンをクリックすると再度リフレッシュが行われ、予想どおり元のページに戻るのではなく次のページに進みます。

この場合は、かわりにHTTPリダイレクトを使用してください。


ビュー・アクティビティにHTTPリダイレクトを指定するには:

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

  2. プロパティ・インスペクタで、「共通」をクリックします。

  3. 「リダイレクト」ドロップダウン・リストで、「True」を選択します。

15.2.3.3 ブックマーク可能としてのビューの指定時の処理

ビュー・アクティビティをブックマーク可能として指定すると、例15-5に示すように、ビュー・アクティビティのメタデータにbookmark要素が追加されます。bookmark要素には、URLパラメータと、ブックマークが参照解除された後に実行されるメソッドを指定するメタデータをオプションで含めることができます。

例15-5 ブックマーク可能なビュー・アクティビティのサンプル・メタデータ

<view id="employee-view">
  <page>/folderA/folderB/display-employee-info.jspx</page>    
     <bookmark>
        <url-parameter>
          <name>employee-id</name>
          <value>#{pageFlowScope.employee.id}</value>
          <converter>#{pageFlowScope.employee.validateId}</converter>
        </url-parameter>
       <method>#{pageFlowScope.employee.queryData}</method>
     </bookmark>
</view>

15.3 URLビュー・アクティビティの使用

URLビュー・アクティビティを使用すると、ADFリージョンのコンテキスト内からでも、ルート・ビュー・ポート(ブラウザ・ページなど)をURLにアドレス可能なリソースにリダイレクトできます。URLアドレス可能なリソースには次が含まれます。

リソースを表示するには、実行時の評価でそのリソースのURLが生成されるEL式を指定する必要があります。さらに、評価時にパラメータおよびパラメータ値としてURLに追加されるEL式を指定することもできます。

URLビュー・アクティビティでは、実行元のビュー・ポート(ルート・ビュー・ポートまたはADFリージョン)には関係なく、クライアントがリダイレクトされます。ビュー・アクティビティの<redirect>要素は、そのビュー・アクティビティがルート・ビュー・ポート内にある場合のみ使用されることを除けば、同様の方法で実行されます。<redirect>要素は、ADFリージョンのコンテキスト内では無視されます。詳細は、15.2.3.2項「HTTPリダイレクトの指定方法」を参照してください。

<redirect>要素ではなくURLビュー・アクティビティを使用した同じアプリケーション内の他の場所へのリダイレクトは、タスク・フロー・スタックがクリーンアップされるため、「戻る」ボタンでの移動と同様に処理されます。Webアプリケーション外部へのリダイレクトは、アプリケーション外部のサイトのURLを参照解除する場合のように処理されます。

15.3.1 タスク・フローへのURLビュー・アクティビティの追加方法

URLビュー・アクティビティをバインドまたは無制限タスク・フローに追加できます。

タスク・フローへのURLビュー・アクティビティの追加手順:

  1. コンポーネント・パレットの「ADFタスク・フロー」ページから、URLビュー・アクティビティをダイアグラムにドラッグします。

  2. タスク・フロー・ダイアグラムで、URLビュー・アクティビティを選択します。

  3. プロパティ・インスペクタの「一般」ページで、「アクティビティID」フィールドにURLビュー・アクティビティを識別するIDを入力します。

  4. 「URL」フィールドの横のボタンをクリックして、「式ビルダー」を起動し、実行時にURLのレンダリングを行うEL式を記述します。

    たとえば、図15-4は、Fusion Order Demoアプリケーションのmyorders-task-flow.xmlバインド・タスク・フロー内で、EL式(#{myOrdersBean.registerNav})を使用して実行時にURLを取得するURLアクティビティ(register)を示しています。

    図15-4 URLビュー・アクティビティ

    URLビュー・アクティビティ
  5. 「URLパラメータ」セクションを展開して、URLに含めるURLパラメータをオプションで追加します。

    • name: パラメータの名前。

    • value: 評価時にパラメータ値を生成するEL式。

    • 「コンバータ」: 評価時に、ブックマーク可能なビュー・アクティビティのURLを介してパラメータが渡されたときに変換および検証を実行するメソッドを指定する、設定可能なEL式。詳細は、30.3項「ADFセキュリティの有効化」を参照してください。

15.3.2 ポートレット内で使用するURLの作成

ポートレットのコンテキスト内で使用可能なタスク・フローのURLビュー・アクティビティで使用するURLを作成する場合、そのURLは次のいずれかをコールして作成します。

  • ControllerContext.getLocalViewActivityURL()

  • ControllerContext.getGlobalViewActivityURL()(ターゲットviewIdに渡す)

あるいは完全修飾された絶対URL、コンテキスト・パス相対URL、または現行のビューに対する相対URL。


注意:

ControllerContext.getLocalViewActivityURL()またはControllerContext.getGlobalViewActivityURL()メソッドをコールしてリダイレクトURLを作成する場合は、ExternalContext.redirect()をコールする前に、ExternalContext.encodeActionURL()をレスポンス付きでコールしないでください。

これは、これらのメソッドが必要なURLのエンコーディングをすでに組み込んでいるためです。


URLビュー・アクティビティがポートレットのタスク・フロー内で使用される場合、次の動作が発生します。

  • リダイレクトURLがポートレット・アプリケーション内の場所を参照していて、値がtrueに設定されたx_DirectLinkという名前のqueryStringパラメータを含まない場合、これを含むページ内のポートレットがこの新しいビューに移動します。

  • それ以外の場合はクライアント・リダイレクトが発行され、ユーザーはアプリケーション・ページまたは含むページからそのURLに移動します。

15.4 ルーター・アクティビティの使用

ルーター・アクティビティを使用して、EL式に指定するロジックに基づいて、アクティビティに対する制御を宣言的にルーティングできます。図15-5に示すように、ルーターは各種のアクティビティにつながる複数の制御フローに分岐するために使用することがあります。

図15-5 代替制御フロー・ケースのルーター

代替制御フロー・ケースのルーター。

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

たとえば、図15-5に示すように、welcomeUserRegistrationページ・フラグメントでユーザーが「Create a New Customer」ボタンまたは「Create a New Employee」ボタンのどちらをクリックしたかに基づいた制御フローを考えるとします。

ユーザー登録ページ・フラグメントの入力テキスト・フィールドに入力したユーザーが新規ユーザーかどうかを評価するルーター・ケースのいずれかに、EL式を追加できます。次に、予想されるoutcomeを指定します(例: newCustomer)。図15-5に示すように、式がtrueに評価されると、制御フロー・ケースfrom-outcome、つまりnewCustomerに基づいて、customer-registration-task-flowタスク・フロー・コール・アクティビティに制御が渡されます。


ベスト・プラクティス:

ルーティング条件をEL式で表すことができる場合は、ルーターを使用します。

ルーターを使用すると、それを含むタスク・フローの設計時により多くのことができるようになります。ルーター・アクティビティによって条件に関する詳細をタスク・フロー上に表示できるようになるため、ダイアグラムを参照する他のユーザーにとってさらに読みやすくなり、役に立ちます。

また、ルーター・アクティビティを使用すると、後でアプリケーションを変更しやすくなります。たとえば、ルーティング条件を後で変更または追加できます。


ルーター・アクティビティを使用して制御フローを定義するには:

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

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

  3. メイン・メニューから、「表示」「プロパティ・インスペクタ」を選択します。

  4. 「プロパティ・インスペクタ」の「共通」ページで、「id」を入力します。

    このIDは、メタデータ内のルーター・アクティビティを参照するために使用される識別子です(例: router1)。

  5. 「ケース」の横の「追加」アイコンをクリックします。

  6. 各ルーターのケースに値を指定します。

    ケースは、trueに評価された場合に結果を戻す条件です。各ケースに次の内容を入力する必要があります。

    • expression: trueまたはfalseに評価するEL式。

      式では、ビュー・アクティビティの入力テキスト・フィールドを参照できます。たとえば、フィールドの値が#{pageFlowScope.value}であるとします。この場合、式を#{pageFlowScope.value=='view2'}にして、ユーザーがフィールドにview2を入力した場合に、指定した結果が戻されるようにできます。

    • outcome: 対応する式がtrueに評価される場合に、ルーター・アクティビティから戻される値。

      タスク・フロー・ダイアグラムの一致する制御フロー・ケースまたはワイルドカード制御フロー・ルールについてそれぞれoutcomeを指定する必要があります。たとえば、各ケースのoutcomeについて、ダイアグラム内のルーター・アクティビティから導かれる制御フロー・ケース要素に指定された対応するfrom-outcomeがあることを確認できます。図15-5では、ケースの結果および制御フロー・ケース要素のfrom-outcomeの両方の値がnewCustomerです。これにより、制御フロー要素のターゲットであるnewCustomerアクティビティに制御フローが渡されるようになります。

  7. 「プロパティ・インスペクタ」で、default-outcomeと入力します。

    この結果は、ルーター・アクティビティのケースでtrueに評価されるものがない場合、またはケースが指定されていない場合に戻されます。

    例15-6では、toRegion3というデフォルトの結果を指定しています。制御フローは結果がto Region3のケースに移動します。ケースの評価結果がいずれもtrueでない場合、Router1がルーター・アクティビティから戻されます。

    例15-6 デフォルトの結果を定義するルーターのメタデータ

    <router id="Router1">      
          <case>
            <expression>#{binding.Region.InputValue='1'}</expression>
            <outcome>toRegion1</outcome>
          </case>
          <case>
            <expression>#{binding.Region.InputValue='2'}</expression>
            <outcome>toRegion2</outcome>
          </case>
          <case>
            <expression>#{binding.Region.InputValue='3'}</expression>
            <outcome>toRegion3</outcome>
          </case>
          <default-outcome>toRegion3</default-outcome>
    </router>
    

15.5 メソッド・コール・アクティビティの使用

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

図15-6に示すように、Fusion Order Demoアプリケーションでは、従業員登録バインド・タスク・フローでメソッド・コール・アクティビティが使用されています。このアクティビティでは、StoreServiceAMデータ・コントロールで公開されているuserRegistrationCreateメソッドがコールされます。

図15-6 employee-registration-task-flowのメソッド・コール・アクティビティ

Fusion Order Demoのメソッド・コール・アクティビティ。

制御フロー・ケースを指定してメソッドの終了後に制御を渡すメソッドに対して結果を設定できます。詳細は、14.1.3項「制御フロー」を参照してください。結果には次のいずれかを指定できます。

例15-7に示すように、メソッドのoutcomeとメソッドのresultは2つの別個の値です。<return-value>要素は、calculateSalesTaxメソッドのresultを配置する場所を指定します。<outcome>要素は、メソッドの終了後に使用する制御フロー・ケースを示します。

例15-7 return要素とoutcome要素の指定されたメソッド・コール・アクティビティのメタデータ

<method-call id="calculateSalesTax">
      <method>#{pageFlowScope.taxService.calculateSalesTax}</method>
      <return-value>#{pageFlowScope.result}</return-value>
      <outcome>
         <fixed-outcome>gotoError</fixed-outcome>
       </outcome>
 </method-call

ベスト・プラクティス:

タスク・フローでメソッド・コールを使用して、ページがレンダリングする前にメソッドを起動できます。あるいは、ページ定義でinvokeActionを使用できます。

アプリケーションによるページのレンダリング前にメソッドを実行する場合、通常、ページ定義ファイルでinvokeActionを使用するのではなく、タスク・フローでメソッド・コール・アクティビティを使用する方法が最適です。メソッドをメソッド・アクティビティとしてタスク・フローに追加することで、ページ間でのロジックの起動が簡単になります。これにより、タスク・フローの設計時により多くのことができるようになります。また、詳細をタスク・フロー上に表示できるため、ダイアグラムを参照する他のユーザーにとってさらに読みやすくなり、役に立ちます。

次のいずれかの理由から、メソッド・コールのかわりにinvokeActionを使用することがあります。

  • ページのライフサイクルの複数のフェーズでメソッドを実行する場合

  • ページおよびページ定義ファイルを再利用する予定で、メソッドをページと関連付ける場合

  • ADFコントローラを使用していない場合


15.5.1 メソッド・コール・アクティビティの追加方法

作業を始める前に、バインド・タスク・フローまたは無制限タスク・フローを作成しておく必要があります。詳細は、14.2項「タスク・フローの作成」を参照してください。コンポーネント・パレットからタスク・フロー・ダイアグラムにメソッド・コール・アクティビティをドラッグします。メソッド・コール・アクティビティは、「データ・コントロール」パネルからタスク・フロー・ダイアグラム内のメソッド・コール・アクティビティにデータ・コントロール操作を直接ドロップして、既存のメソッドに関連付けることができます。

たとえばFusion Order Demoアプリケーションでは、データ・コントロール・イテレータからsetCurrentRowWithKeyまたはsetCurrentRowWithKeyValues操作をダイアグラムにドラッグして、表内の現在行を表示または選択できます。


注意:

データ・コントロール・メソッドのパラメータは、ADFコントローラのメタデータ内ではなく、対応するページのページ定義に定義されます。詳細は、28.3項「コマンド・コンポーネントを使用したパラメータ値の設定」を参照してください。


メソッドおよび操作はタスク・フロー・ダイアグラムにも直接ドラッグできます。ダイアグラム上にドロップすると、新しいメソッド・コール・アクティビティが自動的に作成されます。メソッドにEL式およびその他のオプションを指定できます。


ヒント:

メソッド・コール・アクティビティが起動するメソッドを識別するには、タスク・フロー・ダイアグラム内で任意のアクティビティを右クリックし、「メソッドに移動」を選択します。JDeveloperはメソッド・コール・アクティビティが起動するメソッドに移動します。


タスク・フローへのメソッド・コール・アクティビティの追加手順:

  1. コンポーネント・パレットで、「ADFタスク・フロー」ページからタスク・フローのダイアグラムにメソッド・コール・アクティビティをドラッグします。

    メソッド・コール・アクティビティには、オプションでデフォルトのIDであるmethodCalln、およびメソッドのEL式がまだ指定されていないことを示す警告アイコンが表示されます。

    メソッド・コール・アクティビティの警告アイコン。

    警告アイコンの有効化の詳細は、14.3.1項「ADFタスク・フローへのアクティビティの追加方法」を参照してください。

  2. デフォルトのIDを変更する場合、タスク・フロー・ダイアグラムでメソッド・コール・アクティビティの下に表示されるテキストをクリックします。

    メソッド・コールの名前をaddItemToCartのように入力できます。

  3. タスク・フロー・ダイアグラムで、メソッド・コール・アクティビティを選択します。

  4. 「プロパティ・インスペクタ」の「一般」ページで、「メソッド」フィールドにメソッドのEL式を入力します。

    たとえば、#{bindings.addItemstoCart.execute}のようなELバインディング式を入力できます。


    注意:

    EL式のバインディング変数は、現在のバインディング・コンテナからのADFモデル・バインディングを示します。バインディング変数を指定するには、バインディング・コンテナ定義またはページ定義を指定する必要があります。詳細は、12.6項「ページ定義ファイルでの作業」を参照してください。


    図15-7に示す「プロパティの編集」ダイアログ・ボックスを使用して、次のメソッドのEL式を作成することもできます。

    1. プロパティ・インスペクタの「一般」ページで、「メソッド」フィールドの隣のドロップダウン・メニューから「式ビルダー」を選択します。

    2. 「式ビルダー」ダイアログで、「ADFバインディング」などのノードを展開して、メソッドを選択します。または、「ADFマネージドBean」ノードの下で、コールするメソッドを含むマネージドBeanに移動し、メソッドを選択します。

    3. 「式に挿入」をクリックします。

      「式ビルダー」ダイアログは図15-7のようになります。たとえば図15-7では、addItemToCartメソッドとshoppingCartBeanを組み合せて、「式ビルダー」の最上部に表示されるEL式を作成します。

      図15-7 「式ビルダー」ダイアログ内のメソッド用EL式

      「プロパティの編集」ダイアログで選択されたメソッド
    4. 「OK」をクリックします。


      ヒント:

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


  5. プロパティ・インスペクタの「一般」ページで、「結果」セクションに次のいずれかを指定します。

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

    • tostring(): 「True」を選択すると、メソッドから戻されたJavaオブジェクトに対してtoString()メソッドがコールされ、それに基づく結果が得られます。

15.5.2 メソッド・パラメータおよび戻り値の指定方法

メソッドのパラメータや戻り値を指定することができます。図15-8は、calculateSalesTaxというメソッドに唯一定義されているパラメータを示しています。「value」フィールドにはパラメータ値に評価されるEL式が示されています。

図15-8 プロパティ・インスペクタにおけるメソッド・パラメータ

「プロパティ・インスペクタ」におけるメソッド・パラメータ

メソッド・コール・アクティビティを既存のメソッドに関連付けてパラメータを作成していない場合は、各自パラメータを追加します。

メソッド・パラメータを追加するには:

  1. 15.5.1項の手順を実行して、タスク・フロー・ダイアグラムにメソッド・コール・アクティビティを追加します。

  2. タスク・フロー・ダイアグラムで、メソッド・コール・アクティビティを選択します。

  3. 「プロパティ・インスペクタ」で、「パラメータ」をクリックします。

  4. 「パラメータ」ページで、「パラメータ」セクションを展開します。

  5. プラスの「追加」アイコンをクリックします。

  6. 「class」フィールドに、パラメータのクラスを入力します(例: java.lang.Double)。

  7. 「value」フィールドに、パラメータの値が取得される場所を示すEL式を入力します(例: #{pageFlowScope.shoppingCart.totalPurchasePrice})。


    ヒント:

    「value」フィールドの横にあるアイコンをクリックして「式ビルダー」を選択すると、メソッド・パラメータを検索できます。


  8. return-valueフィールドに、メソッドの戻り値を格納する場所を示すEL式を入力します(例: #{pageFlowScope.Return})。

  9. 「OK」をクリックします。

  10. 前述の各手順を繰り返してさらにパラメータを追加します。

15.5.3 メソッド・コール・アクティビティ追加時の処理

メソッドのパラメータや戻り値の指定後、XMLソース・ファイルが更新されます。例15-8に、バインド・タスク・フローのXMLソース・ファイルでuserRegistrationCreateへのメソッド・コールがどのように記述されるかを示します。

例15-8 userRegistrationCreateメソッドのコール

<method-call id="userRegistrationCreate">
     <method>#{bindings.userRegistrationCreate.execute}</method>
     <outcome>
        <fixed-outcome>editBasicInfo</fixed-outcome>
     </outcome>    
<method-call>

15.6 タスク・フロー・コール・アクティビティの使用

タスク・フロー・コール・アクティビティを使用すると、無制限タスク・フローまたはバインド・タスク・フローのいずれかからバインド・タスク・フローをコールできます。タスク・フロー・コール・アクティビティによって、同じアプリケーション内または別のアプリケーション内にあるバインド・タスク・フローをコールできます。

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

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


ヒント:

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


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

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

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

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

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

  1. ダイアグラム・エディタでコール側のタスク・フローを開きます。

  2. コンポーネント・パレットの「ADFタスク・フロー」ページで、「タスク・フロー・コール」アクティビティをドラッグし、コール側のタスク・フローにドロップします。

  3. 次のいずれかの方法を使用して、コール先のタスク・フローを特定します。

    • タスク・フロー・ダイアグラムで、タスク・フロー・コール・アクティビティをダブルクリックします。

      「バインド・タスク・フローの作成」ダイアログが表示され、そこで新規バインド・タスク・フロー作成のオプションを指定できます。

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


      ヒント:

      バインド・タスク・フローをページまたはページ・フラグメントにドロップできます。バインド・タスク・フローが(ページ・フラグメントではなく)ページから構成されている場合、タスク・フローをドロップするページに実行リンクまたは実行ボタンのどちらのUIコンポーネントを追加するか選択できます。エンド・ユーザーは、ボタンまたはリンクをクリックしてタスク・フローをコールできます。ページがタスク・フローの既存のビュー・アクティビティに関連付けられている場合、このようにするとタスク・フロー・コール・アクティビティが同様に自動的に作成されます。

      たとえ両方のアプリケーションがアプリケーション・ナビゲータ内に表示されているとしても、アプリケーション・ナビゲータで、あるアプリケーションから別なアプリケーション内のタスク・フロー・ダイアグラムにバインド・タスク・フローをドロップすることはできません。さらに、あるプロジェクトのバインド・タスク・フローを、別なプロジェクトのタスク・フロー・ダイアグラムにドロップすることはできません。

      そのかわり、バインド・タスク・フローをADFライブラリにパッケージ化して、現在のアプリケーションまたはプロジェクトで再利用できます。これにより、ライブラリのインポート時に作成される「リソース・カタログ」ページまたは「コンポーネント・パレット」ページから、バインド・タスク・フローをドラッグできるようになります。詳細は、33.1.2項「リソース・パレットの使用」を参照してください。


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

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

      2. プロパティ・インスペクタの「一般」ページで、「タスク・フロー参照」ドロップダウン・リストから「static」を選択します。

      3. 「ドキュメント」フィールドに、コールするバインド・タスク・フローのソース・ファイル名を入力します。たとえば、called-task-flow-definition.xmlと入力します。

      4. 「ID」フィールドには、たとえばtargetTaskFlowなど、コール先のバインド・タスク・フローのXMLソース・ファイルに含まれているバインド・タスク・フローIDを入力します。

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

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

      2. プロパティ・インスペクタの「一般」ページで、「タスク・フロー参照」ドロップダウン・リストから「動的」を選択します。

      3. 「動的タスク・フロー参照」プロパティの右側に表示されているドロップダウン・メニューから、「式ビルダー」を選択します。

      4. 実行時に起動するバインド・タスク・フローのIDを識別するEL式を記述します。

      図15-9に、Fusion Order Demoアプリケーション内の無制限タスク・フローのcheckout-task-flowタスク・フロー・コール・アクティビティを示します。このタスク・フロー・コール・アクティビティは、checkout-task-flow.xmlファイル内のcheckout-task-flowを起動します。

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

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

15.6.2 タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール時の処理

JDeveloperはバインド・タスク・フローをコールするタスク・フローのソース・ファイルに、メタデータ・エントリを生成します。例15-9は、チェックアウト・バインド・タスク・フロー(checkout-task-flow.xml)を参照する、Fusion Order Demoアプリケーションのadfc-config.xmlの例です。実行時に、タスク・フロー・コール・アクティビティが、チェックアウト・バインド・タスク・フローをコールします。

例15-9 Fusion Order Demoアプリケーションのadfc-config.xmlファイルのタスク・フロー・コール・アクティビティ

<task-flow-call id="checkout-task-flow">
    <task-flow-reference>
      <document>/WEB-INF/checkout-task-flow.xml</document>
      <id>checkout-task-flow</id>
    </task-flow-reference>
  </task-flow-call>

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

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

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

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

入力パラメータをタスク・フロー・コール・アクティビティに指定するには:

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

  2. プロパティ・インスペクタの「パラメータ」セクションを展開し、「追加」アイコンをクリックしてパラメータ名を入力します。


    ヒント:

    バインド・タスク・フローをダイアグラムのタスク・フロー・コール・アクティビティにドロップするとnameフィールドが自動的に移入されます。


  3. パラメータの値を入力します(例: #{pageFlowScope.callingTaskflowParm})。

    この値は、コール元のタスク・フロー内でパラメータ値が取得される場所を指定します。

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

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

15.6.4 URLを使用したバインド・タスク・フローのコール方法

URLを使用して、別のWebアプリケーションにあるページ・フラグメント(.jsff)を使用しないバインド・タスク・フローをコールできます。タスク・フロー・コール・アクティビティを使用して、起動するバインド・タスク・フローをコールします。タスク・フロー・コール・アクティビティのremote-app-urlプロパティ(評価されるとURLを返す)のEL式を記述します。

remote-app-urlプロパティの値を記述するだけでなく、コールするバインド・タスク・フローを識別するタスク・フロー参照・プロパティの値も指定します。タスク・フロー参照およびremote-app-urlプロパティが実行時に組み合せられて、リモートWebアプリケーションで、コール先のバインド・タスク・フローのURLが生成されます。

リモートWebアプリケーションでは、コールするバインド・タスク・フローの「可視性」プロパティを設定し、コール側のタスク・フローでタスク・フロー・コール・アクティビティから生成されたURLを受信すると、起動するようにしておく必要もあります。

JSFポートレットは同じWebアプリケーションからすべてのコンテンツを提供する点に注意してください。したがって、JSFポートレットでWebアプリケーションを使用する場合は、WebアプリケーションがURLを使用してリモート・タスク・フローを起動するような設定は行わないでください。

URLを使用してバインド・タスク・フローをコールする手順:

  1. リモートWebアプリケーションでのバインド・タスク・フロー起動用に設定するWebアプリケーション内のタスク・フローを開きます。

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

  3. プロパティ・インスペクタで「一般」セクションを展開し、プロパティ値を記述して、バインド・タスク・フローを起動します。

    詳細は、15.6.1項「タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール方法」を参照してください。

  4. 「リモート・アプリケーションのURL」プロパティについては、「式ビルダー」を使用して、評価時にリモートWebアプリケーションのURL作成に必要な部分を含む文字列を返すEL式を記述します。

    たとえば次のEL式は、URLの作成に必要な部分を含む文字列を返すマネージドBeanを起動します。

    #{myOrdersBean.createOrder}

  5. ステップ3で値を指定したバインド・バスク・フローを開きます。


    注意:

    指定するバインド・タスク・フローは、ページ・フラグメント (.jsff)を使用できません。


  6. 「構造」ウィンドウで、バインド・タスク・フロー(タスク・フロー定義)のノードを右クリックし、「プロパティに移動」を選択します。

  7. プロパティ・インスペクタで「一般」カテゴリを展開し、次のプロパティ値を設定します。

    • URL起動: URLによるバインド・タスク・フローの起動を許可する場合は、ドロップダウン・リストからurl-invoke-allowedを選択します。URLによるバインド・タスク・フローの起動を許可しない場合は、url-invoke-disallowedを選択します。この値を選択しておくと、URLがバインド・タスク・フローを起動しようとすると、HTTP 403のステータス・コードが返されます。デフォルト値(calculated)では、バインド・タスク・フローがイニシャライザを指定しておらず、ビュー・アクティビティがデフォルト・アクティビティである場合に、URLによるバインド・タスク・フローの起動を許可します。バインド・タスク・フローがこの条件を満たしていない場合は、HTTP 403のステータス・コードが返されます。url-invoke-allowedまたはurl-invoke-disallowedを選択すると、デフォルト動作がオーバーライドされます。

    • ライブラリ内部:ADFライブラリJAR内にパッケージした場合に、内部のバインド・タスク・フローにしたい場合は、trueに設定します。デフォルト値はfalseです。

      ADFライブラリJAR内でのバインド・タスク・フローのパッケージの詳細は、33.2項「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。

  8. バインド・タスク・フローを保存して閉じます。

15.6.5 URLによるバインド・タスク・フロー起動構成時の処理

JDeveloperはリモートWebアプリケーション内でバインド・タスク・フローに対するタスク・フロー・コール・アクティビティを起動するタスク・フローのソース・ファイルに、メタデータ・エントリを生成します。例15-10に、タスク・フロー・コール・アクティビティのエントリ例を示します。

例15-10 バインド・タスク・フローに対するタスク・フロー・コール・アクティビティのメタデータ・エントリ

<task-flow-call id="createOrder">
    <task-flow-reference>
      <document id="__6">myorders-task-flow.xml</document>
      <id id="__5">myorders-task-flow</id>
    </task-flow-reference>
    <remote-app-url id="__7">#{myOrdersBean.createOrder}</remote-app-url>
  </task-flow-call>

例15-10createOrderメソッドは、バインド・タスク・フローの起動に必要なURL構文とともに文字列を返します。返される文字列に必要な部分の説明とURLの例を含むURL構文の詳細は、15.6.6項「URLを使用したバインド・タスク・フローのコールについて」を参照してください。

JDeveloperはバインド・タスク・フローのソース・ファイル構成時にも、そこにエントリを生成し、URLでコールできるようにします。例15-11に、URLによるバインド・タスク・フローの起動を許可するメタデータ・エントリ例を示します。

例15-11 URLによるバインド・タスク・フローの起動を許可するメタデータ・エントリ

<task-flow-definition id="task-flow-definition3">
    <visibility id="__2">
      <url-invoke-allowed/>
      <library-internal/>
    </visibility>
  </task-flow-definition>

15.6.6 URLを使用したバインド・タスク・フローのコールについて

ローカル・アプリケーションのデプロイメント記述子にコンテキスト・パラメータを追加することで、リモートWebアプリケーションとの対話管理が容易になります。

リモートWebアプリケーションのコンテキスト・パラメータ

URLを使用して別なFusion Webアプリケーション(リモート・アプリケーション)内のバインド・タスク・フローを起動する場合は、Fusion Webアプリケーション(ローカル・アプリケーション)のデプロイメント記述子(web.xml)へのコンテキスト・パラメータの追加をお薦めします。コンテキスト・パラメータ値をリモート・アプリケーションのURLに設定します。ローカル・アプリケーションでEL式を記述する際は、次の例のようにコンテキスト・パラメータ名を使用します。ここでremoteAppUrlはコンテキスト・パラメータ名です。

#{initParam.remoteAppUrl}

リモート・アプリケーションのURLが変更した場合は、コンテキスト・パラメータを更新して、変更後のURLを参照させます。

バインド・タスク・フローを起動するURL構文

一般的には、マネージドBeanメソッドを参照し、URLの必要な部分を取得するEL式を記述します。または、例15-12のようにURLのレンダリングを直接行うEL式を記述することもできます。

例15-12 バインド・タスク・フローを起動するURLの例

http://somecompany.com/internalApp/MyApp/faces/adf.task-flow?adf.tfId=displayHelp&
adf.tfDoc=%2FWEB-INF%2Fdisplayhelp.xml&topic=createPurchaseOrder

例15-13では、バインド・タスク・フローを起動するURL構文部分を説明します。

例15-13 名前付きパラメータを使用してバインド・タスク・フローをコールするURL構文

<server root>/<app_context>/faces/adf.task-flow?adf.tfid=<task flow definition ID>&adf.tfDoc=<document name>&<named parameter>=<named parameter value>

次のリストで、例15-13のURL構文の各部分を説明します。

  • <server root>: サイトまたは管理者レベルでカスタマイズして提供されます。例:

    http://mycompany.com/internalApp

    <server root>の値は、バインド・タスク・フローをデプロイするアプリケーション・サーバーによって異なります。バインド・タスク・フローのURLは、JSFサーブレットのURLパス内のリソースです。

  • <app context>: Webアプリケーションのコンテキスト・ルートです(例: MyApp)。コンテキスト・ルートはWebアプリケーションのベース・パスです。

  • faces: Facesサーブレット・マッピングです。

  • adf.task-flow: リモートWebアプリケーションのADFコントローラを識別する予約キーワードです。

  • adf.tfId: コールするタスク・フローのIDを提供するURLパラメータ。

  • <task flow ID>: コール先のバインド・タスク・フローの識別子(例: displayHelpなど)。これは、ローカルでコールするときに使用するタスク・フローIDと同じIDです。この識別子はタスク・フロー・コール・アクティビティのインスタンスIDとは異なることに注意してください。このパラメータ値は文字列で表される必要があります。

  • adf.tfDoc: コールするバインド・タスク・フローのIDが含まれたドキュメント名を提供するURLパラメータ。

  • <document name>: コール先のバインド・タスク・フローのIDを含むドキュメントの名前(例: %2FWEB-INF%2FtoUppercase%2FdisplayHelp.xml)。バインド・タスク・フローのURLを自分で作成する場合、適切なエンコーディングを設定します。

  • <named parameter>: (オプション)コール先のバインド・タスク・フローの入力パラメータ定義の名前(例: topic)。必要な入力パラメータ定義をすべて指定する必要があります。

  • <named parameter value>: (オプション)入力パラメータの値です。


注意:

アンダースコア(_)で始まるURLパラメータ名は、内部用に限定されているため、使用しないでください。ADFコントローラによって生成されたURLにこれらの名前が表示されても、使用または依存しないでください。


パラメータ・コンバータのオブジェクト型

パラメータ・コンバータを指定している場合は、そのコンバータを使用して、URLで使用されている文字列表現とタスク・フロー・パラメータ値の間で変換が行えます。パラメータ・コンバータは以下の型のオブジェクトを評価するEL式です。

oracle.adf.controller.UrlParameterConverter

パラメータ・コンバータを指定しない場合は、デフォルト・コンバータがパラメータにcross-site-scripting (XSS)攻撃がないことを確認します。アプリケーション内で使用されているパラメータに特殊文字が含まれていることがわかっている場合は、UrlParameterConverterを独自に実装し、タスク・フロー・パラメータ値の変換に使用する必要があります。

15.6.7 Before ListenerとAfter Listenerの指定方法

タスク・フロー・コール・アクティビティのBefore ListenerとAfter Listenerを使用して、バインド・タスク・フローの開始と終了を識別します。タスク・フロー・コール・アクティビティにリスナーを指定すると、コール先のバインド・タスク・フローの特定の使用方法に対してそのリスナーが実行されます。

リスナーは、バインド・タスク・フローの開始時と終了時にコールされるメソッドのEL式として、<before-listener>#{global.showState}</before-listener}>のように指定します。このメソッドにパラメータは指定できません。

  • Before listener: バインド・タスク・フローの開始前にコールされるJavaメソッドのEL式。コール元で、バインド・タスク・フローの開始時を把握する必要がある場合に使用されます。

  • After listener: バインド・タスク・フローから戻った後にコールされるJavaメソッドのEL式。コール元で、バインド・タスク・フローを終了してコール元に制御フローが戻ったときを認識する必要がある場合に使用されます。

複数のbefore listenerまたはafter listenerを指定した場合、無制限タスク・フローまたはバインド・タスク・フローのソース・ドキュメントにおける記述順でコールされます。タスク・フロー・コール・アクティビティは、before listenerとafter listenerを1つずつしか保持できません。

タスク・フロー・コールのafter listenerをコールするには、制御フロー・ルールを使用してバインド・タスク・フローから制御フローが戻される必要があります。エンド・ユーザーが、ブラウザの「戻る」ボタンまたは他のURLを使用してバインド・タスク・フローから離れた場合、タスク・フロー・コールのafter listenerはコールされません。バインド・タスク・フローのファイナライザを使用して、取得しているリソースをすべて解放し、エンド・ユーザーがブラウザの「戻る」ボタンをクリックして離れたバインド・タスク・フローのクリーンアップを実行する必要があります。詳細は、18.2項「イニシャライザとファイナライザの使用」を参照してください。

タスク・フロー・コール・アクティビティにbefore listenerまたはafter listenerを指定するには:

  1. コール元のバインド・タスク・フローのダイアグラムで、タスク・フロー・コール・アクティビティを選択します。

  2. プロパティ・インスペクタで、「リスナー」をクリックします。

  3. before-listenerまたはafter-listenerの横にあるボタンをクリックします。

  4. 「式ビルダー」ダイアログで、リスナーのメソッドを含むJavaクラスまでドリルダウンします。

  5. クラスのノードを開いてリスナー・メソッドを選択します。

    選択後のEL式は#{pageFlowscope.managedBean.methodListener}のようになります。

  6. 「OK」をクリックします。

15.6.8 タスク・フロー・コール・アクティビティ追加時の処理

タスク・フロー・コール・アクティビティをタスク・フロー・ダイアグラムに追加した後、15.6.1項「タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール方法」で説明したいずれかの方法で、コール先のバインド・タスク・フローへの参照を指定する必要があります。たとえば、既存のバインド・タスク・フローをタスク・フロー・コール・アクティビティにドロップすると、JDeveloperではタスク・フロー参照が自動的に生成されます。タスク・フロー参照は、コール先のバインド・タスク・フローを起動するために使用されます。

タスク・フロー参照が静的の場合は、各タスク・フロー参照は次から構成されます。

  • id: コール先のバインド・タスク・フローのXMLソース・ファイルに記述されているバインド・タスク・フローのIDです。たとえば、コール先のタスク・フローにはtargetFlowというidがある場合があります。同じXMLソース・ファイルには複数のバインド・タスク・フローを含めることができ、各タスク・フローが一意のIDで識別されます。


    注意:

    JDeveloperを使用してバインド・タスク・フローを作成した場合、バインド・タスク・フローは各ドキュメントに1つのみです。


  • document: コール先のバインド・タスク・フローのIDを記述したXMLソース・ファイルの名前。documentを指定しない場合、adfc-config.xmlであると判断されます。

    このドキュメントは物理XMLファイルで、MDSを介してアクセスできなければなりません。

例15-14は、タスク・フロー・コール・アクティビティ内の静的なタスク・フロー参照の例を示しています。バインド・タスク・フローを起動するには、そのフローのIDと、IDが記述されているファイルの名前を把握している必要があります。

例15-14 静的なタスク・フロー参照

<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2" id="__1">
...
  <task-flow-definition id="task-flow-definition">
    <default-activity>view1</default-activity>
    <task-flow-call id="taskFlowCall">
      <task-flow-reference>
        <document>/WEB-INF/called-task-flow-definition.xml</document>
        <id>called-task-flow-definition</id>
      </task-flow-reference>
    </task-flow-call>
  </task-flow-definition>
...
</adfc-config>

例15-15は、タスク・フロー・コール・アクティビティ内の動的タスク・フロー参照用にJDeveloperが生成するメタデータを示しています。

例15-15 動的なタスク・フロー参照

<?xml version="1.0" encoding="windows-1252" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2"
             id="__1">
  <task-flow-definition id="bounded_tf">
    <default-activity id="__2">taskFlowCall1</default-activity>
    <task-flow-call id="taskFlowCall1">
      <dynamic-task-flow-reference id="__3">#{EL_Expression_Retrieve_
                            TaskflowID}</dynamic-task-flow-reference>
    </task-flow-call>
  </task-flow-definition>
</adfc-config>

15.6.9 タスク・フロー・コール・アクティビティによるタスク・フロー起動時の処理

ADFコントローラでは、タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローがコールされたときに次の手順が実行されます。

  1. ユーザーにバインド・タスク・フローをコールする権限があることを確認します。

  2. 指定した場合、タスク・フロー・コール・アクティビティのbefore listener (1つ以上)を起動します(15.6.7項「Before ListenerとAfter Listenerの指定方法」を参照)。

  3. バインド・タスク・フローの入力パラメータ値を評価します。

  4. コール先のバインド・タスク・フローをスタックに格納して、そのページ・フロー・スコープを初期化します。

  5. コール先のバインド・タスク・フローのコンテキストに入力パラメータ値を設定します。

  6. 指定されている場合、バインド・タスク・フローのイニシャライザ・メソッドを起動します(詳細は、18.2項「イニシャライザとファイナライザの使用」を参照)。

  7. バインド・タスク・フローのデフォルト・アクティビティを実行します。

15.7 タスク・フロー・リターン・アクティビティの使用

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

タスク・フロー・リターン・アクティビティ・アイコンを囲むグレーの円は、そのアクティビティがバインド・タスク・フローの終了ポイントであることを示します。各バインド・タスク・フローには、ゼロから複数のタスク・フロー・リターン・アクティビティを指定できます。図15-10に、LoginおよびaddNewCustという名前のタスク・フロー・リターン・アクティビティが指定されたバインド・タスク・フローを示します。

図15-10 複数のタスク・フロー・リターン・アクティビティ

複数のタスク・フロー・リターン・アクティビティ。

各タスク・フロー・リターン・アクティビティには、コール元のタスク・フローに戻されるoutcomeを指定します。たとえば、Fusion Order Demoアプリケーションの顧客登録バインド・タスク・フローにおけるrollbackReturnタスク・フロー・リターン・アクティビティのoutcomeは、cancelCreateCustです。

図15-11は、顧客登録バインド・タスク・フロー(customer-registration-task-flow.xml)からの抜粋です。このタスク・フローには、2つのタスク・フロー・リターン・アクティビティ(rollbackReturnおよびcommitReturn)が含まれています。rollbackReturnタスク・フロー・リターン・アクティビティのoutcomecancelCreateCustです。一方、commitReturnタスク・フロー・リターン・アクティビティのoutcomeglobalhomeを返します。

図15-11 異なる結果を指定するタスク・フロー・リターン・アクティビティ

タスク・フロー・リターン・アクティビティ

顧客登録を起動するタスク・フローに戻されるoutcomeは、エンド・ユーザー・アクションによって異なります。起動元のタスク・フローによって次のアクションを決定するように、起動元のタスク・フローの制御フロー・ケースを構成できます。制御フローのfrom-outcome要素をタスク・フロー・リターン・アクティビティのoutcomeからの戻り値に設定し、結果に基づくアクションを起動します。これによって、顧客登録タスク・フローから戻った後の制御フローが決まります。

「セーブポイントのリストア」プロパティの値を設定して、バインド・タスク・フローの終了時に、タスク・フロー・リターン・アクティビティを使用して、バインド・タスク・フロー内で行われたモデル変更を保存または破棄するように指定します。trueに設定すると、Fusion Webアプリケーションが最初にバインド・タスク・フローを開始した際に作成された、ADFモデルのセーブポイントまでロールバックします。デフォルト値はfalseです。このプロパティ値は、タスク・フロー・リターン・アクティビティがあるバインド・タスク・フローの開始時に新しいトランザクションが開始されない場合にのみ指定できます。詳細は、18.4.1項「バインド・タスク・フローでトランザクションを有効化する方法」を参照してください。

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

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

  2. タスク・フロー・ダイアグラムで、タスク・フロー・リターン・アクティビティを選択します。

  3. 「プロパティ・インスペクタ」の「共通」ページで、「結果」セクションを展開します。

  4. 「名前」フィールドに結果を入力します(例: preferredCustomer)。

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

  5. プロパティ・インスペクタで「動作」セクションを展開します。

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

    • reentry-allowed: バインド・タスク・フロー内の任意のビュー・アクティビティについて再開が許可されます。

    • reentry-not-allowed: バインド・タスク・フローの再開は許可されません。

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

    この選択により、エンド・ユーザーがブラウザの「戻る」ボタンをクリックして、バインド・タスク・フローを再度開始したときのデフォルトの動作を定義します。この選択は、タスク・フロー・リターン・アクティビティがあるバインド・タスク・フローにreentry-outcome-dependentが設定されている場合にのみ適用されます。詳細は、18.5項「バインド・タスク・フローの再開」を参照してください。

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

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

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

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

  8. In the R「セーブポイントのリストア」ドロップダウン・リストで、次のいずれかの条件に一致した場合に、trueを選択します。

    • タスク・フロー・リターン・アクティビティがあるバインド・タスク・フロー上で、「常に新規トランザクションを開始」(new-transaction)が選択されていない場合があります。

    • バインド・タスク・フロー内で行われたADFモデル変更を、フロー終了時にタスク・フロー・コール・アクティビティを使用して破棄する必要がある場合。トランザクションは、バインド・タスク・フローの開始時に作成されているセーブポイントまでロールバックされます。

    詳細は、18.4.1項「バインド・タスク・フローでトランザクションを有効化する方法」を参照してください。

15.8 セーブポイント・リストア・アクティビティの使用

セーブポイント・リストア・アクティビティを使用すると、後で使用するための保存の機能がサポートされているアプリケーションで、以前の永続的なセーブポイントをリストアできます。セーブポイントでは、特定のインスタンスでFusion Webアプリケーションのスナップショットが取得されます。セーブポイント・リストア機能を使用すると、セーブポイントが最初に作成されたときに取得された状態までアプリケーションをリストアできます。

セーブポイントがリストアされると、ADFコントローラで保存されたアプリケーションが終了し、エンド・ユーザーが保存を実施したときに実行されていたアプリケーションが再起動されます。アプリケーションでエンド・ユーザーが最初にいた場所が表示されます。ave-point-idは一度リストアされると、その永続メソッド(データベースまたはJavaオブジェクト・キャッシュ)から削除されます。

セーブポイント・リストア・アクティビティは、後で使用するための保存の機能がサポートされている個々のアプリケーションすべてに必要なわけではありません。以前の永続的なsave-point-idsをリストアするアプリケーション内でのみ必要です。たとえば、経費報告書作成アプリケーションではセーブポイント・リストア・アクティビティは必要ありませんが、以前に保存された経費報告書を今後更新するように選択する場合に使用されるアプリケーションでは必要となります。

タスク・フロー内で後で使用するための保存の機能を有効化する方法の詳細、および保存されたアプリケーションの状態およびデータをセーブポイント・リストア・アクティビティを使用して取得する方法の例は、18.9項「タスク・フローでのセーブポイントの使用」で説明しています。

15.9 親アクション・アクティビティの使用

ADFリージョンで実行するバインド・タスク・フローでは、親ビュー・アクティビティのナビゲーションのトリガーが必要な場合があります。親アクション・アクティビティにより、バインド・タスク・フローでその親のビュー・アクティビティに渡される結果を生成できるようになります。この結果を使用して、ADFリージョンのタスク・フローではなく、親ビュー・アクティビティを含むタスク・フローに移動します。

詳細は、17.7.1,項「ADFリージョンのタスク・フロー外でのナビゲーションのトリガー方法」を参照してください。

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

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

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

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

図15-12 ページ定義ファイルに関連付けられたタスク・フロー・アクティビティ

ページ定義ファイルに関連付けられたタスク・フロー・アクティビティ

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

JDeveloperにはタスク・フロー・アクティビティからアクセスできるコンテキスト・メニュー・オプションがあります。このコンテキスト・メニュー・オプションを使用して、タスク・フロー・アクティビティをページ定義ファイルに関連付けます。

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

  1. タスク・フローのダイアグラマで、ページ定義ファイルを作成するタスク・フロー・アクティビティを右クリックします。

  2. 表示されるコンテキスト・メニューから、「ページ定義の作成」を選択します。

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

    ページ定義ファイルの詳細は、12.6項「ページ定義ファイルでの作業」を参照してください。

15.10.2 タスク・フロー・アクティビティへのページ定義ファイルの関連付け時の処理

設計時に、JDeveloperはタスク・フロー・アクティビティのページ定義ファイルを生成します。ページ定義ファイルのファイル名は、元のタスク・フローおよびタスク・フロー・アクティビティまたは起動するデータ・コントロール操作から構成されます。たとえば、taskflowName_taskflowName_methodCall1PageDef.xmlまたはtaskflowName_taskflowName_CreateInsertPageDef.xmlのような名前が付けられます。

JDeveloperは作成されたページ定義ファイル内で、タスク・フロー・アクティビティからバインドへのEL式も生成します。例15-16に、CreateInsertアクション・バインドを参照するメソッド・コール・アクティビティを示します。

例15-16 アクション・バインドを参照するタスク・フロー・アクティビティ

<method-call id="CreateInsert">
      <method>#{bindings.CreateInsert.execute}</method>
      <outcome>
        <fixed-outcome>CreateInsert</fixed-outcome>
      </outcome>
    </method-call>

実行時にバインド・コンテナは、タスク・フロー・アクティビティのEL式が正しい値を参照していることを確認します。