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

前
 
次
 

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

この章では、ビュー・アクティビティおよびADFバインド・タスク・フローでパラメータを指定する方法について説明します。

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

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

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

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

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

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

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

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

図20-1は、Fusion Order Demoアプリケーションのチェックアウト・バインド・タスク・フローで入力パラメータをいかに定義し、製品を購入する顧客についてのデータをいかに受け取るかを示しています。Fusion Order Demoの詳細は、ソース・ファイルへのアクセス方法を含めて、第2章「ADFサンプル・アプリケーションの概要」を参照してください。

図20-1 チェックアウト・タスク・フロー

チェックアウト・タスク・フロー

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

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

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

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

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

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

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

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

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

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

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

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

  1. 「アプリケーション・ナビゲータ」で、パラメータを渡すビュー・アクティビティを含むタスク・フローのソース・ファイルをダブルクリックします。

  2. 「プロパティ・インスペクタ」で、タスク・フローのダイアグラムにあるビュー・アクティビティを選択して、「ページ・パラメータ」カテゴリを開きます。

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

  4. 入力ページ・パラメータ」セクションで、「追加」アイコンをクリックして、次のように値を入力します。

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

      #{pageFlowScope.EmployeeID}

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

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

      #{pageFlowScope.EmployeeNo}

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

例20-1の説明のとおり、JDeveloperでは設計時にタスク・フローのソース・ファイルに対するエントリが記述されます。

例20-1 ビュー・アクティビティ上に入力ページ・パラメータを定義するメタデータ

<view id="reducedAccess">
 <page>/secured/Information.jspx</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>要素で指定した場所にある関連付けられたページで利用可能になります。

20.2.3 パラメータ値の指定について

タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールするか、あるいはADFリージョンまたはADF動的リージョンでバインド・タスク・フローをレンダリングする場合は、標準EL式を使用してパラメータ値を指定できます。たとえば、次のEL式の構文を使用してパラメータを指定できます。

  • #{bindings.bindingId.inputValue}

  • #{bindings.bindingId}

  • #{inputValue}

例20-2は、ADFリージョンでレンダリングするタスク・フロー・バインディングのメタデータを示しています。

例20-2 ADFリージョンのtaskFlowバインディング

<taskFlow id="Department1" taskFlowId="/WEB-INF/Department.xml#Department"
              xmlns="http://xmlns.oracle.com/adf/Controller/binding"
              Refresh="ifNeeded">
    <parameters>
        <parameter id="DepartmentId" value="#{bindings.DepartmentId.inputValue}"
                   xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
     </parameters>
</taskFlow>

inputValueをEL式に追加することで、実際のバインディング・オブジェクトではなく、バインディングの値をパラメータに確実に割り当てられます。

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

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

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

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

#{pageFlowScope.parmName}

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

