ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11g リリース2(11.1.2.3.0)
B69399-02
  目次へ移動
目次

前
 
次
 

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

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

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

19.1 タスク・フロー・アクティビティについて

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

図19-1に示すバインド・タスク・フローには、ショッピング・アプリケーションからユーザーをチェックアウトするために実行される次のアクティビティが含まれています。

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

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

  3. コール元のバインドなしタスク・フロー(図19-1を参照)に制御を戻すアクティビティ

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

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

タスク・フローは、アクティビティ、およびアクティビティ間の遷移を定義する制御フロー・ケースで構成されます。表19-1は、「コンポーネント・パレット」からドラッグ・アンド・ドロップすることで、タスク・フローに追加可能なアクティビティ・タイプと制御フローについて説明しています。

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

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

メソッド・コール

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

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


親アクション

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

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

ルーター

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

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

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

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

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

タスク・フロー・コール

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

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


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

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

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

URLビュー

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

ビュー・アクティビティ

ビュー

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

制御フロー・ケース


制御フロー・ケース

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

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


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

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


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

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

アイコン アイコン名 説明

ノート


ノート

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

ノートの添付


ノートの添付

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


19.1.1 タスク・フロー・アクティビティのユース・ケースと例

図19-2には、Fusion Order Demoアプリケーションにある顧客登録タスク・フローのダイアグラムが示されています。このタスク・フローでは、顧客登録のためにバインド・タスク・フローが支援する多数のアクティビティが使用されています。Fusion Order Demoアプリケーションの詳細は、第2章「ADFサンプル・アプリケーションの概要」を参照してください。

図19-2 顧客登録タスク・フロー

顧客登録タスク・フロー

19.1.2 タスク・フロー・アクティビティの追加機能

タスク・フロー・アクティビティを構成または使用する前に、他のADF機能を理解しておくことは有効だと思われます。さらに、構成後のタスク・フローで実行できる機能について読むことが必要な場合もあります。次に、関連する他の機能へのリンクを示します。

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

タスク・フロー・アクティビティの主要なタイプの1つにビュー・アクティビティがあります。ビュー・アクティビティは、JSFページまたはページ・フラグメントに表示されます。ページ・フラグメントは、別のJSFページのコンテンツとしてレンダリングされるJSFドキュメントです。21.2項「ADFリージョンの作成」の説明のとおり、ページ・フラグメントは通常、リージョンとしてJSFページに追加可能なバインド・タスク・フローで使用されます。

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

図19-3 ビュー・アクティビティ

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

ヒント:

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


タスク・フローのソース・ファイルにあるXMLメタデータでは、ビュー・アクティビティが物理JSFページまたはページ・フラグメントと関連付けられています。id属性ではビュー・アクティビティが識別されます。<page>要素では、ページまたはページ・フラグメントのファイル名が識別されます。例19-1では、図19-3のビュー・アクティビティに対応するメタデータが示されています。

例19-1 ビュー・アクティビティのメタデータ

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

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

タスク・フローにビュー・アクティビティを追加する手順は、タスク・フロー・ダイアグラムへのどのアクティビティの追加手順とも同じです。詳細は、18.3.1項「タスク・フローにアクティビティを追加する方法」を参照してください。ビュー・アクティビティを追加した後にダブルクリックすると、新規のページまたはページ・フラグメントを作成できるウィザードを表示できます。ウィザードでは、作成したJSFページまたはページ・フラグメントで次の2つのドキュメント・タイプのうち1つを選択できます。

タスク・フローではドキュメント・タイプを1つのみ使用します。たとえば、あるタスク・フローのビュー・アクティビティではFaceletsドキュメント・タイプを使用せず、別のタスク・フローのビュー・アクティビティではJSP XMLドキュメント・タイプを使用しません。ドキュメント・タイプの詳細は、1.3.7項「JSFによるユーザー・インタフェースの実装」を参照してください。

また、ウィザードを使用して、作成したページまたはページ・フラグメントのページ・レイアウトを選択します。ページ・レイアウトの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のクイック・スタート・レイアウトの使用に関する項を参照してください。さらに、マネージドBeanのページまたはページ・フラグメントでUIコンポーネントを自動的に公開するかどうかを指定できます。詳細は、24.4項「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。

