OpenProcess Flex adds a massive amount of flexibility to OpenProcess processes by providing branching within processes. Process branching is a common feature of workflow solutions, however, the decision points in processes are typically decided by manual user inputs.
With OpenProcess Flex decisions in process branches can be:
- driven by user input
- AND
- automatically by driven by content from online forms built with eDesigner
Product Videos - Watch here
What does this mean in practice?
Let's say you have a form, which needs to managed by 10 different teams e.g. Contact Us.
With OpenProcess Flex you can automatically push the task to the relevant team based upon a drop-down option in a Contact Us form that you've built. You can even decide which team/user should be assigned it based upon a combination of different answers in a form.
Plus, you can make it so subsequent steps in the above process also have a branch that is decided by online form content.
Or it could be moved down a different branch/process route based upon a user-made decision.
Also let's say you have a branch in your process, where each branch has 2 possible stages meaning there are 4 possible stages. With OpenProcess Flex you can send different, highly context-sensitive messages to citizens based upon the stage in question.
I.e. with linear processes sometimes automated emails require to be relatively generic. But with the ability to have context-sensitive notifications sent to customers for each of the 4 stages, messages can be personalised to the customer's circumstances and optimised for the use case specifics.
Finally, where OpenProcess Flex becomes incredibly powerful is when one also adds into the mix that API calls can be made at any stage in a branched process. So if you have the same 2 branch process, where each branch has 2 possible stages and each stage is a REST API stage, you technically have the means to send 4 different API calls to 4 different systems. Whilst in practice it will more likely be 4 different API calls to 1 or 2 systems, the point is that it is possible to deliver very intelligent automation that driven automatically by the content from the form.
In summary, OpenProcess Flex provides a massive leap forward in terms of automated work routing, the flexibility of process, and personalisation of customer messaging.
We will walk through each of the functions and then show a worked example to help illustrate how to use the functionality.
Functionality
New Field Type - Choice
In an earlier release, we added the ability to set Fields associated with a process. For example, a field type could the geolocation of an issue reported.
There were two options before:
- Single line of text
- Geographic Location
There is now a field type Choice as shown below:
This field type, which provides support for many useful things. For example:
- To provide a list of completed reasons
- To provide a list of canceled/abandoned reasons
- To act as a checklist of things a person needs to do for a step
- To trigger a branch in a process
Make a field (or fields) mandatory as a part of a step
It is now possible to make it so fields have to be provided prior to completing a step. You can see an example of this below where the officer needs to set whether prosecution is being saught and some notes:
Now when a person attempts to complete this step they see this if they attempt to complete it without providing the mandatory information:
I.e. the warnings go away if the user provides responses:
Each and every step can have mandatory fields associated with the steps. Ensuring your workflows are completed in a standardised manner.
Branches
The most obvious distinction when building a process is the presence of a new option to add a 'Branch':
When one has added a branch this appears initially as follows:
Essentially, a single condition/decision point is added.
Before a process with a branch can be saved it needs a name AND a condition. If neither is added the following will be presented when attempting to save the process:
To add a name and condition to a branch you need to click on the pencil icon in the top right of the box which says IF condition. When you do you will be presented with this:
Each branch or condition needs to have a name and a rule (condition) to drive it. The name is best to be something easily understood by a layperson i.e. High Priority Fly Tip Removal is pretty clear that this is the high priority branch:
The condition itself requires one to understand the syntax (format of the content) to be used. So this condition will be true and this branch followed if the field IMPORTANCE is equal to HIGH. If we look at the Field for Importance we can see where this has come from:
It has been set as Choice Field type. Where the 'Code' is 'IMPORTANCE' and the 'Value' is 'HIGH'. These two elements are used to indicate the field type and the specific option within this field type.
IMPORTANT
It is important to note that Choice field types are for decisions that will be made by users. I.e. if you want to meet a condition with a Choice field type then it will need to be a mandatory field that is answered when completing a step.
Data from an online form, even if it was a choice/list in a form you've built will always end up being a single value for the purposes of the back office. E.g. in the example below the field OFFENSIVE has come from a Yes/No answer to the question "Do you find the graffiti offensive?":
It is a single line of text because a user is not setting this. It has already been decided by the customer's choice in the online form i.e. Yes or No.
To add another condition simply click on the icon with the branch icon shown below:
The following illustrates three branches in a process:
Note that a branch is not a step. A branch is simply a means of creating separation in a process. Notice that in each branch there is a 'Plus' icon. Clicking this will then allow one to set the step type desired:
This means that you could have different steps against high, medium, low that have different SLAs, are handled by different teams, have different emails issued when the step is started/completed etc.
Below, one can see an example of a process where there are two branches and the first branch has two steps. The second branch has just one step:
One can also see that there is a 'Bin' icon against both steps and branches. It is possible therefore both to remove individual steps as well as branches. Deleting a branch will delete all steps within it.
Therefore if you attempt to delete a branch/step you will see the following:
Nested Branches
Not only can you have branches you can have branches inside branches. To illustrate, here is a very complex branching process:
There are branches for where the graffiti is offensive, over 2m high, where the council is deemed responsible and where a cherry picker has/has not been arranged. So even the most complex of processes can be handled with this functionality.
Multiple Conditions
In the above process the first step is reached if three conditions are met:
1) It's on public land
2) It's offensive
3) It's over 2 metres high
Now for visual purposes and to illustrate nested branches there are separate branches for all three of these. I.e. On each branch there are these three conditions:
1) Fields["PrivateLand"] == "No"
2) Fields["OFFENSIVE"] == "Yes"
3) Fields["HIGH"] == "Yes"
But it does not have to be designed like this. You could have a single branch with the name Public > Offensive > High. And the condition you would set would joint all of these. The way to do this is to place this between the conditions:
&&
This is the same as AND. So:
Fields["PrivateLand"] == "No" && Fields["OFFENSIVE"] == "Yes" && Fields["HIGH"] == "Yes"
Adding a condition like this is logical because all three pieces of data are captured in an online form and shortens the scale of the process diagram potentially.
You can also do things like this:
Fields["PrivateLand"] == "No" || Fields["OFFENSIVE"] == "Yes"
Where two 'pipes' i.e. || mean OR. I.e. if the customer answers private land: No OR Offensive: Yes the same condition would be met.
And you can also use a NOT operator which is an exclamation mark e.g.
!Fields["OFFENSIVE"] == "Yes"
Means anything other than Yes will lead to the condition being true.
Important
The field names and the content referenced in conditions is all case sensitive. So if the field name is:
OFFENSIVE and you use Offensive it will not work.
Advanced use cases
You can also use mathematical operators like:
int.Parse(Fields["Amount"]) < 2
And where it is a monetary or decimal value
decimal.Parse(Fields["Amount"]) > 100.00
decimal.Parse(Fields["Amount"]) < 100.00
decimal.Parse(Fields["Amount"]) == 100.00
You might use the above for example with a payment arrangement/debt management based online form/process. Sending it to a different officer dependant upon whether they are more than a certain amount in debt.
And finally, you can compare fields with one another E.g.
Fields["BalanceThisYear"] < Fields["BalanceLastYear"]
To determine the branch in which to trigger.
General rules on conditions
- When the process reaches a branch step, the process engine will start the first step on the first conditional branch, where the condition on the branch evaluates to true (i.e. the condition you have set is met)
- When the process reaches a branch step, in the event that none of the conditions on the branch evaluate to true, the preceding step will not complete and an error will be raised
- If the branch step is the first step in a process, and none of the conditions on the branch evaluate to true, an exception will be raised and the process will not be created.
So if a form is submitted and does not have the data needed to meet one of the conditions that will start a process it will not create the process and an integration failure will show against the form itself within the Forms Portal as shown below:
To prevent this it is therefore important to ensure that if the first step of a process is a branch needing some data that this is mandatory in your online form.
New Allocation Rule
Whilst each stage of a process can be assigned to a different user or team, there are often use cases where the same user will deal with the whole process or multiple stages of a process.
Right now there is an allocation strategy (rule) that does this called 'Allocate to user from defined previous step'. In this case, the user specifies the step which was previously allocated to a user to set who should be allocated this step:
The problem is, with a branched process some previous steps may not ever be completed because the branch rules mean they're not active in the process. Let's consider the following branched process:
If it worked as it does now and you were setting the assignment rule for the final two steps you could technically pick any of possible previous blue steps even though the path to get to the end step may not have touched them. To remedy this, the new allocation rule is called "Allocate to the same user as the step before" as seen below:

