39

我正在使用 Django-viewflow 以编程方式创建工作流。

这是我的流量课。

class Workflow(Flow):

    start = (
        flow.StartFunction(function1)
        .Next(this.shipment_create)
    )

    shipment_create = (
        flow.Function(function2)
        .Next(this.request_quotes)
    )

    request_quotes = (
        flow.Handler(function3)
        .Next(this.move_package)
    )

    move_package = (
        flow.Function(function4)
        .Next(this.end)
    )

    end = flow.End()

我所做的是,我以编程方式启动流程,当对端点 E1 发出 POST 请求时,我运行

WorkFLow.start.run(**some_kwargs)

它正确启动,并在处理start完成后,将响应返回给客户端。

现在,shipment_create在端点 E2 上发出 POST 请求时运行,我通过编程再次运行它,

activation.flow_task.run(**some_kwargs)

它正确运行并完成流程直到move_package.

问题

我通过端点 E3 上的 PUT 请求更新了 的详细信息shipment,并且我想在 node 之后重新运行完整的流程shipment_create。我怎样才能做到这一点?

  1. 如何在特定节点之后重新运行流程?

  2. Point(1) 是手动步骤,即以编程方式重新运行后节点。有没有办法,我可以shipment_update在 Workflow 类本身中包含节点,以便它自动重新运行后节点?我将如何以及在哪里提到update_shipment节点?

我在第(2)点看到的问题是,在一种情况下,我shipment_create在启动后声明节点(其余处理程序将处理),在另一种情况下,我必须在启动后提及shipment_update节点(其余处理程序将处理)。工作流类将如何根据 HTTP 方法的类型工作?

更新

如何返回 Handler(即function4)的响应?

def function1():
    return 1


def function2():
    return 2


def function3():
    return 3


def function4():
    return 4

运行时shipment_create,Handler 会自动执行。但是,返回的响应是shipment_create节点的响应,即function2。

function3(Handler)在将其发送回客户端之前,如何返回或如何获取最后执行节点的响应?

4

0 回答 0