前言:会签和加签是常见审批流程模式,在引擎中,对这两种流程模式做了分别定义和实现,其中也用到了Workflow Pattern的Multiple Instance(多实例) 。

1. 会签和加签的定义

会签即当前运行节点有多人进行办理,或者可以说当前节点存在多个办理任务。这些任务可以分为两种情况来运行:一种是按顺序进行办理,即串行会签;一种是同时进行办理,即并行会签。

串行会签和并行会签都可以进行通过率的设置,串行会签和并行会签中通过率是按照通过人数或者百分比进行设置,达到通过人数(或者百分比)则该节点办理完成,进入下一个节点。

加签即当前办理节点中需要另外办理人加入时的操作。加签的方式分为三种:前加签、后加签和并行加签。

前加签:即新加入的办理人在发起加签的办理人之前办理。

后加签:即新加入的办理人在发起加签的办理人之后办理。

并行加签:即新加入的办理人和发起加签的办理人同时办理。

前加签和后加签均属于串行加签,按顺序进行办理。在加签中仍然可以设置通过率,由于加签是动态生成任务和节点,所以加签的通过率也需要动态传入。串行加签和并行加签的通过率和会签通过率的设置方式相同。

2. Multiple Instance多实例模式

多实例模式是针对主节点有多个实例节点运行的场景,在会签和加签审批流中,引擎组件采用多实例模式。

3. 会签加签使用说明

 3.1 会签

 3.1.1 流程定义中

<Activity name="任务" id="bb035582-9b73-460a-eaa5-bb3a786f9d3e" code="">

<Description>任务</Description>

<ActivityType  type="TaskNode"  complexType="SignTogether"   mergeType="Parallel"  completeOrder="2"  compareType=”count”/>

……..

</Activity>

说明:

complexType:会签SignTogether或者加签SignForward模式

mergeType:并行Parallel或者串行Sequence模式

compareType:通过人数count或者百分比percentage

completeOrder:通过率,可以是通过率或百分比,由compareType决定

3.1.2 流程转交时对下一步人员进行赋值

(1)    为runner的NextActivityPerformers赋值。

接收人Performers的JSON格式为:{“ActivityGUID”,[{“UserID”:”UserName”}]}。

假设下一步人员有两个,那么以上格式可替换为:{“072af8c3-482a-4b1c-890b-685ce2fcc75d”,[{“01”:”张三”},{“02”:”李四”}]}

将以上结果转换为字典Dictionary<string, PerformerList>并赋值给WfAppRunner对象的NextActivityPerformers属性。例如:

PerformerList p1 = new PerformerList{UserID=”01”,UserName=”张三”};

PerformerList p2 = new PerformerList{UserID=”02”,UserName=”李四”};

Dictionary<string, PerformerList> dict = new Dictionary<string, PerformerList>();

dict.Add(“072af8c3-482a-4b1c-890b-685ce2fcc75d”,p1);

dict.Add(“072af8c3-482a-4b1c-890b-685ce2fcc75d”,p2);

WfAppRunner runner = new WfAppRunner();

runner.NextActivityPerformers= dict;

(2)调用引擎RunProcessApp(WfAppRunner runner)方法送往下一步

串行会签时引擎会按顺序生成办理任务,未办理的人员为挂起状态,待上一步人员办理完成后修改为办理状态,依次类推。

并行会签时引擎生成多人的办理任务,并且状态都为未接收状态,所有办理人员可以同时办理。

 3.2 加签

 3.2.1 流程定义

<Activity name="任务" id="bb035582-9b73-460a-eaa5-bb3a786f9d3e" code="">

<Description>任务</Description>

<ActivityType  type="TaskNode"  complextype="SignForward" />

……..

</Activity>

3.2.3 发起加签

(1)选择加签人员

当该节点处于运行状态时,可以选择加签人员并设置加签通过率进行发起加签。

选择加签人员后,对WfAppRunner对象的NextActivityPerformers属性进行赋值,格式同会签格式。

Runner中DynamicVariables为动态变量,可将通过率赋值给它,比如:

DynamicVariables: {

"SignForwardType":SignForwardBefore,

“SignForwardCompleteOrder”:2

}

参数说明:

SignForwardType:加签通过类型,可分为SignForwardBefore前加签、SignForwardBehind后加签、SignForwardParallel并行加签

SignForwardCompleteOrder:加签通过率,串行加签为通过人数,并行加签为通过百分比

