如何部署、启动、查询和完成流程

ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine();

// 部署流程
@Test
public void deploymentProcessDefinition() {
	Deployment deployment = processEngine.getRepositoryService() // 与流程定义部署相关service
							.createDeployment() // 创建一个部署对象
							.name("hellowold入门程序") // 添加部署的名称
							.addClasspathResource("diagrams/helloworld.bpnm") // 从classpath资源中加载
							.addClasspathResource("diagrams/helloworld.png")
							.deploy(); // 完成部署
	System.out.println(deployment.getId()): // 部署id
	System.out.println(deployment.getName()); // 部署名称
}

// 启动流程
@Test
public void startProcessInstance() {
	// 定义流程的key
	String processDefinitionKey = "helloworld";
	ProcessInstance pi = processEngine.getRuntimeService() // 与执行流程实例和对象相关的service
						.startProcessInstanceByKey(processDefinitionKey); //使用key启动流程实例
	System.out.println("流程实例ID:" + pi.getId());
	System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
}

// 查询当前人任务
@Test
public void findMyProcessTask() {
	String assignee = "张三";
	List<Task> list = processEngine.getTaskService() // 与正在执行任务相关的service
					.createTaskQuery() // 创建查询对象
					.taskAssignee(assignee) // 指定办理人
					.list();
	if(list != null && list.size() > 0) {
		for(Task task : list) {
			System.out.println("任务ID:" + task.getId());
			System.out.println("任务名称:" + task.getName());		
			System.out.println("任务创建时间:" + task.getCreateTime());
			System.out.println("任务办理人:" + task.getAssignee());
			System.out.println("流程实例ID:" + task.getProcessInstanceId());
			System.out.println("执行对象ID:" + task.getExecutionId());		
			System.out.println("流程对象ID:" + task.getProcessDefinitionId());
			System.out.println("##############################################");
		}
	}
}

/** 完成我的任务 */
@Test
public void completeMyPersonalTask() {
	// 任务ID
	String taskId = "104";
	processEngine.getTaskService().complete(taskId);
	System.out.println("完成任务;任务ID:" +taskId);
}

/**模拟设置和获取流程变量场景*/
public void setAndGetvariables() {
	/**正在执行流程实例、对象*/
	RuntimeService runtimeService = processEngine.getRuntimeService();
	/** 正在执行任务*/
	TaskService taskService = processengine.getTaskService();
	/** 设置流程变量 */
	runtimeService.setVariable(executionId, variableName, value) // 执行对象id,流程变量名称,设置流程变量的值(一次设置一个)
	runtimeService.setVariables(executionId, variables) // 执行对象id,map集合设置流程变量值(可设置多个)
	taskService.setVariable(taskId, variableName, value) // 任务id,流程变量名称,设置流程变量的值
	tasskService.setVariables(taskId, variables) // 任务id,map集合设置流程变量值
	runtimeService.startProcessInstanceByKey(processDefinitionKey, variables) // 启动流程实例时,设置流程变量
	taskService.complete(taskId, variables) // 完成任务时, 设置流程变量
}

/** 设置流程变量 */
public void setVariables() {
	
	TaskService taskService = processEngine.getTaskService();
	String taskId = "1504";
	// 1.使用基本数据类型
	taskService.setVariableLocal(taskId, "请假天数", 3); // 与任务id绑定
	taskService.setVariable(taskId, "请假日期", new Date());
	taskService.setVariable(taskId, "请假原因", "回家探亲");
	// 2.使用javabean类型
	Person p = new Person();
	p.setId(10);
	p.setName("翠花");
	taskService.setVariable(taskId, "人员信息", p);
}

/** 获取流程变量 */
public void getVariables() {
	TaskService taskService = processengine.getTaskService();
	String taskId = "1504";
	// 1.使用基本数据类型获取
	Integer days = (Integer) taskService.getVariable(taskId, "请假天数");
	Date date = (Date) taskService.getVariable(taskId, "请假日期");
	String resean = (String) taskService.getVariable(taskId, "请假原因");

	// 2.使用javabean类型获取
		Person p = (Person)taskService.getVariable(taskId, "人员信息");
		System.out.println(p.getId() + " " + p.getName());
}

/** 查询流程变量历史表  */
public void findHistoryProcessVariables() {
	List<HistoricVariableInstance> list = processEngine.getHistoryService()
			.createHistoricVariableInstanceQuery() // 创建一个历史的流程变量查询对象
			.variableName("请假天数")
			.list();
	
	if(list != null && list.size() > 0) {
		for(HistoricVariableInstance hvi : list) {
			System.out.println(hvi.getId() + " " + hvi.getProcessInstanceId() + " " + hvi.getVariableName() + " " +
                  hvi.getVariableTypeName() + " " + hvi.getValue());
		}
	}
}
// 如何动态指定办理人
public void startProcessInstance() {
	String processDefinitionKey = "task";
	// 设置流程变量
	Map<String, Object> variables = new HashMap<String, Object>();
	variables.put("userID", "周芷若");
	
	ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
	System.out.println("流程实例ID:" + pi.getId());
	System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
}
// 通过监听器来动态指定办理人
// 新建类
public class TaskListenerImpl implements TaskListener {
	// 用来指定任务办理人
	public void notify(DelegateTask delegateTask) {
		// 指定个人任务的办理人,也可以指定组任务的办理人
		degegateTask.setAssignee("灭绝师太");
		// 然后在.bpm的listener中添加此类全路径
	}
}
// 组任务用半角,分割,可以在mainconfig中的candidateUsers指定
// 拾取任务,将组任务分给个人任务,指定任务的办理人字段
public void claim() {
	String taskId = "6905";
	// 分配的个人任务,(可以是组任务中的成员,也可以是非组任务的成员)
	String userId = "大大";
	processEngine.getTaskService().claim(taskId, userId);
}
/**查询当前人的组任务*/
public void findMyGroupTask() {
    	String candidateUser = "小A";
    	List<Task> list = processEngine.getTaskService()	// 与正在执行的任务管理相关的service
	.createTaskQuery()	// 创建任务查询对象
	.taskCandidateUser(candidateUser)	// 组任务的办理人
	.orderByTaskCreateTime().ase()	// 使用创建时间的升序排序
	.list();

	if(list != null && list.size() > 0) {
		for(Task task : list) {
			System.out.println("任务ID:" + task.getId());
			System.out.println("任务名称:" + task.getName());
			System.out.println("任务创建时间:" + task.getCreateTime());
			System.out.println("任务办理人:" + task.getAssignee());
			System.out.println("流程实例ID:" + task.getProcessInstanceId());
			System.out.println("执行对象ID:" + task.getExecutionId());
			System.out.println("流程定义ID:" + task.getProcessDefinitionId());
		}
	}	
}


/**查询正在执行的任务办理人表*/
public void findRunPersonTask() {
	String task = "6204";
	List<IdentityLink> list = processEngine.getTaskService()
			.getIdentityLinksForTask(taskId);
	if(list != null && list.size() > 0) {
		for(IdentityLink identityLink : list) {
			System.out.println(identityLink.getTaskId() + " " + identityLink.getType() + " " + identityLink.getProcessInstanceId() + " " + identityLink.getUserId());
		}
	}
}





猜你喜欢

转载自blog.csdn.net/jamesge2010/article/details/77938977