ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発
12c (12.1.2)
E48099-02
  目次へ移動
目次

前
 
次
 

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

この章では、Fusion Webアプリケーションで作成するADFタスク・フローでアクティビティを使用する方法について説明します。この章には、「コンポーネント」ウィンドウに表示される各タスク・フロー・アクティビティ・タイプの詳細な説明とともに、各タスク・フロー・アクティビティ・タイプに構成するプロパティの説明が含まれます。

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

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

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

図21-1は、ADFタスク・フローのSummitサンプル・アプリケーションから、emp-reg-task-flow-definition.xmlバインド・タスク・フローを示しています。このタスク・フローには次のアクティビティが含まれます。

  1. CreateInsertアクションを起動するメソッド・コール・アクティビティ

  2. エンド・ユーザーが作成される従業員についての一般情報を入力できるページ・フラグメントをレンダリングするビュー・アクティビティ

  3. エンド・ユーザーが正常に新規の従業員を作成した場合に確認メッセージを表示するページ・フラグメントをレンダリングするビュー・アクティビティ

図21-1 タスク・フロー・アクティビティがあるバインド・タスク・フロー

タスク・フロー・アクティビティがあるバインド・タスク・フロー

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

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

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

メソッド・コール

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

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


親アクション

バインド・タスク・フローで親ビュー・アクティビティに渡される結果を生成できるようにします。通常、親ビュー・アクティビティのナビゲーションのトリガーを必要とするADFリージョンで実行するバインド・タスク・フローに使用されます。詳細は、23.7項「ADFリージョンのタスク・フロー外への移動」を参照してください。

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

ルーター

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

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

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

後で使用するための保存の機能をサポートするアプリケーションで、アプリケーションの状態やデータなど、以前の永続保存ポイントをリストアします。セーブポイントでは、特定のインスタンスでFusion Webアプリケーションのスナップショットが取得されます。セーブポイント・リストア機能を使用すると、セーブポイントが最初に作成されたときに取得された状態までアプリケーションをリストアできます。詳細は、24.7項「タスク・フローでのセーブポイントの使用」を参照してください。

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

タスク・フロー・コール

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

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


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

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

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

URLビュー

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

ビュー・アクティビティ

ビュー

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

制御フロー・ケース


制御フロー・ケース

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

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


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

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


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

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

アイコン アイコン名 説明

ノート


ノート

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

ノートの添付


ノートの添付

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


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

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

図21-2 Summit ADFタスク・フロー・サンプル・アプリケーション内の顧客タスク・フロー

ADFタスク・フローのSummit ADFアプリケーション内のタスク・フロー

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

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

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

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

図21-3には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるindexビュー・アクティビティが示されています。

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

ビュー・アクティビティ

ヒント:

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


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

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

<view id="index">
   <page>/index.jsf</page>
 </view>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

次のタスクを完了する必要があります。

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

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

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

  1. 「アプリケーション」ウィンドウで、JSFページをダブルクリックします。

  2. エディタ・ウィンドウで、次のオプションのいずれかを使用して、JSFページにUIコンポーネントを追加します。

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

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

  3. 「プロパティ」ウィンドウで、「共通」セクションを開き、「アクション」プロパティ・フィールドの上にカーソルを置いたときに表示されるアイコンから起動するドロップダウン・メニューで、「編集」を選択します。

  4. 「プロパティの編集: アクション」ダイアログで、「アクション結果」を選択して、関連付けられたドロップダウン・リストから値を選択します。

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


    ヒント:

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


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

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

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

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

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

<af:button text="Go" id="b1" action="toOffices">

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

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

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

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

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

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

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

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

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

