【问题标题】:BPMN dynamic workflow for Django用于 Django 的 BPMN 动态工作流
【发布时间】:2019-07-23 15:41:14
【问题描述】:

我想构建一个可以动态定义和更改工作流的 Django 解决方案,希望通过更新 BPMN 图而无需更改源代码和重新部署。

尽管这样的特性在 Java 中已经存在了很长一段时间(即 Camunda 和 Bizagi),但在 Django 的上下文中它似乎并没有引起同样的兴趣,因为我搜索的通常地方没有提供任何令人满意的答案.对similar question from 2011 的回答显示,“工作流程”这个词非常广泛,可能意味着很多事情。然而,经过一些审查后,它似乎归结为两种方法:基于 Django 的工作流和 BPMN 引擎。

基于 Django 的工作流 listed in GithubDjango packages 的问题是最流行/稳定的(例如 ViewflowActivFlow)提供了某种框架来简化您的状态和转换的实现,但是,归根结底,每次利益相关者改变对流程的看法时,您都需要手动编写代码更改。在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


【解决方案1】:

前段时间,我做了一个纯python微型BPMN引擎,名为adhesive,可以执行BPMN文件。除了并行(通过进程或线程)、错误处理、计时器、外部事件、通道、脚本、网关、边缘条件或任务外,它还支持用户任务。

虽然用户任务系统是可插拔的,但实际上,只有一个实现,即使用 ncurses。这是输入其中一个元素时 UI 的实际外观:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2019-05-25
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多