maandag 12 december 2016

Oracle Process Cloud Service: new features!

During Oracle Open World 2016, the latest release of Oracle Process Cloud Service got presented. The product has been making huge progress in all aspects, so here’s an overview of all the new and improved features.

Oracle Process Cloud Service

For those of you unfamiliar with the product: Oracle Process Cloud Service (PCS) is Oracle’s BPM solution for the cloud. While development on Oracle BPM Suite has pretty much come to an end, Oracle Process Cloud Service is the way forward and the platform for all new features related to Business Process Management. This meant that the product that was originally positioned as BPM for the citizen developer had to improve and mature to a full-blown BPM solution. It needs to support long running processes, improve its integration strategy and support case management, to mention some important subjects. While case management is not there yet, it will certainly come to Oracle Process Cloud Service and many other features are already there with the latest release.

pcs_bpm_thumb1

Modelling Processes

As it used to be, modelling processes is done in the browser. This makes it easy for business and IT to collaborate on processes, because you only need an internet connection to get access. No need for development tools, code repositories and a powerful work station to get started. The main improvement in the process modelling is that Oracle has abandoned the usage of Flash. This makes the process modeller faster and easier to use, creating a far more pleasant and performant development experience.
Selecting integrations
When creating a Service Call, whether it’s synchronous or asynchronous, you can now select an Integration from Oracle Integration Cloud Service. Obviously, this is much more practical than dealing with WSDL imports and all the technical stuff related to that, but it also has a bigger meaning. It’s clearly showing that Integration Cloud Service has been strategically positioned as the way to go for process integrations. It’s putting the technical know-how of integration where it belongs, so you will no longer feel tempted to take that kind of complexity into a business process. Therefore, I strongly recommend following this approach as suggested by Oracle, instead of trying to work out your own integrations in PCS. Use these products for their purpose.
Document workflows
Oracle Process Cloud Service is still closely connected to Oracle Documents Cloud Service. It was already possible to deal with documents in your processes very easily, but now processes can even be started by putting a document in a certain folder in Documents Cloud Service. It requires minimal configuration on the Documents side, while in PCS you can now use a “Document Start” event for your process.
Correlation
One important missing feature in PCS was correlation. This feature is there now, so you don’t have to use BPM Suite anymore for your long running, asynchronous interactions with other processes and services. You can use the “Message Catch” event to catch messages with the related correlationId that you have defined. This can be especially handy in cases of migrating your long running processes to a newer version.

pcs_jet_thumb3

User Interface

Oracle has been working hard on consolidating its User Interfaces with Oracle JET. For PCS, this means that Frevvo WebForms have been replaced by a completely new user interface designer. The idea of drag and drop remains, but everything is faster and smoother, while quite some new features are available now. For example, you can preview your web form in different formats, so you know how it will look on  phones, tablets, laptops etc… and you can also use different presentation layers for your form if you want to reuse the form in different layouts for different purposes. On top of that, instead of having to code Rules in JavaScript, you can now declaratively add Events (new word for the same thing) to your form. This should make it considerably easier for the citizen developer to make meaningful web forms, although getting some real UI knowledge in never hurts.

Other Features

QuickStart Apps
If you want to start fast and you’re using relatively standard processes in your business, you can use QuickStart Apps. Currently, there are 6 of those available and I expect more to come in the future. It could also be nice if these could be purchased from the Marketplace.
Embeddable Apps
You can now embed your process forms in other applications, for example various SaaS products. This will help you to create a seamless integration between your processes and other apps.
BI Cloud Integration
PCS is now integrated with Oracle BI Cloud, where you can use your default or custom analytics. While PCS also has dashboards, they are more for operational information, so this is a nice and much needed extra functionality.
Actionable Emails
Just like in BPM Suite, you can take actions in your processes directly from e-mail messages now. Reusable e-mail templates can be created, in which you can embed process data and actions for users to be taken.

What does the future hold?

I think that september’s release has been the biggest one so far for Oracle Process Cloud Service. However, the development team isn’t nearly done yet. Most noticeably on the agenda, there are the new business rule component, as a microservice and based on DMN (Decision Model and Notation), as well as Case Management, which should logically be based on CMMN (Case Management Model and Notation) and hopefully be less complicated than Case Management in BPM Suite. I believe that PCS has grown to be a mature product that can tackle most of your BPM needs already and with the two mentioned additions, it will be ready to fully replace Oracle BPM Suite in a more business-friendly and less technical manner. While not being a trendsetter in the world of BPM, at least Oracle is catching up quickly with modern developments and adding value by seemless integration with other Oracle cloud products.

