プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発
12c (12.2.1.2.0)
E82918-03
目次へ移動
目次

前
次

25 タスク・フローのパラメータの使用

この章では、Fusion Webアプリケーションで作成するビュー・アクティビティおよびADFバインド・タスク・フローでパラメータを構成する方法について説明します。これらの機能を使用することで、タスク・フローのデータを操作したり、1つまたは複数のトランザクションにまたがるタスク・フロー間でデータを共有したり、1つのタスク・フローから別のタスク・フローに戻される戻り値を構成したりできます。

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

25.1 タスク・フローのパラメータの使用について

パラメータがADFタスク・フローで使用される場合、タスク・フローの範囲をデフォルト・アクティビティから複数のアクティビティに拡張できます。たとえば、タスク・フロー内のデータを操作したり、複数のタスク・フロー間でデータを共有できます。

入力パラメータを受け取り、パラメータ値を戻すタスク・フローの機能によって、タスク・フローのデータを操作できるほか、タスク・フロー間でデータを共有できます。これらの機能を使用して、Fusion Webアプリケーションでのタスク・フローの再利用を最適化できます。

ビュー・アクティビティ入力ページ・パラメータは別名として使用できます。別名を使用すると、バインド・タスク・フロー入力パラメータをページ・パラメータにマップできるようになります。ビュー・アクティビティ入力ページ・パラメータは、コール元のタスク・フローで使用可能なマネージドBeanおよび情報をページ自体のマネージドBeanにマップします。ビュー・アクティビティから値を渡すには、値をpageFlowスコープまたはマネージドBeanに格納します。タスク・フローでのビュー・アクティビティの使用方法の詳細は、「ビュー・アクティビティの使用」を参照してください。

たとえば、ページではページ・パラメータとして#{pageFlowScope.empNo}を指定し、バインド・タスク・フローでは入力パラメータ定義の値として#{pageFlowScope.employeeID}を指定できます。

ビュー・アクティビティ入力ページ・パラメータのfrom-value#{pageFlowScope.employeeID}になり、to-value#{pageFlowScope.empNo}になると考えられます。これにより、ページ定義とバインド・タスク・フローの両方が再利用できるのは、それぞれで使用するコンテキストごとにパラメータを再定義する必要がないからです。

タスク・フロー内に含まれている他の値は、バインド・タスク・フローの入力パラメータ定義値のみでなく、入力ページ・パラメータにもマップできます。

25.1.1 タスク・フロー・パラメータのユース・ケースと例

図25-1は、pageFlowスコープ内のユーザーについての情報を保持する入力パラメータ定義を定義するタスク・フローを示しています。

図25-1 入力パラメータを定義するタスク・フロー

この図は周囲のテキストで説明しています

25.1.2 パラメータを使用したタスク・フローの追加の機能

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

25.2 ビュー・アクティビティへのパラメータ渡し

値を変更せずにあるアクティビティから別のアクティビティに値を渡す場合は、ADFタスク・フロー・ビュー・アクティビティが役立ちます。EL式またはリテラル式を使用して、パラメータを値に、または値をマネージドBeanに渡すことができます。

図25-2は、入力ページ・パラメータ・マッピングの構成方法を示しています。pageFlowScope値またはマネージドBeanの値として、Employeeアクティビティにパラメータを渡すことができます。EL式またはリテラル式を使用して、Employeeアクティビティにパラメータを渡すことができます。Employeeアクティビティは、Targetアクティビティに渡す値をto-value要素に指定することによって、Targetアクティビティに値を渡すことができます。

図25-2 2つのアクティビティのあるタスク・フロー

この図は周囲のテキストで説明しています

25.2.1 ビュー・アクティビティにパラメータを渡す方法

パラメータを渡すビュー・アクティビティに1つまたは複数の入力ページ・パラメータを追加します。

始める前に:

ビュー・アクティビティの入力ページ・パラメータを定義する前に、利用可能な構成オプションを理解しておくと役に立つ場合があります。詳細は、「ビュー・アクティビティへのパラメータ渡し」を参照してください。

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

ビュー・アクティビティの入力ページ・パラメータを定義するには:

  1. 「アプリケーション」ウィンドウで、パラメータを渡すビュー・アクティビティを含むタスク・フローのソース・ファイルをダブルクリックします。
  2. 「プロパティ」ウィンドウで、タスク・フローのダイアグラムにあるビュー・アクティビティを選択して、「ページ・パラメータ」カテゴリを開きます。
  3. 「入力ページ・パラメータ」リストで、「追加」アイコンをクリックし、次のように値を入力します。
    • 値(自): EL式の評価時に、入力ページ・パラメータの値を受け取るビュー・アクティビティの場所を指定するEL式を記述します。たとえば、次のようなEL式を記述します。

      #{pageFlowScope.EmployeeID}

      「バインド・タスク・フローに入力パラメータを渡す方法」の説明に従って、タスク・フローに定義した入力パラメータの値に対応する「値(自)」に対してEL式を記述する場合は、タスク・フローに入力された値を受け取るビュー・アクティビティを構成できます。

    • 値(至): EL式の評価時に、ビュー・アクティビティと関連付けられたページが入力ページ・パラメータの値を取得できる場所を指定するEL式を記述します。たとえば、次のようなEL式を記述します。

      #{pageFlowScope.EmployeeNo}

