0

我正在为我公司的工作流程创建一个应用程序。这样做我已经到了有必要以某种方式取消流程实例,以防创建流程 AKA“Asignador”的用户需要它。我试过使用“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 而无需手动取消分配以及如何正确使用此类视图?提前致谢。

4

1 回答 1

0

通常,在 BPMN 中,所有正常的流程路径都应该被显式地建模。因此,您需要以这种方式重塑流程,这样在现实生活中不应该发生取消流程,流程应该只是何时到达结束状态。

取消可用于极少数流程管理工作的流程功能。由于此时分配的任务可以由人执行,默认视图流节点不允许取消分配的任务。应首先重新分配分配的任务。要允许取消分配的节点,您可以更改取消分配视图(因此它会自动尝试取消分配任务)或创建自定义 flow.View 与允许在分配状态下取消的激活类。

于 2019-03-12T07:01:03.970 回答