六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 68|回复: 0

StartFlow 工作流 环节回退

[复制链接]

升级  42%

29

主题

29

主题

29

主题

秀才

Rank: 2

积分
113
 楼主| 发表于 2013-2-6 08:42:50 | 显示全部楼层 |阅读模式
在流程环节回退功能需求比较多,而回退的方式主要有:
1:基于两个时间点的回退
2:给予两点间路径的回退。
3:单步回退。
4:最近人工环节的回退。
在实际工作中,第四种使用的非常多,starflow目前只实现聊该种回退方式。以后考虑回实现其它几种方式。

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


所以在使用环节回退时,必须添加该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");//添加日志filterprocessEngine.addFilter(new LoggerProcessFilter());//保存流程运行轨迹processEngine.addFilter(new TransCtrlFilter());//启动并创建流程procInstService.createAndStartProcess("backFlow", "100001");workItemService.finishWorkItem(1, "100001");activityInstService.rollbackToActivityFroRecentManual(4);//终止流程procInstService.terminateProcess(1);

流程运行日志:
信息: Initializing EHCache CacheManager2010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter processCreate信息: 流程【backFlow】创建成功, 流程实例ID = 12010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter processStart信息: 流程【backFlow】启动成功, 流程实例ID = 12010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart信息: 环节【开始活动】创建成功, 环节实例ID = 12010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete信息: 环节【开始活动】执行完成, 环节实例ID = 12010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart信息: 环节【处理】创建成功, 环节实例ID = 22010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete信息: 环节【处理】执行完成, 环节实例ID = 22010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart信息: 环节【自动环节】创建成功, 环节实例ID = 32010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityComplete信息: 环节【自动环节】执行完成, 环节实例ID = 32010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart信息: 环节【归档】创建成功, 环节实例ID = 42010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityTerminal信息: 环节【归档】终止成功, 环节实例ID = 42010-1-27 10:42:48 com.starit.wf.service.filter.LoggerProcessFilter activityStart信息: 环节【处理】创建成功, 环节实例ID = 52010-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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表