UML and BPMN serve very different modelling purposes. However, both are managed and cared for by the OMG group.
Simply search UML vs BPMN and you’ll have hours of reading!
In my mind, the biggest difference is that BPMN is executable! It is a programming language, for lack of a better analogy. In addition to the pretty picture of the conventional model, you also supply the necessary metadata for it to be executable on a process engine that complies with the BPMN standard.
To be accurate BPMN is not executable, it is a Modeling Notation.
Typically, it is compiled to Business Process Execution Language (BPEL), a horrible XML based language, that is recognized by all the big Java frameworks.
Because BPEL and BPMN are designed separately, BPEL can be generated from something other than BPMN and BPMN can be compiled to something other than BPEL.
@MichaelPinkowski A good way to understand BPMN is “programming in the large”, as opposed to Python, Java, etc that are “programming in the small”. BPMN defines processes that can take months and involve people as well as machines. Programming in the small happens in a single machine and aims to complete in milliseconds (vastly over generalizing).
UML can serve as an initial design tool &/or a post-development documentation tool. It rarely keeps pace with actual software development. Initiatives to generate code from UML, (MDA), have gained little traction, since users respond much better to “User Story” type functional specifications on the one hand, and developers dislike the generated code, on the other.
BPMN has gained traction because it is aimed at a narrower audience, business process professionals; it’s a great explanation tool that also has the depth to be a software (BPEL) generation tool.
When I was researching ERPNext and various other solutions, we considered building some django apps ourselves to implement our workflows. http://viewflow.io/ integrates well with Django and was one we looked at. Much more simplistic than Camunda but also maybe more approachable. Something like this might be a candidate for more direct integration (although now that I look I’m not sure about the licensing issues).
MOST of OUR business workflows will probably end up in a custom app anyway, which means we could add whatever workflow logic we need into it via Python. That will work but isn’t as elegant.
Yes you’re absolutely correct, and I was quietly expecting someone to correct me sooner or later. However I could not do it as well as you did, so I’m very happy you did.
My company has been involved in Business Process Automation (BPA), as the major driving force behind Digital Transformation, since 2010. From a business point of view, in other words, end users defining, using and executing processes, I always loose them when I talk too technical. There are many caveats, half-truths and dangerous analogies scattered throughout this post. Yet they may make sense to a particular reader, depending on which hat you wear, and at the same time cause another to cringe.
As I’ve mentioned in an earlier post, we integrate ERPNext into process automation for a number of our clients, but it’s too external as far as the end user is concerned. They have to open separate applications to model and view the execution statuses of those processes. To have an integrated process management capability within ERPNext would be a dream come true.
Imixs-Workflow is a human-centric workflow engine. This means the engine focus on a concrete business process executed in an enterprise by different participants. The main goal is to encourage human skills and collaboration in a model-driven way. In this way Imixs-Workflow can help to document the activities of a business process and to make it transparent for all parties involved. This is more about compliance guidelines and to ensure that operations at certain times can only be executed by authorized persons. For example something like an approval process according to the 4-eye principle. Typical uses case are long running business workflows like a purchase order, approving a budget plan, closing a contract or supporting a complex quality approval process.
This is different to most engines mainly trying to control your back-end tasks or even more technical engines controlling microservices, scripts, containers or CD processes.
The topic is unfortunately very confusing and I see very often that BPMN engines are compared with each other addressing very different concepts.
Loonflow is at the same level of Django-River, they are implemented in Django, but define most of the patterns needed for business workflows, with a big differenciation against Django-ViewFlow, they are basedly on top of configuration, instead of code
LiteFlow is an Simpler Workflow Engine, with many interest features, like integration with Redis and MongoDb, but lacks an web-api to handle, also, most of the workflows should be defined by code.
Like LiteFlow, PyFlow, is a extreme liteweight workflow engine, with support of distributed tasks in Python
These are the most interesting and resourcefull workflow engine (where some implement support to BPMN, or can be used to), that I have been collecting in the years.
After doing a bit of research I also thought SpiffWorkflow seemed like it might be a good choice as a simple “code only” integrated option. It does not have a fancy GUI, monitoring or external interfaces but is well abstracted. For implementing simple workflows inside ERPNext it might be a straightforward choice.
Lots of different requirements here. I think one of the few commonalities between users is that no one has found the existing system to serve their needs at all!
I agree with you, it’s a standalone solution. IMO, what szufisher idea is common case in second develop phase. Frappe need a strong workflow enginee(key feature of low code is dynamic form&workflow).
Any updates from the community on the implementation of business process management? It seems many people were interested in this / had already started implementing some things…
There is a complex scenario. In the process of workflow processing, we usually need to control the state of records, which is usually used in manufacturing scenarios. eg. A user created a Hold from, it has been confirmed by his leader, then the user want to hold (Not cancel) the form, expect that the form will not be process until it be released.
is it normal? I founded that Microsoft workflow, only one is supported.
I am curious about the current status about workflow, are there improvement elsewhere? How do you handle your real world case now?
Note: I can understand that, Frappe might want to keep its workflow simple enough for everyone / small companies. If that so, I am willing to try create custom module for some extended feature.
to be frank, till now there is still no paying customer who need complex workflow feature, so I got no dedicated time to continue the abandoned PR so long time ago.
anyway, if the core team decided to pick it up, I can help to do testing and code review as needed.
Hello was there any update on this PR or does anyone have any other workarounds? Did anyone integrate any other third party APIs to ERPnext for workflow approval?
We’ve done a great deal with SpiffWorkflow over the last few years, it’s been a full time development effort for us since 2020. We are about to release a new version of the core library (early February 2024) - we’ve revamped the documentation - and we’ve build a complete workflow orchestration system on top of the core library that is also a pure python environment. More information on spiffworkflow.org
Hello I just have to revisit this thread again for my real project requirement.
My challenge is that, a Document from Employee need to get approved by Employee’s Department Head.
The current workflow only allow us to specify a fixed Role and not dynamic Role. To make it work, we need to create a lot of transitions equal to the number of departments, each of which require a condition for a department.
If we have 100 departments, we need to create 100 transitions also to revise the workflow when there are chagnes in departments. This is not working for me.
I have create a new module (my intention is better to include in the core), that do the following,
Change field “allowed” to virtual field, that compute from,