绝了,我想起来了不启动流程取得第一任务的下一环节

本文介绍如何使用Activiti流程引擎通过反射机制获取并启动流程中的首个任务,并递归地找出所有可能的后续任务。文章提供了具体的代码实现,包括根据流程定义获取活动信息及处理网关逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由第一个task获取下一个task是什么(为了页面动态显示,客户选择),然后启动流程,指定task

思路,发布流程获取flowKey--》根据flowKey获取所有的环节--》根据activityImpl【0】第一个环节获取下一流转--》成功

由于代码private,所有用了反射获取

附注:不能根据activitiId获取activityImpl,因为流程未启动,没有活动状态,则为空,如图测试效果:


所以上代码:

List list = new ArrayList();
        PimFlowDefine flowDefine = pimFlowDefineMapper.selectByPrimaryKey(flowId);
        String flowKey = flowDefine.getFlowKey();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowKey).latestVersion().singleResult(); 
		ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinition.getId());  
		List<IMap> jobList = iActivitiUtilSvc.getAllJobsByKey(flowKey);
		String activityId = jobList.get(0).getString("id");
		List<ActivityImpl> activitiList = def.getActivities();  //rs是指RepositoryService的实例
		List<PvmTransition> transitions = activitiList.get(0).getOutgoingTransitions();	
		try {
			Method method = ActivitiUtilSvcImpl.class.getDeclaredMethod("jumpGateway", List.class,List.class,String.class);
			method.setAccessible(true);
			method.invoke(ActivitiUtilSvcImpl.class.newInstance(),list, transitions, "map");
		} catch (Exception e) {
			e.printStackTrace();
		}
		param.put("nextJob", list);

 private void jumpGateway(List list, List<PvmTransition> outTransitions, String listType){
		for (PvmTransition tr : outTransitions) {
			PvmActivity ac = tr.getDestination(); //获取线路的下一节点  
			String type = ac.getProperty("type").toString();
			if (type.endsWith("Gateway")) {
				List<PvmTransition> outTransitionsTemp = ac.getOutgoingTransitions();
				jumpGateway(list, outTransitionsTemp, listType);
			}else{
				if("map".equals(listType.toLowerCase())){
					IMap map = new IMap();
					map.put("id", ac.getId());
					map.put("name", ac.getProperty("name"));
					list.add(map);
				}else if("string".equals(listType.toLowerCase())){
					list.add(ac.getId());
				}
			}
		}
    }
    


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值