Interface TaskIO
Task Input / Output
Input
Tasks require "inputs" to do their work, just like a method call. For example,GridFetchDataTask
requires criteria
.
For built-in tasks, you can typically use TaskInputExpressions
to declare
that the inputs of a task are drawn from Process.state
, the output
of a
previous task in the process, or from global context such as ruleScope
.
See the docs for each task for details.
If you are implementing your own task and want to support TaskInputExpressions
for
the data
required by your task, use +link{task.getExpressionValue(expression)}.
You can also use the property Task.inputs
to automatically support TaskInputExpressions
:
call getInputRecord()
to get the
values of the provided expressions.
Output
A task can callTask.setOutput()
to
provide outputs which other tasks can use via
TaskInputExpressions
or programmatically via APIs such as Process.getLastTaskOutput()
.
Using the property Task.outputField
and/or Task.outputFieldList
allows certain properties
of the output, from setOutput(), to be written into the Process.state
. Use Task.outputField
to specify the field in the process state where the task output should be written. Or, for more
complex
tasks, use Task.outputFieldList
to specify multiple fields.
You can also use the property Task.outputExpression
to write task output directly into a
DataBoundComponent
instead of or in addition to the process
state.
An output expression is a String prefixed with "$" followed by the DataBoundComponent ID and optionally followed by a dot-separated field name. When no optional field name is specified, the task output is written to the target component using setValues() or setData(). With the optional field name, the task output is written to the target with setFieldValue() or setEditValue(). For a ListGrid the row is either the current edit row or the one selected row.
As an example, consider a DynamicForm with ID of "orderHeader". By specifying an
outputExpression
as "$orderHeader" for a fetch DSRequestTask the response
record will be assigned directly to the DynamicForm.
Inputs examples
inputRecord
represents the result of the inputs
extracted from the
process state.
If the Process.state
represented in
JSON is:
{ orderId:5, orderItems: [ {name:"Pencils", quantity:3, itemId:2344} ], orderUser: { name:"Henry Winkle", address:"...", ... } }Consider these input definitions and resulting
inputRecord
:
- inputs: "orderId"
- inputRecord: { orderId: 5 }
- inputs: [ "orderUser.name", "orderUser" ]
- inputRecord: { name: "Henry Winkle", orderUser: { name: "Henry Winkle", address: ... }
- inputs: "orderUser"
- inputRecord: { name: "Henry Winkle", address: ... }
- inputs: [ "orderUser" ]
- inputRecord: { orderUser: { name: "Henry Winkle", address: ... } }
- See Also: