Java开源协同办公项目:数据中心,自定义查询语句使用教程
O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置自定义数据查询语句JPQL及对应的视图。
Statement
查询语句是建立在数据表基数上的查询语句配置。配置查询语句后,在应用中可调用执行。
对系统表,目前支持流程平台的待办、已办、待阅、已阅、流程实例、已完成流程实例和阅读的查询操作;还支持内容管理平台的文档查询操作。
对自建表,支持查询、更新和删除操作。
入口
点系统的左上角图标->应用->数据中心平台->具体应用->查询配置打开
查询语句的后台服务
http://{hostip}:20020/x_query_assemble_surface/jest/index.html
查询语句执行依托的后台服务是“executeV2”,如下图
参数说明
uri 参数:
flag: 查询语句的id/名称/别名
mode: data表示获取匹配的具体数据,返回的数据在data标签;count表示获取匹配的数据条目数,返回的数据在 count标签;all表示同时获取count和data数据。
page: 需要返回数据的页码。
size: 每页的数量。
body参数:
filterList: 参见api文档说明 https://www.o2oa.net/api/global.html#StatementFilter
parameter: 过滤条件值参数,对查询语句where语句的形如":person"的参数部分进行赋值有以下规则:
- 参数名称为下列值时,后台自动赋值:person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组)。
- 如果对比的是日期时间,值为 "{ts '2021-04-29 11:01:01'}";如果对比的是日期,值为"{d '2021-04-29'}";如果对比的是时间,值为 "{t '11:01:01'}"。
- 如果运算符用的是 like, noLike,模糊查询,值为 "%{value}%"。
查询语句
语法
查询语句用的是JPA JPQL语句,如 :
select o from tableName o where o.name='zhangsan'
了解JPQL语句可以点击链接查看:https://www.objectdb.com/java/jpa/query/jpql/structure
动态传参
查询语句中的where语句的值可以使用json传入
如:
查询语句的设计为
select o from tableName o where o.name=:n
在调用查询语句服务的时候传入 json
{
"n" : "zhangsan"
}
则最终在后台拼接成的语句为
select o from tableName o where o.name='zhangsan'
了解JPQL语句动态传参可以点击链接查看:https://www.objectdb.com/java/jpa/query/parameter
也可以看本文档的parameter说明,点击查看。
查询配置详细项
语句配置
本区域配置完成后,就可以在服务中使用查询语句。
|
配置项 |
内容 |
说明 |
|
如何创建语句 |
直接编写JPQL创建语句 |
如: SELECT o FROM tempCard o where o.isBranch=:n |
|
通过脚本创建语句 |
可以在查询语句和总数语句中使用脚本编写,可以通过返回字符串,如: return "SELECT o FROM tempCard o where o.isBranch=:n" 另外,在脚本中,可以使用parameters获取传入的parameter参数,见本文的“查询语句的后台服务->参数说明->body参数->parameter”。 |
|
|
访问对象类型 |
系统表 |
指平台创建的表,选择此项后,支持流程平台的待办、已办、待阅、已阅、流程实例、已完成流程实例和阅读的查询操作;还支持内容管理平台的文档查询操作。 |
|
自建表 |
指二次开发人员在数据中心中创建的"数据表" |
|
|
语句类型 |
JPQL语句类型 |
访问对象类型选择“系统表”时,支持select。 访问对象类型选择“自建表”时,支持select\update\delete。 |
|
数据表 |
数据库表名称 |
|
|
字段 |
帮助在语句编辑区域插入字段,不保存至后台。 |
|
|
查询语句 |
查询数据表记录内容的语句 |
后台服务“executeV2”返回的data标签。 |
|
总数语句 |
查询数据表记录条数的语句 |
后台服务“executeV2”返回的count标签。 在进行分页查询的时候,可以在第一次查询执行,翻页的时候不执行,以节省服务器资源。 样例:SELECT count(o.id) FROM tempCard o where o.isBranch=:n |
|
测试语句 |
左侧 |
用json的方式传入语句中的参数 |
|
右侧 |
根据左侧参数执行的结果 |
|
|
视图 |
以配置的形式可视化展现数据 |
详细配置见下一小节。 |
视图配置
视图支持查询语句的可视化展现。具有列式、分页、查询等功能。
基本属性:
|
配置项 |
内容 |
说明 |
|
名称 |
视图名称 |
|
|
别名 |
视图别名 |
|
|
视图样式 |
选择后可切换不同的视图样式风格 |
|
|
显示序号 |
是否显示每列的序号,分页每页序号延续编号 |
|
|
每页行数 |
填写数字 |
每页返回的页数 |
|
隐藏操作条 |
是否显示操作条 操作运行的脚本api可以查看:链接 |
|
|
选择 |
无、单选、多选 |
单选表示可以在视图中选中一行。 多选表示可以在视图中选中多行,并且分页后选中的行值会被保留。 脚本中获取选中行API查看:链接 |
|
无选择隐藏首列 |
选择设置为“无”的时候,是否隐藏系统默认创建的首列。 |
|
|
无数据显示 |
当返回的数据为空时,视图上显示的文本。 |
|
|
默认选中行脚本 |
视图加载每一行的时候运行 |
可以在脚本中使用this.target获取当前行。 this.target.data 为当前行数据 this.target.node 为当前行DOM节点 this.target.row 为当前行对应的平台类对象 this.target.view 为当前视图的平台类对象。 结果return true 表示选中。 如:下面的脚本判断数据中的person和登录用户中文名称匹配即选中。 if(this.target.data.person ==this.session.user.name){ return true; } |
过滤配置:
过滤配置分为“作为默认过滤条件”和“作为自定义过滤”。
作为默认过滤条件为加载视图的时候作为过滤条件。
作为自定义过滤是用户选择条件后点击查询的过滤条件。
默认过滤条件
|
配置项 |
内容 |
说明 |
|
标题 |
过滤标题 |
|
|
参数 |
过滤的参数 |
和查询语句中形如 :field的where条件,见上图。 |
|
数据类型 |
||
|
值 |
输入 |
可以填写固定值,或者系统提供的一些默认公式,比如点击“当前人”,系统会填上@person。 |
|
脚本 |
脚本API请查看链接,this.target指向当前视图的平台类对象。 |
自定义过滤条件
|
配置项 |
内容 |
说明 |
|
选择 |
可选择对应表的所有字段,选择后在标题、路径、数据类型中自动填写数据。不保存在后台 |
|
|
标题 |
过滤标题 |
|
|
路径 |
表别名.字段名 |
见上图。 |
|
数据类型 |
||
|
值 |
用户输入 |
在使用界面提供输入框让用户输入。 |
|
可选 |
脚本API请查看链接,this.target指向当前视图的平台类对象。 返回格式为: return [ "选项文本1|选项值1", "选项文本2|选项值2"] |
样式配置
当在视图的基本配置中切换“视图样式”后,会替换成对应的css代码,可以修改代码呈现不同的视图界面。
|
样式名称 |
说明 |
|
container |
表格容器样式 |
|
table |
表格样式 |
|
titleTr |
标题行样式 |
|
titleTd |
标题单元格样式 |
|
contentTr |
内容行样式 |
|
contentSelectedTr |
选中的内容行样式 |
|
contentTd |
内容单元格样式 |
|
checkboxNode |
多选节点样式 |
|
checkedCheckboxNode |
选中的多选节点样式 |
|
radioNode |
单选节点样式 |
|
checkedRadioNode |
选中的单选节点样式 |
|
noDataTextNode |
视图无数据时显示的节点样式 |
|
tableProperties |
表格属性 |
事件配置
视图在加载或执行过程中的事件。
|
样式名称 |
说明 |
|
|
queryLoad |
视图加载前执行 |
可以使用脚本计算单元格的内容。api可以查看:链接 this.target 指向当前视图的平台类对象。 |
|
postLoad |
视图,包括视图界面和当前页数据加载后执行 |
|
|
postLoadPageData |
加载当前页数据后,画出界面内容前执行,跳页后也会执行 |
|
|
postLoadPage |
加载当前页内容后执行,跳页后也会执行 |
|
|
queryLoadItemRow |
加载每行之前执行 |
可以使用脚本计算单元格的内容。api可以查看:链接 this.target 指向当前行的平台类对象。 |
|
postLoadItemRow |
加载每行之后执行 |
|
|
selectRow |
选择行后执行 |
可以使用脚本计算单元格的内容。api可以查看:链接 this.event指向当前行的平台类对象。 |
|
unselectRow |
取消选择行后执行 |
视图列配置
基本属性:
|
配置项 |
内容 |
说明 |
|
列标题 |
视图标题列上的文本 |
|
|
列名 |
视图列名称 |
|
|
默认值 |
对应列无内容时的值 |
|
|
打开文档 |
打开文档 |
点击该列时是否打开文档 |
|
打开文档脚本(优先于id路径) |
点击该单元格时运行的脚本,api可以查看:链接 this.target指向单元格的平台类对象,this.target.data指向当前行的数据。 |
|
|
id路径 |
当查询语句的表是内容管理或者是流程时可以使用, Id是(cms文档id/流程work id)相对单条数据的路径。 如查询语句返回的是数组,那么填写的是"document id/work id"所在的下标。 如查询语句返回的是对象,那么填写"document id/work id"所在的标签名称。 |
|
|
选择路径 |
正确填写了查询语句,再测试语句或刷新视图数据可显示(刷新)选择路径。选择以后自动在数据路径上填写路径名称,不在后台保存。 |
|
|
数据路径 |
指该列相对单条数据的路径。比如 0,title,或 0.title。 如查询语句返回的是数组,那么填写的是该列值所在的下标。 如查询语句返回的是对象,那么填写该列值所在的标签名称。 |
|
|
隐藏 |
是否隐藏该列 |
|
|
组织对象 |
是否为组织对象,如果选是,会把全称转换成中文名称显示。 如:“张三@zhangshan@P” 显示成 “张三”。 |
|
|
HTML值 |
如果选择是,那么使用innerHTML给单元格赋值,否则使用innerText给单元格赋值。 |
|
|
显示脚本 |
可以使用脚本计算单元格的内容。api可以查看:链接 this.target.value 为当前单元格数据路径的值。 this.target.data 为当前行数据 this.target.json 为当前行的配置 this.target.node 为当前行当前个DOM对象 this.target.row 为当前行的平台类对象。 使用 return "xx" 返回单元格内容。 |
单元格样式配置:
|
样式名称 |
说明 |
|
标题单元格样式 |
标题单元格样式 |
|
标题单元格属性 |
表格样式 |
|
内容单元格样式 |
内容单元格样式 |
|
内容单元格属性 |
内容单元格属性 |
单元格事件配置
视图在加载或执行过程中的事件。
|
样式名称 |
说明 |
事件上下文 |
|
loadTitle |
加载标题单元格后执行的事件 |
api可以查看:链接 this.target.data 为当前行数据 this.target.json 为当前行的配置 this.target.node 为当前行当前个DOM对象 this.target.row 为当前行的平台类对象。 |
|
loadContent |
加载内容单元格后执行的事件 |
|
|
click |
点击单元格的事件 |
|
|
mousedown |
按下鼠标时执行 |
|
|
mouseup |
鼠标还原时执行 |
|
|
mouseover |
鼠标经过时执行 |
|
|
mouseout |
鼠标移除时执行 |
使用
在脚本中使用查询语句
直接调用后台服务查询数据
filterList 和 parameter 参数见本文“查询语句的后台服务->参数说明->body参数”。
o2.Actions.load("x_query_assemble_surface").StatementAction.executeV2(
statementFlag, //语句id、语句名称或语句别名
mode, //执行模式:data|count|all
page, //页码,数字
size, //每页条数
{
filterList: [],
parameter: {}
}, //请求的json
function(json){
//json为执行結果
},
function(xhr){
//如果返回错误,在这里处理
},
async //同步还是异步
)
使用平台封装好的api查询数据
参见api https://www.o2oa.net/api/module-statement.html#.execute
使用平台封装好的api选择数据
参见api https://www.o2oa.net/api/module-statement.html#.select
表单和页面中的查询视图组件
可以在内容管理表单、流程管理表单或门户页面中嵌入查询视图组件,用来显示数据。
表单中的选择视图组件
可以在内容管理表单、流程管理表单嵌入选择视图组件,用来选择数据。
Java开源协同办公项目:数据中心,自定义查询语句使用教程的更多相关文章
- vue使用element Transfer 穿梭框实现ajax请求数据和自定义查询
vue使用element Transfer 穿梭框实现ajax请求数据和自定义查询 基于element Transfer http://element-cn.eleme.io/#/zh-CN/comp ...
- mybatis 自定义查询语句
通过mybatis插件生成的mapper文件只有基本的增.删.改.查.汇总.但是实际使用场景中,总是有各种需要连表.汇总.分组查询的需求,那我们一般都通过自定义查询语句去实现. 有时候会有表结构更改的 ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 关于EF中实体和数据表以及查询语句映射的问题
关于EF中实体和数据表以及查询语句映射的问题? 很多人在使用的时候分不清楚 实体字段应该少于等于(数据库中的表字段或者SQL查询中的临时字段).这样在查询或者添加修改都不会出现问题 如果实体的字段大于 ...
- 自定义查询语句SpringData
虽然官方的API中给我们提供了很多关键字的查询,但是还是不够灵活,因为我们在项目中,会遇见奇葩的业务,我们需要用SpringData中的一个@Query注解. 使用@Query自定义查询 这种查询可以 ...
- Java开源电商项目比較
这里比較的都是国外的开源项目,备选项目有: Smilehouse Workspace.Pulse.Shopizer.ofbiz.bigfish.broadleaf 1.Smilehouse Works ...
- 开源协同办公平台部署教程:O2OA PAAS平台部署
一.镜像制作1.将安装介质o2server-5.0.3-linux.zip上传至镜像制作服务器上.(上传目录为/paas/xxhpaas/moka/o2oa)2.使用unzip命令解压安装包,参考命令 ...
- Spring Data Jpa 使用@Query标注自定义查询语句
https://blog.csdn.net/daniel7443/article/details/51159865 https://blog.csdn.net/pp_fzp/article/detai ...
随机推荐
- Spring如何使用三级缓存解决循环依赖
Spring如何使用三级缓存解决循环依赖 首先来了解一下什么是循环依赖 @Component public class A { @Autowired B b; } @Component public ...
- 基于Android平台的图书管理系统的制作(1)
在学习了郭神的第一行代码前半段之后,想通过一次实践来完成对已学知识的巩固.于是码下了这个图书管理系统客户端. IDE Android studio,语言 JAVA.XML: 在刚开始设计的时候对于这个 ...
- SpringBoot2配置文件application.yaml
源码基于SpringBoot 2.4.4 1.认识配置文件 1.1 配置文件的加载 创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是Spri ...
- 分布式系统ID的生成方法之UUID、数据库、算法、Redis、Leaf方案
一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给予太多 ...
- 重新整理 .net core 实践篇—————工作单元模式[二十六]
前言 简单整理一下工作单元模式. 正文 工作单元模式有3个特性,也算是其功能: 使用同一上下文 跟踪实体的状态 保障事务一致性 工作单元模式 主要关注事务,所以重点在事务上. 在共享层的基础建设类库中 ...
- c++性能测试工具:google benchmark进阶(一)
这是c++性能测试工具教程的第四篇文章,从本篇开始我将逐步介绍一些性能测试的高级技巧. 前三篇教程可以看这里: c++性能测试工具:google benchmark入门(一) c++性能测试工具:go ...
- 通过AI识图判断图片是否为小票
先在百度智能云中创建一个应用加入以下标记功能(没有智能云账号可以去创建一个,创建应用也都是些基本操作) 本次只用到标记的功能. 此功能在图像识别下面. 创建应用后,页面会出现平台分配的密钥:API K ...
- JS 使用try catch捕获异常
JS 使用try catch捕获异常 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 前端是攻克客户的先锋,需要特别注意到 ...
- jenkins pipeline构建后发送邮件通知
jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...
- 面试官:spring中定义bean的方法有哪些?我一口气说出了12种,把面试官整懵了。
前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...