To implement a trigger-based long-running workflow, first you define a trigger event that restarts the workflow, and then you bind the trigger event to a Waiting event element or a User interaction element in a workflow.

Create a trigger object

Trigger objects monitor event triggers that plug-ins define. For example, the vCenter plug-in defines these events as Task objects. When the task ends, the trigger sends a message to a waiting trigger-based long-running workflow element, to restart the workflow.

The time-consuming event for which a trigger-based long-running workflow waits must return a VC:Task object. For example, the startVM action to start a virtual machine returns a VC:Task object, so that subsequent elements in a workflow can monitor its progress. A trigger-based long-running workflow trigger event requires this VC:Task object as an input parameter.

You create a Trigger object in a JavaScript function in a Scriptable task element. The Scriptable task element can be part of the trigger-based long-running workflow that waits for the trigger event. Alternatively, it can be part of a different workflow that provides input parameters to the trigger-based long-running workflow. The trigger function must implement the createEndOfTaskTrigger() method from the Automation Orchestrator API.

Important: You must define a timeout period for all triggers, otherwise the workflow can wait indefinitely.

Prerequisites

    • Create a workflow.
    • Open the workflow for editing in the workflow editor.
    • Add some elements to the workflow schema.
  • In the workflow, declare a VC:Task object as a variable or input parameter, such as a VC:Task object from a workflow or workflow element that starts or clones a virtual machine.

Procedure

  1. Drag a Scriptable task element from the Generic menu in the left pane to the workflow schema.
    One of the elements that precedes the Scriptable task must generate a VC:Task object as its output parameter.
  2. Click the Scriptable task element.
  3. Enter a name and description for the trigger in the Details properties tab in the right pane.
  4. Click the Inputs/Outputs tab.
  5. Select or create an input variable of the type VC:Task.
    This VC:Task object represents the time-consuming event that another workflow or element starts.
  6. (Optional) Select or create an input parameter of the Number type to define a timeout period in seconds.
  7. Create an output parameter with the following properties.
    1. Create the Name property with the value trigger.
    2. Create the Type property with the value Trigger.
    3. Click Create.
  8. Define any exception behavior in the Exception handling menu.
  9. On the Scripting tab, define a function to generate a Trigger object.

    For example, you can create a Trigger object by implementing the following JavaScript function.

    trigger = task.createEndOfTaskTrigger(timeout);

    The createEndOfTaskTrigger() method returns a Trigger object that monitors a VC:Task object named task.

  10. Click Save and confirm your selection.

Results

You defined a workflow element that creates a trigger event for a trigger-based long-running workflow. The trigger element generates a Trigger object as its output parameter, to which a Waiting Event element can bind.

What to do next

You must bind this trigger event to a Waiting Event element in a trigger-based long-running workflow.

Create a Trigger-Based Long-Running Workflow

If you know that a workflow has to wait for a response from an outside source during its run, but do not know how long that wait is, you can implement it as a trigger-based long-running workflow. A trigger-based long-running workflow waits for a defined trigger event to occur before resuming.

You implement a workflow as a trigger-based long-running workflow by using the Waiting event element. When the trigger-based long-running workflow arrives at the Waiting event element, it stops its run and waits in a passive state until it receives a message from the trigger. During the waiting period, the passive workflow does not consume a thread, but rather the long-running workflow element passes the workflow information to the single thread that monitors all long-running workflows in the server.

Prerequisites

  • Create a workflow.
  • Open the workflow for editing in the workflow editor.
  • Add some elements to the workflow schema.
  • Define a trigger event that is encapsulated in a Trigger object.

Procedure

  1. Drag a Waiting event element from the Generic menu in the left pane to the workflow schema, and place it where you want to suspend the workflow run.
    The scriptable task that declares the trigger must immediately precede the Waiting event element.
  2. Click the Waiting event element.
  3. Enter a name and description of the waiting event in the Details properties tab in the right pane.
  4. Click the Inputs tab.
    The trigger.ref parameter appears in the list of inputs.
  5. Click the Select variable text box to bind the input parameter to an appropriate Trigger object.
    The Trigger object represents a trigger event that another workflow or workflow element defines.
  6. Define any exception behavior in the Exception handling tab.
  7. Click Save and confirm your selection.

Results

You defined a workflow element that suspends a trigger-based long-running workflow, that waits for a specific trigger event before restarting.

What to do next

You can run a workflow.