这是我目前正在进行的工作,记录下来顺便理理思路

背景:

我于今年入职这家公司,由于历史等原因,公司内部软件系统处于没有软件架构的状态,同时待开发的功能较多,其中工作流审批部分使用的引擎是一个叫Captaris的完全找不到任何资料,且其开发者疑似倒闭,使用它的原因是因为集团在使用,而开发时没有设计人员,所以程序员没细想就用了,同时由于没有任何资料,这个工作流引擎用的面目全非没有给开发带来任何好处,并且无法完成有些特殊需求。

针对这种情况,当时决定将这种开发方式废弃,短时间内封装一个可以完成支持当时审批需求的单据流转功能,当时用了5天(非常简陋),但至少开发效率提高了不止一倍;但是,原本运行着的流程要一点一点的平稳移动过来,同时有些技术以外的原因,原来的个别流程不会移植,面对这种情况,我采用了依赖注入的方式,把原来的工作流封装了下和我新做的这个借助配置文件在不同的流程采取不同的注入模块,让流程外部完全不关心流程内部的实现情况,方面以后会遇到的各种变动。

下面进入正题:

来了不能拒绝的需求,1.审批后要发邮件,可以通过邮件进行审批;2.审批同时要把下一步的审批人列出来(这个要特殊说一下,我的审批流,下一步的审批人是不确定的,根据配置和当前业务数据条件来决定下一步审批人)等等;

实现这类需求,我有两种选择:一是在流程内部实现,但是这样会导致业务与流转混杂,流程流转相关业务与流转的是一定要分离,而且这种业务在我的公司变化的情况很多,开闭原则就不多说了;二是在流程外部实现,当然第一种PASS了我只能选这个了。

在流程外部实现,面临的问题是:1.依赖注入了流程实现,所以流程过程中的信息完全获取不到;2.两种流转机制差异极大,难以统一,无法统一返回信息的结构。

第一个问题的解决办法,既然外部取不到,理所当然会想到,将外部需要流传过程信息的方法传给工作流的实现模块,由工作流去执行,比如在审批结束时的后置事件:

//定义一个委托public delegate void ExecutionEndEventHandler//在工作流实现部分提供外部一个注册的方法public override void RegisterExecutionEndEvent(Delegate executionEnd, string userID){if (executionEnd != null && DoRoleValidate(userID)){process.RegisterExecutionEndEvent(executionEnd);}}public void RegisterExecutionEndEvent(Delegate executionEnd){exec.ExecutionEnd += (WorkFlowEvent.ExecutionEndEventHandler)executionEnd;}//当外部需要时,只需要将事件注册进来即可WorkFlowFactory.RegisterExecutionEndEvent(new WorkFlowEvent.ExecutionEndEventHandler(OnExecutionCompleted), "userID ");

  

第二个问题,费了些脑筋,最开始用了嵌套hashtable的方式实现的,但是始终感觉不舒服,看着就各种不舒服,最后终于在群里朋友深蓝医生的提醒下,想起微软还有个.Data的命名空间,有个东西叫DataSet,它可以返回任意的结构,可结构的信息,这个…,着实太久不用下意识的就忘记了。

public void OnExecutionCompleted(DataSet process){DataTable work = process.Tables["work"];
}

  

至此,大体思路就确定下来了,剩下的比如注册事件的权限,比如可以返回的信息控制等等,都是细节,我去鼓捣了,再见!

转载于:https://www.cnblogs.com/saaav/p/3384337.html

