`

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;
	}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    activiti适配达梦数据库教程

    activiti 适配达梦数据库需要对 activiti 进行二次开发,增加对达梦数据库的适配信息。通过本教程, readers 可以了解 activiti 的数据库适配机制和达梦数据库的特点,并掌握 activiti 适配达梦数据库的步骤。

    activiti modeler.zip_activiti_activiti-modeler_java_zip

    同时,Activiti Modeler也支持RESTful API,便于与其他系统进行集成。 标签中的"activiti"是指Activiti工作流引擎,它是整个流程管理的核心,负责执行在Modeler中设计的流程。"activiti-modeler"即指代我们讨论的这...

    Activiti-activiti-5.22.0 源码

    3. **表达式和脚本语言**:Activiti 支持使用 Expression Language (EL) 和 Scripting Language 进行条件判断和业务逻辑处理。源码中可以找到 EL 的解析和执行,以及不同脚本语言(如 JavaScript)的集成。 4. **...

    Spring-activiti-ruoyi-activiti

    本文将深入探讨Spring-Activiti在Ruoyi框架中的应用,并介绍如何进行二次开发,帮助开发者更好地理解和利用这一工具。 首先,让我们了解一下Spring-Activiti。Spring-Activiti是Spring社区对Activiti工作流引擎的一...

    对activiti二次开发适配达梦数据库.docx

    对Activiti进行二次开发需要将Activiti/modules下的activiti-engine项目导入到开发工具中。在编辑这个文件时,需要增加两行代码,添加dm对应的sql文件。新的文件可以从Oracle对应文件拷贝过来,然后将全部的NVARCHAR...

    activiti designer 5.18 eclipse eclipse插件 activiti插件 activiti设计

    在本例中,Activiti Designer 就是一个Eclipse插件,用户可以将其安装到Eclipse环境中,然后在Eclipse内直接进行流程设计。这使得开发人员可以在同一个集成开发环境中进行代码编写和流程设计,提高了开发效率。 在...

    ACTIVITI如何获取下一步节点

    开发者可以根据具体需求,结合ACTIVITI提供的API灵活地实现流程控制逻辑。 在阅读给定的压缩包中的"ACTIVITI如何获取下一步节点.txt"文件时,你可以期待找到更详细的代码示例和具体应用场景,帮助你更深入地理解这...

    activiti-5.22.0zip下载

    它解析 BPMN 2.0 格式的流程定义文件,提供了API供开发者进行流程的启动、查询、控制等操作。 2. **BPMN 2.0**:Business Process Model and Notation 2.0 是一种标准的流程建模语言,Activiti支持BPMN 2.0,使得...

    activiti 5.22完整包下载 activiti-explorer.war

    这个界面使得非技术人员也能方便地与 Activiti 进行交互,例如创建和修改流程定义,启动新的流程实例,以及跟踪当前正在执行的流程。 "META-INF" 目录是 Java 应用的标准组成部分,其中包含了关于应用程序的重要元...

    Jeecg集成activiti.docx

    10. 流程部署:需要使用管理员角色进行流程部署,部署完成以后,即可正常使用activiti项目。 11. 代码编写:需要编写自己流程的代码和页面,需要注意修改内部的内容,尤其是页面设计,可能需要添加申请表单的页面,...

    activiti5.22jar包_activiti_

    Activiti 是一个开源的工作流和业务自动化引擎,它在Java平台上运行,并且与Spring框架高度集成。这个"activiti5.22jar包"是Activiti 5.22版本的打包文件,其中包含了所有运行Activiti所需的核心库和依赖。在本文中...

    activiti designer5.18离线安装插件(activiti-designer5.18.0.rar)

    这款离线安装插件的出现,使得用户无需在线连接即可在Eclipse环境中进行Activiti工作流的开发。以下是关于Activiti Designer 5.18及其相关知识点的详细介绍: 1. **Activiti**:Activiti 是一个开源的工作流和业务...

    Activiti7.0源码官方完整版

    - **API 设计**:学习如何使用 Activiti 提供的 API 进行流程定义、启动、查询、干预等操作。 - **扩展性**:研究如何通过插件机制对 Activiti 进行定制和扩展。 总的来说,Activiti7.0 源码是一个宝贵的资源,对于...

    activiti-explorer.rar_Activiti Explorer_Explorer_activiti_activi

    activiti 5.22 explorer的war包

    activiti-explorer-eclipse项目

    开发者可以进一步研究源代码,理解其内部工作原理,并根据项目需求进行定制和扩展。 总结来说,activiti-explorer-eclipse项目为Eclipse开发人员提供了一站式的解决方案,以便他们在IDE内实现和管理基于Activiti的...

    activiti 会签投票统计

    例如,它可能检查所有子任务是否已完成,或者检查投票结果是否满足结束条件,然后通知 Activiti 流程继续进行。 4. **事件监听器**: `VoteTaskCompleteListener.java` 是一个自定义事件监听器,它会在任务完成...

    Activiti5.4 用户指南-中文版

    本指南聚焦于 Activiti 5.4 版本,该版本在之前的版本基础上进行了优化和增强,以提供更好的性能和用户体验。 在Activiti 5.4中,用户可以体验到以下关键知识点: 1. **流程定义**:Activiti 使用 BPMN 2.0...

    activiti-6.0.0.zip

    activiti-6.0.0.zip 工作流官网包 (如果没有积分可以直接Q我:499384808,免费分享) 1. database里放着各种数据库的建表、删表、升级语句数据库包括db2、h2、hsql、mssql、mysql、oracle、postgres 2. libs 相关...

    activiti 工作流详细文档教程+eclipse安装activiti插件

    通过本教程,开发者不仅可以了解Activiti工作流的基本概念,还能学会在Eclipse环境中使用Activiti Designer进行流程设计,从而提升业务流程的开发效率和质量。文档《Activiti工作流课程.doc》应该详细讲解了这些内容...

Global site tag (gtag.js) - Google Analytics