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: