zoukankan      html  css  js  c++  java
  • activiti工作流引擎学习(三)

    5、接收任务活动(receiveTask,即等待活动)不是一个任务节点
    接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数据库中;
    在任务创建后,意味着流程会进入等待状态,知道引擎接收了一个特定的消息,这会触发流程穿过接收任务继续执行;

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

    6、个人任务(userTask,即用户操作的任务)Assignee
    6.1、之前的做法是直接把办理人放在了xml中,不够灵活
    6.2、分配个人任务方式二(使用流程变量)
    6.3、分配个人任务方式三(使用类动态指定,实现TaskListener接口)
    6.4、分配个人任务从一个人指定到另一个人(任务认领,比如这个人请假了,可以指派给另一个人处理)

    /**
    	 * 启动流程实例,使用流程变量指定审批人
    	 * @return
    	 */
    	@RequestMapping("sequence/starttaskOne")
    	public String startSequenceFlow(){
    		
    		String processDefinitionKey = "taskOne";
    		
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("userId", "xxx");
    		
    		//正在执行的流程实例和执行对象相关的service
    		RuntimeService runtimeService = processEngine.getRuntimeService();
    		
    		//使用流程定义的key启动流程实例,key对应的是bpmn文件中的id,默认是最新版本的流程启动
    		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey,map);
    		
    		System.out.println(processInstance.getId() + processInstance.getProcessDefinitionId());
    		
    		return processInstance.getProcessDefinitionId();
    	}

    7、组任务分配 Condidate users

    act_ru_identitylink : 任务办理人表(个人任务,组任务);个人任务会有一条数据,组任务会有两条数据,type不一样(参与者,候选者)
    act_ru_identitylink : 历史任务办理人表(个人任务,组任务)

    7.1、拾取组任务分配为个人任务,指定任务人员可以是非组内成员
    还可以将个人任务回退为组任务,前提之前必须是一个组任务,将assignee设置为null即可

    7.2、向组任务中添加成员 / 删除成员

    7.3、分配任务的三种方式: 写在xml中、使用流程变量、使用类

    package com.controller;
    /**
    *使用类分配任务
    */
    import org.activiti.engine.delegate.DelegateTask;
    import org.activiti.engine.delegate.TaskListener;
    
    public class TaskListenerImpl implements TaskListener {
    
    	@Override
    	public void notify(DelegateTask task) {
    		//设置个人任务
    		//task.setAssignee("");
    		
    		//设置组任务
    		task.addCandidateUser("小A");
    		task.addCandidateUser("小B");
    		task.addCandidateUser("小C");
    		
    	}
    
    }
    

      

    /**
    	 * 查询当前人的个人任务
    	 * @return
    	 */
    	@RequestMapping("sequence/findGroupOne")
    	public String findGateWayTask(){
    		
    		String assignee = "daF";
    		
    		List<Task> list = processEngine.getTaskService()
    		.createTaskQuery()
    		.taskAssignee(assignee).list();
    		
    		if(!CollectionUtils.isEmpty(list)){
    			for (Task task : list) {
    				System.out.println(task.getAssignee());
    				System.out.println(task.getId());
    				System.out.println(task.getName());
    				System.out.println(task.getExecutionId());
    			}
    		}
    		
    		System.out.println("****************");
    		
    		return list.toString();
    	}
    	
    	/**
    	 * 查询正在执行的的任务办理人表
    	 */
    	@GetMapping("group/findP")
    	public String findPersonal(){
    		
    		String taskId = "57509";
    		
    		List<IdentityLink> links = processEngine.getTaskService()
    						.getIdentityLinksForTask(taskId);
    		
    		for (int i = 0; i < links.size(); i++) {
    			System.err.println(links.get(i).getUserId());
    		}
    		
    		return String.valueOf(links.size());
    	}
    	/**
    	 * 查询历史任务办理人表
    	 */
    	@GetMapping("group/findHisP")
    	public String findHisPersonal(){
    		
    		String taskId = "57509";
    		
    		List<HistoricIdentityLink> links = processEngine.getHistoryService()
    						.getHistoricIdentityLinksForTask(taskId);
    		
    		for (int i = 0; i < links.size(); i++) {
    			System.err.println(links.get(i).getUserId());
    		}
    		
    		return String.valueOf(links.size());
    	}
    	
    	/**
    	 * 拾取任务,将组任务分给个人任务,指定任务的办理人
    	 * @return
    	 */
    	@GetMapping("group/claim")
    	public String claim(){
    		
    		String taskId = "57509";
    		String userId = "daF";
    		
    		processEngine.getTaskService()
    				.claim(taskId, userId);
    		
    		return "success!";
    	}
    	
    	/**
    	 * 将个人任务回退回组任务
    	 * @return
    	 */
    	@GetMapping("group/returnClaim")
    	public String returnClaim(){
    		
    		String taskId = "57509";
    		
    		processEngine.getTaskService()
    				.claim(taskId, null);
    		
    		return "success!";
    	}
    	
    	/**
    	 * 向组任务中添加人
    	 * @return
    	 */
    	@GetMapping("group/addUser")
    	public String addGroupUser(){
    		
    		String taskId = "57509";
    		
    		processEngine.getTaskService()
    					.addCandidateUser(taskId, "大s");
    		
    		
    		return "success!";
    	}
    	
    	/**
    	 * 向组任务添删除人
    	 * @return
    	 */
    	@GetMapping("group/delUser")
    	public String delGroupUser(){
    		
    		String taskId = "57509";
    		
    		String userId = "大s";
    		
    		processEngine.getTaskService()
    			.deleteCandidateUser(taskId, userId);
    		
    		return "success!";
    	}
    

      

    7.4、工作流定义的角色组 IdentityService(组织机构管理)

    act_id_group: 角色表
    act_id_user :用户表
    act_id_membership :用户角色关系表

    /**
    	 * 部署
    	 * @return
    	 */
    	@GetMapping("sequence/deployCandidateGroup")
    	public String deploySequenceFlow(){
    		
    		InputStream bpmn = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.bpmn");
    		InputStream png = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.png");
    		
    		Deployment deployment = processEngine.getRepositoryService().createDeployment().name("组任务")
    			.addInputStream("cadinerGroup.bpmn", bpmn)//与资源文件名称要一致
    			.addInputStream("cadinerGroup.png", png)
    			.deploy();
    		
    		System.err.println(deployment.getKey() + "---" + deployment.getName());
    		
    		//添加用户角色组
    		IdentityService identityService = processEngine.getIdentityService();
    		
    		//创建角色
    		//identityService.saveGroup(Group);;
    		
    		//创建用户
    		//identityService.saveUser(user);
    		
    		//创建角色用户的关联关系
    		//identityService.createMembership(userId, groupId);
    		
    		System.out.println("添加组织机构成功!");
    		
    		return deployment.getId();
    	}
    

      

  • 相关阅读:
    iPhone之Quartz 2D系列--图形上下文(2)(Graphics Contexts)
    UVA 11624 Fire!(二次BFS)
    SQL Server 容易忽略的错误
    ROS探索总结(十九)——怎样配置机器人的导航功能
    关系型数据库与HBase的数据储存方式差别
    Android推送 百度云推送 入门篇
    《深入浅出 Java Concurrency》——原子操作
    字符数组和字符指针的差别
    const指针总结
    Webx框架:Spring Schema 和 Spring Ext
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/11207077.html
Copyright © 2011-2022 走看看