我们知道企业业务系统到处都可以审批工作流的,但也很少有像OA系统一样复杂多级多条件的审批工作流需要设计,所以我们需要一个轻量级的容易上手的workflow框架,通过GitHub,我发现danielgerlag/workflow-core 就非常合适,我下面我通过自己的一个开源项目利用Workflow core开发了一个文档审批工作流的原型,也算是我开源项目中的一个重要模块
什么是Workflow Core
Workflow Core is a light weight embeddable workflow engine targeting .NET Standard. Think: long running processes with multiple tasks that need to track state. It supports pluggable persistence and concurrency providers to allow for multi-node clusters.
这里我简单的说一下我对工作流的理解,一开始对工作流的映像就是审批工作流,一级批完二级,三级流转的审批,中间还有一些判断,比如金额>多少给什么批,而这些金额,判断逻辑最好是可配置化的,配置最好是图形化的,想怎么配都可以。但实际情况似乎并不能用简单的方式实现上述的功能,当然有类似的成熟的工作流引擎可以做到比如国内的泛微OA,还有一个开源的Elsa,而我想要的还是最简单的最快速,能满足一些简单的业务场景就可以了。 让我们开始吧。
新建一个审批工作流
业务场景:
A用户(neozhu@126.com)上传附件,发起一个新的workflow给B用户(new163@163.com)审批,如果5分钟内没有审批则系统自动取消该审批请求。
这里发起新的请求需要触发发邮件通知B用户有新的审批请求,B审批完成,需要发邮件通知A审批结果。
定义一个Workflow
参考上面的业务场景用代码来定义一个workflow的框架
分5个步骤
- InitialStep 初始化 发邮件通知审批人有新的请求
- UserTask 等待接收审批结果
- ApprovedStep 审批通过 发邮件通知申请人审批通过
- RejectedStep 被拒绝 发邮件通知申请人已被拒绝
- CancelStep 审批超时 发邮件通知申请超时被取消
InitialStep 定义
重点:initialStep 发邮件的内容是从外部输入的,因此这里的Input方法就是说明step是怎么接收输入参数的,Output表示输出把这个step执行的结果输出到外部
每一个Step就相当于是一个独立的执行单元,参数和结果的输入/输出,全靠input/output两个方法。
UserTask / WithOption 这是 HumanWorkflow 扩展的方法用户接收外部事件,这里就是人工提交审批结果
ApprovedStep 发邮件通知申请人
RejectedStep / CancelStep 功能和ApprovedStep 一致
运行看一下效果
当用户上传新的文件,就会开启一个新workflow,审批人会收到邮件通知.
因为超时流程已经结束
OK,一个简单的workflow就完成。
最后
如果你有什么问题可以留言告诉我
源代码库和测试环境
Github
关于这个项目详细介绍一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目)
RazorPageCleanArchitecture
Demo
喜欢这个开源项目请给的星星,谢谢