Friday 28 July 2017

Basic Introduction to the TACTIC Workflow Engine

The Workflow Engine is one of the key technology components of TACTIC.  A workflow defines a set of connected process nodes.  Each node represents some work that needs to be done within the entire workflow which constitutes a job.

The workflow engine drives the entire work process forward.  It is responsible
for sending messages so that upstream and downstream process are notified of
important events.  For example, if a downstream process sets a task to complete, then all the next upstream processes will set the task to pending.

In TACTIC, any sobject can have a pipeline defined.  Fundamentally,t his means that any sobject can go through a series of processes, have tasks assigned to it and have files checked into it.

Pipeline or Workflow?

Internally, TACTIC uses word pipeline, however, this word is not commonly
recognized outside of the Visual Effects / Computer Graphics indusry.  Workflow is commonly used in every other industry, so this is the terminology that we will use from now on.

Process Node Types

By default, all nodes are manual nodes.  These nodes represent processes
where manual work must be done.  In general, a task is created which is
associated with this node.  This task will have someone assigned to it
and can have a specific start and end date.

When a task that belongs to a process changes its status, a message is
sent to that processes.  This allows the workflow engine to react to this
change in status.  For example, if a "complete" message is sent from the
task to the process, then the process "send" a pending message to all of
its output connections.  This output notification is automatic.

If the output node is another manual node, then the process will notifiy any
tasks associated with it and set them to pending.  This task would now
show up on a "pending" task list for users (who would set it to "In Progress" when working on the task)

If the output node is another node type, the behavior would be quite different.
For example, if the output node was an "action" type, then the script code
associated with that process would automatically get executed.

Action nodes are non-blocking.  They will automatically execute their programmed task and without any manual involvement from a user, when they complete, they will  send a "pending" message to the next process.

Approval node is a specific type of node that is very similar to a
manual node.  There is always an assigned task that is associated with
it however, usually, the task status options are more limited.  Also,

many widgets recognize approval nodes and adjust accordingly.

Connecting Processes

These nodes can be connected together in any combination.

manual1 -> auto1 -> auto2 -> manual2

In this example, after manual1 is set to "complete", "auto1" would automatically
execute.  On completion of "auto2" will automatically execute.  Finally,
when "auto2" completes, "manual2" will receive a "pending" signal which will
set the task in this node to a status of "pending".

The nodes can also be connected in parallel:

manual1 -> auto1 -> manual2
        -> auto2 ->

In this case, both auto1 and auto2 would be executed simultaneously.  Manual2
would not receive the pending signal until both "auto1" and "auto2" are complete.

As can be seen from these examples, the workflow engine pushes process progress
along the various steps defined in the definition of the workflow.  Users
do not need to remember to execute certain scripts in certain ways in certain
order.  This can all be hidden from the user and be executed exactly as they
were designed to do.

There are a number of other nodes in built into TACTIC which enhance how the
workflow engine behaves.  It is even possible to write custom nodes types
entirely in Python.  These nodes can be loaded in as a TACTIC plugin
and used just like a native node.