4. 任务管理
4.1 指定办理人
4.2 使用UEL
4.2.1 UEL-VALUE
Map<String,Object> variable = new HashMap<>();
//指定当前节点的办理人是WangWu
variable.put("userName","WangWu");
runtimeService.startProcessInstanceById("leave:5:110003",variable);
执行任务
List<Task> taskList = taskService.createTaskQuery().taskAssignee("WangWu").list();
for (Task task : taskList) {
//提交任务到下一个代理人
Map<String,Object> variable = new HashMap<>();
//指定处理人是ZhaoLiu
variable.put("adminName","ZhaoLiu");
taskService.complete(task.getId(),variable);
}
也可以绑定pojo实体类
注意实体类必须实现java.io.Serializable接口
public class User implements Serializable {
private Integer id;
private String name;
//getter/setter方法略
}
Map<String, Object> variable = new HashMap<>();
//绑定实体类属性,${user.name}就会调用user对象的getName()方法
User user = new User();
user.setName("小明");
variable.put("user", user);
runtimeService.startProcessInstanceById("leave:6:127503", variable);
4.2.2 UEL-METHOD
执行步骤
1) 设置节点的执行人为${bean.methodName(param)} ,其中bean方法是我们注入到spring中的一个bean的id,methodName是bean对应的类中的方法名。
2) 将method方法注入到activiti的processEngineConfiguration的bean中(在我们的activiti.cfg.xml中)
3) 启动一个流程设置全局变量param作为启动参数.
package demo.leave;
public class CommandMethod {
public String getUserById(int userId){
//模拟数据库中查询的数据
return "activiti"+userId;
}
}
<bean id="commandMethod" class="demo.leave.CommandMethod"/>
<!--带数据源-->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<property name="databaseSchemaUpdate" value="true"/>
<property name="beans">
<map>
<entry key="commandMethod" value-ref="commandMethod"></entry>
</map>
</property>
</bean>
Map<String, Object> variable = new HashMap<>();
//绑定方法中参数
variable.put("userId", 123);
runtimeService.startProcessInstanceById("leave:10:167503", variable);
4.3 使用监听器
package demo.leave;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class MyTaskListener implements TaskListener {
//设置待办事宜的处理人
@Override
public void notify(DelegateTask delegateTask) {
delegateTask.setAssignee("zhangsan");
}
}
发布之后启动流程,会自动设定处理人。