ウィザードの完了後、JDeveloperでは、完成したページまたはページ・フラグメントがビュー・アクティビティと自動的に関連付けられます。ウィザードを使用しなくても、アプリケーション・ナビゲータから既存のページまたはページ・フラグメントをドラッグし、既存のビュー・アクティビティ上にドロップすることで、ページまたはページ・フラグメントとビュー・アクティビティとの関連付けを実行できます。ビュー・アクティビティがない場合は、ページまたはページ・フラグメントをダイアグラム上のどこか他の場所にドラッグします。ページまたはページ・フラグメントをドロップすると、JDeveloperでは、ページまたはページ・フラグメントに関連付けられた新規のビュー・アクティビティが自動作成されます。作成時には、ページまたはページ・フラグメントの名前に基づいて、そのビュー・アクティビティのデフォルトのidが自動的に生成されます(例: Home)。

19.2.1 ビュー・アクティビティ間の制御の受渡し

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

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

図19-4 「属性の編集」ダイアログ

Action属性の「属性の編集」ダイアログ

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

また、ターゲット・ビュー・アクティビティに制御を渡す前に、値が必ずtrueになるEL式を記述できます。タスク・フローにある制御フロー・ケースの<if>子要素の値としてEL式を記述します。詳細は、18.4.1項「タスク・フローに制御フロー・ルールを追加する方法」を参照してください。

19.2.1.1 ビュー・アクティビティ間で制御を渡す方法

コマンド・コンポーネントのaction属性の値として、制御フロー・ケースのfrom-outcome属性の値を指定することで、ビュー・アクティビティに制御を渡します。

作業を始める前に、次のようにします。

ビュー・アクティビティ間での制御の受渡しを構成する際に、利用可能なオプションを理解しておくと有効な場合があります。詳細は、19.2.1項「ビュー・アクティビティ間の制御の受渡し」を参照してください。

他のADF機能を使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

次の手順は、次の機能が作成済であることを前提としています。

  • エンド・ユーザーが実行時にコマンド・コンポーネントを起動した後に制御を受け取るターゲット・ビュー・アクティビティ

  • エンド・ユーザーが実行時に起動したコマンド・コンポーネントをホストするページ

ビュー・アクティビティに制御を渡す手順:

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

    • JSFページを開きます。「コンポーネント・パレット」の「ADF Faces」ページで、「一般コントロール」パネルからナビゲーションUIコンポーネント(ボタンなど)をドラッグして、ページ上にドロップします。

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

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

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

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

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

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

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


    ヒント:

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


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

19.2.1.2 ビュー・アクティビティ間での制御の受渡し時の処理

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

例19-2 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>

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

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

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

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

バインドなしタスク・フロー内のビュー・アクティビティにのみ、ブックマークを使用できます。

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

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

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

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

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

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

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

例19-4 バインドなしタスク・フローのビュー・アクティビティの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式の値は、文字列として表すことができる必要があります。

例19-5は、バインドなしタスク・フロー内のブックマーク可能なビュー・アクティビティ用のサンプルURLを示しています。

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

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

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

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

作業を始める前に、次のようにします。

ブックマーク可能なビュー・アクティビティの作成に必要な構文を理解しておくと役に立つ場合があります。詳細は、19.2.2項「ビュー・アクティビティのブックマーク」を参照してください。

他のタスク・フローの機能を使用する機能について理解しておくと役に立つ場合もあります。19.1.2項「タスク・フロー・アクティビティの追加機能」

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

  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」を使用して、例19-5に示すように、ブックマーク・パラメータをビュー・アクティビティURLに追加します。

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

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

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

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

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

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

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

19.2.3 ビュー・アクティビティへのHTTPリダイレクトの指定

