public interface ReifyAddWorkflowTask
To create a new Workflow task type and add editing support, the steps are:
ProcessElement
(or one of ProcessElement's subclasses)
which performs the desired task, and load that class in Reify.component schema
for the task inheriting from the
same superclass schema as the task itself.Before you start building a custom Workflow task and editor, consider whether other approaches might work as well or nearly as well:
1. Custom services
If
you are trying to connect to some kind of enterprise-specific web service, you probably do not
need a custom Workflow task but rather just a custom DataSource; see the Adding Custom DataSources to Reify
overview
instead.
Note that DataSources in Reify can serve as a model for any kind of network service, not just databases that store records. For example, if you have something like a proprietary messaging system with inputs similar to an email (recipient, subject, message text), it may seem like a custom Workflow task is needed, but this could also be modelled as a DataSource where recipient, subject, etc are simply DataSource fields, and a message is sent by performing a DataSource "add" operation. However, it may be worthwhile to add a custom Workflow task in this case in order to provide a specialized editing interface, or simply to make it more obvious how to perform the task.
2. Actions on UI components
If you have added custom UI components to Reify, you might want to add custom Workflow tasks for the custom actions that those components support. However, an alternative approach is to make those actions accessible as a "setter method" and have designers invoke the action via the built-in Set Properties workflow task.
For example, you might have a
component with two very different display modes, and APIs like switchToModeOne()
and switchToModeTwo()
, and you might think of creating a custom Workflow class to
call these APIs. However, another approach would be to create a "setter method" like
setMode(newMode)
, add it to the Component Schema for the custom component,
and have designers change mode via the Set Properties built-in workflow task.
Workflow Task
A new workflow task must inherit from ProcessElement
or one of its subclasses like ScriptTask
or ComponentTask
. The implementation of the task must include
an override of ProcessElement.executeElement()
or other more specific subclass method like ScriptTask.execute()
. Be sure to return
the correct value to keep the process moving.
By adding ProcessElement.typeTitle
and
ProcessElement.classDescription
property values, the WorkflowTaskDescriptor.title
and
WorkflowTaskDescriptor.description
properties are not needed when referencing your custom
task.
The JavaScript implementation of the task can be loaded in Reify by adding a
dependency in the globalDependencies.xml
file as detailed in "Adding Custom Components to Reify"
.
Alternately, see "Runtime Customization"
for a
different means to load the implementation file.
Task Schema
A component schema
is needed for the new task so that
the configuration can be serialized and deserialized correctly. The schema can be declared in
XML or in JavaScript code. In either case, the following attributes are required in addition to
fields matching each task property:
ID
= same name as your task class serverType
= "component" inheritsFrom
= class name of your task
superclass As with the new workflow task implementation, the schema needs to be loaded into Reify. See the section above for two means of loading the schema.
Workflow Task Editor
A task
editor is needed for any task that has properties the user can change. If a task doesn't have
any properties, like a logout task, there is no need to implement an editor at all. For the
com.smartgwt.client.tools.WorkflowTaskDescriptor
created below, don't provide an editTask()
implementation.
Otherwise, an editor component is needed to edit the properties for an instance of your new
workflow task. Custom code that is used by your editTask()
method should be included
for Reify as detailed in Workflow Task above.
To aid in writing custom task editors there
are several classes on which to base your editors. You can start with com.smartgwt.client.tools.WorkflowTaskEditor
or, if your workflow task derives from ComponentTask
, use com.smartgwt.client.tools.WorkflowComponentTaskEditor
. There are also some custom editors that
are useful for editing the task properties:
com.smartgwt.client.tools.WorkflowValuesBindingEditor
com.smartgwt.client.tools.WorkflowCriteriaBuilder
com.smartgwt.client.tools.WorkflowDynamicValueItem
com.smartgwt.client.tools.WorkflowTemplatedTextItem
Register Task Editor
For the Workflow Editor
to show your new task
in the Add task choices and to edit existing tasks of your new type, a com.smartgwt.client.tools.WorkflowTaskDescriptor
must be registered with Reify. easiest way
to configure the descriptor is to add it to the default Reify task descriptors found in
[webroot]/tools/visualBuilder/workflowTasks.xml
.
As can be seen by looking at
workflowTasks.xml, tasks are specified using a tree structure similar to that shown in the tree XML
loading example. This tree structure exactly maps into the add task choices menu in the
Workflow Editor. The properties that can be set on nodes are documented on com.smartgwt.client.tools.WorkflowTaskDescriptor
.
Alternately, a new task descriptor can
be added by calling Reify.registerWorkflowTaskDescriptor()
which makes it possible to do this with "Runtime Customization"
.