嘿,我一直在使用viewflow作为我的django项目中的工作流引擎。我想知道,如果一个批准被拒绝,是否有可能允许用户“选择”他们希望回滚到的流程。

在这里,导演选择了“拒绝”,但是在这里结束流程没有意义,相反,它应该是一个可选择的“回滚”,这样沿线的人就不需要再次重新启动整个流程。
以下是我到目前为止所做的工作:
flows.py
#director will approve or dont approve
approve_by_director = flow.View(
UpdateProcessView,
form_class=DirectorApproveForm,
task_title="Approval By Director"
).Permission("cash.director"
).Next(this.check_director)
check_director = flow.If(
cond=lambda act: act.process.director,
task_title="Processing"
).Then(this.send).Else(this.justification)
#justifications for the roll back.
justification = flow.View(
JustificationView,
task_title="Justifications for Roll Back"
).Assign(lambda act: self.request.user
).Permission(auto_create=True
).Next(this.roll_back)
roll_back = flow.Handler(this.roll_back_call).Next(this.approve_by_preparer) ##<---- here , i am just sending it back to the 'preparer' , however it would be great if this could be dynamic!
end = flow.End()
def roll_back_call(self, activation):
esig = ESignatures.objects.filter(paymentVoucherProcess = activation.process).filter(voided = False)
docu = Attachment.objects.filter(paymentVoucherProcess = activation.process).filter(voided = False)
if len(esig) > 0 :
for sig in esig:
sig.voided = True
sig.save()
if len(docu) > 0 :
for doc in docu:
doc.voided = True
doc.save()
activation.process.preparer = False
activation.process.verifier = False
activation.process.treasury = False
activation.process.director = False这里的问题是,由于.next()节点,我硬编码了我希望回滚到的阶段,但是这并不理想,因为它将使用户能够“选择”他们要将其发送回的阶段……
因此,我有两个问题: 1.我的回滚方法正确吗?(也许有一种更好的方法来进行回滚,而不是调用流程和硬代码刷新字段) 2.有没有一种方法可以选择用户希望回滚到流的哪一部分?
谢谢,我将非常感谢任何人的建议
发布于 2020-04-10 21:14:25
实际上,好的BPMN实践模式是尽快完成流程,并且不涉及复杂的周期。这使得代码简单、整洁、易于支持。简化报告,并将数据的所有修订保留在不同的流程实例中
有了Viewflow,重新启动决策可以实现为记录用户决策的flow.View,并遵循使用其他flow.StartFunction之一启动新的流实例的flow.Handler

另一种选择是使用flow.View记录用户决策,使用flow.Switch单步执行另一个任务。
通常,BPMN将用户任务和网关分开,这导致所有决策在使用之前都被记录下来。
https://stackoverflow.com/questions/61136760
复制相似问题