总结回退和自由跳转的场景和实现方法

回退的具体场景:

例如请假,员工a由于某些原因需要请假,上面是组长b,假设b审核通过了,组长b上面是主管c,需要主管c审核,但c感觉a员工提出的请假理由不够充分,那么这是退回就开始发挥它的作用了,现在可以画一个简单的图a->b->c,c点发起回退退到的事b(注意不是直接退回到a)。

我们可以看上面的流程图进行具体解析:

以上流程包括了多种流程节点,如分支,并行节点,多实例任务,子流程,假设现在流程产生了B,C,E任务,而e点进行回退,则回退到A,既然回退到A了,那么是不是B,C,E任务就应该销毁(因为退回到了A任务,只要A通过就会又产生B,C,E任务);若此时产生了B,C,F任务,F回退,则应该产生E任务,B、C则正常运行,继续往下执行后,将会产生I任务,再者是J任务。若在I任务回退,则应该回退至F。

那么应该怎么具体实现回退呢,我想应该先建立一个数据结构,如下图:

有了这样的一个数据结构,记录了每个任务节点的产生顺序,我们在任何一个节点上,都能有效回退至上一任务节点,并且包括自由跳转的方式,如在I节点,若我们回退至E,就把F节点从这个记录顺序中去掉,然后产生E任务出来。

下面,我们应该着重讨论这个数据结构怎样建立,

我们可以建立一张表,将该数据结构的每条分支都记录进去,任何与流程图进行绑定,意思是这样的流程启动就会与这个表进行绑定,

流程启动,就会产生A任务,A通过就会产生B,C,E任务,任务E通过,满足一定条件就会产生F任务,进而任务I,进而产生任务J,那意思岂不是说D任务产生就一定有A->B->D,A->C->D这两条链存在,同理J任务产生,就会产生A->E->F-I-J或A->E->G->I-J(若是条件有重合的地方两条链都存在),那么怎么才能确定到底是那一条链呢,我想可以用着中方法在历史任务中查找是否存在G或F 任务,若存在就有这条链的存在,将存在的链设置一个状态,表示着这个链确实存在。

自由跳转,

自由跳转意思就是想跳到那就跳到那,当然用上面的数据结构也行,但我想既然要跳转,肯定会知道现在的任务id和要跳转到的任务id,那么可不可以将要跳转到的任务对现在的任务进行覆盖。

时间: 2024-09-28 15:12:02

总结回退和自由跳转的场景和实现方法的相关文章

也谈一下Activiti工作流节点的自由跳转

最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后加载其用户授权策略,等): 只有往前(往已执行过的节点)跳转的功能,没有往后节点(往还没有执行的节点)跳转的功能: 新任务不是追加到已有执行路径上,而是覆盖老任务: 那么就自己动手吧!操作流程其实也简单,大概如下: 按照目标节点(activity)定义创建一个新的任务(task),这个创建过程必须和正常

优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!

最近对Activiti做了一些深入的研究,对Activiti的流程机制有了些理解,对动态调整流程也有了一些实践方法. 现在好好总结一下,一来是对这段时间自己辛苦探索的一个记录,二来也是为后来者指指路~~~ 如下内容准备采用QA的方式写,很多问题都是当初自己极疑惑的问题,希望能为大家解惑! Q:可以动态调整流程吗? A:可以!可以动态更改流程指向,或者创建新的节点,等等... Q: 更改流程还需要注意什么? A: 必须要实现持久化!否则一旦应用重启,你的流程就犯糊涂了!譬如,你创建了一个新节点,但

JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

在WEB页面中,我们实现页面跳转的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用户点击某处,然后直接由浏览器帮我们跳转. 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能. 下面是具体的做法: 一:跳转到新页面,并且是在新窗口中打开时: 复制代码 代码如下: function gogogo() { //do someghing here... window.open("test2.html");

跳转系统设置相关界面的方法

跳转系统设置相关界面的方法 跳转系统设置界面,例如提示用户打开定位.蓝牙或者WIFI,提醒用户打开推送或者位置权限等 在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个prefs值,如下图: 跳转系统设置根目录中的项目使用下面的方法 1 _array = @[ 2 @{@"系统设置":@"prefs:root=INTERNET_TETHERING"}, 3 @{@"WIFI设置":@"prefs:root=

cocos2dx中的场景和使用方法

1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导演用来控制游戏流程用的,例如如何开始场景,什么时候切换场景,什么条件下结束场景等等 5.与场景有关的API操作: 运行场景:runWithScene(Scene* scene); 启动游戏,并运行scene场景.本方法在主程序第一次启动主场景的时候调用.如果已有正在运行的场景则不能调用该方法:会调用

跳转的两种实现方法setInterval和setTimeout

setInterval方法: <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>出错啦~~~</title> <link href="css/login1.css" mce_href="css/login1.css" rel="

asp.net跳转页面的三种方法比较

目前,对于学习asp.net的很多朋友来讲,实现跳转页面的方法还不是很了解.本文将为朋友们介绍利用asp.net跳转页面的三种方法,并对其之间的形式进行比较,希望能够对朋友们有所帮助. ASP.NET发展起源 1 ASP.NET的前身ASP技术,是在IIS 2.0上首次推出(Windows NT 3.51),当时与 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)发扬光大,成为服务器端应用程序的热门开发工具,微软还特别为它量身打造了Visual InterDev开发工

krpano--控制热点跳转到场景的指定视角

krpano课堂(肥宗) · 2015-07-13 19:32 有这么一种情况,假设我们用三个场景,这三个场景恰好是一条街道的同一方向的三个拍摄点.如上图. 我们可以通过设置A.B.C三个场景中的view元素中的hlookat属性,实现了从A到B.从B到C保持同一个方向.假设我们的图是左东右西的方向.那我们站在A点面向B的方向,我们会看到链接到B的热点,当我们点击该热点时,初始视角应该还是面向东方,也就是能看到更远处的链接到C的热点.简单来说,保持了方位的统一. 问题来了,当我们从C回到B,或者

rewrite跳转应用场景

应用场景1--基于域名的跳转 公司旧域名www.accp.com ,因业务需求有变更,需要使用新域名www.kgc.com 代替 不能废除旧域名 从旧域名跳转到新域名,且保持其参数不变 实验环境 Linux服务器(192.168.13.144) 测试机win7 1,安装Nginx服务 [[email protected] ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7