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工作流里责任链模式的应用 一.简单理解责 ...
随机推荐
- [Apple开发者帐户帮助]七、注册设备(2)注册多个设备
如果您有许多测试设备,则可以创建包含设备名称和设备ID的文件,并将整个文件上载到开发人员帐户.您的开发人员帐户支持以下两种文件格式:具有.deviceids文件扩展名和纯文本文件的属性列表文件.您选择 ...
- [Swift通天遁地]九、拔剑吧-(1)实现在程序中跳转到微信、App Store、地图
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Vue 柱状图
echarts.js作为国内的IT三巨头之一的百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点 1.echarts.js容易使用 echarts.js的官方文档比较详细,而且官网中提供 ...
- SQLServer局部变量和全局变量介绍05-29学习笔记
变量 数据在内存中存储可以变化的量叫变量.为了在内存中存储信息,用户必须指定存储信息的单元,并为了该存储单元命名, 以方便获取信息,这就是变量的功能.Transact-SQL可以使用两种变量,一种是局 ...
- python 画图
1.根据实际图形,用符号画出原来图形 from PIL import Image import argparse #命令行输入参数处理 parser = argparse.ArgumentParser ...
- 编译安装php、nginx
以centos6.6为例 1.安装以及配置php 首先在官网下载源码包http://php.net/downloads.php 这里下载php-7.1.16 .tar.gzcd php-7.1.16 ...
- Android 自己搭建一个直播系统吧
服务端用 SRS(Simple Rtmp Server),在这里下载simple-rtmp-server需要Linux系统最好是Ubuntu,装个Ubuntu虚拟机就行了在Linux里,解压缩SRS ...
- 更改计算机名后DB2不能启动的解决方法
1.找到以下位置目录下相应的文件db2nodes.cfg C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1\D ...
- 【VHDL】深度讲解二进制无符号和有符号加法处理溢出的问题
1.Unsigned adders 这个比较简单,只需在A.B前面扩展一位0防止溢出,溢出的数填到第n位cout,n-1到0位就是sum. , 2.Signed adders 一开始也搞不懂下图中为什 ...
- cannot load oci dll,193-navicate连接oracle的解决方法
navicat连接远程数据库时 是因为instantclient是64位的,navicat是32位的,两者要一致 因为自己的navicat premium是破解版的,所以就另找了instantclie ...