updates to features page
added pages for spiffarena, editor, workflow lib Added several new articles, and a way to list them. New list template A ton of new images for articles
40
config.yaml
@ -37,7 +37,7 @@ params:
|
||||
# Button text
|
||||
buttontext: Get started
|
||||
# Where the main hero button links to
|
||||
buttonlink: "#"
|
||||
buttonlink: "/posts/articles/get_started"
|
||||
# Hero image (from static/images/___)
|
||||
image: illustrations/flow.svg
|
||||
# Footer logos (from static/images/logos/clients/___.svg)
|
||||
@ -57,7 +57,7 @@ params:
|
||||
- title: SpiffEditor
|
||||
url: /pages/spiffeditor
|
||||
- title: Get Started
|
||||
url: /posts/get_started
|
||||
url: /posts/articles/get_started
|
||||
button: true
|
||||
sidebar:
|
||||
# Logo (from /images/logos/___.svg)
|
||||
@ -67,20 +67,18 @@ params:
|
||||
icon: user
|
||||
links:
|
||||
- text: SpiffWorkflow
|
||||
url: /
|
||||
url: /pages/spiffworkflow
|
||||
- text: SpiffArena
|
||||
url: /
|
||||
url: /pages/spiffarena
|
||||
- text: SpiffEditor
|
||||
url: /
|
||||
url: /pages/spiffeditor
|
||||
- title: Articles
|
||||
icon: envelope
|
||||
links:
|
||||
- text: Intro Articles
|
||||
url: /
|
||||
- text: Business Articles
|
||||
url: /
|
||||
- text: Technical Articles
|
||||
url: /
|
||||
- text: Introduction Articles
|
||||
url: /posts/articles
|
||||
- text: Deep Dive Articles
|
||||
url: /posts/deep_dives
|
||||
section1:
|
||||
title: Open Source Software
|
||||
subtitle: It's all open. All of it. The whole enchelada. (well it would be a taquito then, wouldn't it?).
|
||||
@ -88,12 +86,12 @@ params:
|
||||
- title: SpiffWorkflow
|
||||
icon: spiffworkflow
|
||||
text: The original lightweight diagram execution library.
|
||||
url: /
|
||||
url: /pages/spiffworkflow
|
||||
buttonText: Learn More
|
||||
- title: SpiffArena
|
||||
icon: spiffarena
|
||||
text: A complete platform for managing diagrams.
|
||||
url: /
|
||||
url: /pages/spiffarena
|
||||
buttonText: Learn More
|
||||
- title: SpiffEditor
|
||||
icon: spiffedit
|
||||
@ -119,7 +117,7 @@ params:
|
||||
subtitle: Diagrams can be intutive AND executable - removing monotony, adding transpaency and opening opertunities for improvement and adaptation.
|
||||
image: illustrations/school.svg
|
||||
buttonText: Get started
|
||||
buttonLink: "#"
|
||||
buttonLink: "/posts/articles/get_started"
|
||||
section4:
|
||||
title: Join the Innovators
|
||||
subtitle: We are just getting started. Join these innovators and help us continue to refine and improve this important open source project
|
||||
@ -159,25 +157,19 @@ params:
|
||||
title: "Projects"
|
||||
links:
|
||||
- text: SpiffArena
|
||||
link: /
|
||||
link: /pages/spiffarena
|
||||
- text: SpiffWorkflow
|
||||
link: /
|
||||
link: /pages/spiffworkflow
|
||||
- text: SpiffEditor
|
||||
link: /
|
||||
- text: Our roadmap
|
||||
link: /
|
||||
link: /pages/spiffeditor
|
||||
column2:
|
||||
title: "Docs"
|
||||
links:
|
||||
- text: Get started
|
||||
link: /
|
||||
- text: Detailed Documentation
|
||||
link: /
|
||||
link: /posts/articles/get_started
|
||||
column3:
|
||||
title: "Blog"
|
||||
links:
|
||||
- text: Intro articles
|
||||
link: /blog/intro
|
||||
- text: Business articles
|
||||
link: /blog/business
|
||||
- text: Techincal articles
|
||||
|
@ -47,7 +47,7 @@ With editors for Python, Markdown, and Json - you can quickly jump from drawing
|
||||
|
||||
|
||||
### Data Encapsulation
|
||||
SpiffWorkflow supports BPMN's Data Objects, Data Inputs and Data Outputs, allowing you to visually control what data is accessible to which components. When composing diagrams within diagrams you can declare the expected variables that will be provided, and the ones that will return, keeping your workflows clean, consistent, and easy to understand.
|
||||
SpiffWorkflow supports BPMN's Data Objects, Data Inputs and Data Outputs, allowing you to visually control what data is accessible to which components. When composing diagrams within diagrams you can declare the expected variables that will be provided, and the ones that will be returned, keeping your workflows clean, consistent, and easy to understand.
|
||||
|
||||
### Python Editor with builtin unit tests
|
||||
A robust python editor allows you to write small bits of code that help modify data (say user input on a form) to fit a different purpose (sending a formatted message to Slack). To make these modifications you can use script tasks. And to make sure they are working correctly we provided a way to test them in place to make sure they do what you expect them to do!
|
||||
|
Before Width: | Height: | Size: 112 KiB |
21
content/pages/spiffarena.md
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "SpiffArena"
|
||||
subtitle: "A turnkey solution for managing workflows"
|
||||
date: 2022-12-27T16:05:00-05:00
|
||||
author: Dan Funk
|
||||
draft: false
|
||||
---
|
||||
|
||||
SpiffArena is a combination of many tools into a single web based application. If you would like access to all of the [Features](/pages/features) in our feature list (and a lot more) this is the tool you want.
|
||||
|
||||

