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");
Activiti-03-query api的更多相关文章
- [Liferay6.2]Liferay Dynamic Query API示例
介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...
- elasticsearch6.7 05. Document APIs(7)Update By Query API
6.Update By Query API _update_by_query 接口可以在不改变 source 的情况下对 index 中的每个文档进行更新.这对于获取新属性或其他联机映射更改很有用.以 ...
- elasticsearch6.7 05. Document APIs(5)Delete By Query API
4.Delete By Query API _delete_by_query API可以删除某个匹配条件的文档: POST twitter/_delete_by_query { "query ...
- 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查
目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
- Elasticsearch学习笔记-Delete By Query API
记录关于Elasticsearch的文档删除API的学习 首先官网上Document APIs介绍了 Delete API 和Delete By Query API. Delete API可以通过指定 ...
- elasticsearch 基础 —— Update By Query API
Update By Query API 最简单的用法是_update_by_query在不更改源的情况下对索引中的每个文档执行更新.这对于获取新属性或其他一些在线映射更改很有用 .这是API: POS ...
- elasticsearch 基础 —— Delete By Query API
Delete By Query API _delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除.例如: POST twitter/_delete_by_query { &q ...
- Activiti(1) - TaskRuntime API 入门
目录 TaskRuntime API pom.xml 注册TaskRuntime实例 角色与分组 任务事件监听器 DemoApplication 源码 Activiti 是一个自动化工作流框架.它能帮 ...
- elasticsearch 5.x Delete By Query API(根据条件删除)
之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件. bin/plugin install delete-by-query 需 ...
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error war ...
随机推荐
- 【3D数学基础】三维空间折射向量计算
问题:在三维空间中,已知折射率 e .入射角 L 和法线 N. 要求:计算出折射向量 T. 其中: L. N 和 T 都为单位向量. 如图片所示,下面所有的公式都看着这张图片来求解的: 首先,我们必须 ...
- STM32F030系列实现仿位带操作
1.闲言 最近开发的时候,用到了STM32F030F4P6型号的单片机,它只有20个引脚,价格非常便宜,但是功能齐全:定时器.外部中断.串口.IIC.SPI.DMA和WWDG等等,应用尽有,非常适合用 ...
- 当使用composer安装组件时提示错误
这种情况可以重装一下fxp/composer-asset-plugin 具体命令: php composer.phar global require "fxp/composer-asset- ...
- Oracle 11g的安装
选择对应版本的Oracle 11g: 解压之后,点击"setup.exe"进行安装. 如果希望接受Oracle的广告邮件可以留下自己的电子邮件地址, 如果希望通过My Oracle ...
- JS组件系列——再推荐一款好用的bootstrap-select组件,亲测还不错
前言:之前分享过两篇bootstrap下拉框的组件:JS组件系列——两种bootstrap multiselect组件大比拼 和 JS组件系列——Bootstrap Select2组件使用小结 ,收 ...
- Spring AOP术语解释
话说,越来越感觉有些人解释概念真的是晦涩难懂,我刚开始学习Spring aop时,对那些切入点,连接点,引入等概念搞得头疼.太多人就直接照搬定义,让我们这些初学者如何理解啊.下面是我找了大量的博客,终 ...
- Day-1: Python准备知识
python简介 不同于c语言这种贴近硬件的言语,Python是用来编写应用程序的高级编程语言.Python是一款开源软件,所以它有非常完善的代码库,宝库内置的基本库和众多开发者提供的第三方库.这就允 ...
- [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)
本系列目录:Abp介绍和经验分享-目录 Abp的模块系统支持插件机制,可以在指定目录中放置模块程序集,然后应用程序启动时会搜索该目录,加载其中所有程序集中的模块. 如何使用这套机制进行功能插件化开发? ...
- 关于request和response的中文乱码问题
相信大家在开发Web项目中都会遇到中文的请求乱码和响应乱码的情况,现在给大家梳理一下并提供解决方案. 1.为什么会出现乱码: 出现乱码的根本原因是浏览器和服务器的解码方式不一致引起的.所以我们统一编码 ...
- svn to git
SVN to git 配置用户: #git config --global user.name "root"#git config --global user.email &quo ...