Elsa 工作流引擎引言

释放 Elsa 在.NET 项目中工作流的力量。

探索你的 .NET 应用程序的潜力,通过集成 Elsa 工作流。无论是编程方式还是可视化方式,都能轻松创建、修改和管理工作流,无缝对接应用核心功能。

Elsa 工作流是一个强大而灵活的执行引擎,以一系列开源.NET 库的形式封装,旨在为.NET 应用注入工作流能力。开发者可以直接在他们的系统中编织逻辑,增强功能和自动化,并与应用的核心功能完美融合。

Elsa 中,工作流可以通过两种方式定义:

  • 编程方式:通过编写 .NET 代码,开发者可以定义满足特定业务需求的复杂工作流。
  • 可视化方式:使用内置设计器,非开发者或偏好视觉方法的人可以轻松创建和修改工作流。

Elsa 的多功能性使其适用于从简单任务自动化到复杂业务流程管理的广泛应用场景。其模块化架构便于与现有系统集成,成为寻求向项目添加工作流功能的开发者的首选。

入门指南

开始你的 Elsa 工作流之旅!无论你是工作流新手还是经验丰富的开发者,我们都有资源帮助你将 Elsa 无缝集成到你的项目中。


Elsa 工作流概览

Elsa 工作流不仅仅是一个工作流引擎;它是一个强大且灵活的解决方案,旨在为你的 .NET 应用注入活力。使用 Elsa,你可以构建简单和复杂的企业流程模型,确保你的应用不仅功能齐全,而且高效且用户友好。

为什么选择 Elsa?

  • 灵活性:无论你想要自动执行简单任务还是设计复杂的多步骤业务流程,Elsa 都能满足。它的模块化设计确保了你可以根据确切需求进行定制。

  • 可视化与编程设计Elsa 让你不必在编码和设计之间做出选择。你可以为精确控制编程定义工作流,或者使用直观的可视化设计器进行快速开发和协作。

  • 集成就绪Elsa 设计用于与其他系统良好协同。无论是与第三方服务集成还是现有系统,Elsa 都能轻松处理。

  • 开源:作为开源软件,Elsa 得益于不断改进其功能的贡献者社区。你得到的工具不仅强大,而且紧跟行业最新标准。

关键特性

  • 活动库:丰富的开箱即用活动集,作为工作流构建块。

  • 触发器:基于特定事件或条件自动启动工作流。

  • 长时与短时运行的工作流:无论是需要跨天等待用户输入的工作流,还是瞬间完成的工作流,Elsa 都能应对。

  • 可扩展性:需要特殊功能?Elsa 设计为可扩展,允许你添加自定义活动或与其他系统无缝集成。

  • 动态表达式:使用 C#JavaScriptLiquid 表达式在运行时动态评估值。

潜在应用场景

  • 业务流程自动化:简化订单处理、HR 入职或内容审批等业务流程。

  • 任务自动化:自动化重复任务,从数据录入到报告生成。

  • 集成工作流:连接不同的系统,确保数据流畅传输。

  • 警报与监控:设置工作流监控系统,自动发送警报或采取纠正措施。

深入文档,探索 Elsa 工作流的所有功能,开始创建动态、工作流驱动的应用程序的旅程!


使用 Elsa 工作流的优势

Elsa 工作流带来了诸多优势,使其成为开发者和企业的一致选择。以下是考虑 Elsa 来满足你的工作流需求的原因:

  • 快速开发:借助 Elsa 的可视化设计器和丰富的活动库,你可以创纪录的时间内设计并部署工作流,加速开发周期。

  • 可扩展性:基于 .NET 构建,Elsa 天生可扩展,确保随着业务增长,你的工作流能轻松应对增加的负载。

  • 成本效益:通过 Elsa 自动化流程可以显著节省成本,减少人工努力,最小化错误,并优化资源使用。

  • 灵活性Elsa 的编程和可视化设计双重方式意味着你可以根据确切需求定制工作流,无论多么复杂。

  • 开源优势:作为开源软件,Elsa 持续由开发者社区改进。这确保你始终能够访问最新特性和最佳实践。

  • 无缝集成Elsa 设计为与数据库、第三方服务或自定义应用等其他系统平滑集成,确保统一的生态系统。

  • 增强用户体验:自动化和优化的流程导致更快的响应时间、一致的结果和整体更好的用户体验。

  • 强大的安全性:内置认证和授权功能,Elsa 确保你的工作流和数据保持安全。

  • 透明监控与日志:利用 Elsa 的监控功能,跟踪进度、诊断问题并确保一切顺利运行。

  • 社区与支持:加入蓬勃发展的 Elsa 爱好者社区。无论你有疑问、需要指导还是想分享你的专长,Elsa 社区都在这里为你服务。