25.2.2 ビュー・アクティビティにパラメータを渡すときの処理

次の例の説明のとおり、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>要素で指定した場所にある関連付けられたページで利用可能になります。

25.2.3 パラメータ値の指定に関する必知事項

タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールするか、あるいは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式に追加することで、実際のバインディング・オブジェクトではなく、バインディングの値をパラメータに確実に割り当てられます。

25.3 バインド・タスク・フローへのパラメータ渡し

ADFタスク・フローを通じて、バインド・タスク・フローをコールし、値を渡すことができます。バインド・タスク・フローは、入力パラメータを通じて、またはタスク・フロー・バインディングから値を受け取ることができます。バインド・タスク・フローを起動するタスク・フローで1つ以上の入力パラメータおよびパラメータ定義を指定できます。

コール先のバインド・タスク・フローは、コール元のタスク・フローまたはタスク・フロー・バインディングから入力パラメータを受け取ることができます。バインド・タスク・フローに入力パラメータを渡すには、次のうちの1つまたは複数を指定します。

  • コール元のタスク・フローにあるタスク・フロー・コール・アクティビティの入力パラメータ

    入力パラメータによって、パラメータ値を格納するコール元のタスク・フローの場所が指定されます。

  • コール先のバインド・タスク・フローの入力パラメータ定義

    入力パラメータ定義によって、実行時にコール先のバインド・タスク・フローがパラメータ値を取得できる場所が指定されます。

コール元のタスク・フローにあるタスク・フロー・コール・アクティビティで定義する入力パラメータおよびコール先のバインド・タスク・フローの入力パラメータ定義と同じ名前を指定します。これを行うことで、コール先のバインド・タスク・フローに入力パラメータ値をマップできます。

入力パラメータの値を参照するEL式を指定しない場合は、valueのEL式のデフォルト値を実行時に次のように設定します。

#{pageFlowScope.parmName}

ここで、parmNameは、入力パラメータ名に入力した値です。

コール先のバインド・タスク・フローの入力パラメータ定義では、必要に応じて入力パラメータを指定できます。入力パラメータが実行時または設計時に値を受け取らない場合、タスク・フローは、そのタスク・フローを含むFusion Webアプリケーションのログ・ファイル内に警告を生成します。必要に応じて指定しない入力パラメータは、タスク・フロー・コール・アクティビティの作成時に無視できます。

タスク・フロー・コール・アクティビティを使用してタスク・フローをコールする場合は、ADFリージョンのタスク・フローをコールしないかぎり、タスク・フロー・コール・アクティビティの入力パラメータを参照渡しまたは値渡しにできます。ADFリージョンでタスク・フローがレンダリングする場合は、タスク・フロー・コール・アクティビティは入力パラメータを参照渡しします。デフォルトでは、プリミティブ・タイプ(intlongbooleanなど)が値渡し(pass-by-value)されます。

「値渡し」チェックボックスは、プリミティブではなくオブジェクトにのみ適用され、参照渡しのデフォルト設定をオーバーライドするために使用されます。ただし、これらの2つを併用すると、パラメータが相互に参照する場合に予期しない動作につながる可能性があります。タスク・フロー・コール・アクティビティの入力パラメータAが値渡しで、タスク・フロー・コール・アクティビティの入力パラメータBが参照渡しの場合、BにAへの参照が含まれていると、AとBで2つの異なるインスタンスが生じる可能性があります。

「バインド・タスク・フローに入力パラメータを渡す方法」では、タスク・フロー・コール・アクティビティを使用して、コール元のタスク・フローからコール先のバインド・タスク・フローに入力パラメータを渡す方法が説明されています。コール元のタスク・フローのどのアクティビティからもパラメータ値を渡せますが、「バインド・タスク・フローに入力パラメータを渡す方法」で渡したパラメータには、コール元のタスク・フローにあるページの入力テキスト・フィールドの値が含まれています。

タスク・フロー・コール・アクティビティではなくURLを使用してバインド・タスク・フローをコールする場合は、URL自体にパラメータと値を渡します。「URLを使用したバインド・タスク・フローのコール方法」を参照してください。

