Отмена процесса Django-ViewFlow - PullRequest
0 голосов
/ 05 марта 2019

Я создаю заявку для рабочего процесса моей компании. При этом я пришел к необходимости иметь какой-то способ отменить экземпляры процесса на тот случай, если пользователь, создавший поток 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 без необходимости отмены назначения вручную, а также как правильно использовать такое представление? Заранее спасибо.

1 Ответ

0 голосов
/ 12 марта 2019

Как правило, в BPMN все нормальные пути процесса должны моделироваться явно. Поэтому вам необходимо переделать процесс таким образом, чтобы в реальной жизни не происходил процесс отмены, а процесс должен происходить только тогда, когда он достигнет конечного состояния.

Функциональность отмены процесса доступна для редких случаев работы администратора процесса. Поскольку назначенное задание может быть выполнено человеком в данный момент, узлы потока по умолчанию не позволяют отменять назначенные задания. Назначенное задание должно быть переназначено первым. Чтобы разрешить отмену назначенных узлов, вы можете изменить представление unassing (чтобы оно автоматически пыталось отменить проверку задачи) или создать собственный поток. Представление с классом активации, который позволяет отменять в назначенном состоянии.

...