Data Objects, Messages and Services
_Note: there are some minor breaking changes in this release, please see "Minor Breaking Changes and their Fixes" below for how to fix them._
This Version of SpiffWorkflow adds support for Data Objects, Messages, and Service Tasks. These are powerful new tools for managing workflows as they grow in complexity. Details below.
This is also our first step towards a larger ecosystem. One that includes a customized Diagram Editor that is still under development, but [available on GitHub](https://github.com/sartography/bpmn-js-spiffworkflow) and perfectly serviceable. You will need the editor to take full advantage of the new features mentioned above. A new project, code named SpiffArena is also under heavy development. SpiffArena will connect this SpiffWorkflow library to the new BPMN Editor and provide a complete Workflow Engine with a backend and frontend that can be configured to manage and execute a collection of your own BPMN diagrams. Keep an eye out for an initial release before the end of the year.
In addition to major new features, we've improved some existing core features. The Python Expression Engine is now easier to extend and modify for custom deployments, and SubProcesses have a far stronger and more consistent internal representation and are easier to control. We've also added the ability to unit test your script tasks - to make it much easier to write small python scripts to re-structure your data.
Finally, we undertook hours of effort to clean up the code base, so that imports are consistent, circular dependencies are removed, and code smells are eliminated. It is by no means perfect, but we are arcing in the right direction.
Major Changes
Data Objects, Inputs and Outputs
We now support Data Objects, providing powerful tools for controlling the scope and access of variables within a workflow.
For an overview of how Data Objects work, please check out our article ["Understanding BPMN Data Objects"](https://medium.com/danfunk/understanding-bpmns-data-objects-with-spiffworkflow-26e195e23398
). Detailed information is also available in our ReadTheDocs page.
* explicitly add data associations on serializing MI tasks by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/197)
* add messages to data object exceptions by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/222)
Messages
Communication between running workflow instances is a powerful tool as workflows become more complex. For a detailed overview of this topic, please check out our article ["Understanding BPMN Messages"](https://medium.com/p/7b0fee2d6a81)
* messages and business rules by burnettk in [PR](https://github.com/sartography/SpiffWorkflow/pull/211)
* messages no longer send all keys by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/213)
Service Tasks
Service Tasks are now supported, and offer an easy way for BPMN Developers to make calls to external APIs. Examples for
working with this critical new tool will be documented in our ReadTheDocs page.
* First pass of ServiceTask handling by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/205)
* Service task connector delegate by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/225)
* Store service task response in task data by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/227)
* get description aka name when parsing service tasks by burnettk in [PR](https://github.com/sartography/SpiffWorkflow/pull/241)
* Follow up on service task bug fix, quote string literals by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/244)
* Pass task data to service task delegate by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/248)
Custom BPMN Editor Support
Still in heavy development is a custom BPMN Editor, which you can find on [GitHub]([PR](https://github.com/sartography/bpmn-js-spiffworkflow).)
This new editor provides the tools that will make creating valid Service Tasks, Data Objects, and Messages possible.
Many thanks to the BPMN.js community for this highly extensible diagramming library!
* Support for Spiff pre/postscript extensions by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/190)
z* parses out spiffworklow:property tags in bpmn extensions and makes th… by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/191)
Improved Script Engine
A Script Engine that is overall easier to understand and extend.
* Feature/improved script engine by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/215)
* make globals an argument in the script engine by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/24)
Script Task Unit Testing
Added the ability to create, store, and execute assertions against Script Tasks. Allows you to define a Json data
structure as input, and an expected Json data structure as output. So you can assert your script is producing exactly
the right data.
* Script Task Unit Test Extensions (Attempt 2) by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/238)
New spec_type attribute
Given the ability to overload classes, and mix-in properties, it could be difficult to look at a Task Spec's class
to determine if it was a User Task or Script Task, etc... All Task Specs now have a spec_type attribute, containing a descriptive string of the type, expect to see "User Task", "Script Task", "Start Event" etc...
* add spec type property to task specs with BPMN names by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/231)
Improved Subprocess Handling
* Allows recursive calls to subprocesses, and improves serialization and execution by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/187)
* add bpmn spec mixin functionality to subworkflow tasks by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/226)
* handle all data copying in bpmn subworkflow task by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/243)
Vastly Faster Tests!
* Profile and improve run time of the test suite by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/204)
* Improve test suite run time, part 2 by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/207)
* ParallelTest.py split by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/208)
* Up some sleep times in tests for CI stability by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/224)
Bug Fixes
* fix loop reset task to handle multiple subprocess properly by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/192)
* Bugfix/separate subprocess dict for serializer by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/196)
* Update make tests to run tests per the README, remove unused test runners by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/202)
* Bug/service task variable by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/233)
* Fix for failures with Python 3.7 by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/240)
Code Cleanup and Documentation Changes
* Support custom JSON encoder/decoder in BpmnWorkflowSerializer by soby in [PR](https://github.com/sartography/SpiffWorkflow/pull/220)
* Add Python 3.10 to CI by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/242)
* list dependencies by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/217)
* Feature/centralized logging by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/21)
* [FIX] Use self.spec_class instead of direct use of base object by Giulios74 in [PR](https://github.com/sartography/SpiffWorkflow/pull/186)
* add more documentation about serializer migration by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/188)
* docs: Fix a few typos by timgates42 in [PR](https://github.com/sartography/SpiffWorkflow/pull/193)
* Fix a few docstring typos in the tests by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/203)
* Remove unused imports by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/209)
* Reorganized parser [PR](https://github.com/sartography/SpiffWorkflow/pull/206)
* fix for a serialization bug by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/216)
* fix serialization bug by essweine in [PR](https://github.com/sartography/SpiffWorkflow/pull/219)
* Don't use bpmn exception from core spec by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/228)
* added task name to the spiff logs by burnettk in [PR](https://github.com/sartography/SpiffWorkflow/pull/232)
* Remove navigation.py, tests and related bpmn files by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/230)
* Remove bpmn imports from task.py by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/234)
* Remove bpmn references from dict.py and json.py by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/236)
* Remove some lingering bpmn imports by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/239)
* Empty SpiffWorkflow/__init__.py by jbirddog in [PR](https://github.com/sartography/SpiffWorkflow/pull/245)
* Various fixes as I attempted to get our CR-Connect application working against the lastest SpiffWorkflow build by danfunk in [PR](https://github.com/sartography/SpiffWorkflow/pull/247)
Minor Breaking Changes and their Fixes
This Minor Release includes a few minor breaking changes that should be easy
to correct. Please apply these fixes as appropriate
1. Top Level Imports moved to appropriate modules
REPLACE 'from SpiffWorkflow import WorkflowException'
WITH 'from SpiffWorkflow.exceptions import WorkflowException'
REPLACE 'from SpiffWorkflow import TaskState'
WITH: 'from SpiffWorkflow.task import TaskState'
REPLACE: 'from SpiffWorkflow import Task'
WITH 'from SpiffWorkflow.task import Task'
2. Navigation code was removed
- Proved to be of little use to folks, was super complex and difficult to maintain.
- If you depended on this code, you can take the original code and embed it in your project.
3. remove all references of timeit (no longer in SpiffWorkflow)
- timing is now available for all tasks in the spiff.metrics log without having to edit the code
- Same as above, this standalone code can be added to your code if needed.
4. pythonScriptEngine._evaluate no longer accepts a task argument.
If you were overriding this method for some reason, please change your method signature
5. If you were previously using the workflow.signal() or workflow.message() functions, these should be replaced with
workflow.catch().
6. Task States are JUST integers and TaskSpecNames is now a public dictionary, and can be used to covert a state to human readable string
REPLACE: user_task.state.name
WITH: TaskStateNames[user_task.state]
Other Notes
1. When inserting custom functions into the PythonExecutionEngine - be aware that the task data will act as the full context for execution, and will contain global functions and methods during the exec call.
New Contributors
* Giulios74 made their first contribution in [PR](https://github.com/sartography/SpiffWorkflow/pull/186)
* jbirddog made their first contribution in [PR](https://github.com/sartography/SpiffWorkflow/pull/202)
* burnettk made their first contribution in [PR](https://github.com/sartography/SpiffWorkflow/pull/211)
**Full Changelog**: [PR](https://github.com/sartography/SpiffWorkflow/compare/v1.1.7...v1.2)