ビュー・アクティビティを構成することで、顧客の要求に応じて実行時にURLへリダイレクトできるようにします。これによって、ADFコントローラでは、ビュー・アクティビティに新規のブラウザ用URLを作成できます。ビュー・アクティビティの元のURLは使用されなくなります。19.2.2項「ビュー・アクティビティのブックマーク」の説明のとおり、ビュー・アクティビティをすでにブックマーク可能にしている場合は、ビュー・アクティビティのHTTPリダイレクトを構成できません。

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

ビュー・アクティビティのredirectプロパティをtrueに設定します。

作業を始める前に、次のようにします。

ビュー・アクティビティのredirectプロパティをtrueに設定した場合の影響について理解しておくと役に立つ場合があります。詳細は、19.2.3項「ビュー・アクティビティのHTTPリダイレクトの指定」を参照してください。

また、他のタスク・フローの機能を使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

  2. プロパティ・インスペクタで、「一般」セクションを開きます。

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

19.2.3.2 ビュー・アクティビティへのHTTPリダイレクト指定時の処理

ADFコントローラは、ビュー・アクティビティの要求に応じて、HTTPリダイレクトを発行します。リダイレクトされたリクエストによって、ビュー・アクティビティ用に新しいブラウザのURLが作成されます。ビューの元のURLは使用できなくなります。

指定すると、クライアントのGETリクエストに応じて、HTTPリダイレクトが発行されます。クライアントのGETでは、ADFコントローラおよびADF Modelレイヤーでページに新しいバインディング・コンテキストが設定されるまで、#{bindings} ELスコープは無効です。したがって、HTTPリダイレクトを指定したビュー・アクティビティには、次のようなEL式の使用はできません。

#{bindings.foo}


注意:

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

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

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

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


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

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

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

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

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

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

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

作業を始める前に、次のようにします。

URLビューをタスク・フローの機能に追加した場合の影響について理解しておくと役に立つ場合があります。詳細は、19.3項「URLビュー・アクティビティの使用」を参照してください。

また、他のタスク・フローの機能を使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

    図19-5 URLビュー・アクティビティ

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

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

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

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

19.3.2 URLビュー・アクティビティについて

JSFポートレット内では、タスク・フローのURLビュー・アクティビティを使用できます。タスク・フローのURLビュー・アクティビティを構成し、JSFポートレット内で使用する場合は、次のオプションのいずれかを使用してURLを作成します。

  • oracle.adf.controllerパッケージのControllerContextクラスから次のメソッドのいずれかを起動します。

    • getLocalViewActivityURL()

    • getGlobalViewActivityURL()

    ADFPortletContainerExternalContextクラスからredirect()メソッドを起動する前に、getLocalViewActivityURL()メソッドまたはgetGlobalViewActivityURL()メソッドからの応答でADFPortletContainerExternalContextクラスからencodeActionURL()メソッドを起動してはいけません。getLocalViewActivityURL()メソッドおよびgetGlobalViewActivityURL()メソッドの両方で、必要なURLのエンコーディングが実行されます。

  • 完全修飾された絶対URLを提供します。

  • コンテキスト・パスの相対URLを提供します。

  • 現在のビューに相対するURLを提供します。

JSFポートレットにあるタスク・フローのURLビュー・アクティビティは次のように動作します。

  • リダイレクトURLがJSFポートレット・アプリケーション内の場所を参照し、値がtruex_DirectLinkと呼ばれるqueryStringパラメータを含まない場合は、これを含むページ内のポートレットがURLビュー・アクティビティで指定されたURLに移動します。

  • それ以外の場合、クライアントはURLビュー・アクティビティで指定されたURLにリダイレクトされます。

タスク・フローのURLビュー・アクティビティの使用の詳細は、19.3項「URLビュー・アクティビティの使用」を参照してください。

URLの取得に使用可能なメソッドの詳細は、次のリファレンス・ドキュメントを参照してください。

  • Oracle Fusion Middleware Oracle ADF Controller Java APIリファレンス

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

EL式の実行時の評価に基づいて、ルーター・アクティビティを使用し、制御をアクティビティにルーティングします。図19-6は、ルーター・アクティビティ(isCreateEmployee)が様々な制御フローに分岐し、様々なアクティビティに移動できることを示しています。