The Cloud Is The Future


If you've paid attention to IT news in the last couple of years, you will have noticed that cloud computing is all over the place. Major companies like Oracle, Amazon, IBM and Microsoft are rapidly developing a whole new cloud world for enterprises and most successful startups are embracing the new technologies that come with it. In the meantime, I'm noticing that many of my clients are nowhere near the cloud yet and there's also quite some skepticism among my peers.

Focusing more specifically on Oracle technology, which has been my core business for more than ten years, I think that the movement to the cloud is inevitable. On-premise products are still being supported, but when it comes to new developments, Oracle is taking a cloud-first approach, going as far as abandoning on-premise development altogether for certain products.

As a client, this gives you several options: you can keep moving on a dead end road, still happily run your applications for the next 10-15 years and nothing bad is going to happen. However, you'll be missing out on a lot of new features and business opportunities like that, so you need to be very clear that this on-premise software exactly fits your needs and you won't need anything new. Theoretically, this is possible, but in reality we will hardly see such situations.

So, what are the alternatives? If you really don't want to go into the cloud, you can start replacing your proprietary software with open-source software, because with that you can do whatever you want. No vendor will be telling you that a product will get deprecated, because in the very worst case you can still develop it further yourself if there's no community left to work on it. Obviously, such an approach means quite a lot for your organization: you need to re-educate your technical staff, deal with no or limited support in case of problems and the more modifications you make, the harder it will be to find developers who understand what you're doing.

So, I believe that in most cases it will be viable to develop a strategy for moving to the cloud, even if you decide to move to open source. Find out what's holding you back, check if your concerns are actually making sense (are you sure you can be more secure than Oracle, performing faster than Microsoft or guarantee high availability better than Amazon?) and make an action list to work out the remaining concerns. Maybe you'll end up having some kind of private cloud, either managed by yourself or the cloud provider. As long as you have access to the latest technology, these can be viable solutions, although maybe not optimal when you look at cost of ownership, security or availability.

On the other hand, one should also be mindful to not jump to the cloud without thought: many cloud products are not fully developed yet, so you might be missing some crucial features for your specific needs. Planning carefully is the way to go, but waiting too long might make you lose your competitive edge in the age of digital transformation.

If you're a software developer or admin, what can I say? I remember database developers who didn't believe in middleware and ended up in support roles or unemployed. I remember DBAs who found it unfair that databases got smarter, did nothing to adapt and ended up being pushed off the market. We continuously need to improve ourselves and look to the future.

Of course, if you're happy to do the same work for ten more years and end up being overtaken by those who did reinvent themselves, let it be your decision. But it will not be mine. The cloud is the inevitable future, so you can either jump on the train or be left behind. My decision has been made, what will be yours?

maandag 6 juni 2016

Innovation and the state of the Dutch economy

When I moved back to The Netherlands from Turkey in 2014, I thought that the crisis would be over and life would be better here than in Istanbul. Now, almost two years later, I found out that I'm wrong. I'm seeing too many people merely surviving, burdened by mortgages, divorces, unemployment and other problems. Personally, I think it's very sad that such a rich country has so many people buying second-hand things or even having to rely on charity to get a meal.

So, what is this country doing to get out of the crisis? Cutting expenses and nothing else. However, this is where things are getting problematic in the long run. Last week, I spent two days at the amazing AMIS conference about Oracle technology. Heard many inspiring stories about the latest developments in IT and realized that none of them are happening in The Netherlands. It's not because we don't have the technological skills: with an incredibly high amount of Oracle ACEs, we're rather the object of envy in the rest of the Oracle world.

In my opinion, the main problem is in the "bookkeeper" mindset. When I was working abroad, companies were using IT to enhance and renovate their businesses. After all, the economic struggle has also become a technical struggle and you need to be on top of things in order to survive.
So I've worked on a project for a Turkish company to enter the digital marketplace and on another project in Australia where IT was moved to the Cloud in order to free up resources, so they can deliver business goals, instead of doing maintenance. In the meantime, in The Netherlands I've been working on a project with the main purpose of taking work out of people's hands, so they can be fired. Also, when I look at disruptive businesses, they are hardly ever from my home country: we're stagnating.