掌握 Elsa 工作流的力量,将你的应用提升到效率和用户满意度的新高度!


深入 Elsa 的编程 API

Elsa 工作流提供了灵感来自 Windows Workflows Foundation 4 的编程 API。这个 API 为开发者提供了一套强大的工具集,用于精确和灵活地定义工作流。

顺序工作流

顺序工作流允许你定义按特定顺序执行的一系列活动。这是一个简单的示例,提示用户输入他们的名字然后显示出来:

// 定义一个工作流变量来捕获 ReadLine 活动的输出。
var nameVariable = new Variable<string>();

// 定义一个简单的顺序工作流:
var workflow = new Sequence
{
    // 注册名称变量。
    Variables = { nameVariable },

    // 设置要运行的活动序列。
    Activities =
    {
        new WriteLine("请输入你的名字:"),
        new ReadLine(nameVariable),
        new WriteLine(context => $"很高兴认识你,{nameVariable.Get(context)}!")
    }
};

输出

流程图工作流

对于更复杂的工作流,Elsa 支持 Flowchart 活动。这些活动允许你将工作流定义为相互连接的活动图,提供更大的灵活性:

public class BraidedWorkflow : WorkflowBase
{
    protected override void Build(IWorkflowBuilder workflow)
    {
        var writeLine1 = new WriteLine("WriteLine1");
        var writeLine2 = new WriteLine("WriteLine2");
        var writeLine3 = new WriteLine("WriteLine3");
        var writeLine4 = new WriteLine("WriteLine4");
        var writeLine5 = new WriteLine("WriteLine5");
        var writeLine6 = new WriteLine("WriteLine6");
        var writeLine7 = new WriteLine("WriteLine7");

        workflow.Root = new Flowchart
        {
            Start = writeLine1,

            Activities =
            {
                writeLine1,
                writeLine2,
                writeLine3,
                writeLine4,
                writeLine5,
                writeLine6,
                writeLine7,
            },

            Connections =
            {
                new Connection(writeLine1, writeLine2),
                new Connection(writeLine1, writeLine3),

                new Connection(writeLine2, writeLine4),
                new Connection(writeLine2, writeLine5),

                new Connection(writeLine3, writeLine5),
                new Connection(writeLine3, writeLine6),

                new Connection(writeLine4, writeLine7),
                new Connection(writeLine5, writeLine7),
                new Connection(writeLine6, writeLine7),
            }
        };
    }
}

当可视化时,流程图工作流呈现为:

设计师

视觉设计师

对于偏好视觉方法或希望与非开发者合作的人来说,Elsa 提供了一个直观的设计工具:

设计师

在您的.NET 项目中释放工作流的力量

通过将工作流集成到您的应用程序中,您打开了通往无数可能性的大门。从轻松更新业务逻辑和编排微服务到处理重复任务、数据处理和消息处理,潜力巨大。使用 Elsa,您只受限于您的想象力!


新功能

Elsa 3 代表了其前身 Elsa 2 的巨大飞跃。这个版本不仅仅是一个升级;它是一个完全重写,带来了大量的改进、新特性和架构变化。以下是 Elsa 3 带来的全面概览:

核心增强

  • .NET 6 目标定位Elsa 3 旨在未来,针对 .NET 6 及以上版本。
  • 架构清晰性:在核心库、管理库和运行时库之间做出了明确区分。这种分离确保了更高的灵活性和集成能力。
  • 减少依赖:更少的依赖使得将 Elsa 集成到现有应用程序中比以往任何时候都更加无缝。

设计工具与编程模型

  • 全新视觉设计工具:体验配备拖放、多选、撤销、重做、复制粘贴等功能的现代设计工具。

  • 创新的编程模型:得益于新的编程模型,从代码构建工作流和开发自定义活动从未如此简单。

  • 多样化的图表支持:除了传统的流程图和顺序图外,Elsa 3 为未来对状态机和 BPMN 2.0 图表的支持铺平了道路。