タスク・フロー間でパラメータとしてデータ・コントロールを明示的に受け渡すかわりに、コール先のバインド・タスク・フローのdata-control-scopeオプションを指定することで単にそれらを共有できます。詳細は、「タスク・フロー間のデータ・コントロールの共有」を参照してください。

また、コール先のタスク・フローは、終了時にコール元のタスク・フローに値を戻すことができます。バインド・タスク・フローからの戻り値の詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。

25.3.1 バインド・タスク・フローに入力パラメータを渡す方法

コール元のタスク・フローとコール先のタスク・フローの値を定義します。

始める前に:

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

  • コール元およびコール先のタスク・フローを作成します。

    コール元のタスク・フローは、バインドまたはバインドなしにできます。コール先のタスク・フローはバインドにする必要があります。タスク・フローの作成の詳細は、「タスク・フローの作成」を参照してください。

  • タスク・フロー・コール・アクティビティをコール元のタスク・フローに追加します。

    図25-3には、ビュー・アクティビティがタスク・フロー・コール・アクティビティに制御を渡す例が示されています。

    図25-3 コール元のタスク・フロー

    この図は周囲のテキストで説明しています

入力パラメータをバインド・タスク・フローに渡すには:

  1. 「アプリケーション」ウィンドウで、入力コンポーネント含むJSFページをダブルクリックします。このコンポーネントでは、実行時にパラメータとしてバインド・タスク・フローに渡される値をエンド・ユーザーが入力します。

    コール元のタスク・フローにあるビュー・アクティビティによって、開いたJSFページを参照する必要があります。

  2. エンド・ユーザーが実行時に値を入力したJSFページで入力テキスト・コンポーネントを選択します。
  3. 「プロパティ」ウィンドウで、「共通」セクションを開いて、「値」フィールドに入力テキスト・コンポーネントのを入力します。

    EL式として、たとえば#{pageFlowScope.inputValue}などの値を指定できます。

  4. 「アプリケーション」ウィンドウで、コール先のタスク・フローをダブルクリックします。
  5. エディタ・ウィンドウで、「概要」タブをクリックします。
  6. 概要エディタで、「パラメータ」ナビゲーション・タブをクリックし、「追加」アイコンをクリックして、「入力パラメータの定義」セクションにある新しいエントリを定義します。
  7. 「名前」フィールドで、inputParm1などのパラメータ名を入力します。
  8. 「値」フィールドで、パラメータ値を格納および参照するEL式、たとえば#{pageFlowScope.inputValue}を入力します。
  9. 「アプリケーション」ウィンドウで、コール先のバインド・タスク・フローを起動するタスク・フロー・コール・アクティビティを含むコール元タスク・フローをダブルクリックします。
  10. 「アプリケーション」ウィンドウで、コール元のタスク・フローのダイアグラムにあるタスク・フロー・コール・アクティビティの最上部に、コール先のバインド・タスク・フローをドラッグ・アンド・ドロップします。

    ダイアグラムでタスク・フロー・コール・アクティビティの最上部にバインド・タスク・フローをドロップすると、バインド・タスク・フローを参照するタスク・フローが自動的に作成されます。図25-4に示すように、タスク・フロー参照にはバインド・タスク・フローのIDとドキュメント名が含まれます。バインド・タスク・フローのID (id)は、バインド・タスク・フローの<task-flow-definition>要素の属性です。ドキュメント名は、IDを含むタスク・フローのソース・ファイルを指します。

    図25-4 タスク・フローの参照

    この図は周囲のテキストで説明しています
  11. タスク・フロー・コール・アクティビティの「プロパティ」ウィンドウで、「パラメータ」セクションを開いて、「入力パラメータ」セクションを表示します。
  12. 入力パラメータを識別するnameを入力します。

    入力パラメータを定義済のタスク・フロー・コール・アクティビティの上にバインド・タスク・フローをドロップしたため、名前はすでに指定されています。同じ入力パラメータ名を維持する必要があります。

  13. パラメータの「value」に、#{pageFlowScope.parm1}などを入力します。

    タスク・フロー・コール・アクティビティの入力パラメータの値によって、コール元のタスク・フローがパラメータ値を格納する場所が指定されます。

    コール先のタスク・フローの入力パラメータ定義の値は、値が渡された後にコール先のバインド・タスク・フローの内で使用するために値が取得される場所を指定します。

  14. 実行時、コール先のタスク・フローは入力パラメータを使用できます。コール先のタスク・フローの入力パラメータ定義でvalueとしてpageFlowScopeを指定したため、コール先のバインド・タスク・フローのどこでもパラメータ値を使用できます。たとえば、コール先のバインド・タスク・フローのビュー・アクティビティにパラメータ値を渡すことができます。詳細は、「ビュー・アクティビティ間での制御の受渡し時の処理」を参照してください。