|
||||
|
||||
You can create your first diagram using SpiffArena right now by following our [Getting Started](/posts/get_started) guide.
|
||||
|
||||
If you are interested in paid support, please get in contact with us for free consultation. We are looking forward to talking to you.
|
||||
|
||||
|
||||
## License
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
|
29
content/pages/spiffeditor.md
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "SpiffEditor (and other open source projects)"
|
||||
subtitle: "Here are few more tools for working with SpiffWorkfow and SpiffArena"
|
||||
date: 2022-12-27T16:05:00-05:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
## SpiffEditor
|
||||
We've built a number of extensions to the excellent open source [BPMN.js](https://bpmn.io/toolkit/bpmn-js/) editor specifically for SpiffWorkflow. Here are few of the major features:
|
||||
|
||||
* **Data Objects, Inputs and Outputs**: Improved support of adding, referencing and updating Data references, providing a standards based way to manage data within a diagram.
|
||||
* **Call Activities**: Offers tight integration with SpiffArena so you can quickly navigate to diagrams referenced from within other diagrams.
|
||||
* **Custom Properties Panel**: A SpiffWorkflow native properties panel to allow opening up custom editors for Python, Markdown and Json. Ability to add short pre and post scripts to any task, Support for SpiffWorkflows Python Unit Testing framework, among many other tools.
|
||||
* **Messages**: We added support for the BPMN Messaging standard, to assure you can easily create Messages and their associated converation elements (correlation properties and keys)
|
||||
|
||||
## Connector Proxy, and Connectors
|
||||
Connector Proxies provide a Discoverable / Plug-In style architecture for adding connections to third party applications that will work seamlessly with SpiffWorkflow, SpiffArena and the SpiffEditor. We created a [Demo Connector Proxy](https://github.com/sartography/connector-proxy-demo) that you can use to get started.
|
||||
|
||||
Each Connector included in the Connector Proxy is itself a small standalone python application written to the Plug-In standard -- Checkout our [AWS Connector](https://github.com/sartography/connector-aws) for an example. Adding new plugins should be easy, and we hope to see many contributions here in the future.
|
||||
|
||||
## SpiffWorkflow Backend and Frontend
|
||||
SpiffArena's two major components are a flask API ([SpiffWorkflow Backend](https://github.com/sartography/spiffworkflow-backend)) and a React FrontEnd application ([SpiffWorkflow Frontend](https://github.com/sartography/spiffworkflow-frontend)).
|
||||
|
||||
|
||||
## License
|
||||
All of the applications above fall under the
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
|
22
content/pages/spiffworkflow.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
title: "SpiffWorkflow"
|
||||
subtitle: "A Python Library for embedding diagrams into your projects"
|
||||
date: 2022-12-27T16:05:00-05:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
Spiffworkflow is an open source python library with source code available on [GitHub](https://github.com/sartography/SpiffWorkflow]) and detailed documentation currently available on [ReadTheDocs](https://spiffworkflow.readthedocs.io/en/latest/). It is the core library within SpiffArena. It's target audience is Python developers who want to create custom workflow systems or embed BPMN features into existing applications.
|
||||
|
||||
## Build status
|
||||
[](https://travis-ci.org/sartography/SpiffWorkflow)
|
||||
[](https://sonarcloud.io/dashboard?id=sartography_SpiffWorkflow)
|
||||
[](https://sonarcloud.io/dashboard?id=sartography_SpiffWorkflow)
|
||||
[](https://sonarcloud.io/dashboard?id=sartography_SpiffWorkflow)
|
||||
[](http://spiffworkflow.readthedocs.io/en/latest/?badge=latest)
|
||||
[](https://github.com/sartography/SpiffWorkflow/issues)
|
||||
[](https://github.com/sartography/SpiffWorkflow/pulls)
|
||||
|
||||
## License
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
|
6
content/posts/articles/_index.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: Articles
|
||||
subtitle: Introductory articles and videos to help you get started with SpiffWorkflow
|
||||
date: 2022-12-29T11:16:00-05:00
|
||||
---
|
||||
|
@ -2,7 +2,9 @@
|
||||
title: "Getting Started"
|
||||
date: 2022-12-27T13:15:00-05:00
|
||||
draft: false
|
||||
---
|
||||
author: Dan Funk
|
||||
thumbnail: /images/articles/get_started_thumbnail.png
|
||||
---
|
||||
In this article (and accompanying video) you will create and run your first executable SpiffWorkflow diagram. We'll be using a brand new open source application called SpiffArena that wraps the SpiffWorkflow library in an easier to use interface that provides a host of important tools. Let's get started and you can see for yourself ...
|
||||
|
||||

|
||||
@ -13,6 +15,8 @@ In this article (and accompanying video) you will create and run your first exec
|
||||
You will need to install Docker and Docker-Compose. Please follow [the Docker Installation instructions](https://docs.docker.com/compose/install/) if you do not have these already.
|
||||
Docker is a way for you to run on your laptop what was designed to run on larger computers and be accessible to many people throughout an organization. It will not alter your computer, and you can fully remove all the files with a few commands provided at the end of this article.
|
||||
|
||||
## Video Instructions
|
||||
You can follow the directions below, or you can watch this 10-minute video and follow along.
|
||||
{{< video "/videos/getting_started.mp4" "my-5" >}}
|
||||
|
||||
### Downloading and Starting SpiffArena
|
@ -1,31 +1,36 @@
|
||||
---
|
||||
title: "A Visual Workflow Library for Python"
|
||||
date: 2022-12-27T13:15:00-05:00
|
||||
title: "Why we adopted SpiffWorkflow"
|
||||
subtitle: "The future of business software is drawn in the code"
|
||||
date: 2021-12-01T13:15:00-05:00
|
||||
draft: false
|
||||
author: Dan Funk
|
||||
thumbnail: images/articles/lowcode_thumbnail.png
|
||||
---
|
||||
|
||||
# A Visual Workflow Library for Python
|
||||

|
||||
|
||||
(originally posted on [Medium](https://medium.com/@danfunk/a-visual-workflow-library-for-python-d19e1387653))
|
||||
|
||||
SpiffWorkflow allows your python application to process BPMN diagrams (think of them as very powerful flow charts) to accomplish what would otherwise require writing a lot of complex business logic in your code. You can use these diagrams to accomplish a number of tasks, such as:
|
||||
|
||||
Creating an online questionnaire which changes depending on the answers to previous questions;
|
||||
Building a complex approval process that needs to be handed off between multiple people;
|
||||
Allowing non-developers to make iterative changes to the flow of an application over time;
|
||||
* Creating an online questionnaire which changes depending on the answers to previous questions;
|
||||
* Building a complex approval process that needs to be handed off between multiple people;
|
||||
* Allowing non-developers to make iterative changes to the flow of an application over time;
|
||||
SpiffWorkflow can do all of this while drastically improving communication within multidisciplinary teams, allowing more people to contribute to your application, and making it more resilient to changing requirements.
|
||||
|
||||
Visualizing Code is the Future
|
||||
## Visualizing Code is the Future
|
||||
|
||||
Visual software development environments are key for handling many of the business problems we need to solve over the coming decade. While there are tons of marketing sites touting “low-code” solutions of nominal value, there are a handful of elegant real-world success stories. I’ve seen them most clearly through the eyes of my son. His introduction to programming was Scratch where basic programming constructs work like building blocks you can stack together. It feels a little like playing with legos, you can build chunks, then stick them together in different ways to see what happens. From there my son moved on to Blender, which uses visual tools for the complex process of building 3D animations, taking a dual disciple problem, and providing intuitive visual representation of what is definitely programming. Low-Code using visualization tools is very much a real thing, and it will reshape the way we work with computers in the future to solve complex problems.
|
||||
Visual software development environments are key for handling many of the business problems we need to solve over the coming decade. While there are tons of marketing sites touting “low-code” solutions of nominal value, there are a handful of elegant real-world success stories. I’ve seen them most clearly through the eyes of my son. His introduction to programming was [Scratch](https://scratch.mit.edu/) where basic programming constructs work like building blocks you can stack together. It feels a little like playing with legos, you can build chunks, then stick them together in different ways to see what happens. From there my son moved on to [Blender](https://www.blender.org/), which uses visual tools for the complex process of building 3D animations, taking a dual disciple problem, and providing intuitive visual representation of what is definitely programming. Low-Code using visualization tools is very much a real thing, and it will reshape the way we work with computers in the future to solve complex problems.
|
||||
|
||||
What are Workflows and BPMN
|
||||
## What are Workflows and BPMN
|
||||
|
||||
The term “Workflow” can mean many things in software. Our focus is on Business Processes — such as the complex approval process necessary for launching a medical research study at a university (our core use case at the moment). There is a well established standard for visualizing business processes called BPMN (Business Process Modeling Notation) that looks a heck of a lot like a flow chart (see image below). Version 2.0 published in 2010 was designed to be executable. This is important.
|
||||
|
||||
Not to delve too deeply, but the arrows in the diagram above dictate motion from one task to the next. The boxes with people are User Tasks, and are often powered by user interfaces that allow real people to provide input. The X’s are crossroads where different paths can be taken. The script tasks (with the piece of curvy paper) are where we can inject brief bits of code to make calculations and call out to other software systems and APIs. This is a very small example of all that is possible wit
|
||||
Not to delve too deeply, but the arrows in the diagram above dictate motion from one task to the next. The boxes with people are User Tasks, and are often powered by user interfaces that allow real people to provide input. The X’s are crossroads where different paths can be taken. The script tasks (with the piece of curvy paper) are where we can inject brief bits of code to make calculations and call out to other software systems and APIs. This is a very small example of all that is possible within the enormous 538 page BPMN standard, but it is a valid example, and demonstrates that powerful diagramming tools can still be intuitive.
|
||||
{{< figure src="/images/articles/lowcode_diagram.png" caption="Not to delve too deeply, but the arrows in the diagram above dictate motion from one task to the next. The boxes with people are User Tasks, and are often powered by user interfaces that allow real people to provide input. The X’s are crossroads where different paths can be taken. The script tasks (with the piece of curvy paper) are where we can inject brief bits of code to make calculations and call out to other software systems and APIs. This is a very small example of all that is possible within the enormous 538 page BPMN standard, but it is a valid example, and demonstrates that powerful diagramming tools can still be intuitive." >}}
|
||||
|
||||
What’s great about BPMN is that you can potentially create software even a CEO can understand. Imagine having a board meeting where everyone around the table actually knew what they were talking about. This is the glorious promise of BPMN. A diagram that doesn’t roughly abstract the general meaning of what we think the software does. It’s a diagram that IS the software.
|
||||
|
||||
What is SpiffWorkflow
|
||||
## What is SpiffWorkflow
|
||||
|
||||
BPMN diagrams don’t just run. You need an interpreter that is capable of executing the diagram, in the same way that you need to have the python interpreter to run a python program. SpiffWorkflow is an interpreter for BPMN, that makes the diagram runnable as a part of your Python application.
|
||||
|
||||
@ -33,9 +38,3 @@ SpiffWorkflow is open source, and released under the GNU Lesser General Public L
|
||||
|
||||
Two years ago we were searching for an open source workflow library in Python that could handle BPMN. We found SpiffWorkflow, a project founded by Samuel Abels (@knipknap) in 2010. Over the last two years we’ve made thousands of contributions to the code base as we started using it to manage dozens of complex real-world workflows. Earlier this year we released a new version of SpiffWorkflow with all of our contributions, and released a set of new bug fixes just this past week. It is not perfect, but it is definitely battle hardened, and ready for others to pick up, try out, and potentially contribute to.
|
||||
|
||||
If you want to learn more, and play around with the library, please check out the ReadTheDocs, particularly the section on BPMN. And please stay tuned for more technical articles with tips on how to get the most out of SpiffWorkflow and use it in your own applications.
|
||||
|
||||
Python
|
||||
Workflow
|
||||
Bpmn
|
||||
Low Code
|
7
content/posts/deep_dives/_index.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Deep Dive Articles
|
||||
subtitle: These articles delve a little deeper into the BPMN Standard or provide technical details on complex implementations.
|
||||
date: 2022-12-29T16:16:00-05:00
|
||||
---
|
||||
|
||||
# Is this really not here?
|
122
content/posts/deep_dives/messages.md
Normal file
@ -0,0 +1,122 @@
|
||||
---
|
||||
title: "BPMN Messages in SpiffWorkflow"
|
||||
subtitle: "Or, “A diagram of Love”"
|
||||
date: 2022-12-27T13:15:00-05:00
|
||||
draft: false
|
||||
author: Dan Funk
|
||||
thumbnail: /images/articles/messages/messages_thumbnail.png
|
||||
---
|
||||
|
||||
This is a deep dive into BPMN 2.0 Messages and how we implemented them in our open source project SpiffWorkflow. If you want to get a gentle introduction to our project, please check out this article. This will be primarily of interest to people who care about the BPMN 2.0 standard or are developing larger applications with Spiffworkflow that would benefit from having their BPMN diagrams communicate with each other. This is thick material, but there is a beautiful idea here well worth understanding, and beneficial to anyone who is interested in prolonged communications between complex systems.
|
||||
|
||||
Adherence to the BPMN standard for Messages is exceedingly rare. There are few working examples that actually implement the standard or attempted to further its adoption. That isn’t surprising, as the BPMN specification’s paragraph on Message “Correlations” is one the most dense and challenging bits of technical writing you will ever be so unfortunate as to confront. But it is beautiful at its heart, and we will try to capture that here.
|
||||
|
||||
The Concepts
|
||||
In this section we will cover the following major concepts: The Message itself, Collaborations, and Correlations. Understanding these concepts is critical to the following sections where we will describe their usage.
|
||||
|
||||
A Simple Message
|
||||
Messages themselves are pretty simple. They have a unique name and a payload. If you imagine two people talking in a quiet room, that’s all that is needed.
|
||||
|
||||
Messages always have a one-to-one relationship. One sender to one receiver.
|
||||
|
||||
To better explain messages, we’ll build on a simple example that doesn’t initially require one. Buddy and Peggy, deeply in love, are in a tight embrace and Buddy says: “Peggy Sue, Oh how my heart yearns for you”, and Peggy, hearing it, responds: “Buddy Holly, how you make my heart jolly!” It is a perfect moment, and can be captured in a happy little BPMN diagram.
|
||||
|
||||
|
||||
But love isn’t always so simple. And neither is BPMN.
|
||||
|
||||
Collaborations
|
||||
Let’s move Buddy and Peggy to a room full of romantic couples and track all the romantic profferings in BPMN. To do that we will need to use more generic terms and introduce a Collaboration diagram, as shown below. Collaborations encompass multiple participants/processes with interconnected messages.
|
||||
|
||||
|
||||
Imagine we have 2 “Admirer” and 2 “Beloved” instances running at the same time: Buddy and Mary Jane play the “Admirer”, “Peggy” and “Tom” are the beloved. If we get this right, it’s a romantic evening. If we get it wrong, there will be blood.
|
||||
|
||||
It is all about context. If Buddy is saying nice things to Peggy, then we don’t want Peggy responding to Mary Jane. The critical concept here is a “conversation”, and just like in real life, there are some very complex social rules about how conversations work.
|
||||
|
||||
Some “conversations” in life are terrible. They seem to meander about from one thing to the next with no rhyme or reason, and no end in sight. That isn’t an actual conversation, it’s a nuisance — an area not covered by BPMN. We want good conversations, and that requires a subject or topic on which the conversation is grounded. All the messages back and forth should relate to the topic of the conversation. Or, to use the correct BPMN words, a Collaboration (the conversation) has a CorrelationKey (topic). THIS IS IMPORTANT
|
||||
|
||||
Correlations
|
||||
Think of a correlation as the “Subject of the Conversation”. In our example, a good subject would be the beloved’s name: “Peggy”, “Tom”. The Admirers know who they admire, and each beloved knows their own name — so we have a kind of “Key” on which to base the conversation. You don’t get the Key wrong. You don’t yell out Tom’s name in a passionate moment with Peggy.
|
||||
|
||||
Collaborations, Messages, and Correlations have no visual representation in the BPMN diagrams. So I can’t draw you a picture. But they are first order concepts carefully covered in the BPMN 2.0 standard. You have to manipulate them through some sort of “Properties Panel,” which we will cover in the next section.
|
||||
|
||||
The hardest concept for me, when I read the specification, was understanding that Correlations apply to the Collaboration as a whole. It is the subject of the conversation. It isn’t (as I struggled with for weeks) the address on an envelope. It is a sticky thing that should be used consistently across all the messages in a conversation, So as we continue, fight to keep this idea in your head: It’s all about having a good conversation about a specific subject.
|
||||
|
||||
|
||||
Finally, it is worth noting that you will likely model these different processes in completely different BPMN files. So in the real world, you would describe the other process in a collapsed state as shown to the left. It will be up to the application that is executing these processes to coordinate the messages between them. We will cover that responsibility in the following section on Applications and the SpiffWorkflow Backend.
|
||||
|
||||
Implementation in SpiffWorkflow
|
||||
|
||||
This section will cover the changes to 4 different SpiffWorkflow applications in order to support messages as described above, working with the standard and attempting to avoid any custom BPMN extensions. If you are wondering why we have 4 different applications and how the pieces fit together, please check out this article on our current development efforts. We’ll tackle the BPMN editor first — as this is where many of the changes are visible, then we will delve into the XML and how the backend systems will process this information.
|
||||
|
||||
BPMN.js — Spiffworkflow
|
||||
This section includes our additions and modifications to the excellent open source BPMN.js editor maintained by Camunda. The changes will impact the Properties Panel when specific visual elements are selected. Included here are actual screen shots from our working extensions to the BPMN.js editor. We’ll provide links lower in this article to our code repository so you can try it out!
|
||||
|
||||
Collaboration
|
||||
|
||||
When a collaboration is selected in the editor, we will display a new section called “Correlation Keys”. We want to make it clear at a glance that this conversation is based around the “beloved_name”, and that communications back and forth should relate to this name somehow.
|
||||
|
||||
But this can also be a cumbersome place to go as you are working through the diagram. So we will make it possible to edit these correlation keys elsewhere within the context of Send and Receive tasks and events.
|
||||
|
||||
Send Tasks, and Message Throw Events
|
||||
|
||||
When defining a message to be sent out in SpiffWorkflow, you will need to specify three things:
|
||||
|
||||
The message id — a message name that should be unique among all messages in your system, but human readable. And it should match up on the receiving end.
|
||||
The Payload — the content of the message. SpiffWorkflow is all about Python, so here we define the payload as a Python Dictionary.
|
||||
Any correlations directly related to this message, if there are any.
|
||||
When this message is sent out, it will contain these three parts, and the SpiffWorkflow Backend (described later) will use the ID and Correlation to match this message up with the correct process.
|
||||
|
||||
|
||||
Receive Tasks and Message Catch Tasks
|
||||
When receiving a message, you can specify the message id (you can create a new id, or select it from a dropdown list). The Correlation here should match exactly the correlation defined in the other BPMN diagram if these are separate. We’ll talk about this as well in the section on SpiffWorkflow Backend, where it may be possible through API integrations to ensure these remain locked between disparate diagrams.
|
||||
|
||||
Resulting XML
|
||||
The extensions we will add to BPMN.io will produce BPMN 2.0 compliant XML. We will create only one extension to the BPMN to complete this effort to make it easy to define the message payload.
|
||||
|
||||
Messages and Correlations will be defined within the root element, per the specification. The SpiffWorkflow Backend will work to assure these values remain consistent across all processes, and can provide endpoints to verify the messages are correctly aligned. IMPORTANT: Don’t think about messages and correlations as belonging to a process. They do not. They belong to the system as a whole, and can be maintained across different BPMN diagrams. The resulting XML in this case is:
|
||||
|
||||
|
||||
Collaborations will contain the message flows, and will offer a correlation Key that connects the correlation properties defined as described above.
|
||||
|
||||
|
||||
Send Tasks and Receive Tasks can just reference the unique message id. The SendTask will include a custom SpiffWorkflow extension to define the payload in a simple and direct way, and is the only custom extension we will create as a part of this effort.
|
||||
|
||||
|
||||
SpiffWorkflow — Core Library
|
||||
The SpiffWorkflow BPMN interpreter, at the center of everything, will have the following modifications:
|
||||
|
||||
Notify the calling application of Message Send events that occur during the running of a process
|
||||
Interpret / execute the message payload and the correlation expressions
|
||||
Provide a way to accept incoming messages
|
||||
It will be the responsibility of the SpiffWorkflow Backend (or your application) to listen for these events and respond appropriately.
|
||||
|
||||
SpiffWorkflow — Backend
|
||||
The SpiffWorkflow backend is responsible for managing multiple running instances of the SpiffWorkflow Library. It also provides API endpoints to other applications (Like SpiffWorkflow Frontend) to allow introspection and management of running processes. The following abilities will be added to the Backend:
|
||||
|
||||
Database tables to track message definitions. For every current process model (every BPMN file) we will record what messages that process is capable of sending and receiving, and what correlation values it defines for those messages.
|
||||
Database tables to track message delivery. This will include tables that can capture a message
|
||||
API Endpoints for listing, searching, viewing, and in some cases editing these values. (Editing of Collaborations will likely be included at some future date)
|
||||
SpiffWorkflow — Frontend
|
||||
The SpiffWorkflow Frontend will add additional pages for viewing message definitions, current messages, etc, as provided by the new backend enhancements. Future releases of SpiffWorkflow’s Frontend will include documentation covering how the User Interface looks, and how it can be configured and repurposed for your specific needs.
|
||||
|
||||
Learning More & Get Involved
|
||||
These new tools will be available in the next release of SpiffWorkflow, which are still weeks if not months off. In the meantime, if you are willing to try the bleeding edge, please check out the main branch of our repositories on GitHub:
|
||||
|
||||
SpiffWorkflow — The main branch has support for everything described here. You can start a new project and create a dependency on our GitHub repository. In Poetry you might do something like:
|
||||
|
||||
spiffworkflow = {git = “https://github.com/sartography/SpiffWorkflow", rev = “main”}
|
||||
SpiffWorkflow bpmn-js — Camunda’s excellent bpmn-js library can be extended to support Data Inputs and Data Outputs, as well make Data Objects a little easier to create and manage. These extensions to bpmn-js are available in the GitHub repository, which also includes a way to build and run a local BPMN editor with a simple node command.
|
||||
|
||||
Finally, most implementations of BPMN see messages as primarily a means of communicating with other external applications. This article is focused specifically on how multiple BPMN processes can communicate with each other in a loosely coupled way. Loosely enough, that in theory, one process could actually be an external application. We will come back to external applications in a future article.
|
||||
|
||||
References:
|
||||
|
||||
When tackling a new area of SpiffWorkflow we take a careful look at other BPMN based systems. Here are links to some of the resources we consulted in addition to the official BPMN 2.0 Specification.
|
||||
|
||||
https://youtu.be/8SYEc3dHnM4 (great video on Camunda’s process)
|
||||
|
||||
https://youtu.be/-UaFHzit7LA (Using Message Based Correlation in an Oracle BPM Process)
|
||||
|
||||
https://www.trisotech.com/using-messages-in-executable-bpmn/ (Silver / Trisotech)
|
||||
|
||||
https://community.bonitasoft.com/blog/when-use-call-activity-or-bpm-message (BonitaSoft)
|
@ -1,11 +0,0 @@
|
||||
---
|
||||
title: "My First Post"
|
||||
date: 2022-12-08T11:15:00-05:00
|
||||
draft: true
|
||||
---
|
||||
|
||||
## Introduction
|
||||
|
||||
This is **bold** tst and this is *emp*
|
||||
|
||||
just markdown, blah blah
|
111
layouts/_default/list.html
Normal file
@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.LanguageCode }}">
|
||||
<head>
|
||||
{{ partial "meta.html" . }}
|
||||
<title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
|
||||
{{ partial "css.html" . }}
|
||||
<link rel="stylesheet" type="text/css" href="/css/custom.css">
|
||||
</head>
|
||||
<body>
|
||||
{{ if ne .Site.Params.preloader false }}
|
||||
<!-- Preloader -->
|
||||
<div id="preloader">
|
||||
<div id="status"></div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ partial "navbar.html" . }}
|
||||
{{ partial "navbar-clone.html" . }}
|
||||
|
||||
<section class="section is-medium">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-centered-tablet-portrait">
|
||||
<h1 class="title section-title">{{ .Title }}</h1>
|
||||
<h5 class="subtitle is-5 is-muted">{{ .Params.Subtitle }}</h5>
|
||||
<div class="divider"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
<div class="list-container">
|
||||
{{ range .Paginator.Pages }}
|
||||
<div class="item-container">
|
||||
<section class="item">
|
||||
<div class="item-thumbnail">
|
||||
<a href="{{.Permalink}}">
|
||||
{{ with .Params.thumbnail }}
|
||||
<img src="{{ . | relURL }}" alt="Thumbnail">
|
||||
{{ else }}
|
||||
<img src="{{"images/default_thumbnail.png" | relURL}}" alt="Thumbnail">
|
||||
{{ end }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="item-text">
|
||||
<a href="{{.Permalink}}">
|
||||
<p class="title">{{ .Title }}</p>
|
||||
</a>
|
||||
<div class="brief">
|
||||
<p>
|
||||
{{ with .Params.summary }}
|
||||
{{ . }}
|
||||
{{ else }}
|
||||
{{ .Summary }}
|
||||
{{ end }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<p>
|
||||
<span>{{.Date.Format "Jan 2, 2006"}}</span>
|
||||
<span>
|
||||
By {{ if ne .Params.author "" }}
|
||||
{{ .Params.author }}
|
||||
{{ else }}
|
||||
{{ .Site.Author.name }}
|
||||
{{ end }}
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Bare bones
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
<li>
|
||||
<a href="{{.Permalink}}">{{.Date.Format "2006-01-02"}} | {{.Title}}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ if .Params.include_footer }}
|
||||
{{ partial "footer.html" . }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Back To Top Button -->
|
||||
<div id="backtotop"><a href="#"></a></div>
|
||||
|
||||
{{ if .Params.sidebar }}
|
||||
{{ partial "single/sidebar.html" . }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
{{ partial "javascript.html" . }}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
{"Target":"css/style.css","MediaType":"text/css","Data":{}}
|
@ -3,6 +3,41 @@
|
||||
max-width: 860px;
|
||||
}
|
||||
|
||||
.content p, .content li, .content ul {
|
||||
.content p, .content ol, .content ul {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.content figure figcaption {
|
||||
font-size: .875em;
|
||||
font-style: normal;
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.brief {
|
||||
color: #6c757d;
|
||||
margin: 0.5rem 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-height: 200px;
|
||||
|
||||
display: -webkit-box;
|
||||
max-width: 600px;
|
||||
-webkit-line-clamp: 4;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
|
||||
.item-thumbnail {
|
||||
min-width: 150px;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
.meta {
|
||||
font-size: .875rem;
|
||||
color: #adb5bd;
|
||||
}
|
||||
|
BIN
static/images/articles/get_started_thumbnail.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
static/images/articles/lowcode.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
static/images/articles/lowcode_diagram.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/images/articles/lowcode_thumbnail.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
static/images/articles/messages/intro.png
Normal file
After Width: | Height: | Size: 228 KiB |
BIN
static/images/articles/messages/messages_thumbnail.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
static/images/default_thumbnail.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
1
static/images/logos/github.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 512 512" height="50px" id="Layer_1" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path clip-rule="evenodd" d="M296.133,354.174c49.885-5.891,102.942-24.029,102.942-110.192 c0-24.49-8.624-44.448-22.67-59.869c2.266-5.89,9.515-28.114-2.734-58.947c0,0-18.139-5.898-60.759,22.669 c-18.139-4.983-38.09-8.163-56.682-8.163c-19.053,0-39.011,3.18-56.697,8.163c-43.082-28.567-61.22-22.669-61.22-22.669 c-12.241,30.833-4.983,53.057-2.718,58.947c-14.061,15.42-22.677,35.379-22.677,59.869c0,86.163,53.057,104.301,102.942,110.192 c-6.344,5.452-12.241,15.873-14.507,30.387c-12.702,5.438-45.808,15.873-65.758-18.592c0,0-11.795-21.31-34.012-22.669 c0,0-22.224-0.453-1.813,13.592c0,0,14.96,6.812,24.943,32.653c0,0,13.6,43.089,76.179,29.48v38.543 c0,5.906-4.53,12.702-15.865,10.89C96.139,438.977,32.2,354.626,32.2,255.77c0-123.807,100.216-224.022,224.03-224.022 c123.347,0,224.023,100.216,223.57,224.022c0,98.856-63.946,182.754-152.828,212.688c-11.342,2.266-15.873-4.53-15.873-10.89 V395.45C311.1,374.577,304.288,360.985,296.133,354.174L296.133,354.174z M512,256.23C512,114.73,397.263,0,256.23,0 C114.73,0,0,114.73,0,256.23C0,397.263,114.73,512,256.23,512C397.263,512,512,397.263,512,256.23L512,256.23z" fill="#0D2636" fill-rule="evenodd"/></g></svg>
|
After Width: | Height: | Size: 1.5 KiB |
22
static/images/logos/readthedocs.svg
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="360" height="360" viewBox="-125 217 360 360" xml:space="preserve">
|
||||
<path style="fill:#32322A" d="M39.2,391.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3
|
||||
c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2
|
||||
c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,391.3,40.4,391.1,39.2,391.3z M39.2,353.6c-4.2,0.6-7.1,4.4-6.5,8.5
|
||||
c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4
|
||||
c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,353.6,40.4,353.4,39.2,353.6z M39.2,315.9
|
||||
c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8
|
||||
c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6c-30.1-2.4-46.5-7.9-46.5-7.9
|
||||
C41.7,315.9,40.4,315.8,39.2,315.9z M39.2,278.3c-4.2,0.6-7.1,4.4-6.5,8.5c0.4,3,2.6,5.5,5.5,6.3c0,0,18.5,6.1,50,8.7
|
||||
c25.3,2.1,54-1.8,54-1.8c4.2-0.1,7.5-3.6,7.4-7.8c-0.1-4.2-3.6-7.5-7.8-7.4c-0.5,0-1,0.1-1.5,0.2c0,0-28.1,3.5-50.9,1.6
|
||||
c-30.1-2.4-46.5-7.9-46.5-7.9C41.7,278.2,40.4,278.1,39.2,278.3z M-13.6,238.5c-39.6,0.3-54.3,12.5-54.3,12.5v295.7
|
||||
c0,0,14.4-12.4,60.8-10.5s55.9,18.2,112.9,19.3s71.3-8.8,71.3-8.8l0.8-301.4c0,0-25.6,7.3-75.6,7.7c-49.9,0.4-61.9-12.7-107.7-14.2
|
||||
C-8.2,238.6-10.9,238.5-13.6,238.5z M19.5,257.8c0,0,24,7.9,68.3,10.1c37.5,1.9,75-3.7,75-3.7v267.9c0,0-19,10-66.5,6.6
|
||||
C59.5,536.1,19,522.1,19,522.1L19.5,257.8z M-3.6,264.8c4.2,0,7.7,3.4,7.7,7.7c0,4.2-3.4,7.7-7.7,7.7c0,0-12.4,0.1-20,0.8
|
||||
c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,0,0,0,0c0,0,11.3-6,27-7.5
|
||||
C-16,264.9-3.6,264.8-3.6,264.8z M-11,302.6c4.2-0.1,7.4,0,7.4,0c4.2,0.5,7.2,4.3,6.7,8.5c-0.4,3.5-3.2,6.3-6.7,6.7
|
||||
c0,0-12.4,0.1-20,0.8c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5
|
||||
C-20.5,302.9-15.2,302.7-11,302.6z M-3.6,340.2c4.2,0,7.7,3.4,7.7,7.7s-3.4,7.7-7.7,7.7c0,0-12.4-0.1-20,0.7
|
||||
c-12.7,1.3-21.4,5.9-21.4,5.9c-3.7,2-8.4,0.5-10.3-3.2c-2-3.7-0.5-8.4,3.2-10.3c0,0,11.3-6,27-7.5C-16,340.1-3.6,340.2-3.6,340.2z"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
BIN
static/images/spiffarena/spiffarena.png
Normal file
After Width: | Height: | Size: 102 KiB |