Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合
前言: 流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern)。本文的重点就是介绍一种常见的由两种模式组合而成的新模式。
1. 工作流模式基本介绍
关于工作流模式,已经广泛被流程分析和设计人员认可,它非常有助于工作流系统的各类用户对业务过程的理解,也能帮助架构师对引擎功能的开发和扩展。更多工作流模式因为网上已经有比较多的资料,这里就不再详细说明了,比如以下的网络资源供大家学习和了解。
http://www.workflowpatterns.com
2. 工作流模式的组合
工作流模式是为了简化一些常见的业务规则,一些简单的模式大家容易理解,但是也有一些比较复杂的模式,通常就需要产品经理来通过组合的方式定制出来,而且可以作为一种通用的模式进行推广。
2.1 会签
常见的任务节点是一人办理就向下流转,会签是同一任务节点的多人多次审批办理,会签的方式有串行会签和并行会签两类。在Slickflow.Engine实现中,会签模式是按照多实例(Multiple Instance)模式进行实现。会签可以有通过率设置,表示会签任务可以向下流转的一个阈值。

2.2 并行分支容器
并行容器用于动态的多个并行分支的路由模式,相比于固定的分支不同,并行多实例是一种容器类型的模式,容器里面存在多个相同的分支实例运行。这些分支可以是由多个节点组成的一个串行流程片段。

2.3 组合
在实际业务过程中,并行分支容器里面的节点是否可以是会签节点呢?工作流模式的组合正好可以验证和实现这样的业务需求,引擎的目的就是满足客户不断提出的业务功能需求,所以利用并行分支容器和会签两种简单模式组合成一种更加实用的模式,而且可以推广给更多的客户,才是引擎功能持续不断开发的目的。
比如下图所示,小组分配项目,检验员录入和小组汇总审核,构成的流程片段是被包含在并行容器内部,表示是一种动态的流程执行策略,每次流程实例化后,小组的数目是动态变化的,所以不能用固定化的分支来设计流程图。而且检验员录入又是一个会签节点,表示多个检验员在这个任务节点上可以多次处理后,然后在由下一步的小组组长汇总审核。

在用并行分支容器嵌入会签节点的两种模式组合后,就能够顺利解决这样的这样问题。并行分支容器解决了每次小组数目动态变化的问题,而会签节点的处理是不受外部干扰的。所以模式的重新组合,是一种非常值得推广的应用。
3. 应用场景分析
在实际应用过程中,并行分支容器简化了动态分支的表示,在工作流模式中,是允许这种动态类型模式的普通存在,流程的动态响应能够适应业务的动态变化,并行分支容器也是工作流模式最经典的动态模式之一。
4. 快速测试
并行分支容器和会签组合的模式,产生的实例比较多,如果每次不断切换用户身份也是比较繁琐的,此处建议可以使用上一篇博客文章中提到的测试方法进行测试。
Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试和流程图形代码创建介绍
5. 总结
模式组合的产生是业务分析人员对业务过程的梳理和重构,也只有不断熟悉工作流模式和挖掘业务流程特征后,才可以找到解决新问题的办法。而业务经理和引擎产品负责人的交流探讨则是一种业务和技术的互动沟通,技术的本质是为业务服务,引擎产品的不断扩展的特性才是让工作流模式更加丰富的保证。
Slickflow.Engine产品正是基于这样的产品架构,不断增强工作流模式的应用。
Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合的更多相关文章
- Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集
前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...
- Slickflow.NET 开源工作流引擎基础介绍(七) -- 并行分支多实例模式实现
前言:并行审批是比较常见的流程模式,在工作流模式介绍中,通常是多个分支通过网关(Gateway)来控制实现.默认的分支类型是静态定义好的.本文扩展了并行网关的控制方式,实现了动态多实例的并行分支网关, ...
- Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍
前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...
- Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互
前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...
- Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现
前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...
- Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图
前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...
- .NET 开源工作流: Slickflow流程引擎高级开发(十) -- BpmnJS流程设计器集成
前言: 在Slickflow产品开发过程中,前端流程设计器经历了几个不同的版本(jsPlumb, mxGraph等),目的是为了在设计流程时的用户体验更加良好,得到客户的好评和认可.BpmnJS流程设 ...
- asp.net开源流程引擎API开发调用接口大全-工作流引擎设计
关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 一.程序调用开发接口二. 接口说明 所谓的驰骋工作流引擎的接口,在B ...
- .net工作流引擎ccflow开发平台属性功能的隐藏显示介绍
关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工 ...
随机推荐
- dedecms织梦首页判断,添加不同标题
<title> {dede:field.title/} {dede:field name='typeid' runphp="yes"}(@me==0)? @me=&qu ...
- 【原创】when.js2.7.1源码解析
现在,用回调处理一些复杂的逻辑,显得代码臃肿,难于阅读,特别是异步,嵌套. 解决这样的问题,可以是之前所说的Backbone.Events的pubsub,或者是今天要说的when.js所实现的prom ...
- CSS规范 - 代码格式--(来自网易)
选择器.属性和值都使用小写 在xhtml标准中规定了所有标签.属性和值都小写,CSS也是如此.单行写完一个选择器定义 便于选择器的寻找和阅读,也便于插入新选择器和编辑,便于模块等的识别.去除多余空格, ...
- python中的__call__
如果python中的一个类定义了 __call__ 方法,那么这个类它的实例就可以作为函数调用,也就是实现了 () 运算符,即可调用对象协议 下面是一个简单的例子: class TmpTest: de ...
- json 删除、添加对象
1. 定义json对象 var entryJson = []; 2. 删除.添加对象 entryJson.pop(); //删除最后一个对象 entryJson.push({ //往 ...
- 【API】NetUserEnum-获取系统所有账户名称
1 说明 该NetUserEnum函数检索服务器上所有用户帐户的信息. 函数原型: NET_API_STATUS NetUserEnum( _In_ LPCWSTR servername, _In_ ...
- 【Python】exe2shellcode,shellcode2exe
用python写这类程序真简洁,要是用C++又不知道得多写多少行代码了. exe2shellcode #! /usr/bin/env python # -*- coding: utf-8 -*- im ...
- Opencv学习笔记——release和debug两个模式的运行问题
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...
- pymongo创建索引
from database import db db_list = ["table1", "table2", "table3", " ...
- Java基础84 javaBean规范
1.javaBean的概述 1.javaBeam(咖啡豆)是一种开发规范,也可以说是一种技术. 2.JavaBean就是一个普通java类,只要符合以下规定才能称作为javaBean: ...