Workflow Assistant

Abstract: A workflow assistant helps you to find the most important functions for a specific measuring or inspection tasks. A workflow assistant can help you to access the most frequently used functions faster. By default, you find the tab Workflow Assistant in the right docking area next to the tab Properties (see Tech Guide – Workflow Assistant).

User interface

A workflow assistant can be composed of the following UI elements:

  1. Pages – A page is a container for other workflow assistant elements.

    There are three different page types:

  2. Menu Entries

    There are four different types:

Note

Breacrumbs

The “breadcrumbs” at the top of the workflow assistant show the current position in the menu structure.

Note

The initial appearance of EmbeddedCommandPage, WizardPage and CommandEntry is identical, but differs during execution.
The appearance of the NextPageEntry depends on its target’s type.

Example

The ZEISS INSPECT built-in workflow of the Inspection workspace is used as an example.

2. Wizard page

Menu page

Select “Inspection”

Menu page

“Inspection” menu page – Select Basic Inspections ► Diameter Inspections

Selecting “Basic Inspections” leads to “Diameter Inspections”, “Distance Inspections” and “Angle Inspections”.

Menu page

Wizard page, Wizard step 1 – “Construct Cylinder or Circle”

Menu page

Wizard page, Wizard step 2 – “Check Diameter”

Starting “Diameter Inspections” shows a Wizard page with two steps:

  1. Construct Cylinder or Circle

  2. Check Diameter

Note

The wizard lets you continue to the next step only after you have completed the current step!

3. Embedded command page

Menu page

Embedded command page – “Distance Quick Creation”

Starting “Distance Inspections” from the “Basic Inspections” menu page calls the script userscript.WorkflowAssistant__DistanceQuickCreation from the System App “Inspect”. This is the same as running Construct ► Distance ► Distance Quick Creation… from the main menu, but this way the dialog window is embedded in the workflow assistant.

Caution

To embed a user-defined dialog, you must select “embed as widget, top-level otherwise” in the dialog properties using the Dialog Editor.

Dialog Properties  Embedded as widget

Creating a Workflow Assistant

Create a JSON file workflow_assistant/<assistant_name>/<assistant_name>.json in your App’s folder.

Note

A new JSON file cannot be created in the App Explorer yet. Go to your App folder in %APPDATA%/gom/<inspect_version>/gom_edited_addons and create the JSON file using an external editor instead.

Hint

  • To update the App Explorer, run gom.script.sys.update_addon_database() from a Python script.

  • To update the workflow assistant view, switch to a different workspace and back again.

Minimal example

The “Minimal example” demonstrates the basic concept of creating a workflow assistant menu structure referencing built-in commands.

Note

See App Examples – WorkflowAssistants for complete source code.

The basic building blocks for the menu structure are:

  1. MenuPage

    • A menu page with multiple entries that can be shown in the workflow assistant view.

  2. NextPageEntry

    • A menu entry that allows the user to navigate to another menu or wizard page

    • Uses ‘name’, ‘icon’ and ‘description’ of referenced page if not given explicitly.

  3. CommandPage

    • This is used to display a single command in the workflow assistant.

  4. WizardPage

    • A page to show multiple commands as a sequence in a wizard layout.

    • An EmbeddedCommandStep is used to represent each step

minimal.json – top level
 1{
 2  "id": "8d7724f7-5cf3-4262-b39a-7228d69952e8",
 3  "name": "Minimal example",
 4  "using": [
 5    {
 6      "name": "inspect",
 7      "id": "bd0ec39e-4155-4d7d-9771-9ed0d5f86e59"
 8    }
 9  ],
10  "objects": [
11    // ...
12  ]
13}

At the top level, each workflow assistant must have a unique ID (UUID) (line 2) and a name (line 3). With "using", an alias for an object’s UUID can be defined to improve readability (l. 4…8). The element "objects" (l. 10) contains a list of objects, which are the building blocks of this workflow assistant.

minimal.json – MenuPage “homepage”
 1{
 2  // ...
 3  "objects": [
 4    {
 5      "type": "MenuPage",
 6      "id": "homepage",
 7      "name": "a minimal homepage",
 8      "entries": [
 9        {
10          "type": "NextPageEntry",
11          "page": "create_diameter"
12        },
13        {
14          "type": "EmbeddedCommandPage",
15          "description": "Custom description for command",
16          "command": "comparison.create_multiple_surface_comparison_on_cad"
17        }
18      ]
19    },
20    // ...  
21  ]
22}

