.NET 5 开源工作流框架elsa技术研究 (2)

       User Task:用户任务事件是用户自定义配置的活动,用户可以执行一系列可能的操作。每个动作对应于活动的结果。用户执行任何这些操作后,工作流将沿适当的路径恢复。这里的想法是您的应用程序将使用选定的操作触发工作流。

          例如,这可以表示为一组简单的按钮。由您的应用程序决定如何呈现这些操作。

    5. 版本控制

      每个工作流程定义都是版本化的。发布工作流程的新版本时,其版本号会增加。现有工作流程实例仍将使用工作流程定义的先前版本,但新工作流程将使用最新版本。   

    6. 持久化支持

CosmosDB (DocumentDB)

Entity Framework Core:各类关系型数据库,支持SQLServer

Memory:Non-persistent, use only for tests and/or short-lived workflows.

MongoDB

YesSQL

    7. 表达式

             工作流活动可以使用表达式,这些表达式可以炸运行时执行,使用表达式可以引用其他活动产生的值。Elsa支持以下三种类似的表达式:

             文字表达式:

             文字表达式不是一个真正的解释,当你需要设置,无需运行时计算活动属性的值才会被使用。

             JavaScript表达式:

             当你需要计算一些数值或读取工作流程中的过程值时通常使用JavaScript表达式。

             液体表达式(这个名字很奇怪,目前还在研究中)

             当你需要创建一个HTTP请求,HTTP响应的计算通常使用流式表达式,或例如其中主体被标记使用液体发送电子邮件时。

    三、产品扩展能力

Elsa的最重要和最强大的功能之一就是其可扩展性。

1. 工作流活动
许多过程是特定业务领域的,并且能够使用代表业务领域的特定语言的一组活动来创建工作流是一项强大的功能。

用特定领域的活动扩展Elsa非常简单。只需实现一个继承自C#的C#类,Activity并在服务容器中注册它,就可以使用了。活动将在工作流设计器中自动变为可用,并且默认情况下其所有公共属性都是可编辑的。

2. 持久化扩展
Elsa附带了许多持久性提供程序,例如内存,EF Core,MongoDB,YesSQL和CosmosDB。尽管这些提供程序应满足最常见的需求,但当然不限于这些。实现IWorkflowDefinitionStore为工作流定义提供定制存储,并实现IWorkflowInstanceStore为工作流实例提供定制存储。请注意,用户可以混合和匹配,这意味着您可以例如将EntityFrameworkCoreWorkflowDefinitionStorefor用于工作流定义``。

3. JavaScript函数
JavaScript表达式附带了一些您可能经常使用的有用的JavaScript函数。例如,它允许您从工作流程中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,则可以很容易地从您自己的应用程序中扩展功能集。

4. 液体表达式
Liquid表达式还附带了一些可能经常使用的有用过滤器。例如,它允许您从工作流程中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,可以很容易地从您自己的应用程序中扩展过滤器集。

5. 表达式解析执行
也许JavaScript和Liquid还不够好,可以使用用C#,VBScript或Python编写表达式。只需实现您自己的版本IExpressionEvaluator,即可在服务容器中注册它,即可在任何活动中使用自定义评估程序语法。

  四、与Windows Workflow Foundation对比
    目前,微软已经停止更新发展 Windows Workflow Foundation,同时技术社区也在努力做WF to .NET Standard, 但是elsa有以下2点优势:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjwp.html