Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1.2.0) E82918-03 |
|
前 |
次 |
この章の内容は次のとおりです。
パラメータがADFタスク・フローで使用される場合、タスク・フローの範囲をデフォルト・アクティビティから複数のアクティビティに拡張できます。たとえば、タスク・フロー内のデータを操作したり、複数のタスク・フロー間でデータを共有できます。
入力パラメータを受け取り、パラメータ値を戻すタスク・フローの機能によって、タスク・フローのデータを操作できるほか、タスク・フロー間でデータを共有できます。これらの機能を使用して、Fusion Webアプリケーションでのタスク・フローの再利用を最適化できます。
ビュー・アクティビティ入力ページ・パラメータは別名として使用できます。別名を使用すると、バインド・タスク・フロー入力パラメータをページ・パラメータにマップできるようになります。ビュー・アクティビティ入力ページ・パラメータは、コール元のタスク・フローで使用可能なマネージドBeanおよび情報をページ自体のマネージドBeanにマップします。ビュー・アクティビティから値を渡すには、値をpageFlowスコープまたはマネージドBeanに格納します。タスク・フローでのビュー・アクティビティの使用方法の詳細は、「ビュー・アクティビティの使用」を参照してください。
たとえば、ページではページ・パラメータとして#{pageFlowScope.empNo}
を指定し、バインド・タスク・フローでは入力パラメータ定義の値として#{pageFlowScope.employeeID}
を指定できます。
ビュー・アクティビティ入力ページ・パラメータのfrom-value
は#{pageFlowScope.employeeID}
になり、to-value
は#{pageFlowScope.empNo}
になると考えられます。これにより、ページ定義とバインド・タスク・フローの両方が再利用できるのは、それぞれで使用するコンテキストごとにパラメータを再定義する必要がないからです。
タスク・フロー内に含まれている他の値は、バインド・タスク・フローの入力パラメータ定義値のみでなく、入力ページ・パラメータにもマップできます。
図25-1は、pageFlowスコープ内のユーザーについての情報を保持する入力パラメータ定義を定義するタスク・フローを示しています。
図25-1 入力パラメータを定義するタスク・フロー
パラメータを使用してタスク・フローを構成または使用する前に、他のOracle ADFの機能を理解しておくと役に立つ場合があります。さらに、構成後のタスク・フローで実行できる機能について読むことが必要な場合もあります。次に、関連する他の機能へのリンクを示します。
データ・コントロールはタスク・フロー間で共有できます。データ・コントロールの共有の詳細は、「タスク・フロー間のデータ・コントロールの共有」を参照してください。
タスク・フローは、タスク・フローに登録されたマネージドBeanにアクセスできます。マネージドBeanとタスク・フローの詳細は、「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。
バインド・タスク・フローのセキュリティは、利用するユーザーに必要な権限を定義することによって確保できます。詳細は、「Fusion WebアプリケーションでのADFセキュリティの有効化」を参照してください。
値を変更せずにあるアクティビティから別のアクティビティに値を渡す場合は、ADFタスク・フロー・ビュー・アクティビティが役立ちます。EL式またはリテラル式を使用して、パラメータを値に、または値をマネージドBeanに渡すことができます。
図25-2は、入力ページ・パラメータ・マッピングの構成方法を示しています。pageFlowScope
値またはマネージドBeanの値として、Employeeアクティビティにパラメータを渡すことができます。EL式またはリテラル式を使用して、Employeeアクティビティにパラメータを渡すことができます。Employeeアクティビティは、Targetアクティビティに渡す値をto-value
要素に指定することによって、Targetアクティビティに値を渡すことができます。
図25-2 2つのアクティビティのあるタスク・フロー
パラメータを渡すビュー・アクティビティに1つまたは複数の入力ページ・パラメータを追加します。
始める前に:
ビュー・アクティビティの入力ページ・パラメータを定義する前に、利用可能な構成オプションを理解しておくと役に立つ場合があります。詳細は、「ビュー・アクティビティへのパラメータ渡し」を参照してください。
また、他のタスク・フローの機能を使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、「パラメータを使用したタスク・フローの追加の機能」を参照してください。
ビュー・アクティビティの入力ページ・パラメータを定義するには:
次の例の説明のとおり、JDeveloperでは設計時にタスク・フローのソース・ファイルに対するエントリが記述されます。
<view id="reducedAccess"> <page>/secured/Information.jsf</page> <input-page-parameter> <from-value>#{res['infoUsage.reducedAccess.messageHeader']}</from-value> <to-value>#{pageFlowScope.infoPageHeaderText}</to-value> </input-page-parameter> <input-page-parameter> <from-value>#{res['infoUsage.reducedAccess.messageHeader']}</from-value> <to-value>#{pageFlowScope.infoPageMsg}</to-value> </input-page-parameter> <input-page-parameter> <from-value>info</from-value> <to-value>#{pageFlowScope.infoPageType}</to-value> </input-page-parameter> </view>
実行時に、ビュー・アクティビティでは、<from-value>
要素で指定した場所から入力パラメータの値が取得されます。ビュー・アクティビティによって、パラメータの値は、<to-value>
要素で指定した場所にある関連付けられたページで利用可能になります。
タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールするか、あるいはADFリージョンまたはADF動的リージョンでバインド・タスク・フローをレンダリングする場合は、標準EL式を使用してパラメータ値を指定できます。たとえば、次のEL式の構文を使用してパラメータを指定できます。
#{bindings.bindingId.inputValue}
#{CustomerBean.zipCode}
次の例は、ADFリージョンでレンダリングするタスク・フロー・バインディングのメタデータを示しています。
<taskFlow id="Department1" taskFlowId="/WEB-INF/Department.xml#Department" xmlns="http://xmlns.oracle.com/adf/Controller/binding"> <parameters> <parameter id="DepartmentId" value="#{bindings.DepartmentId.inputValue}" xmlns="http://xmlns.oracle.com/adfm/uimodel"/> </parameters> </taskFlow>
inputValue
をEL式に追加することで、実際のバインディング・オブジェクトではなく、バインディングの値をパラメータに確実に割り当てられます。
ADFタスク・フローを通じて、バインド・タスク・フローをコールし、値を渡すことができます。バインド・タスク・フローは、入力パラメータを通じて、またはタスク・フロー・バインディングから値を受け取ることができます。バインド・タスク・フローを起動するタスク・フローで1つ以上の入力パラメータおよびパラメータ定義を指定できます。
コール先のバインド・タスク・フローは、コール元のタスク・フローまたはタスク・フロー・バインディングから入力パラメータを受け取ることができます。バインド・タスク・フローに入力パラメータを渡すには、次のうちの1つまたは複数を指定します。
コール元のタスク・フローにあるタスク・フロー・コール・アクティビティの入力パラメータ
入力パラメータによって、パラメータ値を格納するコール元のタスク・フローの場所が指定されます。
コール先のバインド・タスク・フローの入力パラメータ定義
入力パラメータ定義によって、実行時にコール先のバインド・タスク・フローがパラメータ値を取得できる場所が指定されます。
コール元のタスク・フローにあるタスク・フロー・コール・アクティビティで定義する入力パラメータおよびコール先のバインド・タスク・フローの入力パラメータ定義と同じ名前を指定します。これを行うことで、コール先のバインド・タスク・フローに入力パラメータ値をマップできます。
入力パラメータの値を参照するEL式を指定しない場合は、value
のEL式のデフォルト値を実行時に次のように設定します。
#{pageFlowScope.
parmName}
ここで、parmName
は、入力パラメータ名に入力した値です。
コール先のバインド・タスク・フローの入力パラメータ定義では、必要に応じて入力パラメータを指定できます。入力パラメータが実行時または設計時に値を受け取らない場合、タスク・フローは、そのタスク・フローを含むFusion Webアプリケーションのログ・ファイル内に警告を生成します。必要に応じて指定しない入力パラメータは、タスク・フロー・コール・アクティビティの作成時に無視できます。
タスク・フロー・コール・アクティビティを使用してタスク・フローをコールする場合は、ADFリージョンのタスク・フローをコールしないかぎり、タスク・フロー・コール・アクティビティの入力パラメータを参照渡しまたは値渡しにできます。ADFリージョンでタスク・フローがレンダリングする場合は、タスク・フロー・コール・アクティビティは入力パラメータを参照渡しします。デフォルトでは、プリミティブ・タイプ(int
、long
、boolean
など)が値渡し(pass-by-value
)されます。
「値渡し」チェックボックスは、プリミティブではなくオブジェクトにのみ適用され、参照渡しのデフォルト設定をオーバーライドするために使用されます。ただし、これらの2つを併用すると、パラメータが相互に参照する場合に予期しない動作につながる可能性があります。タスク・フロー・コール・アクティビティの入力パラメータAが値渡しで、タスク・フロー・コール・アクティビティの入力パラメータBが参照渡しの場合、BにAへの参照が含まれていると、AとBで2つの異なるインスタンスが生じる可能性があります。
「バインド・タスク・フローに入力パラメータを渡す方法」では、タスク・フロー・コール・アクティビティを使用して、コール元のタスク・フローからコール先のバインド・タスク・フローに入力パラメータを渡す方法が説明されています。コール元のタスク・フローのどのアクティビティからもパラメータ値を渡せますが、「バインド・タスク・フローに入力パラメータを渡す方法」で渡したパラメータには、コール元のタスク・フローにあるページの入力テキスト・フィールドの値が含まれています。
タスク・フロー・コール・アクティビティではなくURLを使用してバインド・タスク・フローをコールする場合は、URL自体にパラメータと値を渡します。「URLを使用したバインド・タスク・フローのコール方法」を参照してください。
タスク・フロー間でパラメータとしてデータ・コントロールを明示的に受け渡すかわりに、コール先のバインド・タスク・フローのdata-control-scope
オプションを指定することで単にそれらを共有できます。詳細は、「タスク・フロー間のデータ・コントロールの共有」を参照してください。
また、コール先のタスク・フローは、終了時にコール元のタスク・フローに値を戻すことができます。バインド・タスク・フローからの戻り値の詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。
コール元のタスク・フローとコール先のタスク・フローの値を定義します。
始める前に:
バインド・タスク・フローを構成して入力パラメータを取得する前に、利用可能な構成オプションを理解しておくと有効な場合があります。詳細は、「バインド・タスク・フローへのパラメータ渡し」を参照してください。
また、他のタスク・フローの機能を使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、「パラメータを使用したタスク・フローの追加の機能」を参照してください。
次のタスクを完了する必要があります。
コール元およびコール先のタスク・フローを作成します。
コール元のタスク・フローは、バインドまたはバインドなしにできます。コール先のタスク・フローはバインドにする必要があります。タスク・フローの作成の詳細は、「タスク・フローの作成」を参照してください。
タスク・フロー・コール・アクティビティをコール元のタスク・フローに追加します。
図25-3には、ビュー・アクティビティがタスク・フロー・コール・アクティビティに制御を渡す例が示されています。
図25-3 コール元のタスク・フロー
入力パラメータをバインド・タスク・フローに渡すには:
JDeveloperでは、選択した値に基づいて、コール元のタスク・フローとコール先のタスク・フローのソース・ファイルに対しエントリを記述します。例25-1は、バインド・タスク・フローで指定された入力パラメータ定義を示しています。
例25-2は、例25-1で示したバインド・タスク・フローをコールするタスク・フロー・コール・アクティビティの入力パラメータ・メタデータを示しています。実行時に、タスク・フロー・コール・アクティビティはバインド・タスク・フローをコールして、そのvalue
要素で指定された値を渡します。
例25-1 入力パラメータ定義
<task-flow-definition id="sourceTaskflow"> ... <input-parameter-definition> <name>inputParameter1</name> <value>#{pageFlowScope.parmValue1}</value> <class>java.lang.String</class> </input-parameter-definition> ... </task-flow-definition>
例25-2 タスク・フロー・コール・アクティビティの入力パラメータ
<task-flow-call id="taskFlowCall1"> ... <input-parameter> <name>inputParameter1</name> <value>#{pageFlowScope.newCustomer}</value> <pass-by-value/> </input-parameter> ... </task-flow-call>
バインド・タスク・フローはADFタスク・フローから起動でき、値を渡すことができます。バインド・タスク・フローは、送信された値の処理時に、パラメータ値をコール元のタスク・フローに返します。戻り値は、バインド・タスク・フローがコール元タスク・フローに返す結果アクティビティに追加されるものです。バインド・タスク・フローで戻り値定義を追加し、コール元タスク・フローで値を返す必要があります。
バインド・タスク・フローでは、パラメータ値をコール元のタスク・フローに返すように構成できます。「タスク・フロー・リターン・アクティビティの使用」の説明のとおり、バインド・タスク・フローがタスク・フロー・リターン・アクティビティを起動した場合は、バインド・タスク・フローが返す値は、コール元に返す結果を補うものとなります。値を返すには、次のものを構成する必要があります。
コール先のバインド・タスク・フローでの戻り値の定義
戻り値の定義では、コール先のバインド・タスク・フローから戻す値を格納する場所が指定されます。
コール元のタスク・フローにあるタスク・フロー・コール・アクティビティの戻り値(これにより、コール元のタスク・フローでは、戻された値を検出できる場所が識別されます)
コール元のタスク・フローにあるタスク・フロー・コール・アクティビティのすべての戻り値を識別しないことによって、コール元のタスク・フローでは、コール先のタスク・フローから返された戻り値の定義を無視するように構成できます。
タスク・フロー・コール・アクティビティは値を参照で戻します。これは、コール元のタスク・フローに戻す値のコピーを作成する必要がなくなるからです。
コール先のタスク・フローにある戻り値の定義を構成し、実行時に戻り値を取得するコール元のタスク・フローのタスク・フロー・コール・アクティビティにパラメータを追加します。
始める前に:
コール元のタスク・フローとコール先のタスク・フローとの間の対話について理解しておくと役に立つ場合があります。詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。
また、他のタスク・フローの機能やパラメータを使用して追加可能な機能を理解しておくと有効な場合があります。詳細は、「パラメータを使用したタスク・フローの追加の機能」を参照してください。
次のタスクを完了する必要があります。
コール先のバインド・タスク・フローの戻り値を構成するには:
設計時にJDeveloperでは、構成したタスク・フローのソース・ファイルに対してエントリを記述します。次の例は、コール元のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリを示しています。
<task-flow-call id="taskFlowCall1"> <return-value id="__3"> <name id="__4">returnValue1</name> <value id="__2">#{pageFlowScope.ReturnValueDefinition}</value> </return-value> </task-flow-call>
次の例は、コール先のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリを示しています。
<return-value-definition id="__2"> <name id="__3">returnValue1</name> <value>#{pageFlowScope.ReturnValueDefinition}/</value> <class>java.lang.String</class> </return-value-definition>
実行時に、コール先のタスク・フローが値を返します。この構成の場合は、コール元のタスク・フローにあるタスク・フロー・コール・アクティビティがその値を取得します。