前言:会签和加签是常见审批流程模式,在引擎中,对这两种流程模式做了分别定义和实现,其中也用到了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. Educational Codeforces Round 3 E. Minimum spanning tree for each edge (最小生成树+树链剖分)

    题目链接:http://codeforces.com/contest/609/problem/E 给你n个点,m条边. 问枚举每条边,问你加这条边的前提下组成生成树的权值最小的树的权值和是多少. 先求 ...

  2. Protobuf一键生成代码bat文件

    最近在摆弄Unity的Socket,需要用到Protobuf,一般都会有多个协议文件,所以研究了下bat的批处理,下面给出批处理文件代码: @echo off ::协议文件路径, 最后不要跟“\”符号 ...

  3. MsSQL的游标的综合运用

    USE [ChiefWMS]GO/****** Object: StoredProcedure [dbo].[WMS_Check] Script Date: 04/05/2016 09:51:13 * ...

  4. Visifire的一些使用心得

    1.如何让图表的Y轴不从0开始显示:有时一系列的数据差别很小,如果从0开始显示,在Y轴上,会一堆数据都堆在某一个区间.例如期货的蜡烛图.将ViewportRangeEnabled设为true即可解决此 ...

  5. VS~单步调试DLL

    有时我们从第三方下载DLL库之后,在使用VS进行调试时还是很麻烦的,现在我总结一下,在开发过过程中调试DLL的方法,希望对各位在开发中有帮助. 1 VS下载插件.Net Refector 2 引用你的 ...

  6. 看京东如何把Intel RealSense技术用在物流上

    提起Intel RealSense 3D 深度摄像头,总是离不开无人机.机器人等前沿硬件产品,比如 CES 2016 上让人眼前一亮的自动避障无人机Yuneec “台风 H”,Segway.Nineb ...

  7. Spring的DataSource配置、将Hibernate配置所有写到Spring配置

    DataSource能够集中管理数据库连接,降低维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有非常多其它的如c3p0,jdbc,j ...

  8. oracle if then else

    语句一: IF-THEN IF 条件 THEN 运行语句 END IF; 语句二: IF-THEN-ELSE IF 条件 THEN 运行语句 ELSE 运行其它语句 END IF; 语句三: IF-T ...

  9. 在mac下安装jdk1.7(转)

    转自:http://vela.diandian.com/post/2012-01-06/15379924 最近呢,想玩玩jdk1.7,不过mac平台下的jvm一直都是Apple自己改的,所有有些麻烦. ...

  10. mydumper原理2

    使用mydumper备份发生Waiting for table flush,导致所有线程都无法读和写 版本 mydumper 0.9.1OS centos6.6 X86_64mysql 5.6.25- ...