服务任务不同于用户任务(需人工处理),服务任务一般是一段可自动执行的任务而无需人工干预。
例如:当用户完成"任务1"后,想自动执行一个跑批任务处理后台数据库表的数据,那么只需要在"任务1"节点后放置一个ServiceTask(需要指定该服务任务所要执行的java类或spring容器的bean) 即可 ,
服务任务执行完成后,再继续执行任务2 。
服务任务的配置
例1:
<serviceTask id="servicetask1" name="服务任务" activiti:delegateExpression="${myServiceTask}"></serviceTask>
使用委托表达式,UEL表达式中myServiceTask必须是流程引擎(流程变量)或spring容器中的bean的名称,且这个bean必须实现 JavaDelegate接口(实现其中execute方法)
@Component("myServiceTask")
public class MyServiceTask implements Serializable,JavaDelegate {
private static final long serialVersionUID = 1L;
@Override
public void execute(DelegateExecution execution) throws Exception {
System.out.println("MyTaskService开始执行, 自动任务:自动执行一些用户自定义的逻辑");
String id = execution.getId();
String processInstanceId = execution.getProcessInstanceId();
String businessKey = execution.getProcessBusinessKey();
String currentActivityName = execution.getCurrentActivityName();
String processDefinitionId = execution.getProcessDefinitionId();
String key1 =execution.getVariable("key1",String.class);
System.out.println("key1:"+key1);
System.out.println("执行实例id:"+id);
System.out.println("流程实例id:"+processInstanceId);
System.out.println("流程实例businessKey:"+businessKey);
System.out.println("当前活动名称:"+currentActivityName);
System.out.println("流程定义id:"+processDefinitionId);
}
}
例2:
<serviceTask id="servicetask1" name="服务任务" activiti:expression="${myBean.hello(hname)}"></serviceTask>
使用expression表达式,myBean必须是流程引擎容器(流程变量)或spring容器中的bean,hello是该bean的一个方法,且该方法需传参数(String类型)
参数hname是流程实例中的一个流程变量。
这里使用expression 比delegateExpression可以更加灵活,因为执行的方法可自行编写,这样方法的的参数也可以动态地从流程变量中接收获取。
@Component("myBean")
public class MyBean {
public void hello(String hname){
System.out.println("===myBean执行====");
System.out.println("你好:"+hname);//打印 你好:中国
}
}
@Test
public void completeTask1(){
ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess");
Task task = taskService.createTaskQuery()
.processInstanceId(pi.getProcessInstanceId()).singleResult();
Map<String,Object> vars =new HashMap<>();
vars.put("key1","aaa");
vars.put("key2","bbb");
vars.put("hname","中国");
String taskId =task.getId();
taskService.complete(taskId,vars);
}
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1