OpenText Process Suite: From Model to Execution

Sascha Kottura and Harry Siegesma walk through OpenText Process Suite, building a complete order-handling workflow from scratch. The demo covers swimlanes, decision tables, timers, message events, and role-based task assignment, then runs and monitors the live process in the Cordis inbox.
Chapters
The broadcast is now starting. All attendees are in listen-only mode.
Ladies and gentlemen, welcome to our webinar this afternoon entitled Process Suite: From Model to Execution. My name is Sascha Kottura, and I'm the CEO of Convedo. With me today is my colleague Harry Siegesma, one of our certified Cordis professionals and our BPM trainer. As you are here to see how quickly OpenText Process Suite can turn the knowledge about a particular process into a fully operational process application, I will keep the intro to Convedo short and sweet. Many of you know of our work already, and those that don't can find out more from us directly or via our website. We will send you the recording and contact details after the webinar. In short, Convedo are a long-term OpenText partner that supports end users, other BPM consultancies, and OpenText themselves. We deliver trainings, solutions, projects, and we also manage licenses and maintenance for our customers. We have worked with almost any vertical, as you can imagine, delivering solutions like the very common expense claim systems through to know your customer compliance-driven risk management case management for legal and financial institutions, and integrations to CRM, ERP, and other industry-standard off-the-shelf applications, and some of the weirdest legacy systems you can imagine. Our consultants have delivered these to some of the best-known names in commerce and private sectors throughout Europe and beyond. As I have mentioned earlier, to find out more about what we can do to help you, get in touch via email or give us a ring at any stage and we will arrange a meeting. Okay, let's move on to OpenText Process Suite. There are several parts which make up the Process Suite. The core part is the Process Suite Platform. With rich modeling, integration, and rules technologies. You will see this part in our webinar today. The platform also comes with features like entity modeling and ma— master data management. Built on top of the platform is the Process Component Library, also called the PCL, which are pre-built case management components and interfaces to speed up development. With the help of the PCL and the platform, digital solutions are built on top of it. More and more digital solutions will be available by OpenText and partners over the next months. And finally, there is the analytics part for process and data analysis and visualization, which allows you to integrate key metrics from multiple systems and report from one location to improve business efficiencies. As most workflows require broad information management services, ProcessSuite ships with a lot of built-in integrations, for example, to OpenText Content Server, Directory Services, StreamServe, and InfoFusion, which lowers the cost and speeds the development of high-value case management solutions. Okay, let's move on to the main part of today's presentation. As I hope many, many of you will be aware, the reason Convedo focuses also on solutions based on Process Suite platform is that the tools deliver the insight, power, and agility needed to make business improvement a reality. Companies today not only want to increase their effectiveness and efficiency but to also become more capable of change, interact with the customers more effectively, and at the end of the day, earn more money, do things easier, or safeguard processes with a lower overhead. And today we want to show you how to get started on this topic. In this next part of the webinar, we will demonstrate how to use the graphical editor to build process models in BPMN. Annotation, build user interfaces, implement business rules, and integrate with web services. So we can run the process through from start to finish, from modeling to execution. For this part, I hand over to my colleague Harry Siegesma, our Process Suite expert and BPM trainer.
Okay, thank you, Sascha, for your clear introduction.
Okay, you're welcome.
Let me start my presentation so everybody is able to follow through. Now, what I'm going to demonstrate is how you can take start off with your design and then start implementing the design. So for that purpose, I will take you to my collaborative workspace. So let's open up my collaborative workspace. Now, with the Process Suite, everything is done within the collaborative workspace. So by opening up my collaborative workspace, I'm able to start designing as well as running and executing my process. Now, to really focus on the most interesting part of preparing a process and implementing it, I've already implemented some features that I want to apply in my process. Now, basically my process is about handling an order, and before doing that, I'm offering my customer a form by which they can enter their order. Now typically this form could be published on any kind of website, and the customer, either by using something like single sign-on, is already passed as a customer inside the system and says, okay, I'm going to create an order for this customer. Now I wish my order to be delivered on the 19th of— so next Friday in a week's time. And I want to order a number of products, so I'm offering my user a select list. I like the Uncle Bob's dried pears, let me eat 10 pieces of that. Furthermore, I like some Gorgonzola. Now let's order that for 5 items, plus perhaps a bit of beer. Let's do the Sasquatch Ale. Let's order that for 12. And perhaps finally, so we have an order with— let's do some Alice Mutton, some sweet mutton, 5 pieces please. So as soon as the user presses the Save Order, an order number is being returned and the order itself is processed. Basically what you see over here is that we've started off by creating a process and implementing that process. So, and that process is called Save Order. So let me open up Save Order process. Now in the Save Order process, I'm creating— typically an order consists of two parts, in this case an order header and the order lines themselves. So I'm creating in my process, I'm saving the order inside the database as well as saving the order lines. And in this case I'm starting a dummy process. So basically doing nothing. This is my dummy process. But actually I want to replace the dummy process. That's what I'm going to do next. I'm going to replace it by the so-called HandleOrder process. Do you want to change the description? Yes. So in this case, initially I will just trigger this kind of a process, handle the order, but we will build this process in a full order handling type of process. So let's close this one. Let's save this one first. There's one thing in my process I want to pass. I'm creating the order inside my data sources, so I need to pass as an input to the Handle Order process the order ID. And that's something which is done by means of the so-called message map in a process. Here's that sub-process step. And what I effectively need to do, I need to pass the order number as input. And I'm getting that from the output of my save order process. So here's the order number. Okay. Back to my model. Save this one. Now, okay, let's close this one. So we created the order 11. 11085. Now let's go back to my environment over here. Let's open up the Handle Order, and we could already start test running this order handling process, which is only a limited functionality, but let's just have a run to it and let's see if it nicely works. So that was the order that I entered. OK. And now within the system, I can follow through what has happened. Execution. Show process instances. And as we can see, that process, the instance of that Handle Order process, at the current moment it's waiting for any kind of action. So the Pick Order Details is done, was an empty step, and now it, you, it waits for the receive message. Typically later on I will use this kind of functionality in order to make sure that my order is being processed, a bill is passed to the customer, and I want to finish my process as soon as the bill has been paid by the customer. And I'm using the receive message for that. Now, how can we send a receipt of my invoice by using this small process, which basically, when I execute this one, requires me to enter the order ID once again, 085. It will pass out that message to the handle order execution show process instance once again. As we will see now, it's nicely completed as it's received the order itself. Basically, this is what we've already covered. What I'm going to do— let me go quickly back to my presentation. This is the save order process. I have an initial handle order process, which I will enlarge and using the send/receive message events to pass messages. I will enlarge it to this kind of a process where we have 3 different roles. Working on the shipment, the picking of the order and shipment, and the handling of the bill. We have the order picker, the shipping agent, the billing specialist. And while having this kind of a model, I will start implementing separate parts of the model. This is a user interface. This is a web service. This is a so-called decision table implementing the business rule. The result over here will be used in, in the next step to check whether we need to add export papers to the order itself. So let's focus on building and launching our process and adding the steps that are in my model itself. So first of all, I need swim lanes. Swim lanes are used to present the responsibilities inside my process. So this will be the order picker Order Picker, which will be responsible for that one. Another swim lane will be for the shipping agent responsibilities for the— sorry, shipping agent, shipping agent. And again, to make it more clear, you can change the coloring of the swim lanes in order to clearly state the different responsibility, the different roles that that are applied inside the process. And this will be the billing specialist. Okay. Well, let's take parts of the model that are already there, put these in my order picker line. I will remove this line, and these two parts will be included in my billing specialist. Now let's elaborate and add the relevant steps to my process. Let's make a bit of room here. Okay, and first of all, we will have a step, a next step, which will read the associated customer details, because based on the country of a customer, we want to check whether export— additional export papers are necessary or not. So in this case, we will add a decision table to check whether export papers are necessary. And finally, add another step which will, depending on this step, do we need to verify and add the correct export papers. So I'm filling in the different activities that we will later on add the right implementation to it. So the next step will be, okay, we have picked the order, checked whether we need the export papers. Now we will prepare the order for shipment. So that's why it's moving to— it's moved to the shipping agent swimlane, because this role will be responsible for doing this kind of task. Now we can nicely make our model and the connector lines over here. And then we have a next step which will be a check. And so have a final check of the order, ship the order. I'm adding this step, I'm not implementing it, but this could be a nice example of making sure that we have one person that has the shipping agent role preparing the role and making sure that a colleague and not the same person is doing the check. Of that order. You can make sure by what we call task nature of tasks that it's what we call the 4 eyes principle, meaning there should be at least 4 eyes doing these 2 different tasks. Okay, now let's put in a delay in order to make sure that we only will file or send out a bill to an invoice to the customer after 24 hours. So we will add a note over here, say, okay, we will start financial, financial processing only after one day, making sure that we clearly indicate that we will not immediately start the financial processing but only after a day. In the properties of that delay construct, we can then say in the duration that the duration should be a day. So make that a day and make sure no seconds are used. This means it will wait for 24 hours. Now I don't want to wait for 20 hours for this demo, so I will put this on zero again, but I will add 1 minute for it. Now as you can see, this is what we call a static duration. You could also create any kind of dynamic duration by having an XML element, a data element, in your message map So that's why it says read duration from message, specifying a dynamic time value which should be used as or applied as the duration. Well, in this case we will leave it one static minute. So it will leave for one minute, it will stop for one minute, put in that delay, and after that delay it will then next do the prepare and send the invoice. Invoice. Invoice. Then there's my send message. So again, over here, make sure that this is nicely fitted over there as well as over there. Then it will have my receive message, and as soon as it has received my message— let's remove this one put this one on that one. As soon as it has received the invoice being paid, process the received payment. So in this case, my re— my process will wait until the payment has been received, and then it will do the final processing of that bill. Okay, let's move this a bit. Save. So basically, this is my current process. As an example, I will start implementing a number of these steps. But I want to make sure to you as well, as soon as I have any kind of process model, I am able to simulate the execution of the process itself by just running it. So you don't need to fully implement the process. At any moment in time, you can start test running the process itself. Right-hand mouse click, execute. Let's run the process. And again, I can use the number of the order that I entered before, 11085, and I'm able to test run the process. Now, how can I get hold of what has been happening inside the process itself? Right-hand mouse click, by using the option Show Process Instances, you will see, hey, there is the process that I just started over here. And as you can see, it's been started at 19 minutes past 4, and it's still in the waiting phase. Now, why is it in the waiting phase? Because there is the delay of 27 seconds. And again, it will wait for, as I said, 1 minute, and then it would touch the next steps, and finally it will wait for this one. Now let's start implementing a number of these steps. First of all, let's create a UI by which the order picker can pick the appropriate items for the order. But as we said, we created swimlanes, so let's make sure that this is done by the one, the anybody who has the order picker role. So I'm going to associate a role to my swimlane, and you will see as soon as I'm adding a UI to this— a user interface to this action— that will inherit the role from the swimlane itself. Let's go back over here in the workspace and let's concentrate on creating a user interface. Right-hand mouse click. I'm going to create a new document, and that will be a document called a user interface, which will open up another graphical editor in which I can use— which I can use to create my user interface. Now, as a preparation to this demo, we— I've already prepared a number of web services to be able to read the data, in this case to be able to read the order and order detail from my data source. So over here there's my GetOrders object. I can test run this one and I can say, okay, 11085, give me the details. Invoke that service. And over here, there are my order details entered today by the customer Blom. Okay, so there's my order. And associated with that order, or the order lines. So again, if I enlarge this one, we can also ask for the order details for that specific order. So in this case, let's use the same number once again, and it will nicely show me the different details. I had 4 details added to that order, so 4 order lines. So basically, how I can I can simply create a UI by dragging this service to my user interface and say, yes, I'd like to generate a UI for the output. And as you can see, it nicely creates a number of fields showing the different items and the different fields of my record. Now in this case, I'm doing the Pick Order UI, so I don't want to show all the columns in the table or all the columns through my web service. I only want to show a limited set, namely the order ID, customer ID, the employee ID, and the order ID, and the required date. I want to skip all the shipped items. Close this one. Make this a bit smaller. Furthermore, right-hand mouse click, I can say I'd like the labels to be side left. So in this case, it will nicely put the label side left, and you could even change the label, say required date, order date, I want a space in between, etc., etc. Okay, now this will show us the order details. Next, what I want to add are the order details. This will show us the order header details, and now next I want to show you the order details as well. So putting this one. Generate UI for output as well. Relate that to the orders model, which will make sure that whenever I'm opening up my order, it will show the related order items. We can make this a bit smaller. Right-hand mouse click. You could also say, hey, in the layout, I want this to be horizontal, making sure that it's positioned over here. Allow me a number of— okay, so pick order form. Okay, now as soon as we created this kind of a UI, I can do a preview. Yes, I can do a preview and have a look at what's being delivered over here. And I could walk through my final, the last order that I entered, which was the 11 085, and as you can see, it nicely shows me the different products and the quantities that have been ordered for the product. Now, this is a screen by which you could create your own kind of orders as well, and you can move to any next or previous order. That's something that I don't want to do inside my process. So in this case, I'm going to remove the control bar, effectively not allowing you to create any new order. And right-hand mouse click, I'm also going to delete the pagination bar because I don't want you to move to any next order. The same over here, I don't want you to change, to add any kind of additional order line, so I will remove that one as well. It might be possible that you have an order consisting of 10 or 20 order lines, so you might want to move to any next or previous page. Plus, I don't want you to change the order ID, so changing that to an output field, as well as changing the customer ID and the employee ID, and perhaps also the order date. And the only date that you can change over here is the required date. Save. Once again, have a preview of the form. It shows me, but now I'm not able to move to any next or previous order, so this looks fine to me. Now there's one more thing that I'd like to show you, and I'd like to do behind the form. There are models and the data models of the form, and in this case We have the order model, and I don't— I only want to collect one single order, so the iterator will be 1 instead of 50, and I don't want the next or previous one as well. Okay, that's it. Save once again, preview. Now it doesn't show any order anymore because that's something which is done in the process itself. So I prepared my UI. Now next, what I'd like to do is add that UI to my process. So over here, there's my Pick Order form, and I'm going to drag and drop that onto that specific activity. No, I don't want to change the description. Now, as you can see, as I've associated that role to the swimlane, immediately when I'm putting in that UI, the UI gets the role inherited. And I can show you that as well by opening up the properties of my UI. You can see here in the work assignment, it inherits from the swimlane, and again, and that's the order picker. So it inherits the role from the swimlane. So this is the implementation of one step inside my process. And again, by opening up the properties of the UI and you're able to follow through what happens. There's the application. It's an xForm. It's a UI. And what kind of workflow model? What is the task nature? This is what I was mentioning. The 4-eye principle or the 4-eye nature would mean that, hey, make sure that anybody else is doing this task if somebody has done a preceding task. Let's keep that to 0. The only thing what I effectively want to do is whenever you are presenting this task to a user, instead of having a static value for the subject, I want to give it a dynamic value. And that also allows me to show you the richness of the XPath expressions that you can make. Say, okay, I'm going to create a concatenation, order ID and the order ID that I'm going to present, that I'm going to handle, is the order number which was received as input. Okay, do validate. I can test that here as well. So instead of passing me a static message on the topic of that UI, it will show me a dynamic message, a dynamic topic, which allows me to immediately concentrate on on an order and say, okay, I need to work on that specific order. Okay, that's one thing. Now, as I've associated my order screen to my process, I need to make sure that in my process the input order number is passed as input to this UI. So all the data flow in a process is covered in what we call the message map of a process. So here's my Pick Order Details. As a pre-assignment, I want to make sure that it will use the order ID from the input that it has received from the process itself. So this makes sure that whenever you are running this kind of a process, it passes the input from the process itself as input to the UI. In the UI itself, there's the relation already between the orders model and the details model, so I need not worry about that. Okay, so that's one way of implementing an action by presenting it as a task in your process. Now, in this case, what I want to do next is I want to use this decision table to check whether additional export papers are necessary. So I prepared a rule for that which I can show you just by testing it. Let's say, hey, first of all, it needs— are there any kind of classified goods? Yes. And if the country is France or the UK or the US, you will need additional export papers. So I will give that kind of an input, execute the rule, and then as you can see, it will give me back a changed object. Say, yes, we need to check on papers, and this is the specific form that you need to use. Rather of slotting this kind of logic inside the process, we've put it separately so we're easily changing this kind of logic rather than having the need to change the whole process. So in this case, I'm going to add this to that step. No, I don't want to change the description, but as you saw, I needed the country from the customer in order to check whether these papers are relevant or not. So in that case, I want to make sure that before executing that decision table I need the country of my customer. And again, we have a web service which I can test. And if we use that customer I selected, that Blomp, which is a French-based customer, Blomp, then invoke that, you will see the country will be France. The country will be France. So In order to make sure that to implement this kind of step, I can simply drag and drop this onto that action. And again, now I have to tie everything together again. I have to make sure that in my data flow I'm passing the right input to the UI, which was the order number, passing the customer ID to the service. And then taking the country as an output over here as input to the decision table and using that to check whether yes or no we need to execute this kind of a step. So back to my message map. Let's have a look in how do I pass the data from one step to another step. We had our pick order details. Now The next step was read the associated customer details. There is my GetCustomer object. There's the customer ID. And from my order, from the output model of my order, there's my form output data. There's my order. There's the response. Here is my order ID. There's my customer ID. So I can immediately pass the output from the preceding step as input to my next step. And again, similar, check whether the export papers are necessary. What I did during my test was making sure that, hey, we had two items. This one say yes, and again, and that could be any kind of value which is being created during the process rather than making it a fixed value that I'm doing at the current moment. And the country as input. And again, now read my associated customer details. There's the output of that web service, the response, the old— there's my customer details, and here's the country of my customer. So I'm passing again the output of the preceding step as input, pre-assignment as input to the next step. Okay. Then as a post-assignment, as part of my preparations, I already created a single element extra export step which will be filled by the output of that decision table. Yes or no, additional papers are necessary. So take the output over here and say check export papers. The value that is being returned by the decision table will be the input for this step. And that's something which we will do in the post of my decision table, executing my decision table. Now instead of modeling it this way, say, hey, I have a decision, if yes, yeah, then we have to do this, if no, we can immediately go to that step. There's a far more elegant way of modeling this kind of single steps to be executed on conditional, on a condition, by opening up the properties of that step again and say, hey, there's an execute condition associated to this. And that execute condition is a static value. And again, what is that static value? It's a condition put on this element, which is when it's yes, we need to execute that step. Validate. Okay. So as you can see, now it has that decision logic part included in the process step itself. Well, let's save this process. The other steps would be quite similar— a specific kind of UI associated to it, and of course the different roles. And again, over here I could say I want to add another role, and in this case that will be a new role that I want to use. Save that one. That will be the shipping agent, shipping agent role. And save that one in the folder Roles, Roles over here. Okay, okay. Save. Close. And making sure that this role is being associated to that swimlane. And over here, similar, but now we could also create the roles, role from here. Say, right-hand mouse click. I want to create a new role over here, and that's the billing specialist. Save this one. Billing specialist. Okay. Save. Close. And again, simply drag and drop that onto this one. No, I like my own description. So in this case, we have nicely have created the relevant roles and associated these two the swimlanes. Save. And again, we can test run the process itself, making sure it's validated and published. And again, right-hand mouse click, I could say let's start executing that role. Run it once again, and using the same number that we've already used, 11085. And again, right-hand mouse click, execute, show process instances. I'm able to nicely follow through what is happening inside my process. It's still in the waiting phase, and in this case it's waiting on the Pick Order Details, which is a task, and that task is being assigned to the role Order Picker. So anybody who has that role will receive this as a task. Now make sure that somebody will have that role, so I'm going to assign myself that order picker role. Assign. And I'm using the so-called Cordis inbox, or the Process Suite inbox, to show you, hey, there's my order, and here is that dynamic topic which I created. It immediately shows me, hey, this order is the order ID 1101. 85. So in this case, I can claim the order because multiple colleagues would be able to have the same role, and I want to clearly indicate, hey, I'm going to execute this kind of work. And again, this kind of work, picking all the items to the order and then being finished completing my task. Now let's have a look at what's being happening in my process. That's being As you can see, that task is being completed— sorry, that task is being completed within 1 minute and 20 seconds. You can also see by whom that task has been completed. It has started to read the customer details, and again I can see what kind of input there— so there was the input which I passed, what kind of output was returned. There's my customer details, and of course the country of that customer, which then is used as input and output to the decision table, which makes sure that, hey, I'm going to execute that step. And then it's waiting for the delay again. It's almost finished. Oh, where's my— almost finished. Refresh. Now it should have passed the delay as well, and it's waiting for the receive message. So once again, And let's put in the receive message. There's my process, handle order. Let's do the process, open up this one. Send a receipt execution run based on 11:08:05. Once again, okay. And now back to my activities over here. Let's do a refresh. That's nicely run into completion as it has received that message. Okay, so basically we started implementing parts of our process, and at any moment in time we are able to test run the process. Now let's take a complete new run. So I'm going to create another order with, in this case, let's put in some more items, Gumbo Mix. Let's Let's put in 7 Gumbo Mix and perhaps another item. So we have Northwood Cranberry Sauce and let's put in 5. Save the order. 11-0-8-6. That will be lead. We can see that in my inbox if I refresh my inbox. The order has been received. Okay, sorry, at the current moment it does not run the— let me go back to the workspace over here— the save order. Let's make sure that this one is being published. Okay, because this one should have running. Let's see, show process instances, run to complete. Yeah, because it he did not start, it did not trigger that subprocess yet. Now once again, let's go back to my preview over here. Let's save another order, 87, and now it should show me in the handle order, right? And mouse click, show execution. There's my 11087, and it's in the waiting phase because it's waiting in my inbox over here. There's my order ID, and again I can take you through the whole process once again. Say, okay, let's claim this one, let's complete it. And again, I'm able to follow exactly through what has happened. And there's another way of presenting that flow by using the graphical view on the flow. And as you can see, hey, there's the input, pick the order details, right-hand mouse click, what was the input for that one, the 11087. That was being processed, completed, then it executed this step, what was there, the input, etc. So in this kind of a graphical view of my process, I'm able to follow through exactly what has been happening in each step. The checkbox nicely shows you if a step has been executed. And it's still in that delay, and if I would refresh it, it's still in that delay. Delay. Okay, so basically what I did was taking you to a number of steps, implementing that steps, make— creating the order. So I redesigned the process model to implement a real handle order process, adding the different steps to the process, and start designing a user interface for the first step to pick the orders and the order details. Then you also saw how I created the relevant application roles and associated that to the different steps, in this case by means of a swimlane, to clearly show the responsibilities. I also created a decision table implementing a business rule defining whether or not additional export papers are necessary for this order. So basically, we created the, say, the handle order process, and we were able to test run it at any moment in time, and being able to monitor how the execution of the process went. And so that completes my presentation. I'm going to hand back to Sascha again.
Yeah, thank you very much, Harry.
It was a pleasure.
Thank you. The things Harry showed you today should give you a good understanding how the Process Suite platform works in general. Obviously, there is more to it. So what could be the next step for you? Feel free to reach out if you want to— want a more detailed demonstration of the whole Process Suite to find out if this supports your business requirements. To help you getting the most out of the Process Suite, we also offer a range of consultancy services. We can support you in the proof of concept phase, help you kickstart an implementation project, or we can deliver the full implementation for you. As mentioned at the beginning, we are delivering training courses on-site or as a classroom training on Cordis and Process Suite. We deliver training on pretty much all the available Cordis courses, for example, the Fundamentals, Developing Processes, Developing Services, Administration, and a few more. If you're really keen to get started with developing your Process Suite applications, we recommend to secure your seat in our upcoming Process Suite Bootcamp. We are running the boot camp around the globe from September. We will stop in 8 cities to cover pretty much every region: UK, Europe, Middle East, APAC, and the US. We have limited spaces available. If this sounds good to you, make sure you register your interest after the webinar. The registration link for the boot camp tour will be included in the email we will send you. Last but not least, for regular knowledge articles, tips, and best practices, feel free to subscribe to our Tech Blog. If you have any questions, please just send us an email or ring, and we will do our best to give you some answers. The recording will be available after the webinar. We will send an email with the links to everyone who has attended today. We thank you all very much for taking the time to join in. We hope it's been useful, and we look forward to speaking with you all in the near future. Thank you and goodbye.
More from Sascha

EP112: Inside Enterprise Automation, How Yexle Delivers Real Impact with Appian w/ Vijay Poondy

EP112: Inside Enterprise Automation, How Yexle Delivers Real Impact with Appian w/ Vijay Poo #shorts

#106 Automation and Data...Spreadsheets on Steroids w/ Henrique Cruz (Rows.com)

#103 AI document processing, 2024 US elections and more w/ Petr Baudis at Rossum