When you look at technical innovation, it's obvious that it has to be driven by business innovation. If you're not going to do anything different with your company, why take the risk of jumping into some new and unproven technology? Why not just optimize what you have and see if you can cut some more expenses?

I have the opinion that innovation is the only way to get out of a crisis. You need to take some risks to have a competitive edge and with the fast developments that are going on, you can't risk waiting too long. You need to have a vision, invest in it and make modern technology the cornerstone of your future business. There are amazing possibilities out there in the Cloud with Internet of Things, Big Data, Analytics etc... and if you don't seize those opportunities, it will be game over sooner rather than later. It's time to start building on the future and the future begins today.

Best practice for calling web services from Oracle Process Cloud Service

More often than not, you will want your processes to interact with other services or processes inside or outside your enterprise. Since integration options are rather typical in Oracle Process Cloud Service, this article will help you to apply best practices for creating and managing your connections in a sustainable fashion.

Process Cloud integration points

Let’s say you have modelled a process in Oracle Process Cloud Service (PCS) for a private home loan application. Chances are quite high that this process will need some extra information to make the right decisions, like a credit check or a risk assessment and you will want to store the result of the application somewhere, for example in a database. This requires several integration points in your PCS application. Now if you would directly import the WSDLs of those web services that you need to integrate with, it’s most likely not going to work. For example, Oracle Policy Automation, which you can use for risk assessment, has a highly generic interface and without XSLT support in PCS, you can’t make a proper request. Other services might require WS-Addressing or other technical aspects that PCS doesn’t support, so you need to put something in between. For this something, you can use various SOA and Service Bus products or Oracle’s Integration Cloud Service, once it has matured some more to deal with web services properly.



Creating the interface – challenges

So, you have decided to put one or more layers of services between PCS and the web services that you need to invoke. Regardless of your architecture, you need to keep some considerations in mind:
  1. If you have a WSDL with XSD imports, you need to upload a zip file with the WSDL and all the XSDs in it. All these XSDs will be imported as schema files in PCS.
  2. If you want to update your WSDL, you need to remove it together with all the imported XSDs and do a full upload again, otherwise it will fail. This is currently a bug and will hopefully be fixed soon.
  3. Once you promote your WSDL to a “Connector” in PCS, Business Types will be created for every type in the WSDL (and associated XSDs).
  4. Imported XSDs can’t have the same name as XSDs already existing in your PCS application.
  5. Auto-created Business Types can’t have the same name and namespace as already existing Business Types in your PCS application.
  6. For mapping the process data to your interface, you can only use BPM data associations.

Creating the interface – requirements

Considering the list above, there’s a clear set of requirements:
  1. Your WSDL shouldn’t have imports. All types should be defined in the WSDL itself.
  2. Your WSDL schema should have a different namespace from the schemas used in your process. For example, you could name one http://www.undertheredcloud.nl/processes and the other http://www.undertheredcloud.nl/services.
  3. Your interface should be a direct reflection of your process data.
  4. The amount of services exposed to PCS should be limited to avoid the creation of hordes of useless Business Types.

Recommended approach

The approach that I have chosen in my PCS project is the following: I have created one Requester Service in Service Bus (on Oracle SOA Cloud Service) for the entire Home Loan Application Process.  This service has multiple operations: one for each integration that needs to be made and each operation would call a business service that takes care of further processing. The interface of the service is the same as the main process data object, which contains the home loan application, copied directly into the WSDL with a difference namespace. Then I added the WSDL that I’ve created to my PCS application and promoted it to a Connector. 84 Business Types got created, because I’ve used a lot of complexType and simpleType components. Alternatively, you can nest everything into elements, but that approach would require a lot of re-work and doesn’t exactly make maintenance efficient.
Now I could map my data easily with a data association in the process, I could make changes to the data model and all complexities regarding integration are pushed to the Service Bus. The result is a tightly coupled integration between the process and its specific Requester Service, but from there on, I have all tools available to me to make proper integrations, including XSLT, WS-Addressing and whatever else I need. No unnecessary XSD imports have taken place in the process and when it comes to Business Types, the process is a lot cleaner compared to a scenario where every integration point would have its own Requester Service.


