Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1.3.0) E90376-03 |
|
前 |
次 |
この章の内容は次のとおりです。
ADFタスク・フロー・アクティビティは、タスクを完了するために実行するタスクのモジュールまたは独立セットです。アクティビティはバインド・タスク・フローとバインドなしタスク・フローの両方に追加できますが、一部のアクティビティはバインド・タスク・フローにのみ追加できます。
アクティビティとは、タスク・フローの実行時に行われる作業を意味しています。これは、タスク・フローのダイアグラム・エディタにノードとして表示されます。ほとんどのアクティビティはバインド・タスク・フローとバインドなしタスク・フローの両方に追加できますが、アクティビティ・タイプによってはバインド・タスク・フローにのみ追加できるものもあります。
図24-1は、ADFタスク・フローのSummitサンプル・アプリケーションから、emp-reg-task-flow-definition.xml
バインド・タスク・フローを示しています。このタスク・フローには次のアクティビティが含まれます。
CreateInsert
アクションを起動するメソッド・コール・アクティビティ
エンド・ユーザーが作成される従業員についての一般情報を入力できるページ・フラグメントをレンダリングするビュー・アクティビティ
エンド・ユーザーが正常に新規の従業員を作成した場合に確認メッセージを表示するページ・フラグメントをレンダリングするビュー・アクティビティ
図24-1 タスク・フロー・アクティビティがあるバインド・タスク・フロー
タスク・フローは、アクティビティ、およびアクティビティ間の遷移を定義する制御フロー・ケースで構成されます。表24-1は、「コンポーネント」ウィンドウからドラッグ・アンド・ドロップすることで、タスク・フローに追加可能なアクティビティ・タイプと制御フローについて説明しています。
表24-1 タスク・フロー・アクティビティと制御フロー
アイコン | コンポーネント名 | 説明 |
---|---|---|
メソッド・コール |
メソッド(通常はマネージドBean上のメソッド)を起動します。メソッド・コール・アクティビティは、制御フロー・ルールに基づいてアプリケーション・ロジックを起動するために、アプリケーションの制御フロー内のどこにでも配置できます。「メソッド・コール・アクティビティの使用」を参照してください。 |
|
親アクション |
バインド・タスク・フローで親ビュー・アクティビティに渡される結果を生成できるようにします。通常、親ビュー・アクティビティのナビゲーションのトリガーを必要とするADFリージョンで実行するバインド・タスク・フローに使用されます。「ADFリージョンのタスク・フロー外への移動」を参照してください。 |
|
ルーター |
EL式を評価して、式の値に基づいて結果を返します。たとえば、クレジット・チェック・タスクフローでのルーターは前のメソッド・コールからの戻り値を評価し、様々なケースに基づいて成功、失敗または再試行の結果を生成します。その後、このような結果を使用して、タスク・フローの他のアクティビティに制御をルーティングします。「ルーター・アクティビティの使用方法」を参照してください。 |
|
セーブポイント・リストア |
後で使用するための保存の機能をサポートするアプリケーションで、アプリケーションの状態やデータなど、以前の永続保存ポイントをリストアします。セーブポイントでは、特定のインスタンスでFusion Webアプリケーションのスナップショットが取得されます。セーブポイント・リストア機能を使用すると、セーブポイントが最初に作成されたときに取得された状態までアプリケーションをリストアできます。「タスク・フローでのセーブポイントの使用」を参照してください。 |
|
タスク・フロー・コール |
バインドなしタスク・フローまたは別のバインド・タスク・フローからバインド・タスク・フローをコールします。「タスク・フロー・コール・アクティビティの使用」を参照してください。 |
|
タスク・フロー・リターン |
バインド・タスク・フローが完了し、コール元に制御が戻されるタイミングを指定します。(バインド・タスク・フローでのみ利用可能)。「タスク・フロー・リターン・アクティビティの使用」を参照してください。 |
|
URLビュー |
ADFリージョンのコンテキスト内からでも、ルート・ビュー・ポート(ブラウザ・ページなど)をURLにアドレス可能なリソースにリダイレクトします。詳細は、「URLビュー・アクティビティの使用」を参照してください。 |
|
表示 |
JSFページまたはページ・フラグメントが表示されます。複数のビュー・アクティビティが同じページまたは同じページ・フラグメントを示すことができます。詳細は、「ビュー・アクティビティの使用方法」を参照してください。ページとページ・フラグメントの詳細は、「Webページの作成」を参照してください。 |
|
制御フロー・ケース |
アプリケーション内で、あるアクティビティから次のアクティビティに制御を渡す方法を指定します。「制御フローについて」を参照してください。 |
|
ワイルドカード制御フロー・ルール |
IDがワイルドカード式と一致するアクティビティからの制御フロー・ケースを表します。たとえば、 |
表24-2に、タスク・フローに追加できる注釈(メモおよび添付ファイル)を示します。
表24-2 タスク・フロー・ダイアグラムの注釈
アイコン | アイコン名 | 説明 |
---|---|---|
ノート |
タスク・フロー・ダイアグラムに注釈を追加します。ダイアグラムでテキストを追加または編集するノートを選択します。 |
|
ノートの添付 |
ダイアグラムで既存のノートをアクティビティまたは制御フロー・ケースに添付します。 |
図24-2には、Summit ADFタスク・フロー・サンプル・アプリケーションにある顧客タスク・フローのダイアグラムが示されています。このタスク・フローでは、タスク完了のためにバインド・タスク・フローが支援する多数のアクティビティが使用されています。Summit ADFサンプル・アプリケーションの詳細は、「ADFサンプル・アプリケーションの概要」を参照してください。
図24-2 Summit ADFタスク・フロー・サンプル・アプリケーション内の顧客タスク・フロー
タスク・フロー・アクティビティを構成または使用する前に、他のOracle ADF機能を理解しておくことは有効だと思われます。さらに、構成後のタスク・フローで実行できる機能について読むことが必要な場合もあります。次に、関連する他の機能へのリンクを示します。
タスク・フローはマネージドBeanを起動します。マネージドBeanの詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。
バインド・タスク・フローのセキュリティは、利用するユーザーに必要な権限を定義することによって確保できます。詳細は、「Fusion WebアプリケーションでのADFセキュリティの有効化」を参照してください。
バインド・タスク・フローは、ADFライブラリJARにパッケージ化できます。詳細は、「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。
タスク・フロー・アクティビティは、ページ定義ファイルとの関連付けができます。ページ定義ファイルの詳細は、「ページ定義ファイルの処理」を参照してください。
ADFタスク・ビュー・アクティビティにより、JSFページまたはページ・フラグメントを表示できます。実行時に、あるタスク・フローから別のタスク・フローに制御を転送できます。ユーザーは、バインドなしタスク・フロー内のビュー・アクティビティをブックマークできます。また、ビュー・アクティビティを構成して、ユーザーにURLへのアクセスを許可できます。
タスク・フロー・アクティビティの主要なタイプの1つにビュー・アクティビティがあります。ビュー・アクティビティは、JSFページまたはページ・フラグメントに表示されます。ページ・フラグメントは、別のJSFページのコンテンツとしてレンダリングされるJSFドキュメントです。「ADFリージョンの作成」の説明のとおり、ページ・フラグメントは通常、リージョンとしてJSFページに追加可能なバインド・タスク・フローで使用されます。
図24-3には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるindex
ビュー・アクティビティが示されています。
図24-3 ビュー・アクティビティ
ヒント:
ビュー・アクティビティの左上にある+アイコンをクリックして、参照したページまたはページ・フラグメントのサムネイル・プレビューを表示します。
タスク・フローのソース・ファイルにあるXMLメタデータでは、ビュー・アクティビティが物理JSFページまたはページ・フラグメントと関連付けられています。id
属性ではビュー・アクティビティが識別されます。<page>
要素では、ページまたはページ・フラグメントのファイル名が識別されます。次の例は、図24-3のビュー・アクティビティに対応するメタデータを示しています。
<view id="index"> <page>/index.jsf</page> </view>
ビュー・アクティビティのIDとページ名は同じである必要はありません。
タスク・フローにビュー・アクティビティを追加する手順は、タスク・フロー・ダイアグラムへのどのアクティビティの追加手順とも同じです。詳細は、「タスク・フローにアクティビティを追加する方法」を参照してください。ビュー・アクティビティの追加後、それをダブルクリックしてウィザードを表示し、新しいページまたはページ・フラグメントを作成できます。ウィザードでは、作成したJSFページまたはページ・フラグメントで次の2つのドキュメント・タイプのうち1つを選択できます。
Facelet
このドキュメント・タイプでのページのファイル拡張子は、ページ・フラグメントの.jsf
および.jsff
になります。
JSP XML
このドキュメント・タイプでのページのファイル拡張子は、ページ・フラグメントの.jspx
および.jsff
になります。
タスク・フローではドキュメント・タイプを1つのみ使用します。たとえば、あるタスク・フローのビュー・アクティビティではFaceletsドキュメント・タイプを使用せず、別のタスク・フローのビュー・アクティビティではJSP XMLドキュメント・タイプを使用しません。ドキュメント・タイプの詳細は、「JSFによるユーザー・インタフェースの実装」を参照してください。
また、ウィザードを使用して、作成したページまたはページ・フラグメントのページ・レイアウトを選択します。ページ・レイアウトの詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』のクイック・スタート・レイアウトの使用に関する項を参照してください。さらに、マネージドBeanのページまたはページ・フラグメントでUIコンポーネントを自動的に公開するかどうかを指定できます。詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。
ウィザードの完了後、JDeveloperでは、完成したページまたはページ・フラグメントがビュー・アクティビティと自動的に関連付けられます。ウィザードを使用しなくても、「アプリケーション」ウィンドウから既存のページまたはページ・フラグメントをドラッグし、既存のビュー・アクティビティ上にドロップすることで、ページまたはページ・フラグメントとビュー・アクティビティとの関連付けを実行できます。ビュー・アクティビティがない場合は、ページまたはページ・フラグメントをダイアグラム上のどこか他の場所にドラッグします。ページまたはページ・フラグメントをドロップすると、JDeveloperでは、ページまたはページ・フラグメントに関連付けられた新規のビュー・アクティビティが自動作成されます。作成時には、ページまたはページ・フラグメントの名前に基づいて、そのビュー・アクティビティのデフォルトのid
が自動的に生成されます(例: index
)。
タスク・フローのビュー・アクティビティは、実行中に相互に制御を受け渡すように構成できます。たとえば、あるビュー・アクティビティ(ビュー・アクティビティA)から次のビュー・アクティビティ(ビュー・アクティビティB)に制御を渡すには、ビュー・アクティビティAと関連付けられたページ上にコマンド・コンポーネント(ボタンまたはリンク)を構成できます。コマンド・コンポーネントのAction属性を、起動が必要なタスク・フロー・アクティビティ(前述の例のビュー・アクティビティB)に相当する制御フロー・ケースのfrom-outcome
に設定します。実行時に、エンド・ユーザーは、コマンド・コンポーネントを起動することで制御フロー・ケースを初期化します。UIコンポーネントのAction属性の定数値または動的値のいずれかを使用して、あるビュー・アクティビティから別なアクティビティに移動できます。
図24-4に示すとおり、コンポーネントのAction属性の定数値はアクション結果で、同じ制御フロー・ケースを常にトリガーします。エンド・ユーザーがコンポーネントをクリックすると、その制御フロー・ケースに指定されているアクティビティが実行されます。代替の制御フローはありません。
コンポーネントのAction属性の動的値はマネージドBeanまたはメソッドにバインドされます。メソッド・バインディングにより返される値によって、次に起動する制御フロー・ケースが決定されます。たとえば、メソッドはページ上でユーザー入力を検証し、入力が有効な場合はある値を返し、入力が無効な場合は別の値を返します。これらの異なるアクション値はそれぞれ別個のナビゲーション・ケースをトリガーするため、アプリケーションが移動可能なターゲット・ページは2つのいずれかになります。
また、ターゲット・ビュー・アクティビティに制御を渡す前に、値が必ずtrue
になるEL式を記述できます。タスク・フローにある制御フロー・ケースの<if>
子要素の値としてEL式を記述します。詳細は、「タスク・フローに制御フロー・ルールを追加する方法」を参照してください。
コマンド・コンポーネントのaction
属性の値として、制御フロー・ケースのfrom-outcome
属性の値を指定することで、ビュー・アクティビティに制御を渡します。
始める前に:
ビュー・アクティビティ間での制御の受渡しを構成する際に、利用可能なオプションを理解しておくと有効な場合があります。詳細は、「ビュー・アクティビティ間の制御の受渡し」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
次のタスクを完了する必要があります。
エンド・ユーザーが実行時にコマンド・コンポーネントを起動した後に制御を受け取るターゲット・ビュー・アクティビティの作成
エンド・ユーザーが実行時に起動したコマンド・コンポーネントをホストするJSFページの作成
ビュー・アクティビティに制御を渡すには:
次の例は、バインド・タスク・フローまたはバインドなしタスク・フローの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>
例24-1に示すように、Startビュー・アクティビティに関連付けられているJSFページ上のボタンで、action属性としてtoOffices
が指定されます。ユーザーがボタンをクリックすると、制御フロー・メタデータでto-activity-id
として指定されたWesternOffices
アクティビティに制御フローが渡されます。
例24-1 ビュー・アクティビティで定義された静的ナビゲーション・ボタン
<af:button text="Go" id="b1" action="toOffices">
バインドなしタスク・フロー内のビュー・アクティビティにのみ、ブックマークを使用できます。
ビュー・アクティビティに関連付けられたページにエンド・ユーザーがブックマークを付けると、そのビューのブラウザのアドレス・フィールドに表示されているURLがブックマークとして保存されます。ほとんどの場合、このURLはビューに関連付けられているページの再表示に使用できません。たとえば、URLには状態の情報が含まれることがあり、それを使用してページを再表示することはできません。
ブックマークのURLには、ページ上の動的コンテンツを再現するための情報が含まれている必要があります。たとえば、エンド・ユーザーが顧客の連絡先情報を表示するページにブックマークを付ける場合、ブックマークのURLには、ページに加えてその顧客を識別する情報も必要です。これにより、ユーザーがブックマークを使用してそのページに戻ったときに、同じ顧客の連絡先情報を表示できるようになります。
ブラウザに表示されているページのURLをブックマークとして使用できることを確認するには、そのページに関連付けられているビュー・アクティビティがブックマーク可能であることを識別します。
実行時に、バインドなしタスク・フロー内のビュー・アクティビティがブックマーク可能として指定されているかどうかをisViewBookmarkable()
メソッドを使用して識別できます。メソッドはビュー・ポート・コンテキストとは離れて配置されています。
ビュー・アクティビティをブックマーク可能として指定すると、オプションで1つ以上のURLパラメータを指定できます。url-parameter
の値はEL式です。EL式は、ブックマーク可能なURLが生成されたときにURLに含めるパラメータの取得元を指定します。また、ブックマーク可能なURLが参照解除されたときにURLから値を格納します。ブックマーク可能なビュー・アクティビティのURLを介してパラメータが渡されたときに変換および検証を実行するメソッドは、converter
オプションで識別されます。
さらに、送信されたURLパラメータ値でアプリケーション・モデルが更新された後、およびビュー・アクティビティをレンダリングする前に起動されるメソッドをオプションで指定することもできます。このメソッドを使用して、URLパラメータのキー値に基づいて追加情報を取得できます。
次の例は、ブックマークを付けたビュー・アクティビティの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式の値は、文字列として表すことができる必要があります。
例24-2は、バインドなしタスク・フロー内のブックマーク可能なビュー・アクティビティ用のサンプルURLを示しています。
例24-2 ブックマーク可能なビュー・アクティビティのサンプルURL
http://mycompany.com/internalApp/MyApp/faces/edit-customers?customer-id=1234&...
ブックマーク可能なビュー・アクティビティを作成するには、ビュー・アクティビティをブックマーク可能として指定し、ブックマークにURLパラメータを指定して、ブックマークが参照解除された後に実行されるメソッドを指定します。
始める前に:
ブックマーク可能なビュー・アクティビティの作成に必要な構文を理解しておくと役に立つ場合があります。詳細は、「ビュー・アクティビティのブックマーク」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
ビュー・アクティビティをブックマーク可能として指定するには:
ビュー・アクティビティをブックマーク可能として指定すると、次の例に示すように、ビュー・アクティビティのメタデータにbookmark要素が追加されます。bookmark要素には、URLパラメータと、ブックマークが参照解除された後に実行されるメソッドを指定するメタデータをオプションで含めることができます。
<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>
ビュー・アクティビティを構成することで、顧客の要求に応じて実行時にURLへリダイレクトできるようにします。これによって、ADFコントローラでは、ビュー・アクティビティに新規のブラウザ用URLを作成できます。ビュー・アクティビティの元のURLは使用されなくなります。「ビュー・アクティビティのブックマーク」の説明のとおり、ビュー・アクティビティをすでにブックマーク可能にしている場合は、ビュー・アクティビティのHTTPリダイレクトを構成できません。
ビュー・アクティビティのredirect
プロパティをtrue
に設定します。
始める前に:
ビュー・アクティビティのredirect
プロパティをtrue
に設定した場合の影響について理解しておくと役に立つ場合があります。詳細は、「ビュー・アクティビティへのHTTPリダイレクトの指定」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
ビュー・アクティビティにHTTPリダイレクトを指定するには:
true
を選択します。 ADFコントローラは、ビュー・アクティビティの要求に応じて、HTTPリダイレクトを発行します。リダイレクトされたリクエストによって、ビュー・アクティビティ用に新しいブラウザのURLが作成されます。ビューの元のURLは使用できなくなります。
指定すると、クライアントのGET
リクエストに応じて、HTTPリダイレクトが発行されます。クライアントのGET
では、ADFコントローラおよびADFモデルでページに新しいバインディング・コンテキストが設定されるまで、#{bindings}
ELスコープは無効です。したがって、HTTPリダイレクトを指定したビュー・アクティビティには、次のようなEL式の使用はできません。
#{bindings.foo}
注意:
http://www.mycompany.org/x.html
でhttp://www.mycompany.org/y.html
の内容をかわりに表示する場合、次のようなリフレッシュ方法は使用しないでください。
<META HTTP-EQUIV=REFRESH CONTENT="1; URL=http://www.example.org/bar">
この方法は「戻る」ボタンの動作に悪影響を及ぼすことがあります。エンド・ユーザーがブラウザの「戻る」ボタンをクリックすると再度リフレッシュが行われ、予想どおり元のページに戻るのではなく次のページに進みます。
この場合は、かわりにHTTPリダイレクトを使用してください。
Fusion WebアプリケーションがレンダリングするURLには、現在のコンテキストに基づいて実行時に生成される形式があります。
ビュー・アクティビティがバインド・タスク・フローにある場合、アプリケーションは次の形式でURLをレンダリングします。
http://www.example.com/web-app-context-root/faces/task-flow-id/view-activity-ID
ビュー・アクティビティがバインドなしタスク・フローにある場合、アプリケーションは次の形式でURLをレンダリングします。
http://www.example.com/web-app-context-root/faces/view-activity-ID
エンド・ユーザーに対してよりわかりやすい名前のURLが表示されるように、ビュー・アクティビティのURL別名を指定できます。デフォルトで生成される値のかわりに、指定したURL別名値がレンダリングされます。たとえば、果物に関するデータを管理するタスク・フローで、リンゴおよびオレンジに関する情報を表示および編集するビュー・アクティビティを設定できます。このシナリオでは、エンド・ユーザーがリンゴおよびオレンジのビュー・アクティビティ・ページにナビゲートすると、Fusion Webアプリケーションによって次のようなURL別名がレンダリングされます。
http://www.example.com/web-app-context-root/faces/fruit/apples http://www.example.com/web-app-context-root/faces/fruit/oranges
URL別名に様々なレベルを指定して、エンド・ユーザーが階層を意識するようにできます。つまり、ビュー・アクティビティのURL別名では次の両方の値が有効です。
/food/fruit/pineapple /drink/juice/pineapple
ただし、指定するURL別名は、ビュー・アクティビティが含まれているタスク・フロー内で一意である必要があります。
レンダリングするビュー・アクティビティのURL別名を指定する対象はJSFページであり、JSFページ・フラグメントではありません。この後者のタイプのドキュメントがブラウザに直接レンダリングされることはありません。
ビュー・アクティビティの「View-ID」プロパティ(<view-id>
)の値を記述して、ビュー・アクティビティのURL別名を指定します。
始める前に:
ビュー・アクティビティのURL別名を指定するときにどのようなオプションを使用できるかについて理解しておくと、役立つ場合があります。詳細は、「ビュー・アクティビティのURL別名の指定」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
次のタスクを完了する必要があります。
実行時にJSFページをレンダリングするビュー・アクティビティを作成します
実行時にエンド・ユーザーが表示するJSFページを作成します
ビュー・アクティビティのURL別名を指定する手順は次のとおりです。
ADFタスク・フロー・アクティビティは、URLを表示でき、URLビュー・アクティビティを使用するときにユーザーが外部リソースに移動できるようにすることができます。このアクティビティを使用して、ユーザーを同じアプリケーション内の場所にリダイレクトしたり、Webアプリケーションの外部のリージョンに移動するようにユーザーをリダイレクトできます。
URLビュー・アクティビティを使用すると、ADFリージョンのコンテキスト内からでも、ルート・ビュー・ポート(ブラウザ・ページなど)をURLにアドレス可能なリソースにリダイレクトできます。URLアドレス可能なリソースには次が含まれます。
バインド・タスク・フロー
バインドなしタスク・フロー内のビュー・アクティビティ
現在のWebアプリケーションの外にあるアドレス(たとえばhttp://www.oracle.com
)
リソースを表示するには、実行時に評価してリソースへのURLを生成するEL式を指定します。さらに、評価時にパラメータおよびパラメータ値としてURLに追加されるEL式を指定することもできます。
URLビュー・アクティビティでは、実行元のビュー・ポート(ルート・ビュー・ポートまたはADFリージョン)には関係なく、クライアントがリダイレクトされます。ビュー・アクティビティの<redirect>
要素は、そのビュー・アクティビティがルート・ビュー・ポート内にある場合のみ使用されることを除けば、同様の方法で実行されます。<redirect>
要素は、ADFリージョンのコンテキスト内では無視されます。「ビュー・アクティビティへのHTTPリダイレクトの指定」を参照してください。
<redirect>
要素ではなくURLビュー・アクティビティを使用した同じアプリケーション内の他の場所へのリダイレクトは、タスク・フロー・スタックがクリーンアップされるため、「戻る」ボタンでの移動と同様に処理されます。Webアプリケーション外部へのリダイレクトは、アプリケーション外部のサイトのURLを参照解除する場合のように処理されます。
URLビュー・アクティビティをバインドまたはバインドなしタスク・フローに追加できます。
始める前に:
URLビューをタスク・フローの機能に追加した場合の影響について理解しておくと役に立つ場合があります。詳細は、「URLビュー・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
タスク・フローへのURLビュー・アクティビティの追加手順:
タスク・フローのソース・ファイルのURLビュー・アクティビティに、次の例のようなエントリが生成されます。
<url-view id="register"> <url>#{myOrdersBean.registerNav}</url> </url-view>
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ポートレット・アプリケーション内の場所を参照し、値がtrue
のx_DirectLink
と呼ばれるqueryString
パラメータを含まない場合は、これを含むページ内のポートレットがURLビュー・アクティビティで指定されたURLに移動します。
それ以外の場合、クライアントはURLビュー・アクティビティで指定されたURLにリダイレクトされます。
タスク・フローのURLビュー・アクティビティの使用の詳細は、「URLビュー・アクティビティの使用」を参照してください。
URLの取得に使用できるメソッドの詳細は、Oracle ADF ControllerのJava APIリファレンスを参照してください。
タスク・フローの作成時に、EL式の実行時の評価に基づいてユーザーをアクティビティに送ることが必要な場合があります。ADFルーター・アクティビティにより、このような制御を適切なアクティビティにルーティングできます。
EL式の実行時の評価に基づいて、ルーター・アクティビティを使用し、制御をアクティビティにルーティングします。図24-6は、そこから異なるアクティビティにつながる別の制御フローに分岐可能な、Summit ADFタスク・フロー・サンプル・アプリケーションからのcustomer-task-flow-definition.xml
タスク・フロー内のルーター・アクティビティ(isCustomerLogin)を示しています。
図24-6 代替制御フロー・ケースのルーター
各制御フローは、異なるルーター・ケースに対応できます。各ルーター・ケースでは、次の要素を使用して、制御が次にルーティングされるアクティビティを選択します。
expression
: 実行時の値がtrue
またはfalse
になるEL式
ルーター・アクティビティは、true
を返すEL式に対応する結果を返します。
outcome
: EL式の値がtrue
の場合にルーター・アクティビティから返される値(customerLogin
など)
制御フロー・ケース上でルーター・ケースのoutcome
がfrom-outcome
と一致する場合は、制御フロー・ケースがポイントするアクティビティに制御が渡されます。ルーター・アクティビティのケースの値がtrue
でない場合、またはルーター・アクティビティのケースが指定されていない場合は、ルーターの「デフォルト結果」
フィールドで指定されているoutcomeが使用されます。
たとえば、図24-6は、ユーザーがログインしており、特定のアプリケーション・ロールを持っているかどうかを特定するEL式の評価に基づいて制御フローを渡すルーター・アクティビティを示しています。Trueの場合,SetCurrentRowWithKeyValueメソッド・コール・アクティビティに制御が渡されます。そうでない場合、Customersビュー・アクティビティに制御が渡されます。
注意:
EL式にルーティング条件を表示できる場合は、ルーター・アクティビティを使用します。
ルーター・アクティビティを使用すると、それを含むタスク・フローの設計時により多くのことができます。ルーター・アクティビティでは、タスク・フローの条件に関するより多くの情報を表示できます。これにより、タスク・フローのダイアグラムを閲覧するユーザーにとってより読みやすく、有効な情報になります。
また、ルーター・アクティビティを使用すると、後でアプリケーションを変更しやすくなります。たとえば、ルーティング条件を後で変更または追加できます。
「コンポーネント」ウィンドウからタスク・フローのダイアグラムまでルーター・アクティビティをドラッグすることによって制御フローを定義します。ルーター・アクティビティの「アクティビティID」および「デフォルト結果」を構成し、ルーター・ケースをルーター・アクティビティに追加します。
始める前に:
機能に影響を及ぼす可能性のあるルーター・アクティビティのプロパティを理解しておくと役に立つ場合があります。詳細は、「ルーター・アクティビティの使用方法」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
ルーター・アクティビティを使用して制御フローを構成するには:
JDeveloperでは、ルーター・アクティビティのプロパティに指定した値に基づいて、タスク・フローのソース・ファイルに値を記述します。例24-3は、ルーター・アクティビティから異なるアクティビティにつながる別の制御フローに分岐する、Summit ADFタスク・フロー・サンプル・アプリケーションからのcustomer-task-flow-definition.xml
タスク・フローに表示される値を示しています。
実行時に、ルーター・アクティビティでは、EL式がtrue
を返す場合にoutcome
によって指定される制御フロー・ケースに制御を渡します。
例24-3 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>
ADFタスク・フローにより、カスタム・メソッドをコールしたり、メソッド・コール・アクティビティを使用して組込みメソッドを呼び出すことができます。メソッド・コール・アクティビティとの間の制御フローを定義できます。メソッド・コールの結果は、fixed-outcomeとして、またはto-stringの結果として指定できます。
メソッド・コール・アクティビティを使用して、アプリケーションの制御フロー内のどこからでもアプリケーション・ロジックを起動する、カスタム・メソッドまたは組込みメソッドをコールします。ページ表示前の初期化、ページ終了後のクリーンアップ、例外処理などのタスクを実行するメソッドを指定できます。
図24-7は、Summit ADFタスク・フロー・サンプル・アプリケーションのcustomers-task-flow-definition.xml
を示しています。ここでは、SetCurrentRowWithKeyValue
メソッド・コール・アクティビティがBackOfficeAppModuleDataControl
データ・コントロールからsetCurrentRowWithKeyValues
操作を起動します。
図24-7 セット行へのメソッド・コール・アクティビティ
制御フロー・ケースを指定してメソッドの終了後に制御を渡すメソッドに対して結果を設定できます。結果には次のいずれかを指定できます。
fixed-outcome
: 正常完了時に、メソッドから常に戻される単一の結果(例: success
)。メソッドが正常に完了しないと結果は戻されません。メソッド・タイプがvoidの場合、to-string
ではなくfixed-outcome
を指定する必要があります。
to-string
: true
として指定されると、メソッドによって戻されたJavaオブジェクトに対してtoString()
メソッドがコールされ、それに基づく結果が得られます。たとえば、toString()
からeditBasicInfo
が戻された場合、ナビゲーションはeditBasicInfo
という名前の制御フロー・ケースに移動します。
次の例は、図24-7のメソッド・コール・アクティビティのメタデータを示しています。ここで、fixed-outcome
要素は返される結果としてsetCurrentRowWithKey
を指定します。
<method-call id="SetCurrentRowWithKeyValue"> <method>#{bindings.setCurrentRowWithKeyValue.execute}</method> <outcome> <fixed-outcome>setCurrentRowWithKey</fixed-outcome> </outcome>
制御フローの詳細は、「制御フローについて」を参照してください。
「コンポーネント」ウィンドウからタスク・フローのダイアグラムまでメソッド・コール・アクティビティをドラッグします。メソッド・コール・アクティビティは、「データ・コントロール」パネルからタスク・フロー・ダイアグラム内のメソッド・コール・アクティビティにデータ・コントロール操作を直接ドロップして、既存のメソッドに関連付けることができます。
たとえば、Summit ADFタスク・フロー・サンプル・アプリケーションで、setCurrentRowWithKey
またはsetCurrentRowWithKeyValues
操作を「データ・コントロール」パネルのBackOfficeAppModuleDataControl
データ・コントロールからダイアグラムにドラッグして、表内で現在の行を表示または選択するメソッド・コール・アクティビティを作成できます。
注意:
データ・コントロール・メソッドのパラメータは、ADFコントローラのメタデータ内ではなく、対応するページのページ定義に定義されます。
メソッドおよび操作はタスク・フロー・ダイアグラムにも直接ドラッグできます。ダイアグラム上にドロップすると、新しいメソッド・コール・アクティビティが自動的に作成されます。メソッドにEL式およびその他のオプションを指定できます。
ヒント:
メソッド・コール・アクティビティが起動するメソッドを識別するには、タスク・フロー・ダイアグラム内で任意のアクティビティを右クリックし、「メソッドに移動」を選択します。JDeveloperはメソッド・コール・アクティビティが起動するメソッドに移動します。
始める前に:
メソッド・コール・アクティビティのプロパティがタスク・フローの機能に与える影響について理解しておくと有効な場合があります。詳細は、「メソッド・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
次のタスクを完了する必要があります。
タスク・フローへのメソッド・コール・アクティビティの追加手順:
「アプリケーション」ウィンドウで、WEB-INFノードを開き、メソッド・コール・アクティビティを追加するタスク・フローをダブルクリックします。
「コンポーネント」ウィンドウの「ADFタスク・フロー」ページで、「コンポーネント」パネルの「アクティビティ」グループから、メソッド・コール・アクティビティをドラッグして、ダイアグラムへドロップします。
メソッド・コール・アクティビティには、オプションでデフォルトのアクティビティIDであるmethodCall
n
とメソッドのEL式がまだ指定されていないことを示す警告アイコンが表示されます。
警告アイコンの有効化の詳細は、「タスク・フローにアクティビティを追加する方法」を参照してください。
「プロパティ」ウィンドウで「一般」セクションを開き、デフォルトの値を変更する場合は「アクティビティID」フィールドにアクティビティIDを入力します。
新規の値を入力すると、ダイアグラムのメソッド・コール・アクティビティの下に新しい値が表示されます。
「メソッド」フィールドには、コールするメソッドを識別するEL式を入力します。
たとえば、ELバインディング式を次のように入力します。
#{bindings.setCurrentRowWithKeyValue.execute}
注意:
EL式のbindings
変数は、現在のバインディング・コンテナからADFモデル・バインディングを参照します。バインディング変数を指定するには、バインディング・コンテナ定義またはページ定義を指定する必要があります。詳細は、「ページ定義ファイルでの作業」を参照してください。
また、図24-8に示される式ビルダーを使用してメソッドのEL式を作成することもできます。
「メソッド」プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして表示されるポップアップ・メニューから、「メソッド式ビルダー」を選択します。
「式ビルダー」ダイアログで、起動するメソッドにナビゲートして選択します。
「式ビルダー」ダイアログは図24-8のようになります。たとえば、図24-8で、式ビルダーの上部に表示されるEL式は、Summit ADFタスク・フロー・サンプル・アプリケーションのemp-reg-task-flow-definition.xml
タスク・フロー内のメソッド・コール・アクティビティから、CreateInsert
アクション・バインディングを参照します。
図24-8 「式ビルダー」ダイアログ内のメソッド用EL式
「OK」をクリックします。
ヒント:
メソッド・コール・アクティビティでマネージドBeanメソッドを起動する場合は、ダイアログでメソッド・コール・アクティビティをダブルクリックします。これによってダイアログが呼び出され、そこで起動するマネージドBeanメソッドを指定できます。
「プロパティ」ウィンドウで、「一般」セクションを開き、Outcomeグループ内で次のいずれかを指定します。
固定結果: 正常完了時に、メソッドから常に戻される単一の結果(例: success
)。メソッドが正常に完了しないと結果は戻されません。メソッド・タイプが無効の場合は、to-stringの値ではなく、「固定結果」の値を指定する必要があります。
tostring(): 「True」を選択すると、メソッドから戻されたJavaオブジェクトに対してtoString()
メソッドがコールされ、それに基づく結果が得られます。
メソッドのパラメータや戻り値を指定することができます。図24-9は、calculateSalesTax
というメソッドに1つのパラメータが定義された「プロパティ」ウィンドウを示しています。「値」フィールドには、実行時に値がパラメータ値になるEL式が含まれています。
図24-9 メソッド・コールにおけるメソッド・パラメータ
メソッド・コール・アクティビティを既存のメソッドに関連付けることによってパラメータをまだ作成していない場合は、パラメータを追加します。
始める前に:
メソッド・コール・アクティビティのプロパティがタスク・フローの機能に与える影響について理解しておくと有効な場合があります。詳細は、「メソッド・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
次のタスクを完了する必要があります。
メソッド・パラメータを追加するには:
メソッドのパラメータや戻り値の指定後、XMLソース・ファイルが更新されます。例24-4は、Summit ADFタスク・フロー・サンプル・アプリケーションのcustomers-task-flow-definition.xml
タスク・フロー内のSetCurrentRowWithKeyValue
メソッド・コール・アクティビティを示しています。
例24-4 Summit ADFサンプル・アプリケーションのメソッド・コール・アクティビティ
<method-call id="SetCurrentRowWithKeyValue"> <method>#{bindings.setCurrentRowWithKeyValue.execute}</method> <outcome> <fixed-outcome>setCurrentRowWithKey</fixed-outcome> </outcome> </method-call>
ADFタスク・フローにより、バインド・タスク・フローをコールして、バインドまたはバインドなしタスク・フローから一連のアクティビティを実行できます。これは、タスク・フローでアクティビティのセットを繰り返し実行する場合、または別のアクティビティの結果に基づいてアクティビティを実行する場合に役立ちます。
タスク・フロー・コール・アクティビティを使用すると、バインドなしタスク・フローまたはバインド・タスク・フローのいずれかからバインド・タスク・フローをコールできます。タスク・フロー・コール・アクティビティによって、同じアプリケーション内または別のアプリケーション内にあるバインド・タスク・フローをコールできます。
コールされたバインド・タスク・フローでは、デフォルト・アクティビティが最初に実行されます。バインド・タスク・フロー・コールの数に制限はありません。たとえば、コール先のバインド・タスク・フローから別のバインド・タスク・フローをコールでき、さらにそのバインド・タスク・フローからも次々にコールできるため、各タスク・フローがタスク間を結び付けるタスク・フロー・チェーンを作成できます。
バインド・タスク・フローにパラメータを渡すには、タスク・フロー・コール・アクティビティに入力パラメータの値を指定する必要があります。これらの値は、コール先のバインド・タスク・フローの入力パラメータ定義と一致している必要があります。詳細は、「タスク・フロー・コール・アクティビティへの入力パラメータの指定方法」を参照してください。
また、次の点にも注意してください。
タスク・フロー・コール・アクティビティの「入力パラメータ」の値は、コール元のタスク・フロー内で値が取得される場所を指定します。
コール先のタスク・フローの「入力パラメータの定義」の値は、値が渡されたときにコール先のバインド・タスク・フローで値が格納される場所を指定します。
ヒント:
バインド・タスク・フローがタスク・フロー・コール・アクティビティに関連付けられると、バインド・タスク・フローで定義されている入力パラメータ定義に基づいて、入力パラメータが自動的にタスク・フロー・コール・アクティビティに挿入されます。したがって、アプリケーション開発者が実行する必要があるのは、タスク・フロー・コール・アクティビティの入力パラメータへの値の割当てのみです。
デフォルトでは、すべてのオブジェクトは参照渡しされます。プリミティブ型(int
、long
、boolean
など)は常に値で渡されます。
バインド・タスク・フローからコール元に戻り値が渡される方法は、入力パラメータが渡される方法と類似しています。詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。
タスク・フロー・コール・アクティビティを使用するには:
タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールします。
パラメータをバインド・タスク・フローに渡す場合は、タスク・フロー・コール・アクティビティに入力パラメータを指定します。
URLを使用して別のWebアプリケーション内のバインド・タスク・フローをコールします。
タスク・フロー・コール・アクティビティにbefore listenerおよびafter listenerを指定します。
コール側のバインドまたはバインド・タスク・フローまたはバインドなしタスク・フローにタスク・フロー・コール・アクティビティを追加し、バインド・タスク・フローをコールします。
始める前に:
タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、「タスク・フロー・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールするには:
「アプリケーション」ウィンドウで、WEB-INFノードを開き、バインド・タスク・フローをコールするためにタスク・フロー・コール・アクティビティを追加するタスク・フロー(コール元タスク・フロー)をダブルクリックします。
「コンポーネント」ウィンドウの「ADFタスク・フロー」ページで、「コンポーネント」パネルの「アクティビティ」グループから、「タスク・フロー・コール」アクティビティをドラッグして、ダイアグラムへドロップします。
次のオプションのいずれかを選択して、コール先タスク・フローを識別します。
タスク・フロー・ダイアグラムで、タスク・フロー・コール・アクティビティをダブルクリックします。
「バインド・タスク・フローの作成」ダイアログが表示され、そこで新規バインド・タスク・フロー作成のオプションを指定できます。
「アプリケーション」ウィンドウから既存のバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップします。
ヒント:
バインド・タスク・フローをページまたはページ・フラグメントにドロップできます。バインド・タスク・フローがページで(ページ・フラグメントではなく)構成される場合、表示される「ボタンとしてのタスク・フロー・コール」または「リンクとしてのタスク・フロー・コール」メニュー・オプションを選択して、タスク・フローをドロップするページ上にボタンまたはリンク・コンポーネントを追加します。エンド・ユーザーは、ボタンまたはリンクをクリックしてタスク・フローをコールできます。ページがタスク・フローの既存のビュー・アクティビティに関連付けられている場合、このようにするとタスク・フロー・コール・アクティビティが同様に自動的に作成されます。
たとえ両方のアプリケーションが「アプリケーション」ウィンドウ内に表示されているとしても、「アプリケーション」ウィンドウで、あるアプリケーションから別のアプリケーション内のタスク・フロー・ダイアグラムにバインド・タスク・フローをドロップすることはできません。さらに、あるプロジェクトのバインド・タスク・フローを、別なプロジェクトのタスク・フロー・ダイアグラムにドロップすることはできません。
そのかわり、バインド・タスク・フローをADFライブラリにパッケージ化して、現在のアプリケーションまたはプロジェクトで再利用できます。その後、ライブラリのインポート時に作成される「リソース」ウィンドウまたは「コンポーネント」ウィンドウ・ページから、バインド・タスク・フローをドラッグできます。詳細は、「「リソース」ウィンドウの使用」を参照してください。
起動するバインド・タスク・フローの名前がわかっている場合は、次の手順を実行します。
タスク・フロー・ダイアグラムで、タスク・フロー・コール・アクティビティを選択します。
「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」ドロップダウン・リストで「静的」を選択します。
「ドキュメント」フィールドに、コールするバインド・タスク・フローのソース・ファイル名を入力します。たとえば、called-task-flow-definition.xml
などです。
「ID」フィールドには、たとえばtargetTaskFlow
など、コール先のバインド・タスク・フローのXMLソース・ファイルに含まれているバインド・タスク・フローIDを入力します。
起動するバインド・タスク・フローの名前がわからない場合、実行時のエンド・ユーザーによって異なる場合は、次の手順を実行します。
タスク・フロー・ダイアグラムで、タスク・フロー・コール・アクティビティを選択します。
「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」ドロップダウン・リストで「動的」を選択します。
「動的タスク・フロー参照」プロパティ・フィールド上にカーソルを置いたときに表示されるアイコンをクリックして表示されるポップアップ・メニューから、「式ビルダー」を選択します。
実行時に起動するバインド・タスク・フローのIDを識別するEL式を記述します。
図24-10には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるcustomers-task-flow
タスク・フローが示されています。このタスク・フローには、同じ名前のタスク・フローを起動するタスク・フロー・コール・アクティビティ(create-edit-orders-task-flow-definition)が含まれています。
図24-10 バインド・タスク・フローを起動するタスク・フロー・コール・アクティビティ
JDeveloperはバインド・タスク・フローをコールするタスク・フローのソース・ファイルに、メタデータ・エントリを生成します。例24-5は、Summit ADFタスク・フロー・サンプル・アプリケーションの図24-10に対応するメタデータを示しています。実行時に、タスク・フロー・コール・アクティビティはorders-select-many-items
タスク・フローを起動します。
例24-5 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>
タスク・フロー・コール・アクティビティとそのコール先のバインド・タスク・フローの間でパラメータをマップするには、まずコール先のバインド・タスク・フローの入力パラメータ定義を指定する方法をお薦めします。その後、「アプリケーション」ウィンドウからバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップできます。タスク・フロー・コール・アクティビティの入力パラメータは、バインド・タスク・フローの入力パラメータ定義に基づいて自動的に作成されます。詳細は、「バインド・タスク・フローへのパラメータ渡し」を参照してください。
当然ながら、最初にタスク・フロー・コール・アクティビティに入力パラメータを指定することも可能です。最初に定義した場合にも、コール先のバインド・タスク・フローの入力パラメータ定義がタスク・フロー・コール・アクティビティに関連付けられた時点で、その入力パラメータ定義に基づいて自動的に置換されます。
コール先のバインド・タスク・フローをまだ作成していない場合にも、タスク・フロー・コール・アクティビティに入力パラメータを指定する方法は便利です。この時点で指定することで、バインド・タスク・フローのコール時にタスク・フロー・コール・アクティビティが最終的にマップされる予定の入力パラメータを特定できます。
始める前に:
タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、「タスク・フロー・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
入力パラメータをタスク・フロー・コール・アクティビティに指定するには:
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でのテストの一部として実行する場合でも、その可視性プロパティを確実に設定しておくようにします。
始める前に:
タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、「タスク・フロー・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
URLを使用してバインド・タスク・フローをコールする手順:
JDeveloperはリモートWebアプリケーション内でバインド・タスク・フローに対するタスク・フロー・コール・アクティビティを起動するタスク・フローのソース・ファイルに、メタデータ・エントリを生成します。次の例は、タスク・フロー・コール・アクティビティのエントリを示しています。
<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>
前述の例のcreateOrder
メソッドは、バインド・タスク・フローの起動に必要なURL構文とともに文字列を返します。返される文字列に必要な部分の説明とURLの例を含むURL構文の詳細は、「URLを使用したバインド・タスク・フローのコールに関する必知事項」を参照してください。
JDeveloperはバインド・タスク・フローのソース・ファイル構成時にも、そこにエントリを生成し、URLでコールできるようにします。次の例は、URLによるバインド・タスク・フローの起動を許可するメタデータ・エントリ例を示しています。
<task-flow-definition id="task-flow-definition3"> <visibility id="__2"> <url-invoke-allowed/> <library-internal/> </visibility> </task-flow-definition>
ローカル・アプリケーションのデプロイメント記述子にコンテキスト・パラメータを追加することで、リモートWebアプリケーションとの対話管理が容易になります。
リモートWebアプリケーションのコンテキスト・パラメータ
URLを使用して別なFusion Webアプリケーション(リモート・アプリケーション)内のバインド・タスク・フローを起動する場合は、Fusion Webアプリケーション(ローカル・アプリケーション)のデプロイメント記述子(web.xml
)へのコンテキスト・パラメータの追加をお薦めします。コンテキスト・パラメータ値をリモート・アプリケーションのURLに設定します。ローカル・アプリケーションでEL式を記述する際は、次の例のようにコンテキスト・パラメータ名を使用します。ここでremoteAppUrl
はコンテキスト・パラメータ名です。
#{initParam.remoteAppUrl}
リモート・アプリケーションのURLが変更した場合は、コンテキスト・パラメータを更新して、変更後のURLを参照させます。
パラメータ・コンバータのオブジェクト型
パラメータ・コンバータを指定している場合は、そのコンバータを使用して、URLで使用されている文字列表現とタスク・フロー・パラメータ値の間で変換が行えます。パラメータ・コンバータは以下の型のオブジェクトを評価するEL式です。
oracle.adf.controller.UrlParameterConverter
パラメータ・コンバータを指定しない場合は、デフォルト・コンバータがパラメータにcross-site-scripting (XSS)攻撃がないことを確認します。アプリケーション内で使用されているパラメータに特殊文字が含まれていることがわかっている場合は、UrlParameterConverter
を独自に実装し、タスク・フロー・パラメータ値の変換に使用する必要があります。
バインド・タスク・フローを起動するURL構文
一般的には、マネージドBeanメソッドを参照し、URLの必要な部分を取得するEL式を記述します。または、次の例のようにURLを直接返すEL式を記述することもできます。
http://somecompany.com/internalApp/MyApp/faces/adf.task-flow?adf.tfId=displayHelp& adf.tfDoc=%2FWEB-INF%2Fdisplayhelp.xml&topic=createPurchaseOrder
例24-6では、バインド・タスク・フローを起動するURL構文部分を説明します。
次のリストで、例24-6の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にこれらの名前が表示されても、使用または依存しないでください。
例24-6 名前付きパラメータを使用してバインド・タスク・フローをコールするURL構文
<server root>/<app_context>/faces/adf.task-flow?adf.tfid=<task flow definition ID>&adf.tfDoc=<document name>&<named parameter>=<named parameter value>
タスク・フロー・コール・アクティビティの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はコールされません。バインド・タスク・フローのファイナライザを使用して、取得しているリソースをすべて解放し、エンド・ユーザーがブラウザの「戻る」ボタンをクリックして離れたバインド・タスク・フローのクリーンアップを実行する必要があります。
始める前に:
タスク・フロー・コール・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、「タスク・フロー・コール・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
タスク・フロー・コール・アクティビティにbefore listenerまたはafter listenerを指定するには:
タスク・フロー・コール・アクティビティをタスク・フロー・ダイアグラムに追加した後、「タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール方法」で説明したいずれかの方法で、コール先のバインド・タスク・フローへの参照を指定する必要があります。たとえば、既存のバインド・タスク・フローをタスク・フロー・コール・アクティビティにドロップすると、JDeveloperではタスク・フロー参照が自動的に生成されます。タスク・フロー参照は、コール先のバインド・タスク・フローを起動するために使用されます。
タスク・フロー参照が静的の場合は、各タスク・フロー参照は次から構成されます。
ドキュメント: コール先のバインド・タスク・フローのIDを記述したXMLソース・ファイルの名前。ドキュメントを指定しない場合、adfc-config.xml
であると判断されます。
このドキュメントは物理XMLファイルで、MDSを介してアクセスできなければなりません。
ID: コール先のバインド・タスク・フローのXMLソース・ファイルに記述されているバインド・タスク・フローのIDです。たとえば、コール先のタスク・フローにはtargetFlow
というidがある場合があります。同じXMLソース・ファイルには複数のバインド・タスク・フローを含めることができ、各タスク・フローが一意のIDで識別されます。
注意:
JDeveloperを使用してバインド・タスク・フローを作成した場合、バインド・タスク・フローは各ドキュメントに1つのみです。
次の例は、タスク・フロー・コール・アクティビティ内の静的なタスク・フロー参照の例を示しています。バインド・タスク・フローを起動するには、そのフローのIDと、IDが記述されているファイルの名前(<document>
)を把握している必要があります。
<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>
次の例は、タスク・フロー・コール・アクティビティ内の動的タスク・フロー参照用にJDeveloperが生成するメタデータを示しています。
<?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>
ADFコントローラでは、タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローがコールされたときに次の手順が実行されます。
ユーザーにバインド・タスク・フローをコールする権限があることを確認します。
指定した場合、タスク・フロー・コール・アクティビティのbefore listener (1つ以上)を起動します(「タスク・フロー・コール・アクティビティにbefore listenerおよびafter listenerを指定する方法」を参照)。
バインド・タスク・フローの入力パラメータ値を評価します。
コール先のバインド・タスク・フローをスタックに格納して、そのページ・フロー・スコープを初期化します。
コール先のバインド・タスク・フローのコンテキストに入力パラメータ値を設定します。
バインド・タスク・フローのイニシャライザ・メソッドを指定している場合は、そのメソッドを起動します。
バインド・タスク・フローのデフォルト・アクティビティを実行します。
ADFタスク・フロー・コール・アクティビティが起動され、そのデフォルト・アクティビティが完了した後、起動されたアプリケーションに制御を戻す必要があります。タスク・フロー・リターン・アクティビティは、制御フローを識別し、コール元アプリケーションに送るのに役立ちます。このアクティビティは、バインド・タスク・フロー内でのみ使用できます。
タスク・フロー・リターン・アクティビティは、アプリケーションの制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。タスク・フロー・リターン・アクティビティは、バインド・タスク・フロー内でのみ使用できます。
タスク・フロー・リターン・アクティビティ・アイコンを囲むグレーの円は、そのアクティビティがバインド・タスク・フローの終了ポイントであることを示します。各バインド・タスク・フローには、ゼロから複数のタスク・フロー・リターン・アクティビティを指定できます。図24-11は、commit
およびrollbackという名前のタスク・フロー・リターン・アクティビティを含む、Summit ADFタスク・フロー・サンプル・アプリケーション内のorders-select-many-items.xmlバインド・タスク・フローを示しています。
各タスク・フロー・リターン・アクティビティには、コール元のタスク・フローに戻されるoutcome
を指定します。たとえば、図24-11には、Summit ADFタスク・フロー・サンプル・アプリケーションにあるタスク・フロー・リターン・アクティビティが示されています。このタスク・フロー・リターン・アクティビティの「結果」の「名前」プロパティの値は、commit
です。
図24-11 複数のタスク・フロー・リターン・アクティビティ
起動するタスク・フローに戻されるoutcome
は、エンド・ユーザー・アクションによって異なります。起動元のタスク・フローによって次のアクションを決定するように、起動元のタスク・フローの制御フロー・ケースを構成できます。制御フロー・ケースの「結果(自)」プロパティをタスク・フロー・リターン・アクティビティのoutcome
からの戻り値に設定し、結果に基づくアクションを起動します。これにより、コール先タスク・フローからの戻り値に基づいて制御フローが決まります。
「セーブポイントのリストア」プロパティの値を設定して、バインド・タスク・フローの終了時に、タスク・フロー・リターン・アクティビティを使用して、バインド・タスク・フロー内で行われたモデル変更を保存または破棄するように指定します。true
に設定すると、Fusion Webアプリケーションが最初にバインド・タスク・フローを開始した際に作成された、ADFモデルのセーブポイントまでトランザクションをロールバックします。デフォルト値はfalse
です。このプロパティ値は、タスク・フロー・リターン・アクティビティがあるバインド・タスク・フローの開始時に新しいトランザクションが開始されない場合にのみ指定できます。「バインド・タスク・フローでトランザクションを有効化する方法」を参照してください。
「コンポーネント」ウィンドウからタスク・フロー・リターン・アクティビティをドラッグして、バインド・タスク・フローのダイアグラムにドロップします。
始める前に:
タスク・フロー・リターン・アクティビティとタスク・フローとの対話方法を理解しておくと役に立つ場合があります。詳細は、「タスク・フロー・リターン・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
タスク・フロー・リターン・アクティビティをバインド・タスク・フローに追加するには:
JDeveloperは、「プロパティ」ウィンドウでタスク・フロー・リターン・アクティビティに構成した変更に対して、バインド・タスク・フローのソース・ファイルにメタデータ・エントリを生成します。次の例は、Summit ADFタスク・フロー・サンプル・アプリケーションのorders-select-many-items.xml
タスク・フローに出現するエントリを示しています。
<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>
ページ定義ファイルは、実行時にADFアプリケーションにデータを移入するバインディング・オブジェクトを定義します。ページ定義ファイルを使用して、ADFタスク・フロー・アクティビティをデータ・コントロールにバインドできます。
ページ定義ファイルは、実行時にデータを移入するバインディング・オブジェクトを定義します。通常、Fusion Webアプリケーションで、ページのUIコンポーネントとデータ・コントロールをバインドするために使用されます。いくつかのタスク・フロー・アクティビティでも、ページ定義を使用してデータ・コントロールへのバインドが可能です。それらは次のとおりです。
メソッド・コール
「データ・コントロール」パネルからタスク・フローにデータ・コントロール操作をドラッグ・アンド・ドロップして、メソッド・コール・アクティビティを作成するか、既存のメソッド・コール・アクティビティにドロップできます。いずれの場合も、メソッド・コール・アクティビティが、データ・コントロール操作にバインドされます。
ルーター
ルーター・アクティビティにページ定義ファイルを関連付けることで、バインド・コンテナが作成されます。このバインド・コンテナは実行時にルーター・アクティビティ・ケースのEL式を評価し、ルーター・アクティビティが正しいバインド値を参照していることを確認します。各ルーター・アクティビティ・ケースは、EL式の評価結果がtrue
かどうかを、outcome
に戻すように指定します。そのため、ページ定義ファイルには、true
またはfalse
の評価結果となるデータ・コントロール操作だけを追加します。
タスク・フロー・コール
タスク・フロー・コール・アクティビティにページ定義ファイルを関連付けることで、バインド・コンテナが作成されます。実行時にタスク・フロー・コール・アクティビティから入力パラメータが渡されると、バインド・コンテナが起動します。バインド・コンテナはタスク・コール元のタスク・フローからコール先のタスク・フローに入力パラメータが渡される際に、フロー・コール・アクティビティがバインド値を参照する場合は、正しい値を参照していることを確認します。
表示
ビュー・アクティビティをページ定義ファイルに直接関連付けることはできません。かわりに、ビュー・アクティビティが参照するページを関連付けます。
タスク・フローのダイアグラマ内で、上記のタスク・フロー・アクティビティ(ビュー・アクティビティを除く)のいずれかを右クリックすると、JDeveloperがコンテキスト・メニューにオプションを表示します(「ページ定義の作成」) 。ページ定義ファイルが作成されていない場合は、このオプションを使用して作成できます。ページ定義ファイルがある場合は、JDeveloperはページ定義ファイルに移動するためのすべてのタスク・フロー・アクティビティのコンテキスト・メニュー・オプション(「ページ定義に移動」)を表示します。ページ定義ファイルに関連付けられたメソッド・コール・アクティビティを右クリックして、JDeveloperでコンテキスト・メニュー・オプション(「バインディングの編集」)を表示することもできます。
ページ定義ファイルに関連付けられたタスク・フロー・アクティビティでは、タスク・フロー・アクティビティ・アイコンの右下にアイコンが表示されます。図24-12は、各タスク・フロー・アクティビティの例を示しています。
JDeveloperにはタスク・フロー・アクティビティからアクセスできるコンテキスト・メニュー・オプションがあります。このコンテキスト・メニュー・オプションを使用して、タスク・フロー・アクティビティをページ定義ファイルに関連付けます。
始める前に:
タスク・フロー・アクティビティによるページ定義ファイルの使用方法を理解しておくと役に立つ場合があります。詳細は、「ページ定義ファイルのあるタスク・フロー・アクティビティの使用」を参照してください。
また、その他のADF機能について理解しておくと役立ちます。詳細は、「タスク・フロー・アクティビティの追加機能」を参照してください。
タスク・フロー・アクティビティにページ定義ファイルを関連付けるには:
設計時に、JDeveloperはタスク・フロー・アクティビティのページ定義ファイルを生成します。ページ定義ファイルのファイル名は、元のタスク・フローおよびタスク・フロー・アクティビティまたは起動するデータ・コントロール操作から構成されます。たとえば、taskflowName_taskflowName_methodCall1PageDef.xml
またはtaskflowName_taskflowName_CreateInsertPageDef.xml
のような名前が付けられます。
JDeveloperは作成されたページ定義ファイル内で、タスク・フロー・アクティビティからバインドへのEL式も生成します。次の例は、CreateInsert
アクション・バインドを参照するメソッド・コール・アクティビティを示しています。
<method-call id="CreateInsert"> <method>#{bindings.CreateInsert.execute}</method> <outcome> <fixed-outcome>CreateInsert</fixed-outcome> </outcome> </method-call>
実行時にバインド・コンテナは、タスク・フロー・アクティビティのEL式が正しい値を参照していることを確認します。