(2)调用引擎SignForwardProcess(WfAppRunner  runner)发起加签

WfExecutedResult runAppResult = _workflowService.SignForwardProcess(runner);

4. 总结

会签和加签的实现是作为引擎组件的高级特性,在解决多人审批场景时,主要涉及到会(加)签的不同子类别,通过率设置等选项。作为企业版的核心功能,为企业客户集成引擎组件,带来了实质的便利。

5. 致谢

本文内容由小组成员青文完成,谢谢她认真细致的工作,给大家奉献了详细的文字内容和代码片段。

Slickflow.NET 开源工作流引擎基础介绍(五) -- 会签加签高级特性介绍的更多相关文章

  1. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务模块的交互

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  2. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  3. Slickflow.NET 开源工作流引擎基础介绍(七) -- 并行分支多实例模式实现

    前言:并行审批是比较常见的流程模式,在工作流模式介绍中,通常是多个分支通过网关(Gateway)来控制实现.默认的分支类型是静态定义好的.本文扩展了并行网关的控制方式,实现了动态多实例的并行分支网关, ...

  4. Slickflow.NET 开源工作流引擎基础介绍(六)--模块化架构设计和实践

    前言:在集成Slickflow.NET 引擎组件过程中,引擎组件需要将用户,角色等资源数据读取进来,供引擎内部调用:而企业客户都是有自己的组织架构模型,在引入模块化架构设计后,引擎组件的集成性更加友好 ...

  5. Slickflow.NET 开源工作流引擎基础介绍(一) -- 引擎基本服务接口API介绍

    1. 工作流术语图示                                              图1 流程图形的BPMN图形元素表示 1) 流程模型定义说明流程(Process):是企 ...

  6. Slickflow.NET 开源工作流引擎基础介绍(九) -- .NET Core2.0 版本实现介绍

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  7. Slickflow.NET 开源工作流引擎基础介绍(八) -- 自动化任务调度实现介绍

    前言:审批流程中常见的都是人工类型任务,但是也会有一些自动化的任务需要定时触发.因此,引擎框架中需要解决掉两个问题:选择合适的任务调度框架,集成新的任务调度模块. 1. 任务调度框架选择 Hangfi ...

  8. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍 (转)

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  9. Slickflow.NET 开源工作流引擎基础介绍(四) -- 多数据库支持实现

    前言:引擎作为中间件集成到用户的项目里面去,针对用户的数据库类型,需要作出SQL部分的分别实现.引擎默认数据库为MS SQLSERVER,同时也支持ORACLE, MYSQL, KINGBASE等不同 ...

随机推荐

  1. Hibernate HQL和原生SQL查询的一点区别

    1.createSQLQuery 1.1默认查询的结果为BigDecimal 1.2通过addScalar("CGD_ID", StandardBasicTypes.LONG)可以 ...

  2. MongoDB学习笔记(一) MongoDB介绍及安装

    转自:http://database.51cto.com/art/201103/247882.htm http://baike.baidu.com/link?url=b6B3dVSCnQauCX-Ep ...

  3. Codeforces Round #329 (Div. 2) A. 2Char 暴力

    A. 2Char Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/593/problem/A De ...

  4. HDU 4588 Count The Carries 数学

    Count The CarriesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  5. Windbg命令

    (1)!runaway命令显示每个线程消费的时间 参考:http://blog.csdn.net/hgy413/article/details/7564252 (2)!wow64exts.sw 关闭6 ...

  6. Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)

    初学JavaWeb开发,请远离各种框架,从Servlet开始.         Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的, ...

  7. socket通信简单介绍

    “一切皆Socket!” 话虽些许夸张,可是事实也是,如今的网络编程差点儿都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间怎样通信,如我们每天打开浏 ...

  8. 关于flash player debugger 无法弹窗报错的解决办法

    第一个是IE的插件, Download the Windows Flash Player 10.2 ActiveX control content debugger (for IE) (EXE, 2. ...

  9. 优秀js插件收藏

    1. 滚动视差效果,类似锤子主页等效果实现 https://github.com/hahnzhu/parallax.js 2. jQuery全屏滚动插件 http://www.dowebok.com/ ...

  10. du 和 df命令的区别(超赞)

    du和df命令都被用于获得文件系统大小的信息:df用于报告文件系统的总块数及剩余块数,du -s /<filesystem>用于报告文件系统使用的块数.但是,我们可以发现从df命令算出的文 ...