Interface ReifyAddWorkflowTask
Adding Custom Workflow Tasks
You can define custom Workflow tasks and add them to thecom.smartgwt.client.tools.WorkflowEditor. This applies whether you are using the Workflow Editor embedded in Reify or as a standalone component (see the @see Workflow Editor and @see Custom Task Editor samples). Custom tasks let designers cover additional use cases within the visual editor without writing code. The overall steps are:
- Create a
ProcessElementsubclass that performs the desired task. - Build a task editor so users can configure task properties (or skip this step for tasks with no configurable properties).
- Register the task with the Workflow Editor via
WorkflowEditor.registerTaskDescriptor()(or, in Reify, viaworkflowTasks.xml).
component schema is also needed so the task can be serialized; see Task Schema (Reify) below. Do I need a custom Workflow task?
Before building a custom task and editor, consider whether other approaches might work:
1. Custom services – if you are connecting to an enterprise web service, a custom DataSource may suffice; see Adding Custom DataSources to Reify. DataSources can model any network service, not just databases. For example, a proprietary messaging system with inputs like recipient, subject, message can be modelled as a DataSource where those are simply fields and sending is an "add" operation. A custom task may still be worthwhile if you want a specialized editing interface.
2. Actions on UI components – if your custom components support actions, you can expose them as setter methods (e.g. setMode(newMode)), add the setter to the Component Schema, and let designers invoke it via the built-in Set Properties workflow task.
Workflow Task
A new task must inherit from ProcessElement or a subclass like ScriptTask or ComponentTask, and override ProcessElement.executeElement() (or a subclass-specific method like ScriptTask.execute()). Return true for synchronous completion or null for asynchronous (then call process.start() when done).
Setting ProcessElement.typeTitle and ProcessElement.classDescription on the class provides default title and description values, so they don't need to be repeated in the com.smartgwt.client.tools.WorkflowTaskDescriptor.
For Reify, load the task implementation via globalDependencies.xml (see "Adding Custom Components to Reify") or via "Runtime Customization".
Task Schema (Reify)
In Reify, a component schema is needed so the task configuration can be serialized. The schema can be XML or JavaScript and requires:
ID= same as your task class nameserverType= "component"inheritsFrom= superclass name- instanceConstructor = same as your task class name
getProcessJS() which uses JavaScript reflection. Workflow Task Editor
A task editor lets users configure task properties. If a task has no configurable properties (e.g. a logout task), no editor is needed — simply omit the editTask() callback and editorType.
There are two approaches to building editors:
Approach 1: Subclass com.smartgwt.client.tools.WorkflowTaskEditor (or com.smartgwt.client.tools.WorkflowComponentTaskEditor for ComponentTask-based tasks). Override getEditorComponents(), setEditorValuesFromDefaults(), getEditorValuesAsDefaults(), and validate(). Set editorType on the task class to your editor class name. See the @see Custom Task Editor sample for a working example.
Approach 2: Provide an editTask() callback on the com.smartgwt.client.tools.WorkflowTaskDescriptor. This gives complete control — build any UI you like, then call callback(editNode) to save or callback(null) to cancel.
Several helper classes are available for building advanced property editors: com.smartgwt.client.tools.WorkflowValuesBindingEditor, com.smartgwt.client.tools.WorkflowCriteriaBuilder, com.smartgwt.client.tools.WorkflowDynamicValueItem, and com.smartgwt.client.tools.WorkflowTemplatedTextItem.
Registering the Task
For the com.smartgwt.client.tools.WorkflowEditor to show the new task in its task picker, register a com.smartgwt.client.tools.WorkflowTaskDescriptor via WorkflowEditor.registerTaskDescriptor(). To place the task under a custom folder, first call WorkflowEditor.registerFolderDescriptor() to create the folder, then set taskPath to the folder's ID. Descriptors can be removed at runtime via WorkflowEditor.removeTaskDescriptor().
In Reify, the easiest approach is to add the descriptor to the default task tree in [webroot]/tools/visualBuilder/ workflowTasks.xml, which uses a tree structure similar to the tree XML loading example. The properties on each node are documented on com.smartgwt.client.tools.WorkflowTaskDescriptor.
A descriptor can also be registered at runtime via Reify.registerWorkflowTaskDescriptor(), which is useful for "Runtime Customization".