StarFlow 支持三种环节分支模式:
1:单一分支
2:多路分支
3:全部分支
设计过程中分支模式比较容易实现。同时在这过程,考虑环节汇聚模式,如果考虑比较全面的话,实现起来困难还是不小,慢慢磨料,哈哈!
实例流程图:
多路分支实例代码:
ProcessEngine processEngine = new Configuration().buildProcessEngine();
IProcessDefineService procDefService = processEngine.getProcessDefineService();
IProcessInstanceService procInstService = processEngine.getProcessInstanceService();
IWorkItemService workItemService = processEngine.getWorkItemService();
//部署流程
procDefService.deployProcessFile("Flow3.xml");
//添加filter
processEngine.addFilter(new LoggerProcessFilter());
// //启动流程
// ProcessInstance processInstance = procInstService.createProcess("TestFlow1", "100002");
// //创建流程
// procInstService.startProcess(processInstance.getProcessInstId());
procInstService.createAndStartProcess("TestFlow3", "100002");
//List<WorkItem> workItems = workItemService.queryPersonWorkItems("100002");
//环节定义id, 用户id
workItemService.finishWorkItem(1, "100001"); //申告
//默认线为固话处理班,这里派单到IPTV处理班
Map<String, Object> values = new HashMap<String, Object>();
values.put("optIdKD", Integer.valueOf(1)); //1: 宽带班,2:IPTV处理班
values.put("optIdTV", Integer.valueOf(2)); //1: 宽带班,2:IPTV处理班
Map<String, Object> conditions = new HashMap<String, Object>();
conditions.put("map", values);
workItemService.finishWorkItem(2, "910150", conditions); //
//workItemService.finishWorkItem(3, "100002");
workItemService.finishWorkItem(4, "100002");
workItemService.finishWorkItem(5, "910115"); //归档
}
流程运行过程记录:
2010-1-14 15:37:02 com.starit.wf.service.filter.LoggerProcessFilter processCreate
信息: 流程【TestFlow3】创建成功, 流程实例ID = 1
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter processStart
信息: 流程【TestFlow3】启动成功, 流程实例ID = 1
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityStart
信息: 环节【上报】创建成功, 环节实例ID = 2
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityComplete
信息: 环节【上报】执行完成, 环节实例ID = 2
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityStart
信息: 环节【派单】创建成功, 环节实例ID = 3
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityComplete
信息: 环节【派单】执行完成, 环节实例ID = 3
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityStart
信息: 环节【宽带处理班】创建成功, 环节实例ID = 4
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityStart
信息: 环节【IPTV处理班】创建成功, 环节实例ID = 5
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityComplete
信息: 环节【IPTV处理班】执行完成, 环节实例ID = 5
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityStart
信息: 环节【归档】创建成功, 环节实例ID = 6
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter acitivityComplete
信息: 环节【归档】执行完成, 环节实例ID = 6
2010-1-14 15:37:03 com.starit.wf.service.filter.LoggerProcessFilter processComplete
信息: 流程【TestFlow3】运行完成, 流程实例ID = 1
流程定义内容:
<?xml version="1.0" encoding="UTF-8"?> <ProcessDefine name="TestFlow3" 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> <description></description> </Activity> <Activity id="A02" type="manual" name="派单"> <limitTime>60</limitTime> <!-- 多路分支 --> <splitMode>OR</splitMode> <joinMode>XOR</joinMode> <wiMode>single</wiMode> <participantType>default</participantType> <ParticipantList> <participant id="910150" name="俞文琦" type="person"/> <participant id="910115" name="李强" type="person"/> </ParticipantList> <description></description> </Activity> <Activity id="A03" type="manual" name="固话处理班"> <limitTime>60</limitTime> <splitMode>XOR</splitMode> <joinMode>XOR</joinMode> <wiMode>single</wiMode> <participantType>act-logic</participantType> <particiLogic>com.starit.test.TestParticipantService</particiLogic> <description></description> </Activity> <Activity id="A04" type="manual" name="宽带处理班"> <limitTime>60</limitTime> <splitMode>XOR</splitMode> <joinMode>XOR</joinMode> <wiMode>single</wiMode> <participantType>act-logic</participantType> <particiLogic>com.starit.test.TestParticipantService</particiLogic> <description></description> </Activity> <Activity id="A05" type="manual" name="IPTV处理班"> <limitTime>60</limitTime> <splitMode>XOR</splitMode> <joinMode>XOR</joinMode> <wiMode>single</wiMode> <participantType>act-logic</participantType> <particiLogic>com.starit.test.TestParticipantService</particiLogic> <description></description> </Activity> <Activity id="A06" type="manual" name="归档"> <limitTime>60</limitTime> <splitMode>XOR</splitMode> <joinMode>XOR</joinMode> <wiMode>single</wiMode> <participantType>act-executer</participantType> <particiSpecActID>A02</particiSpecActID> <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="A02" to="A04" name=""> <isDefault>false</isDefault> <expression>map.optIdKD==1</expression> </Transition> <Transition id="" from="A02" to="A05" name=""> <isDefault>false</isDefault> <expression>map.optIdTV==2</expression> </Transition> <Transition id="" from="A03" to="A06" name=""> <isDefault>true</isDefault> </Transition> <Transition id="" from="A04" to="A06" name=""> <isDefault>true</isDefault> </Transition> <Transition id="" from="A05" to="A06" name=""> <isDefault>true</isDefault> </Transition> <Transition id="" from="A06" to="endAct" name=""> <isDefault>true</isDefault> </Transition> </Transitions> </ProcessDefine>