図19-6 代替制御フロー・ケースのルーター

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

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

たとえば、図19-6で示したwelcomeUserRegistrationページ・フラグメントのビュー・アクティビティ上で新規顧客の作成ボタンまたは新規従業員の作成ボタンをユーザーがクリックするかどうかについては制御フローの構成が必要な場合があります。EL式が評価するルーター・ケースを追加する条件は、ユーザーによってwelcomeUserRegistrationページ・フラグメント上の入力テキスト・フィールドに新規顧客が入力されるケースと、EL式がtrueを返した(ユーザーが新規顧客を入力した)場合に戻されるルーター・アクティビティの結果(newCustomerなど)が入力されるケースがあります。

図19-6で、ユーザーが新規顧客を入力するかどうかを決定するEL式の値がtrueの場合は、制御フロー・ケースのfrom-outcomeに基づいてcustomer-registration-task-flowタスク・フロー・コール・アクティビティに制御が渡されます。


ベスト・プラクティス:

EL式にルーティング条件を表示できる場合は、ルーター・アクティビティを使用します。

ルーター・アクティビティを使用すると、それを含むタスク・フローの設計時により多くのことができます。ルーター・アクティビティでは、タスク・フローの条件に関するより多くの情報を表示できます。これにより、タスク・フローのダイアグラムを閲覧するユーザーにとってより読みやすく、有効な情報になります。

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


19.4.1 ルーター・アクティビティを使用した制御フローの構成方法

「コンポーネント・パレット」からタスク・フローのダイアグラムまでルーター・アクティビティをドラッグすることによって制御フローを定義します。ルーター・アクティビティのプロパティ(「アクティビティID」および「デフォルト結果」)を構成し、ルーター・ケースをルーター・アクティビティに追加します。

作業を始める前に、次のようにします。

機能に影響を及ぼす可能性のあるルーター・アクティビティのプロパティを理解しておくと役に立つ場合があります。詳細は、19.4項「ルーター・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

ルーター・アクティビティを使用して制御フローを構成する手順:

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

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

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

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

    • アクティビティID: タスク・フローのソース・ファイルにあるルーター・アクティビティを識別する値を記述します。

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

  5. ケース」の隣にある「追加」アイコンをクリックし、次のリストに従って、追加したルーター・ケースごとに値を指定します。

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

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

      #{pageFlowScope.value=='view2'}

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

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

      タスク・フロー・ダイアグラムの結果ごとに制御フロー・ケースまたはワイルドカード制御フロー・ルールを作成します。たとえば、制御フロー・ケースの結果ごとに、対応するfrom-outcomeがあることを確認します。図19-6で、ケースのoutcomeおよび制御フロー・ケース要素のfrom-outcomeの値はどちらもnewCustomerになります。これにより、制御フロー要素のターゲットであるnewCustomerアクティビティに制御フローが渡されるようになります。

19.4.2 ルーター・アクティビティを使用した制御フロー構成時の処理

JDeveloperでは、ルーター・アクティビティのプロパティに指定した値に基づいて、タスク・フローのソース・ファイルに値を記述します。例19-7にはJDeveloperで記述された値が示されており、この値はルーター・アクティビティに対して次のように指定されます。

  • 「デフォルト結果」の値はtoRegion3です。

  • 2つの制御フロー・ケースが指定されます。入力値が1の場合の結果はtoRegion1となり、入力値が2の場合の結果はtoRegion2になります。

実行時に、ルーター・アクティビティでは、EL式がtrueを返した制御フロー・ケースの結果に制御を渡します。

例19-7 タスク・フロー・ソース・ファイルのルーター・アクティビティ・メタデータ

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

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

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

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

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

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

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

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

例19-8 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

制御フローの詳細は、18.1.3項「制御フローについて」を参照してください。


ベスト・プラクティス:

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

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

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

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

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

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


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

コンポーネント・パレットからタスク・フロー・ダイアグラムにメソッド・コール・アクティビティをドラッグします。メソッド・コール・アクティビティは、「データ・コントロール」パネルからタスク・フロー・ダイアグラム内のメソッド・コール・アクティビティにデータ・コントロール操作を直接ドロップして、既存のメソッドに関連付けることができます。

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


