activiti 开发笔记-----根据任务id(taskid)判断下一步节点是否为结束节点

  •  方法开始前按照不同的需要可以加上参数校验,如写的时候要对输入参数taskid做不能为空,长度,在数据库是否存在的校验。

不能为空

if (taskId.equals("")||taskId.trim().equals("")){
			throw new FlowException(TASK_ID_NULL_MSG,
					TASK_ID_NULL);
		}

长度校验 

if (taskId.length()>20){
			throw new FlowException(TASK_ID_LENGTH_ERROR_MSG,
					TASK_ID_LENGTH_ERROR);
		}

在数据库是否存在的校验

//查询当前任务对象
Task task = ProcessEngines.getDefaultProcessEngine().getTaskService()
				.createTaskQuery().taskId(taskId).singleResult();
		if (task == null) {
			throw new FlowException(TASK_ID_NOT_FOUND_MSG,
					TASK_ID_NOT_FOUND);
		}

正文 

	public Boolean nextTaskIsEnd(String taskId) {
        //参数校验
		// 查询当前任务对象
		Task task = ProcessEngines.getDefaultProcessEngine().getTaskService()
				.createTaskQuery().taskId(taskId).singleResult();
		//根据taskId获取流程实例Id
		String processInstanceId = task.getProcessInstanceId();
		String definitionId = ProcessEngines.getDefaultProcessEngine()
				.getRuntimeService().createProcessInstanceQuery()
				.processInstanceId(processInstanceId).singleResult()
				.getProcessDefinitionId();
		ProcessDefinitionEntity processDefinitionEntity = 
(ProcessDefinitionEntity) ((RepositoryServiceImpl)
				ProcessEngines.getDefaultProcessEngine().getRepositoryService())
				.getDeployedProcessDefinition(definitionId);
		ActivityImpl activityImpl = processDefinitionEntity.
            findActivity(task.getTaskDefinitionKey());
		// 获取节点所有流向线路信息
		List outTransitions = activityImpl.getOutgoingTransitions();
		for (PvmTransition tr : outTransitions) {
			// 获取线路的终点节点
			PvmActivity ac = tr.getDestination();
            //当其中一条流线的中点不是结束节点时,直接返回 false(不是结束节点)
			if (!"endEvent".equals(ac.getProperty("type"))) {
				return false;
			}
		}
		return true;
	}

 

你可能感兴趣的:(activiti开发笔记)