16 Using Parameters in Task Flows

This chapter describes how to specify parameters in view activities and in ADF bounded task flows.

This chapter includes the following sections:

16.1 Introduction to Parameters in Task Flows

You can use view activity input page parameters as aliases. The alias allows you to map bounded task flow input parameters to page parameters. The view activity input page parameters map managed beans and any information available to the calling task flow to a managed bean on the page itself. To pass values out of view activities, store values in page flow scope or managed beans. For information about using view activities in a task flow, see Section 15.2, "Using View Activities".

For example, the page might specify #{pageFlowScope.empno} as a page parameter and a bounded task flow might specify #{pageFlowScope.employeeID} as the value of an input parameter definition.

The from-value on the view activity input page parameter would be #{pageFlowScope.employeeID} and the to-value would be #{pageFlowScope.empno}. This enables reuse of both the page definition and bounded task flow because you don't have to redefine parameters for every context in which each is used.

Other values contained within the task flow can be mapped to input page parameters, not just bounded task flow input parameter definition values.

16.2 Passing Parameters to a View Activity

Figure 16-1 illustrates how to specify an input page parameter mapping. You can pass a parameter to the Employee activity as a pageFlowScope value or a value on a managed bean. The Employee activity can pass a value to the Target activity by placing it within pageFlowScope or a managed bean to the Target activity, based on the EL expression you specified in the to-value.

Figure 16-1 Task Flow with Two Activities

Task flow with two activities.

To set an input page parameter value and retrieve it:

  1. In the editor, open the task flow diagram.

  2. In the task flow diagram, select the view activity.

  3. In the Property Inspector, click Page Parameters.

  4. In the Input Page Parameter section, click the Add icon.

  5. Enter a from-value using an EL expression that, when evaluated, specifies where the input page parameter value will be passed from, for example, #{pageFlowScope.EmployeeID}.

    The task flow shown in Figure 16-1 can set an input parameter definition value that the view activity can retrieve. To retrieve the parameter value, you can specify a from-value on the view activity that matches the Value specified for the ADF bounded task flow input parameter definition.

  6. Enter a to-value using an EL expression that, when evaluated, specifies where the page associated with the view activity can retrieve the value of the input page parameter, for example, #{pageFlowScope.EmployeeNo}.

    The to-value is the second part of the view activity input page parameter. It specifies where the page associated with the view can retrieve the value of the view parameter.

16.3 How to Pass Parameters to an ADF Bounded Task Flow

A called ADF bounded task flow can accept input parameters and can pass return values to the caller upon exit. See Section 16.4, "Specifying Return Values" for more information.

Note:

Instead of explicitly passing a data controls as parameters between task flows, you can simply share them by specifying the data-control-scope option on the called bounded task flow. For more information, see Section 18.3, "Sharing Data Controls Between Task Flows."

To pass an input parameter to a bounded task flow, you must specify one or more:

  • Input parameters on the task flow call activity. These specify where the calling task flow will store parameter values.

  • Input parameter definitions on the called bounded task flow. These specify where the called bounded task flow can retrieve parameter values.

If you call a bounded task flow using a URL rather than a task flow call activity, you pass parameters and values on the URL itself. For more information, see Section 15.6.4, "How to Call a Bounded Task Flow Using a URL".

The input parameter name specified for each option will be the same in order to map input parameter values back into the called bounded task flow. The value for each corresponds to the mapping between where the value will be retrieved within the caller and the called task flow.

If you don't specify a value for the input parameter, the value defaults to #{pageFlowScope.parmname}, where parmname is the name of your parameter.

You can specify on the input parameter definition for the called bounded task flow whether an input parameter is required. If a required input parameter is not received, an error occurs (these are flagged at design time as well as at runtime). An input parameter definition that is identified as not required can be ignored during task flow call activity creation.

By default, all objects are passed by reference. Task flow call activity input parameters can be passed by reference only if managed bean objects are passed, not individual values. By default, primitive types (for example, int, long, or boolean) are passed by value.

The pass by value checkbox applies only to objects, not primitives and is used to override the default setting of passing by reference. Mixing the two, however, can lead to unexpected behavior in cases where parameters reference each other. If input parameter A on the task flow call activity is passed by value and if input parameter B on the task flow call activity is passed by reference, and B has a reference to A, the result can be two different instances of A and B.

Example 16-1 shows an input parameter definition specified on a a bounded task flow.

Example 16-1 Input Parameter Definition

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

Example 16-2 shows the input parameter metadata that would be specified on the task flow call activity that called the bounded task flow shown in Example 16-1.

Example 16-2 Input Parameter on Task Flow Call Activity

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

Tip:

You can set parameters for a page using an ADF task flow rather than dropping a parameterized form from the data control panel or using a form with a method which takes parameters that are invoked using an invoke action. The first technique is a way of passing parameters to a page. The others are ways of consuming parameters on a page. If a page needs parameters, you should pass them by using task flow parameters or by setting scope variables.

The following steps describe passing an input parameter from a source task flow to a target bounded task flow using a task flow call activity. Although you can pass parameter values from any activity on the source task flow, the passed parameter in the steps below will contain the value of an input text field on a page in the source task flow.

Before you begin:

  • Create a calling and called task flow (see Section 14.2, "Creating a Task Flow" for more information). The caller can be a bounded or unbounded task flow. The called task flow must be a bounded task flow.

  • On the calling task flow, add the activities shown in Figure 16-2. The page associated with the view on the calling task flow should contain an input text field and a button. When an end user clicks the button on the JSF page, control should pass to the task flow call activity.

