Django的BPMN动态工作流程

22
我想构建一个Django解决方案,可以根据需要定义和更改工作流程,希望通过更新BPMN图表而无需更改源代码和重新部署来实现。
尽管在Java中已经有了这样的功能(即Camunda和Bizagi),但在Django的背景下,似乎没有引起同样的兴趣,因为我搜索的常规地方没有提供任何令人满意的答案。对于2011年的类似问题的回答揭示了“工作流程”一词非常广泛,可能意味着许多不同的事情。然而,经过一些仔细研究,它似乎归结为两种方法:基于Django的工作流程和BPMN引擎。

Django基础工作流程存在问题在Github列出Django packages中,最受欢迎/稳定的(例如ViewflowActivFlow)提供了某种框架来简化状态和转换的实现,但说到底,每当利益相关者改变流程时,您仍然需要手动编写更改代码。在awesome Django list中找到的最有前途的选项是django-river,它至少将工作流程的状态和转换存储为Django模型在数据库中,因此您可以随时进行更改。

另一种主要的方法是BPMN引擎。在试用了几个Python纯(非Django)选项后,我成功地使用bpmn_dmn使SpiffWorkflow工作。现在我可以加载使用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模型数据库中的状态/转换记录,但我想知道是否存在更好的选择。

你在这个努力中有什么好运气吗? - alias51
1
@alias51 不是的。看起来最有前途的路径是有人开发一些组件来弥合 bpmn_dmn 和 django-river 之间的差距。 - Andrés Meza-Escallón
1
Postgres(9.4+?)提供可查询的JSONb字段。如果您想要一种hackish方法,可以在JSON中设置工作流参数,然后编写一个框架来查询它们。 - alias51
你找到了好的解决方案吗?我正在寻找类似的东西来做一个新项目。 - yvess
这里有一些关于Django工作流库的额外提示:https://dev59.com/mmw15IYBdhLWcg3wJ4cR - FGiorlando
我相信目前没有什么可用的。最近,我开始考虑为“BPMN as code”编写一个Python包,该包将生成SVG图表,并旨在以后能够将其连接到例如Rabbit/Celery以处理工作流程。但是,我怀疑自己是否足够优秀来完成这项任务:D 但是,我确实搜索了一些不错的BPMN解决方案,但没有找到任何有用的东西。 - michjnich
1个回答

8
不久之前,我开发了一个名为adhesive的纯Python微型BPMN引擎,可执行BPMN文件。除了并行性(通过进程或线程)、错误处理、定时器、外部事件、车道、脚本、网关、边缘条件或任务之外,它还支持用户任务。
虽然用户任务系统是可插拔的,但实际上只有一个实现,它使用ncurses。这就是当进入其中一个元素时UI的实际外观:

enter image description here

如果有更多的人认为这很有趣,我可以投入一些时间来创建一个桥梁,每当“django”用户任务被触发时,它会以某种有意义的形式与Django集成。

adhesive 看起来非常有前途。你收到了一些反馈或支持来继续它吗? - PhE
@PhE 不,我没有。 - bogdan.mustiata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接