StartFlow 工作流 环节回退

在流程环节回退功能需求比较多,而回退的方式主要有:
1:基于两个时间点的回退
2:给予两点间路径的回退。
3:单步回退。
4:最近人工环节的回退。
在实际工作中,第四种使用的非常多,starflow目前只实现聊该种回退方式。以后考虑回实现其它几种方式。

starflow在设计回退是,是通过流程运行轨迹数据来查找最经人工环节。运行轨迹存放在wftransctrl表中,(以后流程图监控也会用到该表数据)存放的数据如下图所示:

[img]http://dl.iteye.com/upload/attachment/199038/4f84ae8a-d9df-32d6-bb55-82f769565853.png[/img]
所以在使用环节回退时,必须添加该Filter:
processEngine.addFilter(new TransCtrlFilter());


实例代码:

ProcessEngine processEngine = new Configuration().buildProcessEngine();
IProcessDefineService procDefService = processEngine.getProcessDefineService();
IProcessInstanceService procInstService = processEngine.getProcessInstanceService();
IActivityInstService activityInstService = processEngine.getActivityInstService();
IWorkItemService workItemService = processEngine.getWorkItemService();

//清除测试数据
TestUtil.cleanData(processEngine.getApplicationContext());

//部署流程
procDefService.deployProcessFile("test/rollback/backFlow.xml");

//添加日志filter
processEngine.addFilter(new LoggerProcessFilter());
//保存流程运行轨迹
processEngine.addFilter(new TransCtrlFilter());

//启动并创建流程
procInstService.createAndStartProcess("backFlow", "100001");

workItemService.finishWorkItem(1, "100001");
activityInstService.rollbackToActivityFroRecentManual(4);
//终止流程
procInstService.terminateProcess(1);


流程运行日志:

信息: Initializing EHCache CacheManager
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter processCreate
信息: 流程【backFlow】创建成功, 流程实例ID = 1
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter processStart
信息: 流程【backFlow】启动成功, 流程实例ID = 1
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart
信息: 环节【开始活动】创建成功, 环节实例ID = 1
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete
信息: 环节【开始活动】执行完成, 环节实例ID = 1
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart
信息: 环节【处理】创建成功, 环节实例ID = 2
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete
信息: 环节【处理】执行完成, 环节实例ID = 2
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart
信息: 环节【自动环节】创建成功, 环节实例ID = 3
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete
信息: 环节【自动环节】执行完成, 环节实例ID = 3
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart
信息: 环节【归档】创建成功, 环节实例ID = 4
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityTerminal
信息: 环节【归档】终止成功, 环节实例ID = 4
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart
信息: 环节【处理】创建成功, 环节实例ID = 5
2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter processTerminal
信息: 流程【backFlow】终止成功, 流程实例ID = 1


流程定义:

<?xml version="1.0" encoding="UTF-8"?>

<ProcessDefine name="backFlow" version="1.1.1" chname="测试回退">
<ProcessProperty>
<limitTime>1440</limitTime>
<description></description>
</ProcessProperty>
<Activitys>
<Activity id="startAct" type="start" name="开始活动">
<splitMode>XOR</splitMode>
<description></description>
</Activity>
<Activity id="A01" type="manual" name="处理">
<limitTime>60</limitTime>
<splitMode>XOR</splitMode>
<joinMode>XOR</joinMode>
<wiMode>single</wiMode>
<participantType>process-starter</participantType>
<isFreeActivity>false</isFreeActivity>
<isOnlyLimitedManualActivity>true</isOnlyLimitedManualActivity>
<freeRangeStrategy>freeWithinProcess</freeRangeStrategy>
<NextActivities></NextActivities>
<description></description>
</Activity>
<Activity id="A02" type="auto" name="自动环节">
<limitTime>60</limitTime>
<splitMode>XOR</splitMode>
<joinMode>XOR</joinMode>
<wiMode>single</wiMode>
<participantType>process-starter</participantType>
<isFreeActivity>false</isFreeActivity>
<description></description>
<finishType>auto</finishType>
<callType>asynchronous</callType>
<executeAction>com.starit.test.AutoActActionTest</executeAction>
</Activity>
<Activity id="A03" type="manual" name="归档">
<limitTime>60</limitTime>
<splitMode>XOR</splitMode>
<joinMode>XOR</joinMode>
<wiMode>single</wiMode>
<participantType>process-starter</participantType>
<isFreeActivity>false</isFreeActivity>
<isOnlyLimitedManualActivity>true</isOnlyLimitedManualActivity>
<freeRangeStrategy>freeWithinProcess</freeRangeStrategy>
<NextActivities></NextActivities>
<description></description>
</Activity>
<Activity id="endAct" type="end" name="结束活动">
<joinMode>XOR</joinMode>
<description></description>
</Activity>
</Activitys>

<Transitions>
<Transition id="" from="startAct" to="A01" name="">
<isDefault>true</isDefault>
</Transition>
<Transition id="" from="A01" to="A02" name="">
<isDefault>true</isDefault>
</Transition>
<Transition id="" from="A02" to="A03" name="">
<isDefault>true</isDefault>
</Transition>
<Transition id="" from="A03" to="endAct" name="">
<isDefault>true</isDefault>
</Transition>
</Transitions>
</ProcessDefine>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值