zoukankan      html  css  js  c++  java
  • Activiti-03-query api

    Query API

    有两种方式从引擎中查询数据, 查询 API 和本地查询。

    API方式:

      List<Task> tasks = taskService.createTaskQuery()
             
    .taskAssignee("kermit")
             
    .processVariableValueEquals("orderId","0815")
             
    .orderByDueDate().asc()
             
    .list();

    本地查询方式(写sql):
    List<Task> tasks = taskService.createNativeTaskQuery()
           
    .sql("SELECT count(*) FROM "+ managementService.getTableName(Task.class)+" T WHERE T.NAME_ = #{taskName}")
           
    .parameter("taskName","gonzoTask")
           
    .list();

         
    long count = taskService.createNativeTaskQuery()
           
    .sql("SELECT count(*) FROM "+ managementService.getTableName(Task.class)+" T1, "
                   
    + managementService.getTableName(VariableInstanceEntity.class)+" V1 WHERE V1.TASK_ID_ = T1.ID_")
           
    .count();

    Expressions

    Activiti 使用UEL( Unified Expression Language )作为表达式解析

    Value expression: 解析为一个值,默认所有的流程变量都可以被使用  所有的spring bean也可以被使用

     在流程定义文件中,可以使用${XXX}这样的表达式

    ${myVar}
    $
    {myBean.myProperty}

    Method expression:继续为一个方法可能有参数,如果没有参数,也要加“()”. 

    ${printer.print()}
    $
    {myBean.addNewOrder('orderName')}
    $
    {myBean.doSomething(myVar, execution)}

    表达式支持解析简单的 基本类型 bean map array list

    Unit testing

    单元测试3中, org.activiti.engine.test.ActivitiTestCase 必须被继承

     setup()测试方法中,processEngine 将被 activiti.cfg.xml初始化,为了指定不同的配置文件getConfigurationResource()方法需要被重写

    继承  ActivitiTestCase 之后,可以使用org.activiti.engine.test.Deployment注解

    在测试之前,, 一个形如 testClassName.testMethod.bpmn20.xml的资源文件和测试类在一个包中 , 将被部署 deployed.

    public class MyBusinessProcessTest extends ActivitiTestCase{
       
     
    @Deployment
     
    publicvoid testSimpleProcess(){
        runtimeService
    .startProcessInstanceByKey("simpleProcess");
       
       
    Task task = taskService.createTaskQuery().singleResult();
        assertEquals
    ("My Task", task.getName());
       
        taskService
    .complete(task.getId());
        assertEquals
    (0, runtimeService.createProcessInstanceQuery().count());
     
    }
    }

     在单元测试4中,org.activiti.engine.test.ActivitiRule Rule 必须被使用,通过Rule,流程引擎和服务可以被获取 。Deployment注解也会被用到

       /**
         * 1,要测试的文件必须与测试类在同一包下面
         * 2,此流程文件名是:  类名.方法名 .bpmn20.xml
         */

    public class MyBusinessProcessTest{
     
     
    @Rule
     
    publicActivitiRule activitiRule =new ActivitiRule();
     
     
    @Test
     
    @Deployment
     
    publicvoid ruleUsageExample(){
       
    RuntimeService runtimeService = activitiRule.getRuntimeService();
        runtimeService
    .startProcessInstanceByKey("ruleUsage");
       
       
    TaskService taskService = activitiRule.getTaskService();
       
    Task task = taskService.createTaskQuery().singleResult();
        assertEquals
    ("My Task", task.getName());
       
        taskService
    .complete(task.getId());
        assertEquals
    (0, runtimeService.createProcessInstanceQuery().count());
     
    }
    }

    在 in-memory H2 database进行单元测试 浏览器输入 http://localhost:8082,设置数据库相关信息,进入数据库查询页面

    流程引擎在web应用

    ProcessEngine 是线程安全的,在web应用中看,容器启动,关闭引擎跟着启动和关闭

    下面是简单的写一个ServletListener,启停引擎

    public class ProcessEnginesServletContextListener implements ServletContextListener{
     
     
    public void contextInitialized(ServletContextEvent servletContextEvent){

               // ProcessEngines.init()方法会查找classpath中
    activiti.cfg.xml 资源文件,创建ProcessEngine 


    ProcessEngines.init();
     
    }

     
    publicvoid contextDestroyed(ServletContextEvent servletContextEvent){
       
    ProcessEngines.destroy();
     
    }

    }
    取ProcessEngines对象可以使用  ProcessEngines.getDefaultProcessEngine()或
    ProcessEngines.getProcessEngine("myName"); 
    
    
    
    ----------- 赠人玫瑰,手有余香     如果本文对您有所帮助,动动手指扫一扫哟   么么哒 -----------


    未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负
  • 相关阅读:
    C# 获取命名空间对应的程序集位置
    启用/禁用以太网的批处理,用于一个网卡切换本地网络和wifi使用(Win10)
    Gogs/Gitea 在 docker 中部署
    bash echo color
    python运行httpserver
    更改当前启动项,开关Hyper-V
    Win10更改CMD控制台的代码页和字体和字号
    ubuntu 编译 vim+lua
    CPU Usage (C#) 测试
    单击改变input的边框颜色
  • 原文地址:https://www.cnblogs.com/xin1006/p/3374736.html
Copyright © 2011-2022 走看看