今天假期第一天,研究了.NET 5开源工做流框架elsa,如今分享给你们。javascript
1、框架简介前端
elsa是一个开源的.NET Standard 工做流框架,官方网站:https://elsa-workflows.github.io/elsa-core/java
如下列出了Elsa的一些关键功能:node
2、产品主要功能python
1. 可视化的工做流编辑器git
Elsa带有一个独立的,可重复使用的HTML5工做流设计器Web组件,您能够将其嵌入本身的HTML网页中。设计器彻底在客户端运行,并具备丰富的JavaScript API,该API可以让您定义自定义插件以扩展其功能。github
2. Dashboard 看板web
Elsa看板使您可以定义工做流程定义并检查执行的工做流程。要设计工做流程,只需右键单击画布,从活动选择器中选择一个活动,对其进行配置,而后拖动多个活动之间的链接以建立从简单的短时间运行的工做流程到高级的长期运行的工做流程的流程。数据库
3. 支持长期和短时间的工做流模式npm
Elsa提供了短时间和长期工做流程。能够理解为简单的和复杂的流程设计
例如,当您须要实现业务规则引擎时,短时运行的工做流程很是有用,在该流程中,若是工做流程是一个接收输入并返回结果的函数,则能够从应用程序中调用它。
长时间运行的工做流可以轻松地实现涉及人和机器的复杂过程。长期运行过程的典型示例是文档批准工做流,其中某些文档的审阅过程涉及多方。这样的工做流程可能涉及计时器,电子邮件,提醒,HTTP请求,用户操做等。
4. 丰富的工做流活动
基本元语:是低级的技术活动。
控制流:控制流活动提供对过程的控制。例如,Fork活动会将工做流程分为两个或多个执行分支。
工做流活动:活动表明工做流程中的单个步骤。开箱即用的Elsa NuGet套件套件为您提供了一系列不错的活动,主要包含如下工做流活动
工做流程:工做流类别中的活动与工做流级别的功能相关,例如相关性和信令。
控制台活动:在实施带有工做流的基于控制台的应用程序时,控制台活动很是有用。
DropBox活动:Dropbox活动可帮助实现与Dropbox API集成。
电子邮件活动:电子邮件活动容许您使用SMTP发送电子邮件。
HTTP活动:可以实现发送传出HTTP请求并响应传入HTTP请求的工做流,很是适合与基于外部Web的API集成。
定时器活动:定时器活动能够基于某些基于时间的事件(例如CRON表达式,常规计时器)或在未来的特定时间触发工做流。
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响应的计算一般使用流式表达式,或例如其中主体被标记使用液体发送电子邮件时。
3、产品扩展能力
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,便可在服务容器中注册它,便可在任何活动中使用自定义评估程序语法。
4、与Windows Workflow Foundation对比
目前,微软已经中止更新发展 Windows Workflow Foundation,同时技术社区也在努力作WF to .NET Standard, 可是elsa有如下2点优点:
5、源代码编译构建
项目源代码地址:https://github.com/elsa-workflows/elsa-core
经过VS2019,使用克隆的方式,将代码克隆到本地编译构建。
项目使用了Angular,在调试运行前,本地须要完成NPM包安装和JS 编译,因此本地须要先安装NodeJS
切换到XX\src\dashboard\Elsa.Dashboard\Theme\argon-dashboard, 执行NPM Install
安装过程当中,涉及到Python相关的组件和环境变量配置,因此可能会安装失败,出现异常:
checking for Python executable "python2" in the PATH Can't find Python executable "python2.7", you can set the PYTHON env variable.
此时,先删除delete node_modules文件夹
, 而后执行: npm install --global windows-build-tools
python组件安装完成后,执行如下命令:
npm config set python C:\Users\zhougq\.windows-build-tools\python27\python.exe npm install
NPM Install成功后,在目录src\dashboard\Elsa.Dashboard\Theme\argon-dashboard下执行如下指令:gulp build
此时elsa Dashboard前端项目所有编译经过。
接下来能够经过:
VS:Elsa.Dashboard.Web 项目工程调式
也能够在Elsa.Dashboard.Web文件件下运行dotnet run
.
浏览器中直接访问:http://localhost:port/elsa/home,就可使用了elsa了。
以上是对elsa的初步研究,分享给你们。
周国庆
2021/1/1