来自客户端应用程序的 Elsa 工作流
Elsa workflows from client apps
我正在考虑为一个项目使用 Elsa 工作流,但我找不到任何关于如何在客户端应用程序中使用它的示例或文档 (xamarin.forms/blazor wasm)。我的想法是基本上定义工作流程,其中还包括客户端应用程序中的屏幕转换。这是 Elsa 的相关场景,还是我不明白?我知道有一些 REST API 可用,但不知道如何使用它。
这篇很棒的文章解释了如何在 ASP.NET/backend 场景 https://sipkeschoorstra.medium.com/building-workflow-driven-net-core-applications-with-elsa-139523aa4c50
中使用它
这对 Elsa 来说是一个很好的用例,我正计划为其创建一个示例应用程序 + 指南。到目前为止,有关于使用 Elsa 执行长 运行 宁“后端”进程的指南和示例,但现在有理由不能使用它来实现应用程序导航逻辑,例如由步骤组成的向导例如实现为单独的屏幕。
这就是你的答案:是的,这是一个相关的场景。但不幸的是,目前没有具体的示例可以指向您。
除了任何示例,以下是它在客户端应用程序中的工作方式:
- 客户端应用程序配置了 Elsa 服务。
- 无论您决定将工作流存储在应用程序中(作为代码或 JSON)还是存储在远程 Elsa 服务器实例上都无关紧要 - 一旦内存中有工作流,您就可以执行它。
- 由于您的工作流程将驱动 UI,因此您必须考虑工作流程与 UI 的紧密耦合程度。例如,高度紧密耦合的工作流可能包括表示要呈现的视图(名称)的活动,包括转换配置(如果需要配置的话),以及基于单击按钮的结果。另一方面,高度松散耦合的工作流可能更像是动作和事件的“指挥者”或编排者,其中工作流仅由一堆原语组成,例如“SendCommand”和“Event Received”,其中“SendCommand”只是引发一些带有您的应用程序随后处理的任务名称的应用程序事件。 “事件已接收”activity 以相反的方式处理:您的应用程序向 Elsa 发出指令,而 Elsa 驱动工作流。任务可能是“导航”指令,下一个视图名称作为参数提供。
“SendCommand”和“EventReceived”活动非常新,是 Elsa 2.1 预览包的一部分。现在它们直接耦合到 webhook 场景(命令以 HTTP 请求的形式发送到外部应用程序),但目标是制定各种策略(HTTP out 请求只是其中之一,另一个可能是一个简单的中介模式,用于进程中的场景,例如您的客户端应用程序)。
更新
要将设计器中设计的工作流检索到客户端应用程序中,您需要通过以下 API 端点获取工作流定义:
http(s)://your-elsa-server/v1/workflow-definitions/{workflow-definition-id}/Published
您将得到一个代表工作流定义的 JSON,您现在可以使用 IContentSerializer.Deserialize<WorkflowDefinition>
对其进行反序列化,这将为您提供一个 WorkflowDefinition
。但要真正 运行 一个工作流,您需要一个 工作流蓝图 。要将工作流定义转换为蓝图,请使用 `IWorkflowBlueprintMaterializer.CreateWorkflowBlueprintAsync(WorkflowDefinition).
这将为您提供一个蓝图,然后可以使用例如IStartsWorkflow.StartWorkflowAsync(IWorkflowBlueprint)
.
还有各种其他服务可以更方便地构建和 运行 工作流程。
为了让您的客户端应用程序尽可能顺畅,您可以考虑简单地实施 IWorkflowProvider
,我们目前有 3 个开箱即用:
- ProgrammaticWorkflowProvider:提供基于使用流畅的 Workflow Builder API.
编码的工作流的工作流蓝图
- DatabaseWorkflowProvider: 提供基于数据库中存储的蓝图(JSON 设计者存储的模型)。
- StorageWorkflowProvider:提供基于 JSON 存储在某些硬盘驱动器或 blob 存储(例如 Azure Blob 存储)上的文件的蓝图。
你可能会做的,事实上我认为我们现在应该提供开箱即用的东西,现在你让我想到了,是创建第四个提供者,它使用 API 端点从.
那么您的客户端应用程序就不必为调用 Elsa 而烦恼 API - 提供商会为您完成。
我正在考虑为一个项目使用 Elsa 工作流,但我找不到任何关于如何在客户端应用程序中使用它的示例或文档 (xamarin.forms/blazor wasm)。我的想法是基本上定义工作流程,其中还包括客户端应用程序中的屏幕转换。这是 Elsa 的相关场景,还是我不明白?我知道有一些 REST API 可用,但不知道如何使用它。
这篇很棒的文章解释了如何在 ASP.NET/backend 场景 https://sipkeschoorstra.medium.com/building-workflow-driven-net-core-applications-with-elsa-139523aa4c50
中使用它这对 Elsa 来说是一个很好的用例,我正计划为其创建一个示例应用程序 + 指南。到目前为止,有关于使用 Elsa 执行长 运行 宁“后端”进程的指南和示例,但现在有理由不能使用它来实现应用程序导航逻辑,例如由步骤组成的向导例如实现为单独的屏幕。
这就是你的答案:是的,这是一个相关的场景。但不幸的是,目前没有具体的示例可以指向您。
除了任何示例,以下是它在客户端应用程序中的工作方式:
- 客户端应用程序配置了 Elsa 服务。
- 无论您决定将工作流存储在应用程序中(作为代码或 JSON)还是存储在远程 Elsa 服务器实例上都无关紧要 - 一旦内存中有工作流,您就可以执行它。
- 由于您的工作流程将驱动 UI,因此您必须考虑工作流程与 UI 的紧密耦合程度。例如,高度紧密耦合的工作流可能包括表示要呈现的视图(名称)的活动,包括转换配置(如果需要配置的话),以及基于单击按钮的结果。另一方面,高度松散耦合的工作流可能更像是动作和事件的“指挥者”或编排者,其中工作流仅由一堆原语组成,例如“SendCommand”和“Event Received”,其中“SendCommand”只是引发一些带有您的应用程序随后处理的任务名称的应用程序事件。 “事件已接收”activity 以相反的方式处理:您的应用程序向 Elsa 发出指令,而 Elsa 驱动工作流。任务可能是“导航”指令,下一个视图名称作为参数提供。
“SendCommand”和“EventReceived”活动非常新,是 Elsa 2.1 预览包的一部分。现在它们直接耦合到 webhook 场景(命令以 HTTP 请求的形式发送到外部应用程序),但目标是制定各种策略(HTTP out 请求只是其中之一,另一个可能是一个简单的中介模式,用于进程中的场景,例如您的客户端应用程序)。
更新
要将设计器中设计的工作流检索到客户端应用程序中,您需要通过以下 API 端点获取工作流定义:
http(s)://your-elsa-server/v1/workflow-definitions/{workflow-definition-id}/Published
您将得到一个代表工作流定义的 JSON,您现在可以使用 IContentSerializer.Deserialize<WorkflowDefinition>
对其进行反序列化,这将为您提供一个 WorkflowDefinition
。但要真正 运行 一个工作流,您需要一个 工作流蓝图 。要将工作流定义转换为蓝图,请使用 `IWorkflowBlueprintMaterializer.CreateWorkflowBlueprintAsync(WorkflowDefinition).
这将为您提供一个蓝图,然后可以使用例如IStartsWorkflow.StartWorkflowAsync(IWorkflowBlueprint)
.
还有各种其他服务可以更方便地构建和 运行 工作流程。
为了让您的客户端应用程序尽可能顺畅,您可以考虑简单地实施 IWorkflowProvider
,我们目前有 3 个开箱即用:
- ProgrammaticWorkflowProvider:提供基于使用流畅的 Workflow Builder API. 编码的工作流的工作流蓝图
- DatabaseWorkflowProvider: 提供基于数据库中存储的蓝图(JSON 设计者存储的模型)。
- StorageWorkflowProvider:提供基于 JSON 存储在某些硬盘驱动器或 blob 存储(例如 Azure Blob 存储)上的文件的蓝图。
你可能会做的,事实上我认为我们现在应该提供开箱即用的东西,现在你让我想到了,是创建第四个提供者,它使用 API 端点从.
那么您的客户端应用程序就不必为调用 Elsa 而烦恼 API - 提供商会为您完成。