25.3.2 バインド・タスク・フローに入力パラメータを渡すときの処理

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>

25.4 バインド・タスク・フローの戻り値の構成

バインド・タスク・フローはADFタスク・フローから起動でき、値を渡すことができます。バインド・タスク・フローは、送信された値の処理時に、パラメータ値をコール元のタスク・フローに返します。戻り値は、バインド・タスク・フローがコール元タスク・フローに返す結果アクティビティに追加されるものです。バインド・タスク・フローで戻り値定義を追加し、コール元タスク・フローで値を返す必要があります。

バインド・タスク・フローでは、パラメータ値をコール元のタスク・フローに返すように構成できます。「タスク・フロー・リターン・アクティビティの使用」の説明のとおり、バインド・タスク・フローがタスク・フロー・リターン・アクティビティを起動した場合は、バインド・タスク・フローが返す値は、コール元に返す結果を補うものとなります。値を返すには、次のものを構成する必要があります。

  • コール先のバインド・タスク・フローでの戻り値の定義

    戻り値の定義では、コール先のバインド・タスク・フローから戻す値を格納する場所が指定されます。

  • コール元のタスク・フローにあるタスク・フロー・コール・アクティビティの戻り値(これにより、コール元のタスク・フローでは、戻された値を検出できる場所が識別されます)

コール元のタスク・フローにあるタスク・フロー・コール・アクティビティのすべての戻り値を識別しないことによって、コール元のタスク・フローでは、コール先のタスク・フローから返された戻り値の定義を無視するように構成できます。

タスク・フロー・コール・アクティビティは値を参照で戻します。これは、コール元のタスク・フローに戻す値のコピーを作成する必要がなくなるからです。

25.4.1 バインド・タスク・フローからの戻り値の構成方法

コール先のタスク・フローにある戻り値の定義を構成し、実行時に戻り値を取得するコール元のタスク・フローのタスク・フロー・コール・アクティビティにパラメータを追加します。

始める前に:

コール元のタスク・フローとコール先のタスク・フローとの間の対話について理解しておくと役に立つ場合があります。詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。

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

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

  • バインド・タスク・フローまたはバインドなしタスク・フローを(コール元のタスク・フローに対して)作成し、バインド・タスク・フローを(コール先のタスク・フローに対して)作成します。詳細は、「タスク・フローの作成」を参照してください。

コール先のバインド・タスク・フローの戻り値を構成するには:

  1. 「アプリケーション」ウィンドウで、コール先のタスク・フローをダブルクリックします。
  2. エディタ・ウィンドウで、「概要」タブをクリックします。
  3. 概要エディタで、「パラメータ」ナビゲーション・タブをクリックします。
  4. 「パラメータ」ページで、「戻り値の定義」セクションの「追加」アイコンをクリックし、次の値を追加して戻り値を定義します。
    • 名前: 戻り値を識別するために名前を入力します。たとえば、returnValue1です。

    • クラス: 戻り値のデータ・タイプを定義するJavaクラスを入力します。デフォルト値はjava.lang.Stringです。

    • 「値」: 戻り値を読み取る場所を示すEL式を入力します。たとえば、次のようにEL式を入力します。

      #{pageFlowScope.ReturnValueDefinition}

  5. 「アプリケーション」ウィンドウで、コール元のタスク・フローをダブルクリックします。
  6. 「コンポーネント」ウィンドウの「ADFタスク・フロー」ページで、「コンポーネント」パネルの「アクティビティ」グループから、タスク・コール・アクティビティをドラッグして、ダイアグラムへドロップします。
  7. タスク・フロー・アクティビティの「プロパティ」ウィンドウで、「パラメータ」セクションを開いて、「戻り値」エントリの隣にある「追加」アイコンをクリックし、戻り値を定義する次の値を追加します。
    • 名前: 戻り値を識別するために名前を入力します。たとえば、returnValue1です。

      手順4で戻り値の定義を定義した場合は、入力する値と「名前」フィールドに入力した値は一致する必要があります。

    • 「値」: 戻り値を格納する場所を示すEL式を入力します。たとえば、次のようにEL式を入力します。

      #{pageFlowScope.ReturnValueDefinition}

      手順4で戻り値の定義を定義した場合は、入力する値と「値」フィールドに入力した値は一致する必要があります。

25.4.2 バインド・タスク・フローからの戻り値を構成したときの動作

設計時に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>

実行時に、コール先のタスク・フローが値を返します。この構成の場合は、コール元のタスク・フローにあるタスク・フロー・コール・アクティビティがその値を取得します。