The MenuPage "homepage" provides two menu entries:

  1. A NextPageEntry to the page "create_diameter"

  2. An EmbeddedCommandPage for execution of the ZEISS INSPECT command comparison.create_multiple_surface_comparison_on_cad

minimal.json – NextPageEntry
 1{
 2  // ...
 3  "objects": [
 4    // ...
 5    {
 6      "type": "NextPageEntry",
 7      "name": "Minimal example",
 8      "description": "hook for example assistant",
 9      "page": "homepage",
10      "id": "hook_for_inspect",
11      "position": {
12        "insert": "inspect/inspection_home",
13        "before": ""
14      }
15    },
16    // ...
17  ]
18}
NextPageEntry "hook_for_inspect"

NextPageEntry “hook_for_inspect”

A NextPageEntry with its elements "name", "description" and "page" is defined (l. 6…8).

Our "homepage" is made reachable from the inspect workflow assistant page "inspection_home" by using the "position" element (l. 11…14).

(The "inspect" workflow assistant is part of the ZEISS INSPECT System Apps. The alias we previously defined with "using" allows to reference it by name instead of ID.)

Hint

Alternatively, you can add a reference to one of the workflow assistant pages in the definition of a custom workspace. See AppExamples – WorkflowAssistants/workspaces/assistant/assistant.json for an example.

MenuPage "homepage"

MenuPage “homepage”

Clicking the NextPageEntry "Minimal example" leads to the MenuPage "homepage".

minimal.json – WizardPage “create_diameter”
 1{
 2  // ...
 3  "objects": [
 4    // ...
 5    {
 6      "type": "WizardPage",
 7      "id": "create_diameter",
 8      "name": "(Page name) Diameter Inspections",
 9      "description": "(Page description) Create diameter checks",
10      "icon": "cmd_inspect_diameter",
11      "steps": [
12        {
13          "type": "EmbeddedCommandStep",
14          "command": "primitive.cylinder_circle_quick_creation_draft",
15          "info": "Each step in a wizard references a command. An additional info box can be provided. The info box is separate for each command and may be omitted in each step (see next step)."
16        },
17        {
18          "type": "EmbeddedCommandStep",
19          "command": "internal.check_scalar_diameter"
20        }
21      ]
22    }
23  ]
24}
WizardPage "create_diameter" &ndash; Step 1

WizardPage “create_diameter” – Step 1

WizardPage "create_diameter" &ndash; Step 2

WizardPage “create_diameter” – Step 2

The last object of our “Minimal example” is the WizardPage "create_diameter". This page contains two subsequent wizard steps, both of which are EmbeddedCommandSteps. The first step allows to create a cylinder or circle while the second step allows to check the diameter of the newly created element. The next step can only be selected when the current step has been completed.

Hint

User-defined scripts are referenced in commands with the notation userscript.<scriptfile>. If the script is located in a subfolder of the App’s scripts/ folder, use the notation userscript.<folder>__<scriptfile>. (A double underscore is used as path separator. In <scriptfile>, the extension .py is omitted.)

Hint

New in Version 2026

Custom wizards can be implemented using the Wizard widget in user-defined scripts. See Wizard widget control for details and App Examples – WorkflowAssistants/scripts/workflows for a complete example.

Workflow Assistant JSON format

Note

Optional parameters are marked with ‘*’.

Top level elements

The following JSON elements are used at the workflow assistant’s top level.

id (string)

UUID for unique identification of the workflow assistant definition

name (string)

Display name of the definition

using (List of Objects)

Shorthands for definition IDs for easier usage

objects (List of Objects)

List of all elements provided by this workflow definition. Each entry is a JSON object describing a single element.

Example:

{
  "id": "8d7724f7-5cf3-4262-b39a-7228d69952e8",
  "name": "Minimal example",
  "using": [
    {
      "name": "inspect",
      "id": "bd0ec39e-4155-4d7d-9771-9ed0d5f86e59"
    }
  ],
  "objects": [
    ...
  ]
}

