Workflow Core + asp.net core 5.0 实现简单审批工作流

我们知道企业业务系统到处都可以审批工作流的,但也很少有像OA系统一样复杂多级多条件的审批工作流需要设计,所以我们需要一个轻量级的容易上手的workflow框架,通过GitHub,我发现danielgerlag/workflow-core 就非常合适,我下面我通过自己的一个开源项目利用Workflow core开发了一个文档审批工作流的原型,也算是我开源项目中的一个重要模块

什么是Workflow Core

eb6b52b866dbd8b9c7302360165f6569.png

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的框架
05205bd5289e419381d294470ed747bd.png
分5个步骤

  1. InitialStep 初始化 发邮件通知审批人有新的请求

  2. UserTask 等待接收审批结果

  3. ApprovedStep 审批通过 发邮件通知申请人审批通过

  4. RejectedStep 被拒绝 发邮件通知申请人已被拒绝

  5. CancelStep 审批超时 发邮件通知申请超时被取消

InitialStep 定义

重点:initialStep 发邮件的内容是从外部输入的,因此这里的Input方法就是说明step是怎么接收输入参数的,Output表示输出把这个step执行的结果输出到外部
每一个Step就相当于是一个独立的执行单元,参数和结果的输入/输出,全靠input/output两个方法。
515d90290ba22a70e89d0fe8cb3c6cd9.png

UserTask / WithOption 这是 HumanWorkflow 扩展的方法用户接收外部事件,这里就是人工提交审批结果

cb8d44025836b31cbafe00ef31562a42.png

ApprovedStep 发邮件通知申请人

f3e2adcaa97854eda754dbf4b8e07f6d.png

RejectedStep / CancelStep 功能和ApprovedStep 一致

c0b14832c6791690f97f195b2ab3d46f.png

运行看一下效果

当用户上传新的文件,就会开启一个新workflow,审批人会收到邮件通知.
4601e548b81ff0ee5a862a5555b064da.png
因为超时流程已经结束
72630b3fd55d78b5278bc90362fd4faf.png
OK,一个简单的workflow就完成。

最后

如果你有什么问题可以留言告诉我
源代码库和测试环境
关于这个项目详细介绍一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目)
RazorPageCleanArchitecture :https://github.com/neozhu/RazorPageCleanArchitecture

Demo
喜欢这个开源项目请给的星星,谢谢

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

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

相关文章

超1亿人选择朋友圈三天可见,背后的原因值得深思

全世界只有3.14 % 的人关注了爆炸吧知识每次翻看刚加好友的朋友圈时,都会对 ta 产生直观的判断。如果朋友圈很丰富,往往会觉得 ta 很有趣,会迫切想要和 ta 链接,而看到某些很单调的朋友圈,根本就没有深入沟通的欲望。真…

基于HTML5手机上下滑动翻页特效

基于HTML5手机上下滑动翻页特效。这是一款手机移动端触屏滑动翻页代码下载。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <section class"u-alert"><img style"display:none;" src"images/loading_larg…

一寸照纯红色底图片_和记场下载

新能的事普及棘手源汽依然情车的是件&#xff0c;为王花燃油但和比车相&#xff0c;为王花底解电池和记场下载在没决续基础建设高额问题航、有彻以及前充电成本&#xff0c;它的体量不大依旧&#xff0c;新能形成正在逐渐之势推广尽管局部源汽全球车的所以。第一直接兼老个家话…

学点css基础

中午时间学点css&#xff0c;附带http://www.w3cschool.cc/css/css-tutorial.html这个链接&#xff01; 中午的时间学了这些东西&#xff01;如下图: 附带代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset&quo…

套套原来是这样装袋的,40个机械动图看懂好像并不容易。。。

今天咱们来多方位的展示机械的魅力1、真在的柔性自动包装线&#xff0c;可以同时实现一条线上多种不同物体的包装&#xff1a;好强大&#xff0c;美中不足的是没有防震包装&#xff0c;容易压坏商品。另外从视频上可以看出来纸板和物品一块出来&#xff0c;纸板出来时已经裁剪好…

云原生开发框架dapr环境搭建:CLI安装和初始化

dapr 是微软的一个云原生&#xff08;Cloud Native&#xff09;开源项目&#xff0c;英文全称&#xff1a;Distributed Application Runtime&#xff0c;中文要翻译的话就是&#xff1a;分布式应用运行时。也就是一个运行时框架&#xff0c;面向云原生架构。dapr官网地址&#…

java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序

在这篇文章中&#xff0c;您将学习如何使用Java对Map按照键或值进行排序。前几日有位朋友面试遇到了这个问题&#xff0c;看似很简单的问题&#xff0c;但是如果不仔细研究一下也是很容易让人懵圈的面试题。所以我决定写这样一篇文章。在Java中&#xff0c;有多种方法可以对Map…

沙漠上不小心挖了个洞,让这个地狱之门般的巨坑,燃烧了50年

