告别审批表单!我用Blazor + Elsa Workflows 3.x 给团队做了个自动化审批小工具(附源码)
用Blazor和Elsa Workflows打造零代码审批系统从设计到部署全指南每次看到团队成员为了请假、报销这些小事填表单、等审批、催流程我就忍不住想能不能让技术帮我们省下这些时间去年我们团队用Blazor和Elsa Workflows搭建的自动化审批系统现在连HR小姐姐都能自己配置新流程了。今天我就把踩过的坑和最佳实践都分享给你。1. 为什么选择BlazorElsa这套组合拳三年前我们用的还是某知名OA系统每年交着大几万的授权费结果连个加班餐补流程都要找供应商改代码。直到发现Elsa Workflows这个开源神器——它就像工作流领域的乐高积木而Blazor则是让这些积木动起来的遥控器。技术选型对比表方案可视化配置实时交互二次开发成本部署复杂度传统OA系统❌❌高高低代码平台✔️❌中中BlazorElsa✔️✔️低低我们第一个上线的请假流程从设计到上线只用了3小时用Elsa Designer拖拽出审批节点在Blazor页面嵌入流程操作面板配置SQLite持久化后来换成了PostgreSQL// 最简单的Blazor页面集成示例 page /approval/{workflowId} inject IWorkflowRegistry _workflowRegistry ElsaDesigner WorkflowDefinition_workflowDefinition / code { private WorkflowDefinition _workflowDefinition; protected override async Task OnInitializedAsync() { _workflowDefinition await _workflowRegistry.GetWorkflowDefinitionAsync(LeaveApproval); } }2. 从零搭建你的第一个审批流程2.1 环境准备就像搭积木别被NuGet包列表吓到其实核心就这几个dotnet add package Elsa dotnet add package Elsa.Persistence.EntityFramework dotnet add package Elsa.Activities.Email # 邮件通知必备 dotnet add package MudBlazor # UI神器提示用EF Core持久化时记得先建好数据库。我们吃过亏测试数据全丢过。2.2 请假流程可视化配置Elsa Dashboard里拖拽5分钟就能建出这样的流程开始节点接收员工提交的请假表单条件分支假期≤3天→直接通过审批任务大于3天转部门主管并行审批特殊时期需要HR会签结束节点同步结果到考勤系统// 对应的代码定义 public class LeaveWorkflow : IWorkflow { public void Build(IWorkflowBuilder builder) { builder .StartWithHttpRequest(a a.WithPath(/leave-request)) .ThenIfElse(branch branch .When(context (int)context.Input![days] 3) .ThenApproveRequest() .Else() .ThenManagerApproval()) .ThenEnd(); } }3. 那些官方文档没告诉你的实战技巧3.1 状态持久化的坑我们遇到过周末服务器重启后流程状态丢失的问题。解决方案双重持久化策略内存缓存用于高频访问数据库存储最终状态services.AddElsa(elsa elsa .UseEntityFrameworkPersistence(ef ef.UsePostgreSql(connectionString)) .AddMemoryCacheSignaling());3.2 如何让审批人收到微信提醒Elsa默认只支持邮件我们通过自定义活动接入了企业微信public class WeChatNotifyActivity : Activity { protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var message context.GetInputstring(); await _wechatService.SendAsync(审批待办, message); } }然后在流程中这样调用Start - 审批节点 - WeChatNotify - 结束4. 性能优化从玩具到生产级的跨越当流程实例超过1000个时我们遇到了这些性能瓶颈优化前后对比指标优化前优化后流程启动耗时1200ms300ms状态查询速度800ms150ms并发处理能力10请求/秒50请求/秒关键优化点为WorkflowInstance表添加复合索引使用Redis替代内存缓存批量处理历史数据归档// Redis配置示例 services.AddStackExchangeRedisCache(options { options.Configuration localhost:6379; }); services.AddElsa(elsa elsa .UseRedisCacheSignal());现在系统稳定运行8个月处理了超过4200个审批实例。最让我意外的是市场部的同事居然自己配置出了客户拜访报销流程——完全没找技术部帮忙。