例21-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式の値は、文字列として表すことができる必要があります。

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

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、ビュー・アクティビティをブックマーク可能として指定するバインドなしタスク・フローをダブルクリックします。

  2. バインドなしタスク・フローのダイアグラムで、ブックマーク可能として指定するビュー・アクティビティを選択します。

  3. 「プロパティ」ウィンドウで、「ブックマーク」セクションを開き、「ブックマーク」ドロップダウン・リストでtrueを選択します。

  4. 「メソッド」フィールドにEL式を入力して、ADF Controllerがアプリケーション・モデルを対応するブックマークURLパラメータ値で更新した後に起動するメソッドを指定します。

  5. ブックマークを付けたビュー・アクティビティのURLに含めるオプションのURLパラメータを追加するには、「追加」をクリックして、「ブックマークURLパラメータ」リストにURLパラメータを入力します。

    • 名前: URLパラメータの名前

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

      「value」プロパティは、ブックマーク可能なURLが生成されたときにURLに含めるパラメータの取得元です。また、ブックマーク可能なURLが参照解除されたときにパラメータはここに格納されます。EL式からNULLが戻されると、そのパラメータはブックマークを付けたビュー・アクティビティのURLから削除されます。例21-5は、ブックマーク・パラメータをビュー・アクティビティURLに追加するために、名前と値を使用する方法を示しています。

    • コンバータ: (オプション)ブックマークのURLパラメータ値(#{pageFlowScope.employee.idConverter}など)の値バインディングを入力できます。

      EL式が参照するオブジェクトは、oracle.adf.controller.URLParameterConverterを実装する必要があります。

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

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

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

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

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

<view id="employee-view">
  <page>/folderA/folderB/display-employee-info.jsf</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>

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、タスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで、「一般」セクションを開き、「リダイレクト」ドロップダウン・リストでtrueを選択します。

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

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

指定すると、クライアントのGETリクエストに応じて、HTTPリダイレクトが発行されます。クライアントのGETでは、ADFコントローラおよびADFモデルでページに新しいバインディング・コンテキストが設定されるまで、#{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リダイレクトを使用してください。


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

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

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

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、URLビュー・アクティビティを追加するタスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで「一般」セクションを開き、「アクティビティID」フィールドにURLビュー・アクティビティを識別するIDを入力します。

  4. 「URL」フィールドには、実行時にURLを返すELを入力します。必要に応じて式ビルダーを使用するには、プロパティ・フィールドの上にカーソルを置いたときに表示されるアイコンをクリックします。

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

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

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

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

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

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

21.3.2 タスク・フローへのURLビュー・アクティビティ追加時の処理

タスク・フローのソース・ファイルのURLビュー・アクティビティに、例21-7のようなエントリが生成されます。

例21-7 URLビュー・アクティビティのサンプル・メタデータ

<url-view id="register">
      <url>#{myOrdersBean.registerNav}</url>
    </url-view>

21.3.3 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ビュー・アクティビティの使用の詳細は、21.3項「URLビュー・アクティビティの使用」を参照してください。

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

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

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

EL式の実行時の評価に基づいて、ルーター・アクティビティを使用し、制御をアクティビティにルーティングします。図21-6は、そこから異なるアクティビティにつながる別の制御フローに分岐可能な、Summit ADFタスク・フロー・サンプル・アプリケーションからのcustomer-task-flow-definition.xmlタスク・フロー内のルーター・アクティビティ(isCustomerLogin)を示しています。

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

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

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

たとえば、図21-6は、ユーザーがログインしており、特定のアプリケーション・ロールを持っているかどうかを特定するEL式の評価に基づいて制御フローを渡すルーター・アクティビティを示しています。Trueの場合,SetCurrentRowWithKeyValueメソッド・コール・アクティビティに制御が渡されます。そうでない場合、Customersビュー・アクティビティに制御が渡されます。


ベスト・プラクティス:

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

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

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


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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、ルーター・アクティビティを使用して制御フローを構成するタスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで、「一般」セクションを開き、次の値を入力します。

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

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

  4. 「ケース」セクションの「追加」アイコンをクリックし、追加したルーター・ケースごとに値を指定します。

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

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

      #{pageFlowScope.value=='view2'}

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

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

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

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

JDeveloperでは、ルーター・アクティビティのプロパティに指定した値に基づいて、タスク・フローのソース・ファイルに値を記述します。例21-8は、ルーター・アクティビティから異なるアクティビティにつながる別の制御フローに分岐する、Summit ADFタスク・フロー・サンプル・アプリケーションからのcustomer-task-flow-definition.xmlタスク・フローに表示される値を示しています。

実行時に、ルーター・アクティビティでは、EL式がtrueを返す場合にoutcomeによって指定される制御フロー・ケースに制御を渡します。

例21-8 Summit ADFタスク・フロー・サンプル・アプリケーションのルーター・アクティビティ

<router id="isCustomerLogin">
      <case id="__4">
        <expression>#{securityContext.userInRole['Application Customer Role']}</expression>
        <outcome>customerLogin</outcome>
      </case>
      <default-outcome>notCustomerLogin</default-outcome>
    </router>
...
<control-flow-case id="__7">
        <from-outcome>customerLogin</from-outcome>
        <to-activity-id>SetCurrentRowWithKeyValue</to-activity-id>
      </control-flow-case>

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

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

図21-7は、Summit ADFタスク・フロー・サンプル・アプリケーションのcustomers-task-flow-definition.xmlを示しています。ここでは、SetCurrentRowWithKeyValueメソッド・コール・アクティビティがBackOfficeAppModuleDataControlデータ・コントロールからsetCurrentRowWithKeyValues操作を起動します。

図21-7 セット行へのメソッド・コール・アクティビティ

セット行へのメソッド・コール・アクティビティ

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

例21-9は、図21-7のメソッド・コール・アクティビティのメタデータを示しています。ここで、fixed-outcome要素は返される結果としてsetCurrentRowWithKeyを指定します。

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

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

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

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

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

たとえば、Summit ADFタスク・フロー・サンプル・アプリケーションで、setCurrentRowWithKeyまたはsetCurrentRowWithKeyValues操作を「データ・コントロール」パネルのBackOfficeAppModuleDataControlデータ・コントロールからダイアグラムにドラッグして、表内で現在の行を表示または選択するメソッド・コール・アクティビティを作成できます。


注意:

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


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


ヒント:

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


始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

次のタスクを完了する必要があります。

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

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、メソッド・コール・アクティビティを追加するタスク・フローをダブルクリックします。

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

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

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

  3. 「プロパティ」ウィンドウで「一般」セクションを開き、デフォルトの値を変更する場合は「アクティビティID」フィールドにアクティビティIDを入力します。

    新規の値を入力すると、ダイアグラムのメソッド・コール・アクティビティの下に新しい値が表示されます。

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

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

    #{bindings.setCurrentRowWithKeyValue.execute}


    注意:

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


    また、図21-8に示される式ビルダーを使用してメソッドのEL式を作成することもできます。

    1. 「メソッド」プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして表示されるポップアップ・メニューから、「メソッド式ビルダー」を選択します。

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

      「式ビルダー」ダイアログは図21-8のようになります。たとえば、図21-8で、式ビルダーの上部に表示されるEL式は、Summit ADFタスク・フロー・サンプル・アプリケーションのemp-reg-task-flow-definition.xmlタスク・フロー内のメソッド・コール・アクティビティから、CreateInsertアクション・バインディングを参照します。

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

      「式ビルダー」ダイアログ内のメソッド用EL式
    3. 「OK」をクリックします。


      ヒント:

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


  5. 「プロパティ」ウィンドウで、「一般」セクションを開き、Outcomeグループ内で次のいずれかを指定します。

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

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

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

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

図21-9 メソッド・コールにおけるメソッド・パラメータ

メソッド・コールにおけるメソッド・パラメータ

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

次のタスクを完了する必要があります。

21.5.1項「メソッド・コール・アクティビティの追加方法」の説明に従って、メソッド・コール・アクティビティをタスク・フロー・ダイアグラムに追加します。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、メソッド・パラメータを追加するメソッド・コール・アクティビティを含むタスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで、「パラメータ」 セクションを開き、「追加」をクリックして追加するパラメータの次の値を設定します。

    • クラス: パラメータのクラスを入力します(例: java.lang.Double)。

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

      #{pageFlowScope.shoppingCart.totalPurchasePrice}

  4. 「戻り値」フィールドに、メソッドの戻り値を格納する場所を識別するEL式を入力します(例: #{pageFlowScope.Return})。

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

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

メソッドのパラメータや戻り値の指定後、XMLソース・ファイルが更新されます。例21-10は、Summit ADFタスク・フロー・サンプル・アプリケーションのcustomers-task-flow-definition.xmlタスク・フロー内のSetCurrentRowWithKeyValueメソッド・コール・アクティビティを示しています。

例21-10 Summit ADFサンプル・アプリケーションのメソッド・コール・アクティビティ

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

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

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

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

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

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


ヒント:

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


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

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

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

  1. タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールします。

  2. パラメータをバインド・タスク・フローに渡す場合は、タスク・フロー・コール・アクティビティに入力パラメータを指定します。

  3. URLを使用して別のWebアプリケーション内のバインド・タスク・フローをコールします。

  4. タスク・フロー・コール・アクティビティにbefore listenerおよびafter listenerを指定します。

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールするには:

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、バインド・タスク・フローをコールするためにタスク・フロー・コール・アクティビティを追加するタスク・フロー(コール元タスク・フロー)をダブルクリックします。

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

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

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

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

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


      ヒント:

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

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

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


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

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

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

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

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

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

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

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

      3. 「動的タスク・フロー参照」プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして表示されるポップアップ・メニューから、「式ビルダー」を選択します。

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

      図21-10には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるcustomers-task-flowタスク・フローが示されています。このタスク・フローには、同じ名前のタスク・フローを起動するタスク・フロー・コール・アクティビティ(create-edit-orders-task-flow-definition)が含まれています。

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

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

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

JDeveloperはバインド・タスク・フローをコールするタスク・フローのソース・ファイルに、メタデータ・エントリを生成します。例21-11は、Summit ADFタスク・フロー・サンプル・アプリケーションの図21-10に対応するメタデータを示しています。実行時に、タスク・フロー・コール・アクティビティはorders-select-many-itemsタスク・フローを起動します。

例21-11 Summit ADFサンプル・アプリケーションのタスク・フロー・コール・アクティビティ

<task-flow-call id="orders-select-many-items">
      <task-flow-reference>
        <document>/WEB-INF/flows/orders/orders-select-many-items.xml</document>
        <id>orders-select-many-items</id>
      </task-flow-reference>
      <run-as-dialog>
        <display-type>
          <inline-popup/>
        </display-type>
      </run-as-dialog>
    </task-flow-call>

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、タスク・フロー・コール・アクティビティを含むタスク・フローをダブルクリックします。

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

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

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

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

      #{pageFlowScope.callingTaskflowParm}

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

      必要に応じて式ビルダーを使用するには、値フィールドをクリックして表示されるドロップダウン・リストを使用します。

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

21.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でのテストの一部として実行する場合でも、その可視性プロパティを確実に設定しておくようにします。


始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、リモートWebアプリケーション内でバインド・タスク・フローを起動するために構成するタスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで、「一般」セクションを開き、バインド・タスク・フローを起動する値を指定します。

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

  4. 「リモート・アプリケーションのURL」プロパティについては、「式ビルダー」を使用して、評価時にリモートWebアプリケーションのURL作成に必要な部分を含む文字列を返すEL式を記述します。プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして表示されるポップアップ・メニューから、「式ビルダー」を選択して、式ビルダーを起動します。

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

    #{myOrdersBean.createOrder}

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


    注意:

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


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

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

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

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

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

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

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

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

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

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

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

21.6.6 URLを使用したバインド・タスク・フローのコールに関する必知事項

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

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

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

#{initParam.remoteAppUrl}

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

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

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

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

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

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

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、コール元タスク・フローをダブルクリックします。

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

  3. 「プロパティ」ウィンドウで、「リスナー」セクションを開き、「リスナーの前」プロパティまたは「リスナーの後」プロパティのどちらかの式ビルダーを開きます。式ビルダーを開くには、プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして起動されるポップアップ・メニューから、「メソッド式ビルダー」を選択します。

    式ビルダーを使用して、そのリスナーのメソッドを含むJavaクラスにナビゲートします。たとえば、次のようなEL式を作成できます。

    #{pageFlowscope.managedBean.methodListener}

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

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

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

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

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

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

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


    注意:

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


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

例21-16 静的なタスク・フロー参照

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

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

例21-17 動的タスク・フロー参照

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

21.6.9 実行時に行われる処理: タスク・フロー・コール・アクティビティがタスク・フローを起動する方法

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

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

  2. 指定した場合、タスク・フロー・コール・アクティビティのbefore listener (1つ以上)を起動します(21.6.7項タスク・フロー・コール・アクティビティにbefore listenerおよびafter listenerを指定する方法」を参照)。

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

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

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

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

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

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

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

タスク・フロー・リターン・アクティビティ・アイコンを囲むグレーの円は、そのアクティビティがバインド・タスク・フローの終了ポイントであることを示します。各バインド・タスク・フローには、ゼロから複数のタスク・フロー・リターン・アクティビティを指定できます。図21-11は、commitおよびrollbackという名前のタスク・フロー・リターン・アクティビティを含む、Summit ADFタスク・フロー・サンプル・アプリケーション内のorders-select-many-items.xmlバインド・タスク・フローを示しています。

各タスク・フロー・リターン・アクティビティには、コール元のタスク・フローに戻されるoutcomeを指定します。たとえば、図21-11には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるタスク・フロー・リターン・アクティビティが示されています。このタスク・フロー・リターン・アクティビティの「結果」の「名前」プロパティの値は、commitです。

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

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

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

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

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

「コンポーネント」ウィンドウからタスク・フロー・リターン・アクティビティをドラッグして、バインド・タスク・フローのダイアグラムにドロップします。

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、タスク・フロー・リターン・アクティビティを追加するバインド・タスク・フローをダブルクリックします。

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

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

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

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

    • <default> (結果に依存しません): 再開は結果に依存しません。

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

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

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

      バインド・タスク・フローの再開の詳細は、24.4項「バインド・タスク・フローの再開」を参照してください。

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

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

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

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

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

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

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

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

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

21.7.2 バインド・タスク・フローへのタスク・フロー・リターン・アクティビティ追加時の処理

JDeveloperは、「プロパティ」ウィンドウでタスク・フロー・リターン・アクティビティに構成した変更に対して、バインド・タスク・フローのソース・ファイルにメタデータ・エントリを生成します。例21-18は、Summit ADFタスク・フロー・サンプル・アプリケーションのorders-select-many-items.xmlタスク・フローに表示されるエントリを示しています。

例21-18 タスク・フロー・リターン・アクティビティのメタデータ・エントリ

 <task-flow-return id="commit">
      <outcome>
        <name>commit</name>
        <commit/>
      </outcome>
    </task-flow-return>
    <task-flow-return id="rollback">
      <outcome>
        <name>rollback</name>
        <rollback/>
      </outcome>
    </task-flow-return>

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

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

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

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

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

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

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

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

始める前に:

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

また、その他のADF機能について理解しておくと役立ちます。詳細は、21.1.2項「タスク・フロー・アクティビティの追加の機能」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、WEB-INFノードを開き、ページ定義ファイルを関連付けるタスク・フロー・アクティビティを含むタスク・フローをダブルクリックします。

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

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

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

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

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

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

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

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

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