有朋友也遇到这方面的问题,我就贴个贴子,不再一一回复了,参考了论坛上的一些资料,代码如下:
public class ForkManageActionHandler implements ActionHandler {
public void execute(ExecutionContext executionContext) throws Exception {
ProcessInstance pi = executionContext.getProcessInstance();
ContextInstance ci = executionContext.getContextInstance();
Token rootToken = pi.getRootToken();
ForkVariableVo forkVariableVo = (ForkVariableVo)ci.getVariable(Constants.FORK_VARIABLE_VO);
//角色发送和多人签收分支
if(forkVariableVo.isRoleSend() && forkVariableVo.isMorePeopleSign()){
Node node = rootToken.getNode();
List<String> sendUserList = new ArrayList<String>() ;
List<ForkedTransition> forkTransitions = new ArrayList<ForkedTransition>();
Map<String,String> roleSendAndMorePeopleMap = forkVariableVo.getRoleSendAndMorePeople();
for(int j=0;j<node.getLeavingTransitions().size();j++){
Transition trans = (Transition)node.getLeavingTransitions().get(j);
//考虑到有多个角色发送和多人签收的分支情况,MAP过滤,获取动态分支用户
String activityId = trans.getName() ;
if(roleSendAndMorePeopleMap.get(activityId)!=null){
if(forkVariableVo.mOfficeTargetUser.get(activityId)!=null){
sendUserList = (List<String>)forkVariableVo.mOfficeTargetUser.get(activityId);
}else{
sendUserList = (List<String>)forkVariableVo.noMOfficeTargetUser.get(activityId);
}
}
if(sendUserList ==null || sendUserList.size() ==0){
continue;
}
//创建分支Token及Transition
for(int i=1; i<sendUserList.size(); i++){
String tokenName = this.getTokenName(rootToken, activityId, i);
Token loopToken = new Token(rootToken,tokenName);
loopToken.setTerminationImplicit(true);
executionContext.getJbpmContext().getSession().save(loopToken);
ExecutionContext newExecutionContext = new ExecutionContext(
loopToken);
//newExecutionContext.getContextInstance().createVariable(String.valueOf(i),
//(String)sendUserList.get(i), loopToken);
// 记录下每一transition
ForkedTransition forkTransition = new ForkedTransition();
forkTransition.executionContext = newExecutionContext;
forkTransition.transition = trans;
forkTransitions.add(forkTransition);
}
sendUserList = null ;
}
for (ForkedTransition forkTransition : forkTransitions) {
node.leave(forkTransition.executionContext, forkTransition.transition);
}
}
}
/**
* 获取Token名称
* @param parent
* @param transitionName
* @param loopIndex
* @return
*/
protected String getTokenName(Token parent, String transitionName,int loopIndex) {
String tokenName = null;
if (transitionName != null) {
if (!parent.hasChild(transitionName)) {
tokenName = transitionName;
} else {
int i = 2;
tokenName = transitionName + Integer.toString(i);
while (parent.hasChild(tokenName)) {
i++;
tokenName = transitionName + Integer.toString(i);
}
}
} else {
// 没有转向
int size = (parent.getChildren() != null ? parent.getChildren()
.size() + 1 : 1);
tokenName = Integer.toString(size);
}
return tokenName + "." + loopIndex;
}
private class ForkedTransition {
private ExecutionContext executionContext;
private Transition transition;
}
}
在FORK节点的node-enter中配置该ACTION类,凭借原来那条分支,根据发送的用户的LIST,动态去构建TOKEN,每个TOKEN指向其原分支上的transition,中间那部分角色发送是我自己的需求而写的,重要的是创建分支这一部分。
分享到:
相关推荐
3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging.properties 10 4 准备...
使用 fork实现并行分支 6.2.5. end结束 6.2.5.1. end process instance结束流程处理实例 6.2.5.2. end execution结束流向 6.2.5.3. end multiple多个结束 6.2.5.4. end State结束状态 6.2.6. task 6.2.6.1. 任务...
包括jBPM4扩展研发先决条件、深入jPDL和jBPM Service API、升级jBPM3到jBPM4、流程虚拟机原理、jBPM4的设计思想、随需而配jBPM4、异步工作执行器、深入jBPM4电子邮件支持、系统日志、jBPM4与Spring框架集成、jBPM4与...
3.工作流模型 26 3.1 起点模型 26 3.1.1单起点 26 3.1.2 多起点 27 3.2路由模型 28 3.2.1基本路由 28 3.2.2分支路由 29 3.2.3聚合路由 30 3.2.4循环路由 31 3.2.5嵌套路由 32 3.3 激活模型 34 3.3.1流程激活 34 ...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立于...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立于...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立于...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立于...
创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。 Activiti是一个独立运作和经营的开源项目品牌,并将独立...
1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...
1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 ...
地理信息产业是信息产业的一个重要组成部分,地理信息技术是IT技术的一个重要分支,地理信息系统软件是一类特殊的计算机信息系统软件,它是以各类空间数据及其属性为基础,为各种应用目的服务的一类计算机信息系统。...