F2BPM中关于工作流引擎驳回设计
1.1 关于驳回
驳回,在有的应用中叫“回退”。驳回是中国特色的一种方式,驳回在流程图上也没有迁移线的表达经常也是隐性的,比如申请经费可能由于资料不足被驳回来补充资料,像这样的例子有非常多,也很常见。
驳回是工作流参与者对自己“待办任务”的一种操作,即参与者主动回退待办任务列表中的任务到已经执行过的人工节点。
回退的情况实际上是非常复杂的,有串行上的驳回,也有并行内的驳回,并行区内驳回到并行区外,从分支驳回到主干等,从主干驳回到分支内,多重聚合的驳回等。驳回过程中会发生很多事情,也会可能导致重走路径时产生重复路径。
驳回方式的支持力度也往往成为评价一个工作流引擎是否具有中国特色和引擎强弱的能重要批价指标。
1.2 关于显隐性驳回的理解
如下图所示,有节点A到节点B 属于正常发送,但从节点B到节点A,则出现两种情况:

(1)迁移驳回:实际说是迁移驳回的表达是不正确的,因为没有迁移驳回的说法,本质上还是正常发送,如图中B—A黑色线;(迁移的驳回严格上没有驳回的意义存在,只是一种表象,与正常向提交节点没有区别,所以迁移式的驳回不是本节讨论的重点),这里只是提出来有一个认识。
通过流程定义时绘出驳退迁移线来显式的支持驳回,即使用迁移的方式来作为回退,实际这种不叫驳回,只是用流程的正常提交流转而已。
(2)被驳回:(流程图中不存在线,如上图中红色线是不存在的)可能因为某些特殊原因,被任务B退回,要求任务A重新办理,如图中B—A红色线。虽然都是从B到A,代表的意义却完全不同。(本章所讨论的驳回模型都是讨论这种情况),
1.3 关于业务补偿
业务补偿是一个很重要的概念,在回退的情况下需要相应的回退部分业务操作。这里由通常由用户自行编写相关的代码进行业务上的回滚,由用户自定义代码进行处理。
1.4 驳回问题类型
1仅可驳回到提单
2仅可驳回到上一步
3仅可驳回到上一步或提单
4驳回任意历史节点
5驳回指定历史节点
1.5 驳回模式
1.5.1 描述

上图:驳回模式
驳回模式是指驳回后再重新提交应当怎么处理,如上图所示,节点3驳回到节点2,然后节点2重新提交时直接提交回到节点3.这就叫直来直往。
上图所示,节点6驳回到节点2,节点2正常提交依然是走节点5,节点5再并发给节点3和节点6,这样的方式就叫按流程图执行。
当按直来直往或按图流程执行时都会发生一些问题,比如节点6驳回节点2时,如果当时节点3已经存在实例了,那么这时驳回节点2这后重新走节点5会导致节点3的分支重复,那么这些问题就是驳回模式中要解决的问题。
主要分为两种模式:
按流程图执行
即按流程图定义执行。
直来直往模式
哪里在来的就回哪里去。
1.5.2 直来直往
即驳回后回到本节点
如上图所示,节点3驳回到节点2,节点2处理后直接返回到节点3.直来直往适应于绝大多数情况。

直来直往模式有且只能转递一次,比如节点13直来直住模式驳回到节点3,这时候节点3不允许再有直来直往驳回到节点2.因为如果有再次直来直住驳回到节点2会造成混乱,因为节点2处理完后直接返回节点3,当节点3再次处理时是按正常提交给节点7,并不会直接返回节点13,那么此时流程实例将无法正常流转到结束,因为节点13是一个并行结束节点。
节点3此时也不支持再次使用按流程图执行的驳回,因为是会破坏节点13的设置期望,节点13是期望驳回后直接处理返回回来,所以直来直往驳回后,统一规则为不允许再次驳回。只能是按节点13的期望处理完后再次返回给节点13.
1.5.3 按流程图执行
1、并行区间外驳回到并行区前
如上图所示节点13驳回到节点2,此时节点2提交后是按流程图执行,而引擎是删除节点2之后所有节点实例,比如节点6如果存在实例而清空掉这些实例。那么当前任务会从节点5重新开发。
1.5.4 并行外驳回到并行区间内

如上图所示,任务13驳回到任务7的情况,由于节点7处于并行分支上,我们约定这种情况的驳回模式只支持“直来直往”模式, 因为若不是这样那么节点7可能永远不法继续流转,因为节点13是一个并行结束节点,需要等候节点7和节点15同时到达。
直来直往模式:支持
按流程图执行:不支持
1.5.5 并行区间内驳回到并行区间外

