Activiti根据Flowname进行转向

转向问题需要注意的是每次转向到其他节点时要把其他Transition给删掉,任务完成后要把删掉的Transition还原回去。


/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:58:16
	 * @params 任务
	 * @return void
	 * @useFor 从当前节点转向另一个节点
	 */
	public void oneActivity2Another(Task task, String flowName,
			Map<String, Object> map, String userid) {

		ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
				.getDeployedProcessDefinition(task.getProcessDefinitionId());
		// 获得当前执行实例从而得到当前运行节点ID
		ExecutionEntity executionEntity = (ExecutionEntity) runtimeService
				.createExecutionQuery().executionId(task.getExecutionId())
				.singleResult();
		String activitiId = executionEntity.getActivityId();
		System.out.println("当前运行节点id值:" + activitiId);
		List<ActivityImpl> activitiList = new ArrayList<ActivityImpl>();
		// 所有流程节点信息
		activitiList = processDefinition.getActivities();
		// 获取当前流程执行节点
		ActivityImpl srcActivity = findActivity(activitiList, activitiId);
		ActivityImpl endActivity = null;
		TransitionImpl transitionImpl = null;
		// 获取当前节点所有执行路径
		List<PvmTransition> pvmTransitionList = srcActivity
				.getOutgoingTransitions();
		for (PvmTransition pvmTransition : pvmTransitionList) {
			// 强转为TransitionImpl
			transitionImpl = (TransitionImpl) pvmTransition;
			// 判断箭头指向名称是否相等
			if (flowName.equals(transitionImpl.getProperty("name"))) {
				endActivity = transitionImpl.getDestination();
			}
		}
		List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
		oriPvmTransitionList.addAll(pvmTransitionList);

		// 先清空其他Transition
		pvmTransitionList.clear();
		pvmTransitionList.add((PvmTransition) transitionImpl);
		// 从一个节点执行到另一个节点
		transitionImpl.setDestination(endActivity);
		taskService.claim(task.getId(), userid);
		// 执行任务
		taskService.complete(task.getId(), map);
		// 还原删除了的Transitions
		pvmTransitionList.clear();
		pvmTransitionList.addAll(oriPvmTransitionList);
	}
	/**
	 * 
	 *  @CreateUser:xxx
	 *  @ReturnType:ActivityImpl
	 *  @param activitiList
	 *  @param activitiId
	 *  @return
	 *  @CreateDate:2014-6-1下午5:48:09
	 *  @UseFor    :根据节点id获得流程图的节点信息
	 */
	public ActivityImpl findActivity(List<ActivityImpl> activitiList,
			String activitiId) {
		for (ActivityImpl activityImpl : activitiList) {
			String id = activityImpl.getId();
			if (id.equals(activitiId)) {
				return activityImpl;
			}
		}
		return null;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值