Client Workflow Engine

Technical Overview

Overview

DIRECT’s Workflow Engine simplifies development of highly customized deployment applications to support multiple use cases. The engine processes a chain of discrete system tasks to control the behavior of the client application. Using only JSON, an implementer can create a workflow that meets their requirements without the need to write expansive functions. It simplifies complex application logic and helps speed up development time.

The DIRECT Workflow Engine includes:

  • File and directory tasks
  • Tasks to launch executables and open web pages
  • Read/write and check registry key values tasks
  • Create and delete shortcuts tasks
  • Control tasks such as queues
  • User interface notification tasks (such as the updating the progress)
  • XML, JSON, Plist, and INI read/write tasks
  • Repository synchronization tasks
  • String replacement and expansion mechanism
  • Error, logging, and analytics notification tasks
  • Set restore points task in Windows
  • Integrated MSI installer tasks on Windows
  • Mount and unmount disk image (.DMG) tasks in macOS
  • Launch and install pkg installers in macOS
  • And more…

​The Workflow Engine also has interoperability functionality built-in that allows for custom tasks to be written and processed by the engine. The interop tasks can be written in languages such as C/C++ or even Javascript.

Workflow Task Example

Task Name: registryKeyExists
Description: Check if a registry key exists
Supported OS: Windows, Macintosh
Arguments:
Name Type Description
hive string Hive to read registry value from (“user”, “machine”, “root”, “config”, “desktopuser”)
location string Location of the registry key.
view string Registry view (“default”, “32”, “64”)
exists string Task to run if the registry key exists.
missing string Task to run if the registry key is missing.

Task Performed
The following example shows how to use the registryKeyExists task. If the registry key exists, it will proceed to the task specified in the exists subaction named isInstalled and if not it will proceed to the task specified in the missing subaction named isNotInstalled.

"checkAppIsInstalled": {
  "type": "registryKeyExists",
  "hive": "machine",
  "location": "SOFTWARE\\Application1",
  "exists": "isInstalled",
  "missing": "isNotInstalled"
}

Workflow Example

The following is an example of a simple workflow that checks to see if the current machine has an Intel processor or not and log to the debug file that information.

{
  "checkIntelProcessor": {
    "type": "stringContains",
    "stringOne": "{CPUVendor}",
    "stringTwo": "Intel",
    "found": "logUsingIntelProcessor",
    "notFound": "logNotUsingIntelProcessor"
  },
  "logUsingIntelProcessor": {
    "type": "log",
    "message": "Machine has an Intel processor installed"
  },
  "logNotUsingIntelProcessor": {
    "type": "log",
    "message": "Machine does not have an Intel processor installed"
  },
  "start": {
    "type": "queue",
    "concurrentTasks": 1,
    "actions": [ " checkIntelProcessor" ]
  }
}

Workflow Engine API

The Workflow Engine can be integrated into any third-party application through the use of a dynamically loaded library. We have example integrations for Unreal, Lumberyard, Unity, Electron, Universal Windows Platform (UWP), Node.js, .NET, and Python.  Using the Workflow Engine API in this manner is an advanced implementation that requires skilled development resources. It can be used to create distribution platforms (similar to Steam and iTunes), performs in-game updates (side-loading of game assets), make progressively downloadable games and much more. Supported platforms include Windows, macOS, and Linux