使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发

        开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎,可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现,展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。

项目概述

        我们的工作流系统将包含以下功能:

  • 使用 Elsa Workflows 创建和管理工作流。
  • 在 Blazor 前端界面中展示工作流的任务列表。
  • 用户能够执行工作流的任务(如审批、拒绝)。
  • 支持任务状态更新和流程流转。

1. 安装依赖

       首先,我们需要在 Blazor 项目中安装 Elsa Workflows 相关的 NuGet 包。

dotnet add package Elsa.Core 
dotnet add package Elsa.Activities.Http 
dotnet add package Elsa.Activities.Console 

这些包将帮助我们集成 Elsa 引擎,并使用 HTTP 和控制台活动。

2. 设置 Elsa 配置和工作流引擎

Startup.csProgram.cs 中配置 Elsa 工作流引擎。

using Elsa;
using Elsa.Persistence.EntityFramework.Core.Extensions;
using Elsa.Services;public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureServices((hostContext, services) =>{services.AddElsa(options => options.UseEntityFrameworkPersistence(options =>{options.UseSqlite("Data Source=elsa_workflows.db");}).AddConsoleActivities().AddHttpActivities());// Add Blazor Server Servicesservices.AddRazorComponents().AddInteractiveComponents();});
}

        此配置初始化了 Elsa 工作流引擎,并将工作流数据存储在 SQLite 数据库中。你可以根据需要选择其他数据库存储类型。

3. 定义工作流

       我们需要创建一个工作流并定义其步骤。假设我们创建一个审批流程工作流。

using Elsa.Builders;
using Elsa.Services;
using Elsa.Activities.Console;
using Elsa.Activities.Http;public class ApprovalWorkflow : IWorkflow
{public string Id => "ApprovalWorkflow";public void Build(IWorkflowBuilder builder){builder.StartWith<HttpRequestActivity>().Then<ApprovalTask>().Then<EndTask>();}
}

        在这个例子中,ApprovalWorkflow 是我们定义的工作流,包含三个步骤:

  1. HttpRequestActivity:处理 HTTP 请求。
  2. ApprovalTask:审批任务,我们可以在这个步骤进行审批操作。
  3. EndTask:结束任务。

4. 实现审批任务

        假设 ApprovalTask 是一个自定义活动,它负责执行审批操作。

using Elsa.Services;
using Elsa.ActivityResults;public class ApprovalTask : Activity
{protected override IActivityExecutionResult Execute(ActivityExecutionContext context){var taskId = context.GetInput<string>("TaskId");var approvalDecision = context.GetInput<string>("ApprovalDecision");// 处理审批决策if (approvalDecision == "Approve"){// 执行审批通过的操作}else{// 执行拒绝操作}return Done();}
}

5. Blazor 页面实现

接下来,我们在 Blazor 页面中创建一个用户界面,允许用户查看工作流并进行操作。

@page "/workflow/{workflowId}"@inject Elsa.Services.IWorkflowLaunchpad WorkflowLaunchpad
@inject IJSRuntime JSRuntime<h3>工作流审批</h3><p>Workflow ID: @workflowId</p><button @onclick="StartWorkflow">开始工作流</button>@if (isTaskPending)
{<h4>审批任务</h4><button @onclick="ApproveTask">通过</button><button @onclick="RejectTask">拒绝</button>
}@code {private string workflowId;private bool isTaskPending = false;protected override void OnParametersSet(){workflowId = (string)RouteData.Values["workflowId"];}private async Task StartWorkflow(){// 启动工作流var instance = await WorkflowLaunchpad.StartWorkflowAsync("ApprovalWorkflow", new { TaskId = "123" });isTaskPending = true;}private async Task ApproveTask(){// 审批通过await JSRuntime.InvokeVoidAsync("alert", "审批通过!");isTaskPending = false;}private async Task RejectTask(){// 审批拒绝await JSRuntime.InvokeVoidAsync("alert", "审批拒绝!");isTaskPending = false;}
}

        在这个 Blazor 页面中:

  • StartWorkflow 方法用于启动工作流并触发第一个 HTTP 请求活动。
  • ApproveTaskRejectTask 分别处理审批通过和拒绝操作。
  • isTaskPending 控制页面是否显示审批按钮。

6. 前端与 Elsa 的集成

        Elsa 提供了 HTTP 请求活动,我们可以利用它在前端与工作流交互。Blazor 前端页面通过调用后端的 API 启动工作流,并通过状态更新来控制用户操作。

// HTTP 请求活动配置,接收任务数据并处理审批
public class HttpRequestActivity : Activity
{protected override IActivityExecutionResult Execute(ActivityExecutionContext context){// 获取工作流输入var taskId = context.GetInput<string>("TaskId");// 返回工作流状态或继续处理其他活动return Outcome("Approved");}
}

7. 工作流实例与状态管理

        Elsa 工作流引擎会自动管理工作流实例和任务状态。如果你希望将工作流状态持久化到数据库中,你可以配置 Elsa 使用 Entity Framework 或其他持久化机制。

8. 数据库配置

        在 Startup.cs 中,我们使用 SQLite 来持久化工作流实例。

services.AddElsa(options => options.UseEntityFrameworkPersistence(options =>{options.UseSqlite("Data Source=elsa_workflows.db");}).AddHttpActivities().AddConsoleActivities()
);

        这将确保工作流和任务实例在数据库中存储。

9. 运行与调试

        最后,确保你正确配置了数据库和工作流引擎,运行 Blazor 项目。在 Blazor 页面中启动工作流后,用户将看到审批任务,并能够进行审批操作。

10. 总结

        这个示例展示了如何使用 Blazor 和 Elsa Workflows 创建一个简单的工作流系统,支持启动工作流、审批任务和前端交互。你可以根据实际需求,扩展工作流的复杂性,增加更多的任务、角色和权限控制。

进一步扩展:

  • 用户管理:为不同的用户角色(如审批人、普通用户)设置不同的工作流操作权限。
  • 通知功能:通过 SignalR 或其他方式实时通知用户任务状态变化。
  • 自定义活动:根据需要,开发更多自定义活动来处理特殊任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索Python人脸识别技术:从原理到实践

一、引言在当今数字化时代,人脸识别技术已然成为了计算机视觉领域的璀璨明星,广泛且深入地融入到我们生活的各个角落。从门禁系统的安全守护,到金融支付的便捷认证,再到安防监控的敏锐洞察,它的身影无处不在,以其高效、精准的特性,极大地提升了我们生活的便利性与安全性…

国内汽车法规政策标准解读:GB 44495-2024《汽车整车信息安全技术要求》

目录 背景 概述 标准适用范围 汽车信息安全管理体系要求&#xff08;第5章&#xff09; 信息安全基本要求&#xff08;第6章&#xff09; 信息安全技术要求&#xff08;第7章&#xff09; ◆ 外部连接安全要求&#xff1a; ◆通信安全要求&#xff1a; ◆软件升级安全…

Arcgis Pro安装完成后启动失败的解决办法

场景 之前安装的Arcgis Pro 今天突然不能使用了&#xff0c;之前是可以使用的&#xff0c;自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro&#xff0c;页面也不弹出来&#xff0c;打开任务管理器可以看到进程创建之后&…

SAP POC 项目完工进度 - 收入确认方式【工程制造行业】【新准则下工程项目收入确认】

1. SAP POC收入确认基础概念 1.1 定义与原则 SAP POC&#xff08;Percentage of Completion&#xff09;收入确认方式是一种基于项目完工进度来确认收入的方法。其核心原则是根据项目实际完成的工作量或成本投入占预计总工作量或总成本的比例&#xff0c;来确定当期应确认的收…

Docker 学习总结(85)—— docker cp 使用总结

前言 在现代软件开发中,Docker 已成为一种流行的容器化技术。无论是在开发、测试还是生产环境中,管理容器内的文件都是一项常见且重要的任务。本文将详细介绍如何使用 docker cp 命令在 Docker 容器与宿主机之间拷贝文件和目录,并结合一些实际使用场景,帮助您更高效地管理…

使用 Box2D 库开发愤怒的小鸟游戏

使用 Box2D 库开发愤怒的小鸟游戏 Box2D 是一个开源的 2D 物理引擎&#xff0c;广泛应用于游戏开发中&#xff0c;特别是在模拟物体的运动、碰撞、重力等方面。在本文中&#xff0c;我们将利用 Box2D 库开发一个简化版的 愤怒的小鸟 游戏。我们将一步步展示如何实现物理引擎的…

mac 安装mongodb

本文分享2种mac本地安装mongodb的方法&#xff0c;一种是通过homebrew安装&#xff0c;一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…

2023年江西省职业院校技能大赛网络系统管理赛项(Linux部分样题)

一、Linux项目任务描述 你作为一个Linux的技术工程师,被指派去构建一个公司的内部网络,要为员工提供便捷、安全稳定内外网络服务。你必须在规定的时间内完成要求的任务,并进行充分的测试,确保设备和应用正常运行。任务所有规划都基于Linux操作系统,请根据网络拓扑、基本配…

【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。

FTP服务器提示&#xff1a;服务器回应不可路由的地址。被动模式失败。 问题原因网络结构安全管理配置服务器配置网关![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1500d9c0801247ec8c89db7a44907e4f.png) 问题 FTP服务器提示&#xff1a;服务器回应不可路由的地址…

Java中json的一点理解

一、Java中json字符串与json对象 1、json本质 json是一种数据交换格式。 常说的json格式的字符串 > 发送和接收时都只是一个字符串&#xff0c;它遵循json这种格式。 2、前后端交互传输的json是什么&#xff1f; 前后端交互传输的json都是json字符串 比如&#xff1a;…

大模型GUI系列论文阅读 DAY2续:《一个具备规划、长上下文理解和程序合成能力的真实世界Web代理》

摘要 预训练的大语言模型&#xff08;LLMs&#xff09;近年来在自主网页自动化方面实现了更好的泛化能力和样本效率。然而&#xff0c;在真实世界的网站上&#xff0c;其性能仍然受到以下问题的影响&#xff1a;(1) 开放领域的复杂性&#xff0c;(2) 有限的上下文长度&#xff…

农业农村大数据应用场景|珈和科技“数字乡村一张图”解决方案

近年来&#xff0c;珈和科技持续深耕农业领域&#xff0c;聚焦时空数据服务智慧农业。 珈和利用遥感大数据、云计算、移动互联网、物联网、人工智能等先进技术&#xff0c;搭建“天空地一体化”监测体系&#xff0c;并创新建设了150的全球领先算法模型&#xff0c;广泛应用于高…

中间件漏洞之redis

目录 前置知识redis持久化存储动态修改配置打redis常用命令 利用弱口令未授权访问写ssh公钥直接写ssrf 绝对路径写shell直接写ssrf 反弹shell直接写ssrf 主从复制防御措施 前置知识 redis持久化存储 RDB Redis DataBase(默认) AOF Append Only File&#xff08;会追加日志文件…

【odbc】odbc连接kerberos认证的 hive和spark thriftserver

hive odbc驱动&#xff0c;以下两种都可以 教程&#xff1a;使用 ODBC 和 PowerShell 查询 Apache HiveHive ODBC Connector 2.8.0 for Cloudera Enterprise spark thriftserver本质就是披着hiveserver的外壳的spark server 完成kerberos认证: &#xff08;1&#xff09;可以…

【联想正式迈入机器人智能制造领域:生产下线六足机器人 全自研】

*1月17日消息&#xff0c;联想集团发文表示&#xff0c; 近日联想集团合肥产业基地下线了一只六足机器人——联想晨星足式机器人IS。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202501/466441.htm 联想晨星足式机器人系列由联想集团自主研发&#xff0c;伴随它…

ESP-Skainet语音唤醒技术,设备高效语音识别方案,个性化交互应用

在当今数字化、智能化飞速发展的时代&#xff0c;物联网&#xff08;IoT&#xff09;与人工智能&#xff08;AI&#xff09;的深度融合正在重塑我们的生活和工作方式。 在智能家居的生态系统中&#xff0c;语音唤醒技术不仅能够为用户提供个性化的服务&#xff0c;还能通过定制…

前端发送Ajax请求的技术Axios

目录 1.引入Axios文件 2.使用Axios发送请求 2.1请求方法的别名 请求的URL地址怎么来的&#xff1f; 后端实现 前后端交互 1.引入Axios文件 <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 2.使用Axios发送请求 2.1请求方法的…

Kivy App开发之UX控件VideoPlayer视频播放

kivy使用VideoPlayer控件实现视频播放,可以控制视频的播放,暂停,音量调节等功能。 在使用VideoPlayer视频播放器时,可以参考下表属性来设置其样式和触发事件。 属性说明source视频路径,默认为空state视频状态,值play,pause,stop,默认为stopthumbnail显示视频的缩略图…

第7章:Python TDD测试Franc对象乘法功能

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

鸿蒙安装HAP时提示“code:9568344 error: install parse profile prop check error” 问题现象

在启动调试或运行应用/服务时&#xff0c;安装HAP出现错误&#xff0c;提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权&#xff0c;但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特权管控白名…