Basically, you can apply all your SOA best practices with the aforementioned approach, because you’re pushing all the technical complexity from PCS to the Service Bus. Even when PCS becomes more enhanced with integration possibilities, this will probably still prove to be a good approach, although I hope that WSDLs with XSD imports will be a good option in the future, for example by letting me choose whether I want to import all the XSDs into PCS or not.

Creating reusable Business Rules for SOA & BPM

This article dives into the Business Rules Engine (BRE) of Oracle SOA Suite and how to create reusable Business Rules for your SOA services and BPM processes. Basic knowledge of the BRE is assumed.

In many cases, when you work with SOA or BPM, Business Rules are involved. They are important for decision logic, validations and process routing. The Business Rule Engine (BRE) that comes with Oracle SOA Suite is a logical choice for modelling such Business Rules, but how do you make sure that those rules can be reused over different services and processes? And how do you isolate the Business Rules logic, so you don’t need to redeploy any other components upon changes?
In one of my projects, I’ve faced the situation of needing to address these issues and have come up with a flexible solution. This blog is the result of further finetuning of that solution, mainly by using the KISS approach.
Business Rule Engine (BRE)
First things first: let’s talk about the Business Rule Engine. It’s a powerful tool for executing if-then rules or rules in decision tables, but it’s not always too business friendly for modelling. If that’s a major problem for your client, you should consider Oracle Policy Automation instead. However, if you decided to use the BRE, then reusability becomes an issue pretty quickly. It’s very tempting to just create a BPM process and have the Business Rule component generated from there, but then those rules will only be exposed to that particular composite. There is no central repository for reusable Business Rules (like MDS), so your only real option is to put your Business Rules in a separate SOA composite.
When we dive deeper into the Business Rule Engine, we see four major components:
  1. Decision Services
  2. RuleSets
  3. Rules
  4. Facts
Decision Services are the interfaces of the Business Rule component. One BRE component can have multiple Decision Services and one Decision Service can call multiple RuleSets.
RuleSets are groups of rules that can be called by different Decision Services. They should generally contain rules that should always be executed together.
Rules are being executed by the BRE. A rule can only exist in the context of one RuleSet, so rules are not reusable on their own.
Facts are the input objects for your Rules. Since our objective is to create reusability, I recommend to stick to one input fact, which can then be used by all the Rules.

rulesession_thumb1

Now let’s have a look at the internal architecture of the Business Rule Engine (see picture above). Since we have the same Facts in all our RuleSets, we’ll get matches for all of them, so all RuleSets will be activated, including those that are not being called by your Decision Service! When a RuleSet fails to activate, an error will occur, so make sure that your Rules have the right conditions to make sure that this doesn’t happen. For example, a Rule that checks if reasonOfEmploymentTermination is of a certain value can have a very nasty impact on an Enrollment process that doesn’t contain this element. To avoid this, I’ve established the practice of using the pre-populated IF part of any Rule to check for the conditions of applying the Rule (f.e. employmentEndDate != null) and entering the actual Rule logic in the THEN part with a nested expression. This way, you have a consistent Rule design and since activation of RuleSets is incredibly fast, performance is not really an issue here.
So, to summarize what should be done in the Business Rule component, we have multiple Decision Services, all based on the same Fact, that call one or more reusable RuleSets.
Organizing your SOA landscape
So, you’ve decided to reuse your Business Rules and separate them from your processes. Your next step will be to think about the granularity of those Business Rule composites. Since we want both flexibility and reusability, I recommend a domain based structure, so, by example of my latest project, there can be an Employment Rules composite, an Employee Rules composite, Employer rules composite etc…
Since validations and process logic don’t always depend on one functional domain, I have also created a reusable Business Service (Employment Rules Business Service) that calls the domain based rule composites, wraps the responses together and exposes a canonical interface. This way, the number of integrations needed for Business Rule execution can be limited and some orchestration can be done in a centralized way. Additionally, this Business Service can take care of gathering additional information required to execute the Business Rules, so you don’t have to do that in each process or service.
How to keep things Loosely Coupled
Basically, my processes and services don’t really care which rules are being executed exactly. They just want to tell to the Rules Business Service “execute the rules that are applicable to me and give me the outcome”. So, when we take the Enrollment Process for example, it will send its relevant payload to the Business Service, together with an element to identify which rules should be executed. For example: EnrollmentProcessRules or EnrollmentValidationRules. Based on this information, the Business Service will do its orchestration and the Rules Services do some Content Based Routing to use the right Decision Service. Click the picture below to understand how it all hangs together.

