Every new process begins with a “Start” and “Terminate” service. Both of these accept no input and cannot be configured any further. If you ever accidentally remove the Start or End services and need to add them back to your process canvas, they can be found in the “Process Flow Elements” Workshop.
Each process can have only one “Start” service, but can have many “Terminate” services. This is because the process can branch out in many different process branches depending on the possible cases.
To begin designing your process, you will need to drag the connector nodes of the start to new services you add to your canvas.
Each service has white circles surrounding it which are its connector nodes. They can be clicked and dragged to create connector arrows.
Two services can be connected by connecting the connector nodes between the two.
Most services can have only one outbound connection. The Exception to this is a Binary Decision. This service can have two outbound connections because it performs a logic test and depending on the outcome takes either the “True” path or the “False” path outward. These are often used in processes because they give the ability to create multiple process branches for all possible cases.
Adding New Services
In order to create a process, you will need to add new services between your “Start” and “Terminate”. On the left side of the Process screen you have a list of all services. They are divided into Workshops which describe their use. In order to find a particular service, you first need to find the corresponding Workshop. For instance, if you wanted a service to tell you the current date or time, you would look in the “Date and Time Services” Workshop. If you wish to query a database, you would expand the “Database Services” Workshop.
After finding the desired service, it can be added to the process canvas by selecting the service and dragging and dropping onto the canvas.
Some workshops, like the “Database Services” Workshop, have some further options available for each Service. If you expand the Inquire service, you will see some options related to the saved database configurations. Selecting one of the Database Configurations under the service instead of the service level to drag in, will auto fill some service properties.
In our Inquire example, dragging the AppData configuration to the process canvas auto fills the DbType and ConnectionString properties with the AppData variables.
Adding a Service Note
Click on the service and in the right panel, select “Notes”.
Select the “Open” option in the radio button. Type a message like “This is a test service” in the Notes section and Click “Add” when you are done. You will notice the service looks different on the canvas now.
Now if a future developer opens this process canvas, this note acts a README file for the service. This will prompt the developer to click on the service and select the “Notes” tab to view the note left previously. The next developer has the option to edit the note and click “Update” which saves the new note.
If you right-click a service some options are available to make development easier. Some of these are explained below.
The shortcut for these are Ctrl+C (copy) and Ctrl+X (cut). Copy adds the service xml to the clipboard to be pasted in the same or a different process canvas. Cut does the same, but also removes the original. The resulting pasted process is identical to the first (name is not appended with copy), but with the next available EntityId.
Often times you will have a need to copy or cut services to avoid having to reconfigure the service properties. These services copy all these properties and cut down on development time. Consider the following example. If you already have an inquire set up to query a table and want an exact copy of that query to make minor changes, the copy action would be very helpful to achieve the goal with minimal added development.
Selecting a service on canvas and hitting F2 allows you to rename it. This can also be accomplished by right-clicking and selecting “Rename”. Assigning meaningful names to services greatly improves the readability of a process.
Services should be named when they are first placed on the canvas because the name is referenced by other services on the canvas. If you wait until your process flow is fully developed to rename services, it will break your process flow logic because it will reference an old name which no longer exists.
The name of a service cannot contain spaces.
If you were re-organizing your process canvas, you could use the disconnect feature to clean up some unwanted connections. Select one service and Ctrl+D or right-click and select “Disconnect”. This removes all connections to or from the selected service. This could be used if a service gets overly confusing with many connections and the developer would like to clear all connections to start again.
This can be very helpful when developing, because when connecting many services, it can get very tedious. Select multiple services and hit Ctrl+Q or right-click and select “Auto-Connect” to automatically create the connections between the services. Keep in mind the connections can be unpredictable when your services are not arranged intuitively.
Select All Connected Services
Selecting all connected services can be very helpful if you have a large process with many branches and want to move it all away from another chunk of processes that are no longer connected.
In this example we had created backups of previous logic and placed it at the bottom of the process canvas. However, as the process grew, it started to infringe on the backup logic space. To help, we could select all and move everything down. Then, select actual process and click “Select All Connected Services”. Now that only the active process (no backups) are selected, and there is more room after moving everything down, it can be moved up away from the backups.
Even though we are already working in a process, it can contain another service which is calling another process. This can be useful to create one process that is called from many places, but does not duplicate the logic in all of the places it is needed. For instance, a GetCartId process could contain all the logic needed to find the currently logged in user’s cart id. Every time we need the user’s cart id, instead of duplicating the logic, a process call to the GetCartId process is added and we use the output CartId value. This process would be used when visiting the shopping cart page, when adding items to cart, on checkout, etc.
When working with a process that has one of these process calls, you might want to open up the nested process to look at the logic used. This can be done by right-clicking and selecting “Open Process”. This opens the process in a new tab.
Create ForEach Loop
A ForEach loop allows us to iterate on the results of previous service in the process canvas. The ForEach service can be dragged onto the process canvas from within the “Process Flow Elements” Workshop, but creating it through the right-click option auto fills the input parameter “SelectorValue”. This is the only input parameter to the service. It is the node we wish to iterate on.
Creating the ForEach from the right-click menu also creates both the begin and end ForEach services since these must be used in pairs. It also auto names the services based on the SelectorValue. If we look inside the begin ForEach service, we can see the SelectorValue auto-filled.