activiti5.20简单介绍(八) -- 流程操作续

本文介绍了Activiti工作流中的核心概念,包括流程定义、流程实例、任务管理和流程变量等。详细阐述了如何查询和操作流程定义,如启动流程、删除流程实例、任务的委派与完成,以及设置和获取流程变量。还提到了流程历史记录的查询,如历史活动、流程定义和任务实例等。
摘要由CSDN通过智能技术生成

1.流程定义

流程定义是在部署一个流程之后生成,其中包含流程部署的id、流程定义的id、流程定义的key等内容,其中流程定义的id生成策略为:

(流程定义的key) : (当前版本号) : (随机值)

例如:Business:1:4

流程不支持修改操作,其中所有的修改操作使用更新流程来完成,这样可以保证有旧的流程在运行时不会受到影响,下次启动时会默认启动最新的流程。

(1)查询流程定义:

 

		RepositoryService repositoryService = engine.getRepositoryService();
		
		//查询流程定义,可以排序,查询数量,分页等
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
				.orderByDeploymentId().asc().list();
		ProcessDefinition processDefinition = null;
		if(list!=null && list.size()>0){
			processDefinition = list.get(0);
			System.out.println("流程组织机构:	"+processDefinition.getCategory());
			System.out.println("流程部署ID:	"+processDefinition.getDeploymentId());
			System.out.println("流程描述:		"+processDefinition.getDescription());
			System.out.println("流程图片文件:	"+processDefinition.getDiagramResourceName());
			System.out.println("流程定义ID:	"+processDefinition.getId());
			System.out.println("流程定义key	"+processDefinition.getKey());
			System.out.println("流程设计名称:	"+processDefinition.getName());
			System.out.println("流程定义文件:	"+processDefinition.getResourceName());
			System.out.println("流程所有人ID:	"+processDefinition.getTenantId());
			System.out.println("流程版本:		"+processDefinition.getVersion());
		}

(2)查询最新版本:

a) 之前版本查询最新版本时可以使用

 

		RepositoryService repositoryService = engine.getRepositoryService();
		
		//将流程按照版本的升序排列得到一个所有流程的集合
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
		
		//使用map集合存储得到的集合,同时将所有低版本的过滤
		Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
		if(list!=null && list.size()>0){
			for (ProcessDefinition pd : list)
			{
				//新版本数据将会替代就版本数据
				map.put(pd.getKey(), pd);
			}
		}
	
		
		//循环遍历输出
		for (ProcessDefinition processDefinition : map.values())
		{
			System.out.println("流程组织机构:	"+processDefinition.getCategory());
			System.out.println("流程部署ID:	"+processDefinition.getDeploymentId());
			System.out.println("流程描述:		"+processDefinition.getDescription());
			System.out.println("流程图片文件:	"+processDefinition.getDiagramResourceName());
			System.out.println("流程定义ID:	"+processDefinition.getId());
			System.out.println("流程定义key	"+processDefinition.getKey());
			System.out.println("流程设计名称:	"+processDefinition.getName());
			System.out.println("流程定义文件:	"+processDefinition.getResourceName());
			System.out.println("流程所有人ID:	"+processDefinition.getTenantId());
			System.out.println("流程版本:		"+processDefinition.getVersion());
			System.out.println("#############################");
		}

b) 当前版本提供了一个便捷的API,可以直接查询最新版本

 

repositoryService.createProcessDefinitionQuery().latestVersion().singleResult();

 

(3)删除流程定义:

删除流程定义需要使用流程部署id删除部署的流程,流程定义便会相应删除。

 

		RepositoryService repositoryService = engine.getRepositoryService();
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
				.orderByDeploymentId().asc().list();
		
		ProcessDefinition processDefinition = null;
		if(list!=null && list.size()>0){
			processDefinition = list.get(0);
			String id = processDefinition.getDeploymentId();
			// 级联删除流程,不论是否启动,都会删除
			repositoryService.deleteDeployment(id, true);
		}

(4)挂起和激活流程:

当前API提供了一个挂起流程的操作,如果当前流程不使用的话可以将之挂起,使之不能启动。

 

		RepositoryService repositoryService = engine.getRepositoryService();
		//挂起流程定义,挂起后不能启动
		//repositoryService.suspendProcessDefinitionByKey("SF");
		
		//激活流程定义,激活后可以启动
		repositoryService.activateProcessDefinitionByKey("SF");

 

 

2.流程实例

在流程启动之后会生成相应的流程实例记录,当前流程实例表示此流程正在运行,如果流程结束,流程实例相应删除,同时历史记录会更新。

(1)启动流程

 

		//流程运行服务
		RuntimeService runtimeService = engine.getRuntimeService();
		
		
		//1.使用流程定义的id启动流程实例,返回值为流程实例对象
		//ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
		
		//2.使用流程定义的key启动流程实例,推荐使用
		//同一个流程key相同,不同的是版本,使用key启动可以默认启动最新版本的流程
		ProcessInstance processInstance = runtimeService.startProcessInstanceById(key);
		
		//流程实例中包含的信息
		System.out.println("当前活动节点	"+processInstance.getActivityId());
		System.out.println("关联业务键:	"+processInstance.getBusinessKey());
		System.out.println("流程部署id:	"+processInstance.getDeploymentId());
		System.out.println("流程描述:		"+processInstance.getDescription());
		System.out.println("流程实例id:	"+processInstance.getId());
		System.out.println("流程实例名称:	"+processInstance.getName());
		System.out.println("父流程id:		"+processInstance.getParentId());
		System.out.println("流程定义id:	"+processInstance.getProcessDefinitionId());
		System.out.println("流程定义key:	"+processInstance.getProcessDefinitionKey());
		System.out.println("流程定义名称:	"+processInstance.getProcessDefinitionName());
		System.out.println("流程实例id:	"+processInstance.getProcessInstanceId());
		System.out.println("流程所属人id:	"+processInstance.getTenantId());
		System.out.println("流程定义版本:	"+proces
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值