We will model a business process for record of booking airline tickets, in a Travel Agency.
This process begins when we record the reservation details as indicated by the traveler; for instance, where he wants to go, the date and time of departure, departure airport, arrival airport, etc.
The agency’s employee must check if the traveler is a customer of the agency; if he isn't a customer, he must register him.
The details of this reservation must be validated in either case. That is to say, if the traveler was an existing customer or if he has been registered as a new customer. This is done in a sub process known as Validate Reservation, which we will see later.
If everything is OK after validating the reservation, the traveler can make the trip. Or, it may also happen that there are no flights available to make the reservation, and in this case, the traveler will be asked if he wants to make a different reservation.
If he declines the offer, the process ends...Otherwise, a new reservation will be offered and the process starts again.
The GeneXus object we have to create this kind of diagram is the Business Process Diagram
The first thing we need to do is to create an empty business process diagram.
Note that we got a blank page where we can create our model. Now we can select symbols from the toolbox to model our business process, following the international standard known as BPMN or Business Process Model and Notation.
To mark the beginning of the process, we drag a None Start Event symbol. We may add a tag to the start node, to clarify what kind of process we want to model. To do that, double-click on the start node or press F2, and after writing the description, we can pick the tab created and drop it in another place.
To book tickets, first we need to perform the task of recording the flight. To model a task, we drag a None Task symbol and name it TicketReservation.
Since we know that the task must be performed by a person, we can assign its type by changing the Type property to the User value. Now this task is an interactive task; that is to say, human intervention will be needed to complete it (note the symbol on the upper left corner).
To connect the Start node to the task, we click on the right side of the green circle, hold and drag it until the pointer touches the left side of the task rectangle.
According to the process followed at the travel agency, the system must check if the person making the reservation is an existing customer of the company. To represent a decision in the diagram we open the toolbox, drag an Exclusive Gateway node to the diagram and connect it from the TicketReservation task.
A node of this type evaluates a condition and allows flow branching into several paths. The condition’s question may have several answers, but since the node is of “Exclusive” type the flow will only continue through a single path. We will add a tag that clarifies the decision we’re making (using F2 key). In this case we add the description: “Is the traveler an existing customer?”
In our example, if the person who wants to book the tourist package is not a customer of the company, an agency employee must be directed by the application to add him as a customer.
Since it is an interactive task that needs human intervention for its completion, we drag a task of User type from the toolbar, name it Record Customer and connect it from the right side of the Gateway symbol. To indicate that this task will be executed if the condition is not met, we add the text “No” to the connector that joins the Gateway to the task.
Once a person is added as a customer, the new customer must be associated with the reservation. This task can be automatically performed without human intervention, so we drag a task of Script (or batch) type, name it “Associate Customer with Reservation” and connect it from the Record Customer task.
So far, we have described the tasks that will be performed if a new customer has to be added and assigned to the reservation. Now we will add the activity that will be performed if the latter is not necessary.
At this point, the reservation availability needs to be checked (by contacting airlines to confirm if there are flights available for the requested date), confirm that the customer has all the necessary documentation to travel, or check if any financial obstacles exist in relation to this customer. Depending on all of the above, the reservation may be authorized or rejected. Since this verification involves a series of tasks, we group them in a subprocess called Validate Reservation.
To indicate this in the diagram, we drag an Reusable Subprocess symbol from the toolbar, enter the name we have selected for it and connect it from the lower side of the Exclusive Gateway. We also add the text “Yes” to the place where the diagram will continue if the condition evaluates to true. To do so, we only need to press F2 after clicking on the connector.
This connection, which was tagged with Yes, is our most common scenario. The reason is that, in general, the person requesting a reservation has already traveled through the agency and is an existing customer of the company. To indicate this, we select the connector, in the properties window we change its Condition type property and select the Default value. Note that in the diagram the flow has been marked with a green line that crosses it.
We also connect the Validate Reservation subprocess from the Associate Customer with Reservation task, because once the customer has been assigned, the reservation must be validated as well.
Moving on through the process, if the reservation was correctly validated, the customer will be able to make the trip. We must evaluate this condition after the validation, so we add an Exclusive Gateway and connect it from the Validate Reservation sub-process and we add this description: “Is the reservation valid?” to indicate what we want to evaluate in this Gateway.
If the reservation is valid (which is considered the most probable case), the customer must be notified about the authorization and the process will end.
Since the notification will be emailed by the system, we begin by adding a task of script type with the name “Notify customer of authorization” and connect it from the Gateway. We select this connector, set its Condition type property to Default and add a description with the text ‘Yes’.
To indicate that the process will end after the notification, we insert a None End Event node and connect it from the notification task. Lastly, we add the description “Valid reservation” to the end symbol.
All of the above was added for the case when the reservation is valid. If it isn't valid, we should send a customized notification about the rejection to the customer and ask him if he wants to make another reservation.
If so, the ticket reservation process must start again; otherwise, the process must end.
To model this, we start by adding a task of User type to notify the customer about the rejection. We name it “Notify about rejection and check follow-up” and connect it from the right side of the gateway that evaluates if the reservation is valid. To this connector we add the description: “No”.
Once we tell the customer that the reservation is not valid, we need to ask him if he wants to make another reservation. To do so, we add an Exclusive Gateway and connect it from the notification task, and we add the Gateway's description “Do you want to make another reservation?” to clarify its meaning.
If the answer is ‘No’ the process must end, so we insert a node and connect it from the lower side of the Gateway. To this connector we add the description “No” and set it as Default, and below the end event, we add the description “Invalid Reservation”.
If the answer is ‘Yes’, we connect the Gateway to the Ticket Reservation task to indicate that a new reservation process will begin. To this connector we add the description ‘Yes’.
To view our finished diagram, we right-click on the empty section of the diagram and choose Zoom Out until the entire diagram is visible on the screen.
In this way we could have completed the diagram for the ticket reservation process.
Now, we can add more information to the diagram, by grouping tasks and processes, in pools and lanes.
To continue with the model of the Travel Agency flight ticket reservation process, you shoud have a look to the definition of concurrent tasks, detection and identification of errors.