untitled-1_thumb5

When you look at the picture, Process A will call the Employment Rules Business Service with some payload and the identifier “EnrollmentProcessRules”. The Business Service does its orchestration and calls the Employment Rules Provider Service. This Provider Service then uses Content Based Routing in a Mediator to go the right Decision Service, which then calls the relevant RuleSets (defined with drag & drop in BRE) that execute the Rules within. The result will be sent back to the Business Service, that gathers all the results and returns a response to the process. Now, if an additional rule needs to be added for this process, how do we do this? We just go into the Business Rule component, add a Rule to a RuleSet or create a new RuleSet with the new Rule and add this RuleSet to the Decision Service that’s being used by the process, depending on the situation. Now we can just deploy the Provider Service again and the process can use its new rule without being changed. Same logic applies for modifying or deleting rules, so things are perfectly loosely coupled this way.
Summary
With this solution, I have managed to make Business Rules reusable and create a loosely coupled system for maximum business flexibility with a minimum amount of modifications and deployments required upon changes. Let's hope it will be useful for you and your clients. If you have any additional questions, you’re more than welcome to write to me and I’ll do my best to help you out.











zondag 5 juni 2016

Basic integration of Process Cloud Service with Document Cloud Service

Recently, Oracle had released a new version of Process Cloud Service. It mainly contains some minor improvements, but also has one major update: Oracle Process Cloud Service can now use Oracle Document Cloud Service for working with documents in business processes. This blog will show you how to make it happen.

Establishing the connection

In the main page of Oracle Process Cloud Service, click on your user in the right-top corner and select “Administration”. On the Administration page, you click “Settings” under Configuration, which will get you where you want to be. Here you can fill in the URL of your Document Cloud Service, as well as username and password of the admin user. You can test the configuration immediately and click “Save” in the upper right corner when the integration was successful.


image

Once the connection has been established, we can proceed to using documents in our processes immediately!

Developing the process

For this blog, I have created a small sample process for insurance claims. An employee of an insurance company will enter some details through a web form and attach a bill sent by a client. Then, if the bill is over $1000, a manager needs to approve or reject the claim. After this, the process will end. The small sample process looks as follows:


image
During development of the process, I have done nothing related to documents, this comes automatically! Of course, it is possible to work on document settings: for example, you can set access rights while implementing the human task. You can also create document folders on the application level of Process Cloud, but for now, I have decided to go with the default setting of one folder for my application, which will automatically be created in Document Cloud. For every instance of the process, a subfolder is automatically created too, so from Document Cloud side, it looks as follows (click on the picture to enlarge):


image

Note that the revision number of the process is in the name of the folder, so when you deploy to a new revision number, a new main folder will be created.
In a follow-up article, I will tackle the issues of access rights and folder structures.

Runtime

From the main page, I start my Insurance Claim application. It opens the Web Form that I’ve created for this task and a small blue document icon has appeared on the right side of my screen.


image

After filling in the details, you can click on the blue icon, navigate through any folders (if applicable) and upload a file. In this case, I have chosen to upload a Word document and enter an Amount of $1250, which leads to the management approval step.
Now let’s have a look at the manager’s task screen (through Work on Tasks). He will see the details that I’ve entered, as well as the same blue icon.


image

When clicking on the blue icon, the manager can see the document uploaded by the employee and watch in the Process Cloud environment. No downloads are needed, although downloading is obviously possible. It’s even possible to upload a new version of this document. This option will be elaborated upon in the follow-up article.


image

Summary

Integrating Process Cloud with Document Cloud is remarkably easy. No restarts or complex configurations are necessary: it’s really just entering the basic connection details and it works immediately. This is a very smooth offering from Oracle and living up to their promise of keeping things simple in Process Cloud. For those who want things a little bit less simple, my follow-up article will dive deeper into the extra options that integrating Process Cloud with Document Cloud has to offer. However, it looks like the basic integration is already a great addition to Process Cloud and no advanced options are needed to get started.