Activiti(13) - 接收活动(receiveTask,即等待活动)

        接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。
        在任务创建后,意味着流程会进入等待状态,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。

   1、流程图

    

    2、部署流程定义+启动流程实例

    
        /**
	 * ReceiceTask任务,机器自动完成的任务
	 * 只会在act_ru_execution表中产生一条数据
	 * @throws Exception
	 */
	
	@Test
	public void testExecution() throws Exception {
		// 1 发布流程
		InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");
		InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");
		processEngine.getRepositoryService()//
						.createDeployment()//
						.addInputStream("receiveTask.bpmn", inputStreamBpmn)//
						.addInputStream("receiveTask.png", inputStreamPng)//
						.deploy();
		
		// 2 启动流程
		ProcessInstance pi = processEngine.getRuntimeService()//
							.startProcessInstanceByKey("receiveTaskDemo");
		System.out.println("pid:" + pi.getId());
		String pid = pi.getId();
		
		// 3查询是否有一个执行对象在描述”汇总当日销售额“
		Execution e1 = processEngine.getRuntimeService()//
						.createExecutionQuery()//
						.processInstanceId(pid)//
						.activityId("汇总当日销售额")//
						.singleResult();

		// 4执行一堆逻辑,并设置流程变量
		Map<String,Object> vars = new HashMap<String, Object>();
		vars.put("当日销售额", 10000);
		//  5流程向后执行一步:往后推移e1,使用signal给流程引擎信号,告诉他当前任务已经完成了,可以往后执行
		processEngine.getRuntimeService()
				.signal(e1.getId(),vars);
		
		// 6判断当前流程是否在”给老板发短信“节点
		Execution e2 = processEngine.getRuntimeService()//
						.createExecutionQuery()//
						.processInstanceId(pid)//
						.activityId("给总经理发短信")//
						.singleResult();
		
		// 7获取流程变量
		Integer money = (Integer) processEngine.getRuntimeService()//
								.getVariable(e2.getId(), "当日销售额");
		System.out.println("老板,今天赚了" +money);
		// 8向后执行一步:任务完成,往后推移”给老板发短信“任务
		processEngine.getRuntimeService()//
				.signal(e2.getId());
		
		
		// 9查询流程状态
	    pi = processEngine.getRuntimeService()//
	    				.createProcessInstanceQuery()//
	    				.processInstanceId(pid)//
	    				.singleResult();
	    if(pi==null){
	    	    System.out.println("流程正常执行!!!,已经结束了");
	    }
	}

说明:
       当前任务(一般指机器自动完成,但需要耗费一定时间的工作)完成后,向后推移流程,可以调用runtimeService.signal(executionId),传递接收执行对象的id。





猜你喜欢

转载自blog.csdn.net/qq_31784189/article/details/80885295