activiti根据当前节点获取下一步任务节点

思路:根据当前节点的ID获取,当前节点所连线的所有终点节点。 递归调用当前方法。得到想要的TaskDefinition

直接上代码。

/**
* 根据与流程定义key获取当前节点的下一个任务节点
* @param key 流程定义Key
* @param elementId当前节点Id
* @param elString当前节点流向下一个节点的匹配字符串   
* 如下      ${deptLeaderPass}--------------------------XML已定义的字符串
*  ${!deptLeaderPass}
* 获取领导同意的userTask,则传入 ${deptLeaderPass}
* @return
*/
public static TaskDefinition getNextTaskDefinition(String key,String activityId,String elString,boolean bFlag){
ProcessDefinition processDefinition = getNewProcessDefinition(key);//根据流程定义key获得最新的流程定义信息
if (processDefinition != null) {
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)  
.getDeployedProcessDefinition(processDefinition.getId());  
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);//当前节点
if ("userTask".equals(activityImpl.getProperty("type")) && !bFlag) {
TaskDefinition taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition();
return taskDefinition;
}else {
List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
List<PvmTransition> outpvmTransitions = null;
for(PvmTransition pvmTransition : pvmTransitions){
PvmActivity pa = pvmTransition.getDestination();//获取所有的终点节点
if ("exclusiveGateway".equals(pa.getProperty("type"))) {
outpvmTransitions = pa.getOutgoingTransitions();
if (outpvmTransitions.size() == 1) {
return getNextTaskDefinition(key, pa.getId(), elString, false);
}else if (outpvmTransitions.size() > 1) {
for (PvmTransition outPvmTransition : outpvmTransitions) {
Object object = outPvmTransition.getProperty("conditionText");
if (elString.equals(StringUtils.trim(object.toString()))) {
PvmActivity pvmActivity = outPvmTransition.getDestination();
return getNextTaskDefinition(key, pvmActivity.getId(), elString, false);
}
}
}
}else if ("userTask".equals(pa.getProperty("type"))) {
return ((UserTaskActivityBehavior)((ActivityImpl)pa).getActivityBehavior()).getTaskDefinition();
}
}
}
}
return null;
}


/**
* 根据key获得一个最新的流程定义
* @param key
* @return
*/
public static ProcessDefinition getNewProcessDefinition(String key) {
//根据key查询已经激活的流程定义,并且按照版本进行降序。那么第一个就是将要得到的最新流程定义对象
List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).orderByProcessDefinitionVersion().desc().list();
if (processDefinitionList.size() > 0) {
return processDefinitionList.get(0);
}
return null;
}


同样获取其他节点是一个道理。本人暂时没用到,不做其他例子。如有问题请加高级开发群:135430763 共同讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Activiti 7 中,获取一个任务节点任务可以通过历史任务查询实现。可以通过以下步骤来获取一个任务节点任务: 1. 首先,获取当前任务的 ID。可以使用以下代码获取当前任务的 ID: ```java String currentTaskId = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult() .getId(); ``` 其中,`processInstanceId` 是当前流程实例的 ID。 2. 然后,使用当前任务 ID 查询历史任务。可以使用以下代码查询历史任务: ```java List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId) .orderByHistoricTaskInstanceEndTime() .desc() .list(); ``` 其中,`processInstanceId` 是当前流程实例的 ID。使用 `orderByHistoricTaskInstanceEndTime().desc()` 可以按照任务结束时间倒序排列历史任务。 3. 最后,找到上一个任务节点任务。可以遍历历史任务列表,找到上一个任务节点任务。可以使用以下代码实现: ```java String previousTaskId = null; for (HistoricTaskInstance historicTask : historicTasks) { if (!historicTask.getId().equals(currentTaskId)) { previousTaskId = historicTask.getId(); break; } } ``` 在循环中,判断当前任务的 ID 是否与当前任务 ID 相等,如果不相等,则认为是上一个任务节点任务。 通过上述步骤,你可以获取一个任务节点任务 ID(`previousTaskId`),然后可以根据需要进行进一步的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值