IMPORTANT
1) Where there is a branch in a process you need to use this allocation strategy. If you attempt to use:
'Allocate to user from defined previous step' on a process with a branch in it you will be unable to select a step.
2) If you try and save a process, which has a branch, and a step allocation rule set to 'Allocate to user from defined previous step', you will face this error:
3) If you make the first stage of a process have the allocation strategy of "Allocate to the same user as the step before" the process will error upon creation so you should NOT do this.
Search Process - Steps View
When you search for a process you will normally see the steps as seen below:
With a process that has branches you can still see the steps completed but you can ALSO see any branches. E.g. the process below is currently on the first step and three decisions were made to get to the active step in place:
OneVu - Track my Requests
When a process has branches in it, it becomes impossible to know:
a) which steps will be involved in a process and
b) what the overall target is for a process.
For example, you could have a branch that results in four different steps being possible, and each of those having a different SLA. To counter this where a process has a branch in it ONLY:
- the current active stage and completed stages will be shown and
- the current active stage's target will be shown.
I.e. all possible stages are not shown only those that are relevant so far. In the scenario below:
- a completed step is shown with its completed date and
- the currently active step has a target showing against the individual step.
But an overall target is not present because it is impossible to know what it is.
Worked Examples
This section will walk through some example processes starting with the most simple and building up to more complex. The examples used are simply indicative of use cases. The actual use cases can be for any service you provide both externally to citizens and internally for staff e.g. HR processes.
Example One
Let's say you have a linear process like this for 'Report a Pothole':
The process as it stands means that irrespective of the size of the pothole or its priority the issue will always be passed to the same team and have the same SLA. But what if, having reviewed the details provided you could decide whether an inspection was required and thus treat small potholes differently from big ones. If we click on the plus symbol below 'Reviewing the details' step we can add a branch:
When you do this you will see your first condition. We need to give this a name and also add a condition. Before we can do this we need to create the options for the condition. We do this using the 'Fields' tab:
Let's say we want three conditions around High, Medium, Low priority we can see the choices for these below:
When you first add a branch it appears like this.
Clicking the purple 'branch' icon a further two times means we end up with three placeholders for our conditions:
Now we need to add the condition for each. The condition for each based upon what we learned about conditions earlier will be:
Fields["PRIORITY"] == "Low"
Fields["PRIORITY"] == "Medium"
Fields["PRIORITY"] == "High"
E.g. the low one named and the condition added as follows:
With all three added we see this:
Now, before we add steps to the 'branches' in the process we need to make it so the user needs to set a choice as a part of completing the first step. We do this by clicking the edit icon on the 'Reviewing the details' step, clicking on the 'Fields' tab and selecting the Priority choice as being mandatory to complete the step:
Doing this ensures that the priority is always known and it thus knows which branch of the process to go down. It should look like this when added:
Now when a user completes this step they will see this:
All that is left to do now is set the steps you want within each branch:
As we can see there are four steps and, in this case, all are specific to the branches they are linked to. These have their own SLAs, assigned to their own users and emails sent to the customer.
Note
If there is a common step that will exist below all branches then you would add it at the bottom below the branch rather than adding it three times i.e. once in each branch. In the above scenario, a different end step is relevant for each branch.
Example Two
We will walk through an example online form built with eDesigner and a process with branches that are linked to it.
The process is that of reporting graffiti. Our online form is going to capture:
- Customer details (if they want to provide them)
- The location of the incident
- Whether the graffiti is on private/public land
- If it is on private land, whether the person reporting it is the owner of the private land and whether they agree for council staff to come to deal with it and recharge them
- Whether it is offensive graffiti
- Whether it is above head height (2 metres)
- A description of the issue and
- Any photo uploads
The process underpinning graffiti is surprisingly complicated. The process looks something like this where green lines mean yes / red lines mean no:
I.e. there are a huge number of branches in the process. To remove some of the complexity of the process only the key steps are shown in gray.
Top tips - when building a very complex process
1) it is best to design the process on paper/some other medium to iron out exactly how you want to do it before you do it. It's easy to create a process with many layers depth and then realise that a decision made in the middle of a process with lots of stages/branches linked to it below needs to be at the top but the stages need to stay where they are. Meaning you effectively need to delete this section and place things where you want them.
2) Save often - you don't want your session to expire etc. and lose lots of work.
With a linear process without conditionality the best you could have would be something like:
1) Review report
2) Assigning to contractor
3) Graffiti removed
With OpenProcess Flex it is possible to achieve the process in the same way as shown in the diagram above.
So the optimum order in which to do this is to:
a) Build your form
b) Build your process
c) Link your process to the form by adding an OpenProcess Action to the form
The following is our form and we can see the user has set the location of the graffiti and answered the first choice question about whether the graffiti is on private land:
If you're unsure of how to add maps/link to process fields see here.
Field Ids and process branches
If we look back at the intended process we can see there is a branch if the graffiti is on private land or not.
Let's have a look at how this specific question has been set up. When you are building your form and you have a field that is going to drive a choice within a branch of your process you need to ensure:
a) That you check the 'Map to a key information field in OpenProcess' checkbox
b) You make a note of the Field id you give to this, as this will be needed in the set up of the process. I typically use the same field id for this as that already held on the question itself. E.g. in the below PrivateLand is the field id for the OpenProcess mapping and the question itself.
Note that in this question there are two options Yes and No. When the user has selected one of these the answer is effectively a single string of text "Yes" or "No".
The reason this is important is that when you're creating your process you will not use the field type of 'Choice' but instead 'Single line of text'. That might seem confusing but the Choice type is where a council officer is making a choice that determines a branch. In this case, the choice is being made automatically.
So if we look at the process created for the above form we can see it has all of these fields:
If we click on the 'Private Land' field you can see the following:
Notice that:
1) The 'Code' mirrors the Field Id set within the online form 'PrivateLand' - it is CRITICAL that your code here matches the Field Id set in the form.
2) 'Single line of text' is the type because the form will pass Yes or No as a single text field
3) This information is required to start the process because 'Required at startup' is set to true. It is, therefore, CRITICAL that any data required at startup is a mandatory question in the online form or the process will not be created where this data has not been provided.
So for each of the pieces of data from the form that will drive the process they need to be set up like the above. E.g. Offensive and Over 2m are also collected in the form:
In summary, content from your form that should trigger a branch in a process needs to have a field associated with it in your process.
Where you need decisions to be made in a process that users will make manually you need to add these as choice fields. For example:
- Council is responsible
- Cherry Picker Available
Are two decisions that council staff need to make - the following illustrates the latter:
Clearly, this is not required at startup and the options are Yes/No.
The process itself
Using the add branching function documented earlier, the above process diagram has been mirrored into OpenProcess:
We have added branches/decision points as follows with the order in which the branches are check shown below.
1st level - Public Land / Private Land
2nd level - Offensive / In Offensive
3rd level - Over 2m / Under 2m
4th level - Council Responsibility / Not Council Responsibility
5th level - Cherry Picker Booked / Awaiting Cherry Picker Availability
I.e. The Offensive check is nested within and thus checked after the check on whether it is on Private Land.
Now, given this is a complex process we are best to look at a specific branch.
So where it is on Public Land, Offensive, and Over 2m the first step in the process will be:
'Priority- Offensive - High'
If we look at the conditions against the Public Land, Offensive Graffiti, Over 2m we can see three conditions need to be met to get to this step:
Fields["PrivateLand"] == "No"
Fields["OFFENSIVE"] == "Yes"
Fields["HIGH"] == "Yes"
As each of these three decisions are driven by data from the online form, working out the first step happens automatically.
After the first step, Priority- Offensive - High, two decisions need to be made to work out the next step to work out if the Graffiti Removal Organised step should be moved to. These are:
a) Is the Council responsible?
b) Has a Cherry Picker been arranged?
As both of these need a human decision, there are two mandatory fields that need to be set in order to complete the process:
So, when the user attempts to complete this process step they see this:
As a result of the fact that they said that a Cherry Picker has not been booked, it has been pushed to the step from the above process relevant for this 'Awaiting High Access Vehicle Availability':
As well as being able to use fields to drive process decisions fields can be used to record information that's required e.g. when the graffiti is removed the council might want a contractor to record:
- Chemicals Used
- Time Taken
- That a photo has been uploaded showing the graffiti has been removed
This is illustrated below:
And illustrates the different elements that were added to make this process.
I.e. whilst this process has a variety of sections/branches it is actually just the same functions above replicated for each of the different conditions.
We think this functionality is going to be a game-changer for councils in terms of efficiency, intelligent routing of work and personalisation of proactive messaging.
We hope you agree and can't wait to hear how you use it.