Common Workflow Assistant Object Attributes

These attributes are common for all workflow assistant elements listed in the following sections.

type (String)

Workflow assistant element type identifier
Examples: "type": "MenuPage", "type": "NextPageEntry"

id* (string)

Reference ID of this object
Example: "id": "label_menu"

name* (String-like)

General name of element, default: "<Default name>" Example: "name": "element 1"

description* (String-like)

General description of the element
Example: "description": "this does something"

icon* (Icon-like)

Icon to be displayed
Example: "icon":"surface_section_menu"

position* (Object)

Insert the element at a specific position in an existing workflow assistant structure

  • “insert” (id): Element to insert into

  • “before” (id): Position hint, i.e. insert before this element (may be empty)

Example:

{
  "insert" = "inspection_home",
  "before" = "inspection_menu"
}

Pages

WizardPage

Page which displays multiple consecutive steps as a list of accordions with navigation buttons between them.

steps (List of WizardSteps)

List of WizardSteps, each entry should be a valid json object describing a WizardSteps element.
Example: [ { entryA }, { entryB } ]

EmbeddedCommandPage

Page with an embedded command. The page ID is defined by the given command.

command (string)

Command to execute, usually with a dialog.
Example: comparison.create_min_max_deviation_label, userscript.inspect_gaps

Wizard steps

EmbeddedCommandStep

A wizard allows to execute a sequence of commands. The command dialogs are embedded into the workflow assistant.

Note

One of the fields ‘command’ and/or ‘commands’ must exist.

command (string)

Command to execute
Example: inspection.inspect_by_deviation_label

commands (List of Objects)

Each object in the list can either be

  • a string with the command

  • an object with the following keys:

    • “command”

    • “info”*

    • “info_help_id”*

    • “interactive”*

Example: [ commandA, commandB ]

interactive* (boolean)

Defines whether to execute the command in interactive mode. Must be set to False for executing a user script, otherwise the dialog will be closed immediately. (Default: True)

info* (String-like)

Descriptive info text for this wizard step
Example: Compute statistics for deviation analysis on an inspection element with color deviation representation. Select an area on the color deviation representation with any of the point selection functions."

info_help_id* (string)

Reference to a help article in the ZEISS Quality Tech Guide
Example: "info_help_id": "cmd_comparison_create_min_max_deviation_label"

Advanced entry types

This section introduces some advanced data types for definition of strings and icons.

String-like entry

String

Plain string

Translated (Object)

Runtime-translated string, based on xliff files located in the App’s languages/ folder.

translate (boolean)

Translate the string at runtime

text (string)

Text to translate

id (string)*

Automatically generated translate id

Icon-like entry

Icon-like entries can be defined in multiple ways listed below. They provide an icon to display as part of an element in the workflow assistant. Currently only .svg files are fully supported.

Simple (string)

Specifies how and where to load an icon from (see Advanced type below for more information about <path> and <mode>). Always uses “auto” dark mode setting.

"<path>" or "<mode>::<path>"

Example: “inspection_home” / "app::icons/workflow/my_icon.svg"

Advanced (object)
path (string)

Path to an icon or value of icon (if using a decoder)

mode* (string)

Mode to use to interpret the path. (default: “system”)

  • “system”: Loads a system icon with the given name. Example: {"path": "inspection_home", "mode": "system"}

  • “app”

    • Loads an icon from the originating App. The path is relative to the App’s root-folder. Example: {"path": "icons/workflow/my_icon.svg"}

    • Loads an icon from any App specified by an AddOnUrl. Example: {"path": "acp:///b2cc0788-1a2b-4652-ba7e-3f789126006e/icons/workflow/my_icon.svg", "mode": "app"}

  • “file”: Loads an icon based on an absolute file path. Should be used with care (mostly while testing) due to poor portability. Example: {"path": "C:\\Downloads\\my_icon.svg", "mode": "file"}

  • “base64”: Decodes the icon from an embedded base64-encoded string. Example: {“path”: “PHN2ZyBpZD0iTGF5ZXJfMSI…”, “mode”: “base64”}

dark (string)

Dark mode mode option. System icons ignore this setting.

  • “none”: Do not change icon in dark mode.

  • “auto”: Generate brightend version for darkmode automatically.