Figure 16-2 Calling Task Flow

Calling task flow.

To pass an input parameter to an ADF bounded task flow:

  1. Select the input text component on the JSF page.

  2. In the Property Inspector, enter a value for the input text component.

    You can specify the value as an EL expression, for example #{pageFlowScope.inputValue}.

  3. In the Application Navigator, double-click the name of the called task flow to open its diagram.

  4. Click the Overview tab for the called task flow.

  5. Click Parameters and expand the Input Parameter Definition node.

  6. Click the Add icon next to Input Parameter Definition.

  7. In the Name field, enter a name for the parameter, for example, inputParm1.

  8. In the Value field, enter an EL expression where the parameter value is stored and referenced, for example, #{pageFlowScope.inputValue}.

  9. In the editor, open the diagram for the calling task flow.

  10. In the Application Navigator, drag the called ADF bounded task flow and drop it on top of the task flow call activity that is located on the calling task flow.

    Dropping a bounded task flow on top of a task flow call activity in a diagram automatically creates a task flow reference to the bounded task flow. As shown in Figure 16-3, the task flow reference contains the bounded task flow ID and a document name. The document name points to the XML source file that contains the ID.

    Figure 16-3 Task Flow Reference in Property Inspector

    Task flow reference in the Property Inspector.
  11. In the Property Inspector for the task flow call activity, click Parameters and expand the Input Parameters section.

  12. Enter a name that identifies the input parameter.

    Because you dropped the bounded task flow on a task flow call activity having defined input parameters, the name should be already be specified. You must keep the same input parameter name.

  13. Enter a parameter value, for example, #{pageFlowScope.parm1}.

    The value on the task flow call activity input parameter specifies where the calling task flow will store parameter values.

    The value on the input parameter definition for the called task flow specifies where the value will be retrieved from for use within the called bounded task flow once it is passed.

  14. At runtime, the called task flow is able to use the input parameter. Since you specified pageFlowScope as the value in the input parameter definition for the called task flow, you can use the parameter value anywhere in the called ADF bounded task flow. For example, you can pass it to a view activity on the called bounded task flow. For more information, see Section 15.2.2.2, "What Happens When You Transition Between Activities".

16.4 Specifying Return Values

As shown in Figure 16-4, a task flow return activity causes the ADF bounded task flow to return to the task flow that called it. The called bounded task flow can pass return values back to the calling task flow.

Figure 16-4 ADF Bounded Task Flow Returning to a Calling Task Flow

A bounded task flow returning to its caller.

As shown in Figure 16-5, the values are returned to the calling task flow.

Figure 16-5 ADF Unbounded Task Flow Calling a Bounded Task

An unbounded task flow calling a bounded task flow.

To return a value, you must specify:

  • Return value definitions on the called bounded task flow. These specify where to read the return value from.

  • Return values on the task flow call activity in the calling task flow. These specify where the calling task flow can find return values

The caller of the bounded task flow can choose to ignore return value definition values by not identifying any task flow call activity return values back to the caller.

Return values on the task flow call activity are passed back by reference. Nothing inside the ADF bounded task flow will still reference them, so there is no need to pass by value and make a copy.

Before you begin the following steps:

  • Create a calling task flow (can be either bounded or unbounded) and a target bounded task flow

To specify a return value for a called ADF bounded task flow:

  1. Open the ADF bounded task flow that will be called in the overview editor.

  2. Click Parameters and expand the Return Value Definitions section.

  3. Click the Add icon next to Return Value Definitions.

  4. In the Name field, enter a name to identify the return value, for example, Return1.

  5. In the Value field, enter an EL expression that specifies where to read the return value from. For example, #{pageFlowScope.ReturnValueDefinition}.

  6. In the task flow overview editor, open the calling ADF task flow.

  7. In the Component Palette, drag the task flow call activity from the ADF Task Flow list and drop it on the diagram for the ADF calling task flow.

  8. In the task flow diagram, select the task flow call activity.

  9. In the Property Inspector, click Parameters and expand the Return Values section.

  10. In the name field, enter a name to identify the return value, for example, Return1.

    The name of the return value must match the name of the return value definition on the called bounded task flow.

    Tip:

    If you drop the bounded task flow that you intend to call on the task flow call activity, the name field will already be specified. Therefore, the name field for the return value will automatically match the name of the return value definition on the called bounded task flow.

  11. In the value field, enter an EL expression that specifies where the calling task flow can find return values, for example, #{pageFlowScope.ReturnValue}.

16.5 Specifying EL Binding Expressions

If a bounded task flow is implemented using a task flow call activity, as an ADF region or as an ADF dynamic region, you can specify parameter values using standard EL expression syntax. For example, you can specify parameters using #{bindings.bindingId.inputValue} or #{bindings.bindingId} or simply #{inputValue} syntax.

Example 16-3 shows an example of a task flow binding for an ADF region.

Example 16-3 ADF Region taskFlow Binding

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

Appending inputValue to the parameter value binding EL expression ensures that the parameter is assigned the value of the binding rather than the actual binding object.

If you use the syntax in Example 16-3 without appending inputValue #{bindings.bindingId}, the binding object (not the value of the binding) is passed. Therefore, the binding will end up being evaluated within the wrong context (the context of the task flow call, ADF region, or ADF dynamic region instead of the context of the page) and multiple data control instances will be created, eventually setting the wrong data control context in the frame.