执行与运行时

  • 基于队列的调度器Elsa 3 采用基于队列的工作流调度器,从先前版本的基于堆栈的方法转变。这一变化促进了广度优先执行。

  • 并行活动执行:活动现在可以使用 TaskJob 活动类型并发运行。

  • 多样的工作流运行时:虽然默认运行时是基于数据库的,但 Elsa 3 引入了对使用 Proto.Actor 的分布式运行时的支持,实现了跨多个节点的无锁工作流执行。

  • 中间件管道:为工作流和活动执行实施了中间件管道架构。

C# 表达式

  • C# 表达式Elsa 3 引入了对 C# 表达式的支持,允许您在运行时动态评估值。

持久化与安全

  • 灵活的持久化Elsa 3 中简化的持久化抽象使您可以选择多种持久化技术。无论是 SQL ServerMongoDB 还是 ElasticsearchElsa 3 都能满足您的需求。

  • 安全的 API 端点:默认情况下,API 端点现在是安全的。您可以灵活配置使用 JWT 令牌、API 密钥或甚至选择不进行身份验证。

  • 非持久化活动数据:活动输入和输出默认是非持久化的,确保数据安全。但是,如果需要持久化,可以使用工作流变量来捕获和存储数据。

工作流上下文

  • 增强的工作流上下文Elsa 3 引入了多样的工作流上下文支持,允许为每个工作流配置多个工作流上下文提供者。

功能

Elsa Workflows 是一个强大的平台,旨在简化基于工作流的应用程序的创建和管理。以下是其功能集的全面概述:

工作流创建

  • 编程式工作流:使用代码编程式地构建工作流。这种方法提供了强类型和在不同场景中重用工作流的能力。

  • 视觉设计工具:使用 Elsa 的直观视觉设计工具创建工作流。这种图形化方法非常适合那些偏爱视觉表示的人,并同样提供了可重用性的好处。

工作流执行类型

  • 短生命周期工作流:这些工作流从开始到结束无缝执行,无需任何挂起。它们适用于发送电子邮件或执行一系列步骤等任务。

  • 长生命周期工作流:设计用于需要挂起和恢复的任务。例如,等待外部事件或协调长时间任务的工作流。

活动管理

  • 复合活动:如 SequenceFlowchart 这类可以封装其他活动的活动。您可以编程方式或使用视觉设计工具设计自己的复合活动,这些可以在不同的工作流中复用。

  • 触发器:用于启动工作流的活动。例如 HttpEndpointTimer

  • 活动:工作流的基本构建块。Elsa 带有丰富的活动集,如 WriteLineSendEmailHttpRequest 等。平台的可扩展性允许您根据需要添加自定义活动。

  • 活动提供器:这些提供器向 Elsa 提供活动类型。例如,TypedActivityProvider 根据 IActivity 实现提供活动类型。Elsa 的灵活性很快将支持来自 GraphQLOpenAPIJavaScript 函数等的活动类型。

动态表达式

  • 表达式:在运行时动态评估值。Elsa 本地支持 JavaScriptLiquid 表达式,但设计为可容纳自定义表达式评估器。

    • C# 示例:

      $"当前日期和时间是: {DateTime.Now}"
      
    • JavaScript 示例:

      `当前日期和时间是: ${new Date()}`;
      
    • Liquid 示例:

      当前日期和时间是: {\{ "now" | date: "%Y-%m-%d %H:%M:%S" \}}
      

持久化与托管

  • 持久化Elsa 允许工作流被保存到数据库,即使在应用程序重启后也能恢复。持久化机制是抽象的,允许使用自定义持久化提供程序。

  • 工作流托管:直接在您的应用中集成和执行工作流,提供无缝用户体验。

集成能力

  • 外部应用程序集成Elsa 工作流可以从任何能够发起 HTTP 请求的外部应用程序触发。相反,Elsa 工作流也可以通过 HTTP 请求、webhook、服务总线消息、gRPC 等与外部应用程序交互。

加入社区!

Elsa 周围有一个友好的社区,欢迎您加入!

在本文档中