我正在为我公司的工作流程创建一个应用程序。这样做,我已经达到了有必要有一些方法来取消流程实例,以防创建流的用户需要它。我尝试过使用"CancelProcessView“,但它只能取消未分配的任务。因为我的流使用".Assign()“方法,所以所有任务都是自动分配的,因此是不可取消的。
Flows.py
@frontend.register
class Delivery_flow(Flow):
process_class = DeliveryProcess
iniciar = (
flow.Start(
CreateProcessView,
fields=["nombre_del_entregable", 'url_del_proyecto', 'Asignador', 'ejecutor',
'tipo_de_flujo','observaciones_asignador',
"fecha_inicio", 'fecha_de_terminacion'],
task_description='Asignacion de entregable'
).Next(this.split_editar_ejecutar)
)
split_editar_ejecutar = (
flow.Split()
.Next(this.editar_proceso)
.Next(this.ejecutar)
)
editar_proceso = (
flow.View(
UpdateProcessView,
fields=[ "nombre_del_entregable", "fecha_de_terminacion",
"ejecutor", 'observaciones_asignador', 'url_del_proyecto', 'estado_del_proyecto'],
task_description="Tarea para editar algun campo"
).Assign(lambda act: act.process.Asignador
).Next(this.split_terminar_editar)
)
cancelar_proceso = (
flow.View(CancelProcessView,
).Assign(lambda act: act.process.Asignador)
)
split_terminar_editar = (
flow.If(lambda act: act.process.estado_del_proyecto)
.Then(this.editar_proceso)
.Else(this.cancelar_proceso)
)
ejecutar = (
flow.View(
UpdateProcessView,
fields=[ "oberservaciones_ejecutor", "fecha_de_ejecucion",
"revisor", "finalizado"],
task_description="Ejecucion"
).Assign(lambda act: act.process.ejecutor
).Next(this.revisor_check)
)
revisor_check = (
flow.View(
views.ReView,
).Assign(lambda act: act.process.revisor) #.Assign(lambda act: act.process.nuevo_revisor)
.Next(this.add_review)
)
add_review = (
flow.View(
UpdateProcessView,
fields=['estado_de_aprobacion', 'revisor'],
task_description='Conclusion sobre el entregable'
).Next(this.split)
)
split = (
#If(lambda activation: activation.process.aprobacion_final)
flow.Switch()
.Case(this.join, cond=lambda act: act.process.estado_de_aprobacion=='APROBACION_FINAL')
.Case(this.revisor_check,cond=lambda act: act.process.estado_de_aprobacion=='APROBACION_NUEVO_REVISOR')
.Case(this.ejecutar, cond=lambda act: act.process.estado_de_aprobacion=='DEVOLVER_EJECUTOR')
)
join = (
flow.Join(wait_all=True)
.Next(this.finalizacion)
)
finalizacion= (
flow.View(
UpdateProcessView,
fields=['fecha_de_terminacion_real', 'comentarios_finales'],
task_description= 'Estado final'
).Assign(lambda act: act.process.revisor
).Next(this.end)
)
end = flow.End()
def send_hello_world_request(self, activation):
print(activation.process.text)我还尝试在需要分配的进程状态之前使用"AssignTaskView“,但它只进入一种我不能修改的状态,并且不会继续。如何正确分配任务以正确使用CancelProcess,而不必手动取消分配,以及如何正确使用此类视图?提前谢谢。
发布于 2019-03-12 15:01:04
通常,在BPMN中,所有正常的流程路径都应该显式建模。因此,您需要以这种方式重塑流程,这样在现实生活中就不应该发生取消流程,流程应该只在何时结束状态。
取消进程管理工作的极少数情况下可用的进程功能。由于此时已分配的任务可以由一个人执行,因此默认的视图流节点不允许取消已分配的任务。应首先重新分配已分配的任务。要允许取消已分配的节点,您可以更改取消访问视图(以便自动尝试取消分配任务),或者创建带有激活类的自定义flow.View,允许在已分配状态下取消。
https://stackoverflow.com/questions/55010882
复制相似问题