我想构建一个Django解决方案,可以根据需要定义和更改工作流程,希望通过更新BPMN图表而无需更改源代码和重新部署来实现。
尽管在Java中已经有了这样的功能(即Camunda和Bizagi),但在Django的背景下,似乎没有引起同样的兴趣,因为我搜索的常规地方没有提供任何令人满意的答案。对于2011年的类似问题的回答揭示了“工作流程”一词非常广泛,可能意味着许多不同的事情。然而,经过一些仔细研究,它似乎归结为两种方法:基于Django的工作流程和BPMN引擎。
这很简单且有用,足以运行不需要人工干预的小型工作流。然而,我仍然需要弥合从.bpmn图表定义加载的工作流和Django解决方案固有的视图/表单/模型状态之间的差距。
到目前为止,我最好的选择似乎是将SpiffWorflow中的工作流规范翻译成django-river模型数据库中的状态/转换记录,但我想知道是否存在更好的选择。
尽管在Java中已经有了这样的功能(即Camunda和Bizagi),但在Django的背景下,似乎没有引起同样的兴趣,因为我搜索的常规地方没有提供任何令人满意的答案。对于2011年的类似问题的回答揭示了“工作流程”一词非常广泛,可能意味着许多不同的事情。然而,经过一些仔细研究,它似乎归结为两种方法:基于Django的工作流程和BPMN引擎。
Django基础工作流程存在问题在Github列出和Django packages中,最受欢迎/稳定的(例如Viewflow或ActivFlow)提供了某种框架来简化状态和转换的实现,但说到底,每当利益相关者改变流程时,您仍然需要手动编写更改代码。在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模型数据库中的状态/转换记录,但我想知道是否存在更好的选择。