WorkflowNode

Workflow Manager Developer Guide

HGD_Variant
15.00
HGD_Product
GeoMedia Smart Client
HGD_Portfolio_Suite
Platform

A WorkflowNode represents one "step" in the Workflow. The node can have none, one, or more Workflow-Nodes as subentries. Workflow-Nodes will be shown in the GUI as follows:

0305_workflownode_img.png

The general usage is:

<WorkflowNode id="1" label="Operations" controller="List" form="OPERATIONS">
  <WorkflowNode id="10" label="Create an operation" controller="Form" form="OPERATION" follownode="1">
    <WorkflowTrigger ...>
      <Param ... />
    </WorkflowTrigger>
    ...
  </WorkflowNode>
  <WorkflowNode ...>
  ...
  </WorkflowNode>
  ...
 </WorkflowNode>

Navigation Concept: There are two concepts for Workflow-Navigation:

  • Navigation via Workflow-Nodes - this is the default behavior (the default controllers are: Form, List)
  • Navigation via buttons (described under Form.xml - FormAction)

Navigation Path: The path to the actual navigation element is implemented as breadcrumb trail in the header-section of the current Workflow-Form; use this as navigation aid.

0305_breadcrumbs.png

WorkflowNode - Attributes

Attribute

Mandatory

Description

id

yes

Unique ID of the Workflow-Node.

<id="2120" />

authorization

no

Only users with the appropriate Role/Claim are authorized to view/process the element.

<authorization="ROLE[ADMIN,EDITOR]" /> <authorization="CLAIM[WF_ADMIN,WF_EDIT]" />

condition

no

Condition to be evaluated for the Workflow-Node, which defines if the node is accessible or not. The result of the condition has to deliver a boolean value (1/0 or true/false). The following condition types are supported:

condition= ...

  • ..."OBJECT[...]"
  • ..."SESSION[KeyExists(...)]"
  • ..."SQL[...]"

<condition="OBJECT[...]" />

The xsd-pattern looks like:

<xsd:pattern value="OBJECT\[((.+)\(.*\))\]"/>

for example:

<OBJECT[classname.methodname ({SESSION.MAP.SELECTIONSET})] />

<condition="SESSION[KeyExists(MAP.SELECTIONSET)]" />

<condition="SQL[SELECT DECODE (COUNT(*),0,1,0)

+ DECODE ({FORM.TEMPLATE_GUID}, NULL,-1,0) FROM PR_UNIT WHERE PR_ID={FORM.PR_ID}]" />

conditionhelp

no

Help text for a condition, which gives the user additional information why a certain node is grayed out (see explanation below).

<conditionhelp="Info..." />

controller

no

The controller defines the layout and the functionality of the node. The user can define Default-Controller and Custom-Controller (the different controller types are described below).

Read more about the controller-attribute in in the WorkflowNode section below.

<controller="List" />

emptyform

no

This attribute defines if a form should be opened with filled out FormFields or as a blank form. (Therefore, the same form can be used in two different Workflow-Paths,

for example, "Create new Incident", "Edit Incident".

<emptyform="true" />

<emptyform="false" />

follownode

no

Follownodes define NodeID's, which are called after the actions at the node-level are completed.

<follownode="2200" />

form

no

Form name defined in the FormSettings-XML file, which is called from the Workflow-Node (has to be written in UPPERCASE letters and must not contain any special characters).

<form="OPERATION" />

historynode

no

Used to show a different path in the Navigation Path. The standard behavior always shows the parent nodes of the current node in the Navigation Path. If this behavior should be changed, this attribute is used.

<historynode="10" />

label

no

Node label in the Workflow-Form.

<label="Node xyz" />

view

no

Due to the separation of data model and presentation, this attribute can be used to include customized views for GUI-definitions.

<view="PagedForm" />

visible

This attribute defines if the Workflow-Node should be visible in the Workflow (default) or not. Invisible Workflow-Nodes are, for example, used for processing Triggers.

The visibility can also be set according to the result of an SQL-statement.

<visible="true" />

<visible="false" />

<visible="list" />

<visible="history" />

Controller-attribute in WorkflowNode

Workflow-Nodes can be implemented as one of the following controllers:

Form

Controller used for display of one dataset (one row of a certain table, 1:n relations to the main table can be defined by the use of the type="table" or type="listbox" in the FormField-definition). Read more.

0305_Formcontrollerpaged.png

Example of a form with a table.

List

Controller used to display all datasets of a table. It possible to sort and filter the list. Read more.

Admin_formview.png

Example of a list with filters.

Workflow

Default-controller, which is invoked if no explicit controller is defined. Used for the display of further Workflow-Nodes.

Admin_New_Feature.png

Example of a workflow list.

Custom controller at Workflow-Nodes:

Custom controller can be implemented by programming custom scripts; they can be used embedded by defining the relative path to the code, for example:

<WorkflowNode ... controller="CustomController" ... />

All known subentries of a Workflow-Node:

A Workflow-Node can contain the following elements:

  • additional Workflow-Nodes
  • Workflow-Trigger

Workflow-Node conditions via CONDITION checking:

At each Workflow-Node, an attribute condition can be assigned, which has to return 0/FALSE or 1/TRUE. If the condition returns FALSE or 0, the node will only be shown grayed out in the Workflow-Tree. Several conditions can be separated by a comma. For an overall validation, they are connected by a logical "AND" (see also ).

Additionally, you have the ability to indicate a so-called conditionhelp, which is shown as a tooltip for the grayed out Workflow-Node. Therefore, it is possible to inform the user why the concerned Workflow-Node can/may not be selected.

Example:

<WorkflowNode id="0".....>
  <WorkflowNode id="1" label="Displayed Workflow" condition="SQL[SELECT count(*) FROM DUAL WHERE 1=1]" .... /> 
  <WorkflowNode id="2" label="Hidden Workflow" condition="SQL[SELECT count(*) FROM DUAL WHERE 1=0]" .... />
  <WorkflowNode id="2" label="Greyed-out Workflow" condition="SQL[SELECT count(*) FROM DUAL WHERE 1=0]" conditionhelp="Node is hidden because 1!=0".... />
 </WorkflowNode>