【问题标题】:Elsa workflows from client apps来自客户端应用程序的 Elsa 工作流程
【发布时间】:2021-07-11 05:30:57
【问题描述】:

我正在考虑在一个项目中使用 Elsa 工作流,但我找不到任何关于如何在客户端应用程序中使用它的示例或文档 (xamarin.forms/blazor wasm)。我的想法是基本上定义在客户端应用程序中还包括屏幕转换的工作流程。这是艾莎的相关场景,还是没有得到它?我知道有一些可用的 REST API,但不知道如何使用它。

这篇很棒的文章解释了如何在 ASP.NET/后端场景中使用它https://sipkeschoorstra.medium.com/building-workflow-driven-net-core-applications-with-elsa-139523aa4c50

【问题讨论】:

  • 您可以使用 elsa-workflow 实现自定义活动并制作自己的工作流,它是一个 .net 标准库,因此您可以在 xamarin 表单/blazor wasm 中使用它,仪表板和商店等某些功能可能无法正常工作
  • @1SaeedSalehi 感谢您的回答。实施自定义活动对我来说很清楚,但我想要实现的是将 elsa 仪表板作为我的“管理网站”的一部分(这很清楚并且有效),然后在客户端应用程序中检索定义的工作流程并执行它们。所以我的问题是,是否有开箱即用的基础设施。

标签: c# .net xamarin.forms blazor-webassembly elsa-workflows


【解决方案1】:

这对 Elsa 来说是一个很好的用例,我正计划为此创建一个示例应用程序 + 指南。到目前为止,有关于使用 Elsa 执行长时间运行的“后端”进程的指南和示例,但现在有理由不能也使用它来实现应用程序导航逻辑,例如由实现为单独屏幕的步骤组成的向导例子。

这就是你的答案:是的,这是一个相关的场景。但很遗憾,目前没有具体的样本可以为您指出。

除非有任何示例,否则它在客户端应用程序中的工作方式如下:

  1. 客户端应用程序配置了 Elsa 服务。
  2. 无论您决定将工作流存储在应用程序中(作为代码还是 JSON)还是存储在远程 Elsa Server 实例上都没有关系 - 一旦您在内存中有工作流,您就可以执行它。
  3. 由于您的工作流将驱动 UI,因此您必须考虑工作流与该 UI 的紧密耦合程度。例如,高度紧耦合的工作流可能包括表示要呈现的视图(名称)的活动,包括转换配置(如果需要配置),以及基于单击的按钮的结果。另一方面,高度松散耦合的工作流可能更多地充当动作和事件的“指挥者”或协调者,其中工作流仅由一堆原语组成,例如“SendCommand”和“Event Received”,其中一个“SendCommand”只是引发一些应用程序事件,其任务名称是您的应用程序然后处理的。 “Event Received”活动以相反的方式处理:您的应用程序向 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 个开箱即用:

  1. ProgrammaticWorkflowProvider:提供基于使用 Fluent Workflow Builder API 编码的工作流的工作流蓝图。
  2. DatabaseWorkflowProvider:提供基于数据库中存储的蓝图(设计者存储的 JSON 模型)。
  3. StorageWorkflowProvider:提供基于存储在某些硬盘驱动器或 Blob 存储(如 Azure Blob 存储)上的 JSON 文件的蓝图。

您可能会做的,事实上我认为我们应该开箱即用地提供,因为您让我想到它,是创建第四个提供程序,使用 API 端点从中获取工作流。

那么您的客户端应用程序不必为调用 Elsa API 而烦恼 - 提供程序会为您完成。

【讨论】:

  • 感谢您的出色回答,它帮助很大。实际上,我对“紧耦合”方法更感兴趣,因为它非常适合我们正在开发的应用程序类型。我会尝试一下,看看我能走多远。我认为 SendCommand/EventReceived 方法现在对我不起作用。我正在考虑拥有一个包含活动定义的共享库,并在服务器(对于 elsa 设计器)和客户端(我在本地运行工作流)中使用。我的问题是如何在我的客户端应用程序中检索设计器中设计的工作流?
  • 很好。我将使用有关检索工作流的信息更新我的答案。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2019-08-24
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多