一.定义
任务节点task是jBPM最常用的节点,作用是为某人或某组人创建一个任务。task活动一般用来处理涉及人机交互的活动,流程引擎会停在这里等待人工操作。
二.属性介绍
1. assignee 一个任务分配给指定用户 #{user}
task01.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process name="task01" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="56,127,48,48">
<transition name="to task" to="task" g="-19,-20"/>
</start>
<task name="task" g="166,128,92,52" assignee="#{user}">
<transition name="to wait" to="wait" g="-13,-17"/>
</task>
<state name="wait" g="336,132,92,52"/>
</process>
测试代码:
package com.itstudio.jbpm.task.demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
public class TaskTest01 {
public static final Configuration configuration = new Configuration();
public static final ProcessEngine processEngine=configuration.buildProcessEngine();
public static final RepositoryService repositoryService= processEngine.getRepositoryService();
public static final ExecutionService executionService=processEngine.getExecutionService();
public static final TaskService taskService=processEngine.getTaskService();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TaskTest01 demo = new TaskTest01();
demo.deploy();
demo.test();
}
public void deploy(){
repositoryService.createDeployment()
.addResourceFromClasspath("com/itstudio/jbpm/task/demo/task01.jpdl.xml")
.deploy();
System.out.println("发布成功!");
}
public void test(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("user", "master");
ProcessInstance processInstance = executionService.startProcessInstanceByKey("task01", map);
System.out.println("流程实例ID---->"+processInstance.getId());
System.out.println("流程定义ID---->"+processInstance.getProcessDefinitionId());
List<Task> list = taskService.findPersonalTasks("master");
for(Task tasks : list){
System.out.println("task name:"+tasks.getActivityName());
System.out.println("task user:"+tasks.getAssignee());
System.out.println("task id:"+tasks.getId());
String taskid = tasks.getId();
taskService.completeTask(taskid);
System.out.println("任务完成情况------>"+tasks.STATE_COMPLETED);
System.out.println("完成任务");
}
ProcessInstance instance = executionService.signalExecutionById(processInstance.getId());
System.out.println("是否在wait节点------->"+instance.isActive("wait"));
}
}
2.assignee这样指定给用户 #{user.owner}
这说明程序首先调用user这个名字查找一个对象,并且调用getOwner()来获得用户变量
将上一个例子中的assignee修改为#{user.owner}
<?xml version="1.0" encoding="UTF-8"?>
<process name="task02" xmlns="http://jbpm.org/4.4/jpdl">
<start g="42,124,48,48" name="start1">
<transition g="-10,-11" name&#