The Optimajet team supports developers of their products during the Proof of Concept stage. In most cases, when .NET developers tackle their own tasks or their clients' business challenges, they have to start from scratch in understanding the architecture of various .NET engines. Initially, they study the market and need to grasp the capabilities of all products, along with their pros and cons.
Unfortunately, all products are different, and it is nearly impossible to compare them, because they are structured very differently. However, there are some fundamental principles.
In this article, we have tried to compile a learning roadmap using our documentation as an example, to make it easier for you to understand the principles of the Optimajet Workflow Engine. This engine is very easy to learn and won't require more than two weeks of your time. After this, you'll be able to understand any engine, professionally compare the solutions available on the market, and make the right choice.
To reinforce the materials through practice, we recommend installing and run WorkflowServer in a Docker container and creating working schemes to test how everything works in practice.
Starting from the Functionality stage, a basic understanding of C# and .Net may be required since Optimajet Workflow Engine is a .Net library for developers, and most tasks require extending the engine’s capabilities using C# code.
Basics
Start by reading the articles in the Workflow Scheme section. As a foundation, it's important to understand how the basic building blocks of a scheme work:
You should have a good understanding of how they are interconnected and what they are used for.
At this stage, there's no need to look for real-world applications for the schemes; just practice creating them for different scenarios without focusing on implementation. It’s also important to understand how to create scheme instances—processes—and the lifecycle of these instances. You don’t need to delve too deeply at the start, simply creating a few processes and experimenting with their states will suffice.
Functionality
At this stage, you'll need to figure out how to turn empty schemes into the workhorses of business, and here, unfortunately, C# .Net knowledge is essential. The Optimajet Workflow Engine is designed for developers. The engine’s functionality is implemented through three main components: Actions, Conditions, and Rules, which developers see as IWorkflowActionProvider and IWorkflowRuleProvider.
Practice implementing these interfaces and create a scheme that performs some useful work—saving data to a database, sending notification emails, or requesting user approval.
You should also learn how to programmatically trigger transitions using SetState, SetActivity, and Resume.
Complex Schemes
The ability to create “simple” schemes consisting of branches with conditions and action implementations is sufficient for 80% of scenarios. However, for the remaining cases, you’ll need some advanced techniques: subprocesses and parallel task execution, embedding one scheme into another, and creating loops in the scheme (this feature is implemented via plugins).
These features allow you to create very advanced schemes. At this stage, it’s important to understand how scheme migrations occur when they are changed. Also, explore the important mechanism of Pre-execution, which allows you to predict the movement of the scheme without changing its state. By the end of this stage, you should be confident in developing complex business processes using WFE.
Customization
Quite often, users of Optimajet Workflow Engine want to customize the product and extend its functionality. There are two components here: visual and logical. Both can be combined into a plugin and installed as a single package.
Visual customization
Visual customization is based on the fact that any element of the designer is a template written in Vue.js, which the client can change without access to the source code. There are also some specific features like autocomplete or providing forms for parameters.
The logical part allows you to create your own custom activities that perform some specific work. They work thanks to metadata (annotations) that can be attached to any activity, and a form for editing these annotations is automatically generated, using the parameter form mechanism from the visual part.
As part of this learning stage, you should study how localization works, which can also be configured in the designer itself. Here, you can learn how to add languages for localization.
Plugins
This stage is not as difficult as the previous one but is quite extensive and requires an understanding of how customization and plugins work. A lot of work has been done, and most of the standard scenarios of logical customization have already been written by Optimajet and included in the package.
These are various plugins: A Basic plugin one with a set of different tools, an Approval plugin that implements an inbox system for tracking and notifying actors moving the process state, and an Assignment plugin for task assignment. There are also other minor plugins, which you can find on the documentation website and review on your own; they are mostly integrations with various services and technologies.
Advanced Features
This stage of learning covers very large and complex concepts, specific tasks may arise, and it’s important to know how they work. The difference between a single-server and multi-server setup, understanding the concept of Runtime, Runtime configuration options, and recovery after a failure. The specifics of data storage by the Optimajet provider and the configuration of multi-tenancy mode should also be reviewed. Additionally, familiarize yourself with scheme generation and the process of building a scheme.
Various Useful Features
It’s difficult to categorize these features, but they are worth mentioning as they are not the most complex features and additions, but also guides. They will also be useful for understanding the Optimajet Workflow Engine at an advanced level.
- How to make approvals by multiple users without creating branches in the scheme
- How logs work in the designer
- Work calendars
- Error handling
- Dependency injection
We will continue to supplement and update this article based on your questions and feedback, so that the Learning Roadmap becomes the best version of itself. Please be active in the comments and feel free to ask your questions.