注意:

データ・コントロール・メソッドのパラメータは、ADFコントローラのメタデータ内ではなく、対応するページのページ定義に定義されます。


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


ヒント:

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


作業を始める前に、次のようにします。

バインド・タスク・フローまたはバインドなしタスク・フローを作成します。詳細は、18.2項「タスク・フローの作成」を参照してください。

メソッド・コール・アクティビティのプロパティがタスク・フローの機能に与える影響について理解しておくと有効な場合があります。詳細は、19.5項「メソッド・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

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

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

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

    たとえば、ELバインディング式を次のように入力します。

    #{bindings.addItemstoCart.execute}


    注意:

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


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

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

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

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

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

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

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


      ヒント:

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


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

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

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

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

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

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

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

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

作業を始める前に、次のようにします。

メソッド・コール・アクティビティのプロパティがタスク・フローの機能に与える影響について理解しておくと有効な場合があります。詳細は、19.5項「メソッド・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

メソッド・パラメータを追加する手順:

  1. メソッド・コール・アクティビティをタスク・フロー・ダイアグラムに追加します。

    詳細は、19.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. 前述の各手順を繰り返してさらにパラメータを追加します。

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

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

例19-9 userRegistrationCreateメソッドのコール

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

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

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

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

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

次の事項にも注意が必要です。


ヒント:

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


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

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

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

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

作業を始める前に、次のようにします。

タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、19.6項「タスク・フロー・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

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


      ヒント:

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

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

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


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

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

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

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

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

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

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

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

      3. 動的タスク・フロー参照」ドロップダウン・メニューから「式ビルダー」を選択します。

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

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

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

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

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

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

例19-10 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>

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

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

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

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

作業を始める前に、次のようにします。

タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、19.6項「タスク・フロー・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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


    ヒント:

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


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

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

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

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

19.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を使用してリモート・タスク・フローを起動するような設定は行わないでください。


注意:

JDeveloperのアプリケーション・ナビゲータで、URLを使用してコールするバインド・タスク・フローを右クリックし、コンテキスト・メニューから「実行」を選択した場合は、バインド・タスク・フローは、実行時にURLを使用してコールされたかのように実行されます。このため、バインド・タスク・フローをJDeveloperでのテストの一部として実行する場合でも、その可視性プロパティを確実に設定しておくようにします。


作業を始める前に、次のようにします。

タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、19.6項「タスク・フロー・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

    詳細は、19.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内でのバインド・タスク・フローのパッケージの詳細は、38.3項「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

#{initParam.remoteAppUrl}

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

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

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

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

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

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

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

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

次のリストで、例19-14の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を独自に実装し、タスク・フロー・パラメータ値の変換に使用する必要があります。

19.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はコールされません。バインド・タスク・フローのファイナライザを使用して、取得しているリソースをすべて解放し、エンド・ユーザーがブラウザの「戻る」ボタンをクリックして離れたバインド・タスク・フローのクリーンアップを実行する必要があります。

作業を始める前に、次のようにします。

タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、19.6項「タスク・フロー・コール・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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


    注意:

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


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

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

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

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

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

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

例19-16 動的タスク・フロー参照

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

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

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

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

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

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

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

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

  6. バインド・タスク・フローのイニシャライザ・メソッドを指定している場合は、そのメソッドを起動します。

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

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

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

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

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

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

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

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

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

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

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

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

作業を始める前に、次のようにします。

タスク・フロー・リターン・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、19.7項「タスク・フロー・リターン・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作業を始める前に、次のようにします。

タスク・フロー・アクティビティによるページ定義ファイルの使用方法を理解しておくと役に立つ場合があります。詳細は、19.10項「ページ定義ファイルのあるタスク・フロー・アクティビティの使用」を参照してください。

また、他のタスク・フロー・アクティビティの機能を使用して追加可能な他の機能を理解しておくことも有効な場合があります。詳細は、19.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

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

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

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

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

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

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

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

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

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

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