流程流转相关业务与流转的分离相关推荐

  1. 状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎

    理念 - 反对用模板,用流程引擎实现业务 先强调一点. 业务系统, 要学习 ,反对用模板,用流程引擎实现业务. 除非有人参与,必须用流程引擎,不然不要用状态机or流程引擎, 不要用. 但是要学习流程引 ...

  2. 分析方法的基础 — 4. 业务与管理的分离,应用案例

    通过对研究对象的拆分,建立了业务与管理的分离原理概念,这个分离概念在实际的需求分析和系统设计中具有非常重要的实用价值.下面试举几例来说明分离原理概念的应用场景: 1)业务功能(界面)设计的应用:业务字 ...

  3. 流程银行柜面业务系统规划

    描述:流程银行柜面业务系统优化了柜面业务流程,简化前台业务手续,增强后台处理能力,分解业务环节,提高了业务处理效率,方便了柜员操作.这样,柜员就能更好地接待客户,提升柜员和网点的客户服务能力,帮助商业 ...

  4. (3)统一流程管理平台----业务单据与流程的关系

    当我们构建企业信息化系统时,业务单据是我们第一个要梳理的要素.按照业务方向的不同,可以抽象出不同的业务模块来承载业务单据.而流程,大多数人都会关注到常用办公软件OA,OA系统的核心是解决办公自动化问题 ...

  5. 自定义流程,匹配业务需求,还得是专业流程引擎

    编者按:本文阐述了企业流程自定义的意义,并进一步介绍了流程自定义是如何实现的. 关键词:表单设计,流程配置,流程集成,流程测试,流程优化,流程使用,流程监控 自定义流程的必要性 企业发展阶段不同,管理 ...

  6. 【国家局发布】医疗器械注册流程及相关法规大全

    [国家局发布]医疗器械注册流程及相关法规大全 2018-10-06 22:17 医疗器械注册申报流程图 具体流程如下 一.注册申请资料准备 一.注册申报资料依据 <关于公布医疗器械注册申报资料要 ...

  7. 项目总结24:海关179号(实时获取电商平台企业支付相关原始数据)开发流程和相关资料...

    项目总结24:海关179号(实时获取跨境电子商务平台企业支付相关原始数据接入)开发流程和相关资料 欢迎大家留言探讨 1.致谢 感谢:https://blog.csdn.net/ccbox_net/ar ...

  8. “缺陷管理工具”禅道—升华Bug处理流程与相关属性

    "缺陷管理工具"禅道-升华Bug处理流程与相关属性 作为一个软件测试工程师,对缺陷管理工具(缺陷:Bug)的认识和准确操作是有所必要的,缺陷管理工具现在行业中有很多:禅道.QC.C ...

  9. 5G 信令流程 — 5GC 的业务请求(Service Request)

    目录 文章目录 目录 5GC 的业务请求 UE 侧触发的业务请求流程 网络侧触发的业务请求流程 5GC 的业务请求 当 UE 处于 CM-IDLE 或 CM-CONNECTED 时,都可以使用 Ser ...

最新文章

  1. python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
  2. mybatis自动生成代码工具
  3. 001/Docker入门(Mooc)
  4. 用js操作table、tr、td 「字体样式及TD背景图片」
  5. linux tar压缩排除某个文件夹或者文件
  6. 织梦同步静态文件到服务器,某猫织梦插件-织梦dedecms静态文件生成速度的区块插件...
  7. split 将字符串分割成字符串数组
  8. ie8 ajax访问不了https,ie8不支持https协议的api接口么
  9. 双进程的扩展双屏软件的快捷键的设计和使用说明
  10. java删除文件夹部分内容_java 删除文件夹中的所有内容而不删除文件夹本身
  11. 《腾讯产品启示录》学习笔记
  12. 随机数算法 java_最全的java随机数生成算法
  13. springboot做梦网云科技短信业务
  14. html 4种居中方式
  15. Zookeeper-Paxos-屁民的故事-内含视频讲解
  16. Unreal Engine 4 渲染目标(Render Target)教程 之 可交互的草地(上)
  17. VS实现rar格式压缩包的解压详解
  18. 分频器——秒分频、三分频、五分频、任意分频和偶数分频
  19. P02014158 马帅(信息论课程作业)
  20. matlab并行加路径,matlab parfor_matlab 添加到路径_matlab 分布式计算

热门文章

  1. 大楼通信综合布线系统_系统梳理一下综合布线系统的方方面面
  2. python 声明变量类型_每日一课 | Python 检查变量的类型
  3. 【测评】用这款神器2小时就撸完了1天工作量的代码!爽
  4. 爬虫python 科研有用吗_为什么说用python写爬虫有优势?
  5. centos卸载linux里面mysql,熟悉linux-mysql的安装与卸载(centos)
  6. easyui中的datetimebox 只显示年月日_设置Win10任务栏显示星期几方法
  7. html布局overflow,overflow的中文意思
  8. jrtplib 打包做了哪些事_30岁前就实现财务自由的人,都做了哪些事
  9. 博人眼球的 电子苍蝇
  10. FPGA学习之verilog语言入门指导