博客详情

activiti中的服务任务(ServiceTask) (原创)

作者: 朝如青丝暮成雪
发布时间:2021-11-02 23:34:17  文章分类:java编程   阅读(1799)  评论(0)

服务任务不同于用户任务(需人工处理),服务任务一般是一段可自动执行的任务而无需人工干预。


例如:当用户完成"任务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);
    }



关键字:  服务任务  activiti
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号