【发布时间】:2019-07-23 15:41:14
【问题描述】:
我想构建一个可以动态定义和更改工作流的 Django 解决方案,希望通过更新 BPMN 图而无需更改源代码和重新部署。
尽管这样的特性在 Java 中已经存在了很长一段时间(即 Camunda 和 Bizagi),但在 Django 的上下文中它似乎并没有引起同样的兴趣,因为我搜索的通常地方没有提供任何令人满意的答案.对similar question from 2011 的回答显示,“工作流程”这个词非常广泛,可能意味着很多事情。然而,经过一些审查后,它似乎归结为两种方法:基于 Django 的工作流和 BPMN 引擎。
基于 Django 的工作流 listed in Github 和 Django packages 的问题是最流行/稳定的(例如 Viewflow 或 ActivFlow)提供了某种框架来简化您的状态和转换的实现,但是,归根结底,每次利益相关者改变对流程的看法时,您都需要手动编写代码更改。在awesome Django list 中找到的最有希望的选项是django-river,它至少将工作流的状态和转换作为 Django 模型存储在数据库中,因此您可以随时进行更改。
另一个重要的方法是 BPMN 引擎。在弄乱了几个纯 Python(非 Django)选项之后,我设法让 SpiffWorkflow 使用 bpmn_dmn 工作。现在我可以加载使用 Camunda Modeler 制作的 .bpmn 图表和 .dmn 表格,并通过引擎运行它们,以根据一些参数获得最终事件。
from bpmn_dmn.bpmn_dmn import BPMNDMNXMLWorkflowRunner
filename = 'rates.bpmn'
runner = BPMNDMNXMLWorkflowRunner(filename, debugLog='DEBUG', debug=False)
data = {'size': 150, 'type': 'SH', 'country': 'US'}
runner.start(**data)
res = runner.getEndEventName()
print(res)
这对于运行不需要人工干预的小型工作流程来说非常简单且有用。但是,我仍然需要弥合从 .bpmn 图定义加载的工作流与 Django 解决方案固有的视图/表单/模型状态之间的转换之间的差距。
到目前为止,我最好的选择似乎是将 SpiffWorflow 中的工作流规范转换为 django-river 模型数据库中的状态/转换记录,但我想知道是否有更好的选择。
【问题讨论】:
-
你在这方面有什么好运气吗?
-
@alias51Nope。似乎最有希望的途径是有人开发一些组件来弥补 bpmn_dmn 和 django-river 之间的差距。
-
Postgres (9.4+?) 提供可查询的 JSONb 字段。如果您想要一种 hackish 方法,您可以在 JSON 中设置工作流参数,然后编写一个框架来查询它们。
-
您找到好的解决方案了吗?我正在为新项目寻找类似的东西
-
这里有一些关于 django 工作流库的额外提示:stackoverflow.com/questions/6795328/…
标签: django python-3.x workflow bpmn django-river