Workflow validation reference
Workflows · Reference
Find the meaning and the fix for every finding the workflow designer and the configuration screen report.
NIM validates a workflow in two places:
- In the designer, with Workflow → Validate: the drawing and its soundness. See Workflow definitions.
- On the configuration's Validation tab: everything the configuration adds. See Workflow configurations.
In the messages below, X and Y stand for the names NIM fills in.
Drawing findingsDirect link to Drawing findings
The designer reports these when it cannot turn the drawing into a runnable process. Errors keep NIM from updating the generated process on save; the drawing itself is still saved. Warnings are informational.
FlowsDirect link to Flows
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Sequence flow X is not attached to a shape on one side. | Error | Connect both ends of the line to a shape. |
| …attaches to a shape that is not a BPMN flow node. | Error | A line ends on a decoration (icon, line, or text). Connect it to a task, event, or gateway. |
| …needs exactly one arrow head; the arrow defines the flow direction. | Error | Give the line one arrowhead, at the end it flows to. |
| …connects X to itself. | Error | Remove the line. To repeat a step, loop back through an exclusive gateway. |
| …runs into a start event / runs into a boundary event / runs out of an end event. | Error | A start event and a boundary event have no incoming line, and an end event has no outgoing line. Reconnect the line. |
| …duplicates an existing flow; it is merged. | Warning | Remove the duplicate line. |
| The … has no incoming/outgoing sequence flow. | Error | Connect the element. A boundary event needs an outgoing line for its exception path. |
Tasks, events, and gatewaysDirect link to Tasks, events, and gateways
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| N workflow shapes are labeled 'X'; workflow labels must be unique. | Error | Give each task, event, and gateway its own label. |
| The start event … must have exactly one [outgoing flow]. Add a gateway to branch. | Error | Start with one line, then branch with a gateway. |
| The end event … must have exactly one [incoming flow]. Add a gateway to merge, or use one end event per branch. | Error | Merge with a gateway, or give each branch its own end event. |
| …a task takes exactly one of each. Add an explicit gateway to branch or merge. | Error | A task has one incoming and one outgoing line. Use gateways to branch and merge. |
| …model the join and the split as two separate gateways. | Error | A gateway either merges or splits. Draw two gateways. |
| …has one incoming and one outgoing sequence flow, so it decides nothing; it is mapped as a pass-through. | Warning | Remove the gateway, or add the missing branch. |
| …an event gateway only offers a choice, it cannot merge. | Error | Merge with an exclusive gateway. |
| A branch of the … runs into …; every branch must start with a timer or message event. | Error | Start each branch of an event gateway with a timer event or a message event. |
| The process has no start event / has N start events. | Error | Draw exactly one start event. |
| The process has no end event; it can never complete. | Error | End every path with an end event. |
Boundary eventsDirect link to Boundary events
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| The … is not attached to an activity. | Error | Add boundary events with right-click → Boundary event on a task. |
| …a boundary event can only be attached to a task. | Error | Attach it to a user task or service task. |
| …is attached to X, which is a branch of event gateway Y. | Error | The branches of an event gateway already compete. Remove the boundary event, or move the task after the event. |
| …is attached to service task X, which the nim service runs to completion, so the event can never occur. | Warning | Remove the boundary event, or put it on a user task. |
| X has N non-interrupting boundary events; it can have at most one. | Error | Keep one non-interrupting boundary event per task. |
Participants and meaningsDirect link to Participants and meanings
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Shape X names the participant 'P', but it is … | Warning | Only user tasks, send tasks, and message events have a participant. Clear it on other elements. |
| The line(s) leaving X state(s) a meaning, but only a branch of an exclusive gateway is an outcome somebody chooses. | Warning | Set meaning to none on lines that do not leave an exclusive gateway or a cancelling join. |
| N branches of gateway X are stated to be the positive/negative outcome. | Error | Mark only one line positive and one line negative per gateway. |
Cancelling joinDirect link to Cancelling join
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| …needs at least two incoming flows, and exactly two outgoing ones: one stated positive, one stated negative. | Error | Lead every branch of the parallel gateway into the join, and give it two outgoing lines. |
| …needs one outgoing line stated to mean positive … and one stated to mean negative. | Error | Set meaning on both outgoing lines. |
| No line running into the … is stated to mean negative, so no branch can cancel the others. | Error | Set meaning to negative on the refusal lines, or use a parallel gateway to merge. |
| The branches running into the … do not all come from one parallel gateway. | Error | A cancelling join merges the branches of exactly one parallel gateway. |
| …merges the branches of parallel gateway X, which another cancelling join already merges. | Error | Use one cancelling join per parallel gateway. |
| A branch … holds a second parallel gateway / another cancelling join / a non-interrupting boundary event. | Error | Keep each branch between the fork and the join to a single path. |
| A branch … runs into end event X instead / loops back / never reaches the join. | Error | Every branch must end in the join. |
| X lies on a branch … but is also reached from outside that branch. | Error | Nothing may enter a branch from outside. |
| Two branches … run through the same sequence flow. | Error | Keep the branches apart. |
Soundness findingsDirect link to Soundness findings
When the drawing has no errors, the designer explores every state the process can reach. These findings mean a real case could get stuck, so fix them before you publish a configuration. The messages name the lines (places) and steps (tasks) involved.
Show soundness findings and fixes
| Finding | Meaning and fix |
|---|---|
| The net can reach a deadlock: no task is enabled while the workflow is not completed … | A case can stop for good. Typically, a parallel join waits for a branch that an exclusive gateway never took. Merge alternative branches with an exclusive gateway and parallel branches with a parallel gateway. |
| Place 'X' can hold more than one token at the same time … | Two parallel branches meet where only one was expected, typically a parallel split merged with an exclusive gateway. Merge them with a parallel gateway. |
| The net is unbounded: tokens can accumulate without limit on place 'X'. | A loop keeps creating parallel work. Close the loop through an exclusive gateway. |
| The workflow can terminate with a token stranded on non-end place 'X'. | A case can end while a branch is still running. Merge the branches before the end event, or end each branch separately. |
| The net can reach a state from which completion is no longer reachable (livelock) … | A loop can never be left. Give the loop a branch that leads to an end event. |
| Task 'X' can never fire in any reachable execution. | The step is unreachable. Check the gateways before it. |
| Analysis stopped after exploring N markings; soundness could not be proven. (warning) | The process is too large to check completely. Simplify it, or test it carefully with Simulate. |
Configuration findingsDirect link to Configuration findings
The Validation tab of a configuration lists these findings. Errors block saving and publishing. Warnings block publishing only. The two advisories (a send task without a template, and a duplicate display name) block nothing. Select a finding to jump to the tab where you fix it.
Configuration and definitionDirect link to Configuration and definition
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| The configuration has no name / starts or ends with a space. | Error | Rename the configuration. |
| Configuration 'C' belongs to diagram 'D' …, not to … | Error | The configuration was made for another definition. Create a new configuration for this definition. |
| The workflow has structurally changed since it was configured; check the configuration and save it again. | Warning | Check each step, then save. |
| This element is configured twice. | Error | Remove the duplicate entry. |
| The configured element is not a step of this workflow (any more); remove the entry. | Error | The step was removed from the drawing. Remove its configuration. |
Apps and mappingsDirect link to Apps and mappings
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Only a user task is performed in an app, and only the start event is started from one. | Error | Remove the App from this element. |
| The variable mappings have no app to map onto. | Error | Choose an App, or remove the mappings. |
| This user task has no app, and no gateway with labeled branches follows it … | Warning | Choose an App, or label the lines of the gateway after it, so a task list can decide the step. |
| The start form is where the case begins, so there is no case to fill it from yet. | Error | Remove the prefill on the start event. |
| Only the start takes in the session variables of whoever starts the case. | Error | Remove the session mappings from the step. |
| 'X' is not a session variable of this nim service. | Error | Use a session variable defined under Configuration → Variables → Session. |
| Case variable 'v' is a … and session variable 's' a … | Warning | Align the types, or accept the conversion. |
| A prefill/result/session mapping is missing its case/app/session variable. | Error | Complete or remove the mapping. |
| 'v' is not a case variable of this workflow. | Error | Declare the variable, or map to an existing one. |
| Two prefill/result/session mappings write 'X'. | Error | Keep one mapping per variable. |
| This step has to be performed in its app, but it has none. | Error | Choose an App, or clear Must be performed in its app. |
| App 'A' does not exist (any more). | Error | Choose another App. |
| App 'A' has no variable 'X'. | Error | Remove the mapping, or add the variable to the App. |
| App 'A' neither fills nor takes any variable … | Warning | Add variables to the App if the step must exchange data. |
| 'X' of app 'A' cannot be taken into the case: … | Error | Use another App variable. |
| App 'A' fills 'X' itself; to give it a value when the step opens, make it an input variable of the app. | Error | Change the App variable's type to input. |
| App 'A' never fills 'X', so there is nothing to take back from it. | Error | Remove the result mapping. |
| Case variable 'v' is a … and 'X' of app 'A' a … | Warning | Align the types, or accept the conversion. |
| App 'A' cannot be performed without a value for its input variable 'p' … | Error | Prefill the required input variable from a case variable. |
| …and case variable 'v' it is filled from is filled by nothing. | Error | Make an earlier step or the start fill the case variable. |
Service tasksDirect link to Service tasks
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Only a service task is performed by the nim service; this element is not one. | Error | Remove the actions from this element. |
| A workflow step cannot run a '…' action. | Error | Use a target system function, script function, or service resource command. |
| Action '…' does not say what to run. | Warning | Complete the action. |
| Action '…' is given / hands back 'v', which is not a case variable of this workflow. | Error | Declare the variable, or change the binding. |
| This service task has no actions. | Warning | Add an action, or remove the service task from the drawing. |
ParticipantsDirect link to Participants
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Participant 'P' is not bound to any user or group … | Warning | Bind the participant on the Participants tab. |
| Participant 'P' is bound to …, but no step of the drawing is performed by that participant. | Warning | Clear the binding. |
| Participant 'P' is bound twice. | Error | Keep one binding. |
| Participant 'P' is bound to something it cannot stand for: … | Error | Remove the invalid user or group. |
| Participant 'P' is resolved as '…', which the runtime cannot do yet. | Error | Use Bound here, From a case variable, or By rules. |
| Participant 'P' is resolved by the engine itself, so the … user(s) or group(s) bound to it are ignored. | Warning | Clear the users and groups of Initiator. |
| Participant 'P' is looked up from a case variable, but none is named / from 'v', which is not a case variable. | Error | Choose a declared case variable. |
| Participant 'P' is looked up from 'v', which is neither a number nor a text. | Error | Use a number or string variable. |
| Participant 'P' is looked up from 'v', but no service task fills that variable … | Warning | Fill the variable with a service task or a session mapping on the start event. |
| 'v' says who participant 'P' is, and this step takes it from the app … | Error | Remove the App mapping. Only a service task or a session mapping may fill it. |
| Participant 'P' is looked up from a case variable while the case runs, so the … user(s) or group(s) bound to it are ignored … | Warning | The users and groups act as the fallback only. Informational. |
| Participant 'P' is chosen by rules, but there are none. | Warning | Add rules. |
| The condition of rule N of participant 'P' cannot be used: … | Error | Correct the rule's condition. |
| Rule N … has no condition and is not the fallback. | Error | Give the rule a condition, or make it the otherwise rule. |
| Rule N … names no user or group. | Error | Add users or groups to the rule. |
| The fallback rule N … cannot carry a condition / Participant 'P' has N fallback rules. | Error | Keep one otherwise rule, without a condition. |
| Participant 'P' has no fallback rule ('otherwise') … | Warning | Add an otherwise rule. |
| Participant 'P' is chosen by rules, so the … user(s) or group(s) bound to it directly are ignored. | Warning | Informational. Clear them to tidy up. |
| This user task / message event / send task names no participant … | Warning | Name a participant on the element in the designer. |
Send tasks and display namesDirect link to Send tasks and display names
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| No mail template is coupled to event 'workflow-step: …', so this send task sends nothing. | Advisory | Couple a template on Events → Actions. See Workflow notifications. |
| End users see this configuration as '…', and '…' under the same name. | Advisory | Give the configuration its own display name. |
TimersDirect link to Timers
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Only a timer event goes off at a moment; this element is not one. | Error | Remove the timer setting. |
| This timer event has not been told when it goes off. | Warning | Set a duration or a date variable. |
| The timer needs a duration of at least one minute, hour or day. | Error | Enter a duration of 1 or more. |
| The timer takes its moment from a case variable, but names none / 'v' is not a case variable. | Error | Choose a declared variable. |
| Case variable 'v' is not a date or a date-time. | Error | Use a date or date-time variable. |
Variables, subject, and resultDirect link to Variables, subject, and result
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Case variable 'v' is filled by nothing … | Warning | Tick it in a result mapping, a session mapping, or an action output, or remove it on the Variables tab. |
| A case variable without a name … / starts or ends with a space. | Error | Rename the variable. |
| Case variable 'v': names starting with 'wf' belong to the workflow itself … | Error | Rename the variable without the wf prefix. |
| 'v' is filled by the workflow itself; a step cannot write it. | Error | Remove the mapping or action output that writes a built-in variable. |
| Case variable 'v' is declared more than once. | Error | Names ignore case. Remove the duplicate. |
| Case variable 'v' has a type a case cannot carry yet. | Error | Use string, number, boolean, date, or date-time. |
| The case subject / result names 'v', which is not a case variable. | Warning | Correct the placeholder. |
Gateways and branchesDirect link to Gateways and branches
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| This element does not choose between branches, so a decision variable / condition has nothing to decide. | Error | Remove the routing setting. |
| 'v' is not a case variable of this workflow. | Error | Choose a declared variable. |
| This gateway routes on the outcome of a step, but no step ends with one … | Warning | Let the step before it complete with an outcome, or configure a decision on the gateway. |
| App 'A' completes its step with 'o', but none of this gateway's branch labels … is that … | Warning | Relabel a line, set its meaning, or change the outcome of the action. |
| …N of its M branches have no text on the line / two of its branches carry the same text. | Warning or error | Label every line except at most one default line, and use distinct labels. |
| This gateway has both a decision variable … and conditions on its branches. | Error | Keep one way of routing. |
| A condition is configured on a line that is not (any more) a branch of this gateway. | Error | Remove the condition. |
| Branch 'b' is configured twice. | Error | Remove the duplicate. |
| The condition on branch 'b' cannot be used: … | Error | Correct the condition: an unknown variable, a syntax error, or values that cannot be compared. |
| Branch 'b' is the default branch … it cannot carry a condition / N branches … are the default branch. | Error | Keep one otherwise branch, without a condition. |
| Branch 'b' has no condition and is not the default branch, so no case can take it. | Warning | Give it a condition. |
| Branch 'b' states that it is the positive/negative outcome, but this gateway routes on … | Warning | Route on the outcome, or set the line's meaning to none. |
PermissionsDirect link to Permissions
Show findings and fixes
| Finding | Severity | Meaning and fix |
|---|---|---|
| Participant 'P' may not read/write case variable 'v', yet … | Warning | Grant the right on the Permissions tab, or remove the mapping. |
| The case subject/result names 'v', which participant(s) … may not read. | Warning | Every participant sees the subject and result. Grant read, or remove the variable from the text. |
| Participant 'P' holds rights on 'v', which is not a case variable of this workflow. | Warning | Remove the entry with Remove unused right(s). |
| Participant 'P' holds rights on 'v', but no step of the drawing is performed by that participant. | Warning | Remove the entry. |
| Participant 'P' has two permission entries on case variable 'v'. | Error | Keep one entry. |
| The rights of participant 'P' on 'v' include bits that mean nothing on case data. | Error | Use only read and write. |
Related guidesDirect link to Related guides
- Workflow definitions — validate and simulate the drawing.
- Workflow configurations — jump from a finding to the setting that needs correction.