Managing Workflow Instances

Once you have your workflow defined, you can create Instances of the workflow.

You will need to create some UI to start the workflow. The Workflow plugin doesn’t provide any UI for this, as each workflow will need to start with a different mechanism.

Once an workflow process is created, you interact with it through a WorkflowInstance object. By convention, use the M variable name.

Definition Instance management interface

Functions are defined on the Workflow definition to start workflow processes and locate existing processes.

function create(properties)

Create a new workflow Instance with the given properties.

If the workflow is associated with an object, properties.object must be that StoreObject.

properties is passed to the start() handler and may contain additional information for your own use.

Returns a WorkflowInstance representing the new process.

function instance(workUnit)

Given a WorkUnit with the correct workType, return a WorkflowInstance representing the process.

Use a WorkUnitQuery to find the relevant WorkUnits.

function instanceForRef(ref)

Given the Ref of the associated object, return a WorkflowInstance representing the process or null if there is no such process.

If you do not have access to the workflow definition object, you can also access the instance using the std:workflow:for_ref service which takes two arguments, workType and ref.

Example

This handler displays confirmation page, and if the user confirm, creates an object representing the task and the workflow instance to go along with it.

P.respond("GET,POST", "/do/example/start-workflow", [
], function(E, project) {
    if(E.request.method === "POST") {
        // Create associated object
        var obj = O.object();
        obj.appendType(T.ExampleTask);
        obj.appendTitle("Example task");
        obj.save();
        // Start workflow and redirect to it
        var M = EgWorkflow.create({object:obj});
        return E.response.redirect(M.url);
    }
    E.render({
        pageTitle: "Start Workflow",
        backLink: "/do/example/task-management"
        text: "Would you like to start a new task?",
        options: [{action:"", label:"Start task"}]
    }, "std:ui:confirm");
});