コール先のバインド・タスク・フローの入力パラメータ定義では、必要に応じて入力パラメータを指定できます。入力パラメータが実行時または設計時に値を取得しない場合は、タスク・フローでエラーが発生します。必要に応じて指定しない入力パラメータは、タスク・フロー・コール・アクティビティの作成時に無視できます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    コール元のタスク・フロー
  • バインド・タスク・フローを構成して入力パラメータを取得する前に、利用可能な構成オプションを理解しておくと有効な場合があります。詳細は、20.3項「バインド・タスク・フローへのパラメータ渡し」を参照してください。

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

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

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

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

  2. エンド・ユーザーが実行時に値を入力したJSFページで入力テキスト・コンポーネントを選択します。

  3. 「プロパティ・インスペクタ」で、入力テキスト・コンポーネントの「value」を入力します。

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

  4. アプリケーション・ナビゲータで、コール先のタスク・フローの名前をダブルクリックしてそのダイアグラムを開きます。

  5. コール先のタスク・フローの「概要」タブをクリックします。

  6. 概要エディタで、「パラメータ」ナビゲーション・タブをクリックし、「追加」アイコンをクリックして、「入力パラメータの定義」セクションにある新しいエントリを定義します。

  7. 「名前」フィールドで、inputParm1などのパラメータ名を入力します。

  8. 「値」フィールドで、パラメータ値を格納および参照するEL式、たとえば#{pageFlowScope.inputValue}を入力します。

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

  10. 「アプリケーション・ナビゲータ」で、コール元のタスク・フローにあるタスク・フロー・コール・アクティビティ上に、コール先のバインド・タスク・フローをドラッグ・アンド・ドロップします。

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

    図20-4 「プロパティ・インスペクタ」の「タスク・フロー参照」

    プロパティ・インスペクタ」の「タスク・フロー参照」
  11. タスク・フロー・コール・アクティビティの「プロパティ・インスペクタ」で、「パラメータ」をクリックして、「入力パラメータ」セクションを展開します。

  12. 入力パラメータを識別するnameを入力します。

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

  13. パラメータ値(#{pageFlowScope.parm1}など)を入力します。

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

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

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

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

JDeveloperでは、選択した値に基づいて、コール元のタスク・フローとコール先のタスク・フローのソース・ファイルに対しエントリを記述します。例20-3は、バインド・タスク・フローで指定された入力パラメータ定義を示しています。

例20-3 入力パラメータ定義

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

例20-4は、例20-3で示したバインド・タスク・フローをコールするタスク・フロー・コール・アクティビティの入力パラメータ・メタデータを示しています。実行時に、タスク・フロー・コール・アクティビティはバインド・タスク・フローをコールして、そのvalue要素で指定された値を渡します。

例20-4 タスク・フロー・コール・アクティビティの入力パラメータ

<task-flow-call id="taskFlowCall1">
...
    <input-parameter>
      <name>inputParameter1</name>
      <value>#{pageFlowScope.newCustomer}</value>
      <pass-by-value/>
    </input-parameter> 
... 
</task-flow-call>

20.4 バインド・タスク・フローの戻り値の指定

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

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

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

20.4.1 バインド・タスク・フローからの戻り値の指定方法

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

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

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

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

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

コール先のバインド・タスク・フローの戻り値を指定する手順:

  1. 「アプリケーション・ナビゲータ」で、コール先のタスク・フローのソース・ファイルをダブルクリックします。

  2. 概要エディタで、「パラメータ」ナビゲーション・タブをクリックします。

  3. 戻り値の定義」カテゴリの隣にある「追加」アイコンをクリックして、戻り値を定義する次の値を追加します。

    • 名前: 戻り値を識別するために名前を入力します。たとえば、returnValue1などです。

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

    • : コール先のタスク・フローの終了時に戻り値の格納場所を指定するEL式を入力します。たとえば、次のようにEL式を入力します。

      #{pageFlowScope.ReturnValueDefinition}

  4. 「アプリケーション・ナビゲータ」で、コール元のタスク・フローのソース・ファイルをダブルクリックします。

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

  6. タスク・フロー・アクティビティの「プロパティ・インスペクタ」で、「パラメータ」セクションを開いて、「戻り値」エントリの隣にある「追加」アイコンをクリックし、戻り値を定義する次の値を追加します。

    • 名前: 戻り値を識別するために名前を入力します。たとえば、returnValue1などです。

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

    • : コール先のタスク・フローの終了時に戻り値の格納場所を指定するEL式を入力します。たとえば、次のようにEL式を入力します。

      #{pageFlowScope.ReturnValueDefinition}

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

20.4.2 バインド・タスク・フローから戻り値を指定するときの処理

設計時にJDeveloperでは、構成したタスク・フローのソース・ファイルに対してエントリを記述します。例20-5では、コール元のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリの例を示しています。

例20-5 戻り値を指定するためのコール元のタスク・フローのメタデータ

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

例20-6では、コール先のタスク・フローのソース・ファイルに対してJDeveloperで記述したエントリの例を示しています。

例20-6 戻り値を指定するためのコール先のタスク・フローのメタデータ

<return-value-definition id="__2">
      <name id="__3">returnValue1</name>
      <value>#{pageFlowScope.ReturnValueDefinition}/</value>
      <class>java.lang.String</class>
 </return-value-definition>

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