全世界只有3.14 % 的人关注了爆炸吧知识在土库曼斯坦的卡拉库姆沙漠深处&#xff0c;有一个神奇的巨坑&#xff0c;直径约为70米&#xff0c;它无论白天还是黑夜&#xff0c;永远都在燃烧。这个坑的周围一片荒芜&#xff0c;坑里也没有任何明显在助燃的东西但坑内燃烧的大火近5…

不同用户同时并发测压_简单聊聊吞吐量(TPS)、QPS、并发数、响应时间(RT)概念...

1、 响应时间(RT) 响应时间是指系统对请求作出响应的时间。直观上看&#xff0c;这个指标与人对软件性能的主观感受是非常一致的&#xff0c;因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能&#xff0c;而不同功能的处理逻辑也千差万别&…

读《沟通的方法》

众所周知&#xff0c;沟通在工作和生活中是一项非常重要的技能&#xff0c;但很多人却用不好这项技能&#xff0c;最近中秋假期&#xff0c;看完了得到 CEO 脱不花写的《沟通的方法》&#xff0c;觉得很有收获。脱不花没有上过大学&#xff0c;能有今天的成就&#xff0c;超强的…

STP的初使化过程

STP初使化过程分为网桥角色(根网桥,非根网桥)的确定和端口角色(根端口&#xff0c;指定端口,阻塞端口)的确定&#xff0c;最终端口状态(稳定状态有blocking&#xff0c;forwarding)确定后&#xff0c;树就形成了。 STP端口状态的改变依赖于端口角色的改变和计时器的超时&#x…

收藏!这10部关于数学的顶级纪录片,告诉孩子数学跟枯燥不沾边!

全世界只有3.14 % 的人关注了爆炸吧知识学好数学&#xff0c;必须从娃娃抓起&#xff01;数学是人类的高级思维活动&#xff0c;越往顶层走&#xff0c;需要的各种思维能力就越多。所以&#xff0c;要想孩子数学好&#xff0c;首先要帮他“打牢思维的地基”。怎么打&#xff1f…

不确定规划及应用代码_性能测试划分之应用领域

性能测试划分性能测试划分有很多种&#xff0c;测试方法也有很多种&#xff0c;更确切的说是由于测试方法的不同决定了测试划分的情况&#xff0c;但在测试过程中性能测试的划分没有绝对的界限&#xff0c;常用的有压力测试、负载测试和并发用户测试等。性能测试的方法主要包括…

使用SysPrep制作Windows2008系统映像

Windows2008及R2的Sysprep程序位于C:\Windows\System32\Sysprep目录下。 前几天在做实验环境的时候发现一个奇怪的问题&#xff0c;成员服务器加入域时&#xff0c;提示加入域成功&#xff0c;但是本地管理员组里没有Domain Admins组&#xff0c;而且将域帐户加入本地管理员组时…

老师“鬼话”全曝光!哈哈哈哈哈全国的老师都这样吗?

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;少女兔&#xff08;ID&#xff1a;iiilass&#xff09;完来源&#xff1a;少女兔&#xff08;ID&#xff1a;iiilass&#xff09;作者 | 兔姐&#xff0c;宇宙疼老婆协会VIP会员&#xff0c;超人气美女漫画师&#xff0c…

需求分析 应该先写业务还是功能_一个套路,拆解常见数据分析需求

现实与Kaggle的区别现实环境的数据分析工作和Kaggle题目之间&#xff0c;最大的区别在于kaggle上的问题往往非常清晰。预测类问题&#xff0c;你只需要把预测做的足够准确就能拿高分。但在实际的业务环境中&#xff0c;你做了一个很牛逼的预测模型&#xff0c;换回来的只是业务…

jQuery EasyUI API 中文文档 - 链接按钮(LinkButton)

LinkButton 链接按钮用 $.fn.linkbutton.defaults 重写了 defaults。用法示例1. <a href"#" id"btn" iconCls"icon-search">easyui</a> 1. $(#btn).linkbutton({ 2. plain:true 3. }); 4. $(#btn).linkbutton(disable); …

10张劲爆眼球的科学动图

全世界只有3.14 % 的人关注了爆炸吧知识气球遇到橙皮会是这样的蚊子是这样吸血的&#xff0c;看着就痒蚊子是这样吸血的&#xff0c;看的浑身发痒显微镜放大看蚊子的利器&#xff0c;蚊子嘴魔术沙强磁铁其实是很危险的物品&#xff0c;携带两块以上的千万要注意全自动显微注射&…

ajax格式

2019独角兽企业重金招聘Python工程师标准>>> $.ajax({ url: "http://www.hzhuti.com", //请求的url地址 dataType: "json", //返回格式为json async: true, //请求是否异步&#xff0c;默认为异步&#xff0c;这也是ajax重要特性 data: { …

java threadsafe 注解_Java 注解详解

什么是注解Annotation 中文译过来就是注解、标释的意思&#xff0c;在 Java 中注解是一个很重要的知识点&#xff0c;但经常还是有点让新手不容易理解。而新手很难理解的主要原因是一些技术文档里的专业术语和名词不太好理解&#xff0c;比如&#xff1a;Java 注解用于为 Java …