如上图所示为并行区间内驳回到并行区间外,节点3驳回到节点2.
直来直往模式:支持
按流程图执行:支持
F2BPM中关于工作流引擎驳回设计的更多相关文章
- 【2016-11-7】【坚持学习】【Day22】【工作流引擎设计--执行用户】
最近在做一个工作流引擎,架构师已经设计好了,但是我发现他设计 每一步的用户集合的设计,有一定的不足,或者是不方便,不同的组织架构影响着他的用户数据源配置方式. 于是我想花点时间去看看人家优秀是工作流引 ...
- F2工作流引擎之 工作流运转模型(三)
1流程单起点单终止模型 单起点:一个流程定义必须有且唯一起点 单结束点:一个流程定义必须有且唯一结束点. 约定:提单与结束是每个流程必须有的活动,且唯一只有一个提单和结束. 2串行模型 描述:串行(S ...
- 浅析LR.Net工作流引擎
在当代信息化软件系统开发中,工作流引擎是其中非常重要的一环.所谓工作流引擎,是指工作流作为软件系统的一部分, 其中包括了流程的节点管理.流向管理.流程样例管理.审核管理等重要功能. 工作流引擎可根据角 ...
- 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04
作者:vivo 互联网服务器团队 本文是<vivo营销自动化技术解密>的第5篇文章,重点分析介绍在营销自动化业务中实时营销场景的背景价值.实时营销引擎架构以及项目开发过程中如何利用动态队列 ...
- 我的微型工作流引擎-功能解析及API设计
一.前言 上一篇我给大家介绍了我的工作流的模型和基本的设计,这篇我想详细说明下我这款工作流的功能及使用示例.这款工作流主要是面向开发者设计的,为了先让大家有个全局的认识,局部功能的设计实现就不细说了, ...
- java工作流引擎证照库类型的流程设计 实现方案与演示案例
关键词:.Net开源工作流 工作流引擎 工作流引擎常用信息存储 流程前置导航 证照库的概念&应用场景: 我们在梳理流程的时候,会发现有一些流程的发起是基于一个实体信息的. 比如:纳 ...
- asp.net开源流程引擎API开发调用接口大全-工作流引擎设计
关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 一.程序调用开发接口二. 接口说明 所谓的驰骋工作流引擎的接口,在B ...
- Java工作流引擎-集团模式下的权限 设计与实现
关键字 工作流开发框架权限设计.用户组.岗位.集团模式应用. java工作流程引擎, .net 工作流引擎,工作流开发框架 相关的表结构 -- 相关组织-表结构. SELECT No,Name,Par ...
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
随机推荐
- Ansi2Utf8 小工具
将GB2312编码的文件转成Unity使用的UTF8无bom格式 主要用批处理执行 Ansi2Utf8.exe XXXXX.txt 源代码 using System; using System.Co ...
- keystone身份认证服务
Keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等.云 ...
- asp.net core 2.0 Json结果的格式
asp.net core 2.0 默认返回的结果格式是Json, 并使用json.net对结果默认做了camel case的转化(大概可理解为首字母小写). 这一点与老.net web api 不一样 ...
- oracle 行转列函数pivot和unpivot
今天接到业务部门的一个需求,需要对同一公司的不同财务指标进行排序,需要用到oracle的行转列函数unpivot. 财务报表的表结构为: 要实现业务部门的排序筛选功能,需要首先将行数据转为列数据: 使 ...
- asp.net mvc 最简单身份验证 [Authorize]通过的标准
[Authorize] public ContentResult Index2() { return Content("验证通过了"); } 经常能够看到某个Controler下的 ...
- jsp%不能解析
做一个传值问题时 遇到错误 百度了一下是百分号不能解析,实在搞不明白为什么,以前这样做好好的,这次就不行了,不知道为什么,后来偶然一次把标签删了 错误居然没了,难道struts2的这个标签不支持这样传 ...
- Nginx+nagios安装配置
Nginx+nagios安装配置 [root@Nagios ~]# vi /etc/nginx/nginx.conf server { listen ; server_name localhost; ...
- python基础--字符串操作、列表、元组、文件操作
一.变量及条件判断 1.字符串.布尔类型.float.int类型,None都是不可变变量 2.字符串是不可变变量,不可变变量就是指定义之后不能修改它的值 3.count +=1和count=count ...
- C# 执行sql语句批量更新
int x = db.Database.ExecuteSqlCommand(string.Format("update T_Pension SET UnitType = '{0}' WHER ...
- GridView中的日期处理
数字 {0:N2} 12.36 数字 {0:N0} 13 货币 {0:c2} $12.36 货币 {0:c4} $12.3656 货币 "¥{0:N2}" ¥12.36 ...