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());
}
}
}