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

来源:互联网 发布:python except break 编辑:程序博客网 时间:2024/06/06 16:59
ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine();// 部署流程@Testpublic 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()): // 部署idSystem.out.println(deployment.getName()); // 部署名称}// 启动流程@Testpublic void startProcessInstance() {// 定义流程的keyString processDefinitionKey = "helloworld";ProcessInstance pi = processEngine.getRuntimeService() // 与执行流程实例和对象相关的service.startProcessInstanceByKey(processDefinitionKey); //使用key启动流程实例System.out.println("流程实例ID:" + pi.getId());System.out.println("流程定义ID:" + pi.getProcessDefinitionId());}// 查询当前人任务@Testpublic 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("##############################################");}}}/** 完成我的任务 */@Testpublic void completeMyPersonalTask() {// 任务IDString 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);}




原创粉丝点击