随着互联网发展越来越快,越来越多的办公,由纸制开始向电脑发展.而以前通过纸制的单据,也逐步搬到了电脑上,由计算机软件操作完成.由于某些流程不能由单人完成,必须由多个人协作完成,工作流组件由此而生.
工作流组件用于解决由多人协作,办理时间无法确定的流程.如OA系统中的发文和收文流程,即是工作流组件典型的应用
基于工作流组件的系统,如OA办公自动化系统,审批系统等.本组件特别针对中国大陆政府机构的OA,审批系统所开发
Net程序开发员
NetFramework4.0及以上
适用于WebForm,WebMVC和WinForm场景使用
组件不提供安装程序,只以DLL文件方式提供.DLL文件列表如下
文件名称
描述
QH.Core.dll
核心基类.提供各组件接口和实现工厂,包含各类通用方法,常用枚举等
QH.Component.DataBase.dll
数据库服务组件,基于ADO.Net,使用ORM交互
注:基于IDataBaseService接口开发,用户可直接继承此接口,另外单独开发
QH.Component.Permission.dll
权限组件,提供组织机构,角色和用户,以及三者关系查询服务(注:未提供新增,删除和修改操作)
注:基于IPermissionService接口开发,用户可直接继承此接口,另外单独开发
QH.Component.Workflow.dll
工作流组件,核心服务.提供获取模板信息,流程实例流转等
注:可重载接口类中部分方法,由用户自行定制功能
QH.Component.Workflow.Persistence.dll
工作流组件,持久化服务.提供工作流模板增删改查等服务.并包含测试DEMO页面
EmitMapper.dll
第三方DLL文件引用
Newtonsoft.Json.dll
WeifenLuo.WinFormsUI.Docking.dll
第三方DLL文件引用,WinForm场景使用
在准备使用的Net项目中,直接引用上述8个DLL文件即可.注Net项目类库版本,要求4.0及以上
l 模板
通过模板设计器制作数据,由多个环节根据业务流向组成,流程实例即是根据模板发起而来
l 模板版本
模板是区分版本的,发起时必须是最大版本.注:若模板历史版本的流程实例还未流转完成,可继续流转,没有影响
l 流程实例
通过发起模板实现.一个模板可以发起多条流程实例,一个流程实例只依附于一个模板
l 环节实例
一个流程实例由多个环节组成,每个环节均是一条数据.这条数据就是环节实例数据.环节实例数据可显示此环节运行状态,如待办,已办.还可查找此环节开始办理时间等
l 审批意见
记录环节流程实例由哪些人办理,同时,记录哪些人真正办理以及办理时间等
l 子流程
本身即是流程实例,但其必须依附于其他某条流程实例.即是在流程实例某个环节中发起模板,由此条模板发起的流程实例即是子流程
l 并行分支
并行分支是相对单条分支来说.模板的某个环节,可能流向多个分支.此时有2种情况.一种情况是这些分支中只允许一个分支流转通过.另一种情况是这些分支均要流转.前者情况是单条分支,后面一种情况就是并行分支
l 办理状态
n 待办:wait
表示此环节处于待办状态,等待用户办理
n 已办:end
表示此环节已经办理完成.
n 子流程:child
表示此环节存在子流程正在办理,并且主流程此环节需等待子流程办理完成以后,才允许继续流转
n 挂起:handup
表示此条流程实例处于挂起状态.处在此状态,不会出现在用户待办和已办列表中.需要执行取消挂起操作,才能继续流转
n 未办:prewait
是指环节的处理决策是任务共享时.所谓任务共享,是指某个环节的所有办理人均要办理完成以后,此环节才允许向下流转.当第一个用户办理完成后,即生成将要流转的环节数据,其状态即为prewait.表示虽然已经生成,但还没有开始使用.需要等待所有用户均办理完成后,此环节数据的状态才修改为wait,表示待办
n 备份:backup
系统使用时间越长,制作的模板数据越多,生成的流程实例数据也会越来越多.在获取用户已办数据时,数据也会越来越多,而有些数据已经办理完成很久,不需要在已办列表中出现,可执行备份流程实例功能,将状态置为backup.表示不再用户的待办或已办列表中出现
l 用户办理状态
n 待办:waitdeal
是指需要由用户办理的数据的状态.在环节的审批意见表中使用
n 在办:dealing
是指会签操作中,某些人已经办理完成,但另一些人还没有办理.此时,这些用户的状态即是在办状态,表示正在办理,还未全部结束
n 已办:dealed
是指需要用户办理的数据,已经办理完成.即在用户已办数据中能查找到的状态
n 挂起:handup
表示此条流程实例处于挂起状态.处在此状态,不会出现在用户待办和已办列表中.需要执行取消挂起操作,才能继续流转
n 备份:backup
系统使用时间越长,制作的模板数据越多,生成的流程实例数据也会越来越多.在获取用户已办数据时,数据也会越来越多,而有些数据已经办理完成很久,不需要在已办列表中出现,可执行备份流程实例功能,将状态置为backup.表示不再用户的待办或已办列表中出现
l 处理决策
n 第一用户
表示环节的办理用户中,只要有一个用户办理完成,此环节即可允许向下流转
n 任务共享
表示环节的办理用户中,必须所有用户都办理完成,此环节即可允许向下流转
l 获取所有模板信息
获取数据库表中存储的所有处于在用状态的工作流模板信息.这些模板不区分版本.通过此方法,可以查询模板的发起时间,操作时限等信息.但并不包括模板其他信息,如:环节列表,发起权限,环节办理用户等
l 获取所有模板,最大版本号信息
基于获取所有模板信息方法.在通过此方法获取的数据中,只获取某个模板ID的最大版本号数据.因为在执行发起操作时,发起的永远是处于最大版本的模板
l 获取单条模板信息
根据模板ID和模板版本,获取此条模板信息.但并不包括模板其他信息,如:环节列表,发起权限,环节办理用户等
l 获取单条最大版本号信息
根据模板ID,获取此模板ID的最大版本号
l 获取模板所有环节信息
根据模板ID和版本,获取此模板的所有环节信息.包括环节ID,是否首末环节,处理决策,办理时限及单位等
l 获取单条模板环节信息
此方法是获取单条模板环节信息,根据模板ID,版本和环节ID.均
l 检测用户是否允许发起模板
用户发起模板时,需判断此用户是否具有发起此模板的权限.根据模板ID,版本和发起用户ID
l 删除模板
删除模板信息,根据模板ID和版本.此方法是将模板所有信息全部删除.包括模板环节,环节分支,办理权限等
l 导出模板.导出文件类型包括SQL和XML
导出模板信息,根据模板ID和版本.导出模板包括模板所有信息.如环节信息,发起权限等.此方法适用于在不同数据库间实现数据共享
l 导入模板,导入文件类型包括SQL和XML
导入模板信息,根据SQL或XML文件. 导入模板包括模板所有信息.如环节信息,发起权限等.此方法适用于在不同数据库间实现数据共享
l 获取模板环节流转分支列表
根据模板ID,版本和环节ID,获取此环节将要流转的可能环节.供用户在UI页面中选择.注:若环节是末级环节,则此环节不存在分支列表
l 获取模板发起权限列表
根据模板ID和版本,获取此模板的发起权限列表.注:此方法的返回信息并没有转为最终的用户列表,而是返回模板配置时的办理信息.可能是组织机构,角色或用户
l 获取模板环节办理权限列表
根据模板ID,版本和环节ID,获取拥有此环节办理权限的权限列表.注:此方法的返回信息并没有转为最终的用户列表,而是返回模板配置时的办理信息.可能是组织机构,角色或用户
l 获取模板环节子流程列表
根据模板ID,版本和环节ID,获取在此环节中允许发起的子流程信息.此信息在UI页面中展示,供用户选择是否发起
l 获取模板环节办理用户列表
根据模板ID,版本和环节ID,获取拥有此模板环节办理权限的用户列表
l 追加
流程实例由环节A的办理用户a,发送给环节B的b1,b2,b3共三个用户办理,后发现用户b4也需办理.此时,可以用户a可以通过追加命令,将用户b4追加至环节B的待办信息中.
追加操作的条件是A环节处于已办(end)状态和环节B处于待办(wait)状态.
l 回退
流程实例由环节A发送至环节B以后,B发现由于某些原因,需将此实例再回退至A环节.调用此命令可实现.
同时,回退还支持另一种场景:子流程回退.如:在流程实例A的环节a中,发起了一条子流程C(此时,环节a的状态是child,表示正在有子流程流转),子流程正在环节c处.此时,c回退有2种情况,情况1是退回至C流程中c的上一环节;情况2是退回至主流程A的环节a处,即a环节的状态由child修改为wait,表示子流程从未发起过.
注1:此业务场景较少出现,暂不支持
注2:回退功能在并行分支中,处理非常复杂,与业务需求关联非常大,需根据行业和客户专门分析
l 备份
随着系统的使用时间变长,生成的流程实例数据会越来越多.这样,在查询用户已办数据时,对性能会有所影响.因此,在流程实例流转完成后,通过此命令,将流程实例状态修改为backup.表示不显示在用户已办数据中.
注:此业务场景较少出现,暂不支持.目前支持将流程实例状态直接置为backup
l 撤消
流程实例由环节A通过用户a流转至环节B,并且B环节由b1,b2,b3,b4,b5共5个人办理.此时,用户a发现b4和b5是不应该发的,需要将其删除.此时 ,用户a可以在已办页面中执行撤消功能,将B环节的用户b4和b5撤消.
撤消支持多种情况,如下所示
情况1:环节A发送至单个环节B,并且有4个用户待办且均没有办理.任意撤消其一,则只删除审批意见数据;如果4个用户全部撤消,则直接将环节B删除,环节A重新处于待办状态
情况2:环节A发送至单个环节B,并且有4个用户待办且其中一个用户已经办理.此时,不允许将余下未办理的用户撤消,必须保证至少有一个用户没有办理.
l 委托
委托是模板级别的委托.是指某模板环节中的办理用户A,由于某些原因无法办理,此时,可以通过委托将用户A的办理权限交由用户B.由用户B代替用户A,完成此环节的操作
执行委托操作,委托所有者用户A和委托用户B在待办信息中均会收到信息.如果委托所有者要办理,会提示此办理件已经被用户B代办,若想办理,请先取消委托
l 撤消委托
撤消委托,是指某条流程实例的环节,存在委托关系.即委托所有者A和委托用户B的待办信息中均可办理,此时,用户A想办理,需执行此功能,将委托关系取消,这样用户A才可以办理.同时,用户B的待办中的数据也随即删除
l 置换
某条流程实例的环节A,有5个待办用户,其中包括用户a,并且a用户未办理.此时,发现用户a其实并不需要办理,应该由用户b办理.使用置换功能,可以将用户a替换为用户b
注:此命令要求待置换的审批意见数据必须是待办状态
l 复制
复制流程实例,是指将某条流程实例数据,完全挎贝,生成新的流程实例数据,并且其环节轨迹,监控,业务表单等其他信息均相同
注:此功能可用于调试使用
l 完结
某条流程实例的环节A,有5个待办用户,其中包括用户a.用户a发现此环节的待办数据,他本身并不需要办理,可执行此命令,将自己的这条待办数据完结,即将数据状态修改为dealed,表示已经办理完成
l 取消完结
取消完结与完结正好相反,即可已经处于dealed状态的数据,再修改为wait状态.表示此用户
l 删除
即删除流程实例.删除之前,将流程实例数据持久化至数据库表中,方便以后查看,同时,在流程监控表中记录一条记录,表示此条流程实例由XX用户删除
l 归档
即将流程实例状态由待办wait状态,修改为已办end状态.此功能是正常操作,要求流程实例环节处于最末一个环节
l 强制归档
强制归档与归档功能相同,也是将流程实例状态置为已办end.不同之外在于,流程实例无论在哪个环节,由哪些人办理,均可以直接归档
l 挂起
挂起是指用户的待办数据,由于某种原因,需要停止一段时间不用办理.也就是不需在用户待办列表中出现.执行此功能,此条数据状态将修改为handup,需要调用其他方法才可以获取到
l 取消挂起
取消挂起,与挂起是互逆操作.用于将处于挂起状态的数据,修改为正常状态
l 流转
流转,是指流程实例根据模板配置好的环节走向,逐步向前推进,直到流程实例流转完成
l 跳转
跳转,相当于特殊的流转.流转是根据模板配置好的环节走向流转.跳转,可以不依赖于模板,任意流转.即可以跳转至已经流转过的环节,也可以跳转至没有流转过的环节.是一种特殊情况的流转操作
l 发起
发起,是指根据模板信息,创建一条流程实例数据.流程实例数据,会根据此模板的环节配置信息向下流转,直接流转完成
l 发起子流程
发起子流程,与发起功能相同,唯一的区别是发起子流程,必须在另一个流程实例的某个环节发起.此流程实例称为主流程.子流程发起后,有2种情况.情况1是各自流转,互不干扰.情况2是主流程必须等子流程流程完成后,主流程才允许继续向下流转
l 获取单条模板详细信息
此方法是获取单条模板所有信息.即除获取模板信息外,还获取环节列表,发起权限,办理权限等关于模板的所有信息
l 获取单条流程实例详细信息
此方法是获取流程实例所有信息.即除获取流程实例信息外,还获取环节实例数据及每个环节的审批意见数据,监控数据,表单数据等
l 获取用户拟办数据列表
此方法用于获取某个用户允许发起的模板列表
l 获取用户待办数据列表
此方法用于获取某个用户处于待办状态的审批意见数据. 可根据模板ID,版本,流程实例ID等参数查询
l 获取用户已办数据列表
此方法用于获取某个用户已经办理过的审批意见数据.可根据模板ID,版本,流程实例ID等参数查询
l 获取用户挂起数据列表
此方法用于获取某个用户处于挂起状态的审批意见数据.可根据模板ID,版本,流程实例ID等参数查询
l 获取流程实例监控数据
获取某条流程实例详细信息,根据流程实例ID.详细信息包括流转环节轨迹,环节对应业务表单,环节执行命令操作.是否存在挂起操作等
l 跟踪模板信息
根据模板ID和版本,获取此模板的详细信息.此方法可用于调试
l 跟踪流程实例信息
根据流程实例ID,获取此流程实例的详细信息.此方法可用于调试
l 过滤用户列表,根据登录用户组织机构
在配置模板环节办理用户信息时,可以将不属于同一组织机构的用户一并选中至某个组织机构或角色,而在获取供UI页面选择办理人时,可以根据当前登录用户所在组织机构,过滤出与他属于同一个组织机构的用户列表,从而增加了灵活性
l 过滤用户列表,根据登录用户角色
在配置模板环节办理用户信息时,可以将不属于同一角色的用户一并选中至某个组织机构或角色,而在获取供UI页面选择办理人时,可以根据当前登录用户所在组织机构,过滤出与他属于同一个组织机构的用户列表,从而增加了灵活性
l 删除模板下所有流程实例数据
根据模板ID和版本,将属于此模板的流程实例全部删除.此方法适在系统初始化时使用
l 检测用户是否为最后一个办理用户
配置模板环节的办理用户,有2种处理决策.第1种是第一用户,即只有其中任意用户办理完成,此环节就允许流转.第2种是任务共享,即配置的所有用户都办理完成,此环节才允许向下流转.此方法可以判断某个用户是否为任务共享情况下的最后一个用户.因为最后一个用户办理完成后,环节就流转
l 检测环节是否模板末环节
模板环节中,必须设置一个末环节,表示是可以归档的环节.在此环节的操作中,只包括归档操作
l 模板增删改查
提供WinForm场景和WebForm场景,两套模板设计器.设计器操作手册参见另一文档.不在此处描述
l 模板委托增删改查
目前仅提供WinForm场景的委托增删改查操作.在实际使用过程中,委托操作更多是由客户自已维护.因此UI页面由客户自行定制.此组件已提供操作接口,实现增删改查
l 工作流日历增删改查
此组件包含的引擎中,包括定时服务引擎.定时服务引擎,用来处理在一段时间内,可以默认执行的流程实例.如:流程实例当前处于环节A,其默认流转至环节B.如果一段时间内环节A的办理用户没有操作,则通过定时服务引擎,可以将此流程实例由环节A直接流转至环节B,操作信息
l 工作流选项增删改查
工作流选项,存储组件的各种配置信息.如工作流模板缓存更新时间,数据库版本等.
l 默认审批意见增删改查
在流程实例流转过程中,某个环节的流转,都需要办理用户操作.在操作过程中,用户需要对表单做出一些回应,如:同意此流程继续流转,或将将此流程退回.此功能是记录办理用户经常使用的审批意见.如:已阅,同意,不同意等
参考文档: QH.核心类库.chm和QH.组件.工作流.chm
l 问题1:功能是否固定?
答:不固定.上述功能是根据某个行业业务,甚至是某个客户定制开发,在此基础上,抽象出此组件.若用到其他行业里,功能会有所微调.以回退功能为例,客户1要求流程实例环节A中,允许回退的环节是流转至此环节的所有环节;而客户2要求只允许环节A回退至此环节的上一环节.因此,像这种需微调的功能,可以根据不同客户定制开发
l 问题2:是否提供图形化模板设计
答:目前正在开发阶段,随下一版本正式开放.时间待定
l 问题3:底层不支持某功能点,如何处理?
答:在WorkflowService类中,某些方法是虚拟的,这意味着子类是可以重载某些方法,这样就可以解决底层不支持某功能的问题