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 ...
随机推荐
- Fiddler抓包后转成jmeter脚本
Fiddler的安装及使用 1.安装:无特别需要注意事项 2.使用: (1)目前我使用的是Fiddler 4版本,打开页面如下 (2)如下图,在界面右侧找到Filters tabs,根据需要进行设置, ...
- H.265 HD 和H.265 4K Video Encoder IP Core
H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...
- NVIDIA Nsight Systems CUDA 跟踪
NVIDIA Nsight Systems CUDA 跟踪 CUDA跟踪 NVIDIA Nsight Systems能够捕获有关在概要过程中执行CUDA的信息. 可以在报告的时间轴上收集和呈现以下信息 ...
- 尚硅谷Java——宋红康笔记【day11-day18】
day11 Eclipse中的快捷键: * 1.补全代码的声明:alt + / * 2.快速修复: ctrl + 1 * 3.批量导包:ctrl + shift + o * 4.使用单行注释:ctrl ...
- 网页站点下载器teleport ultra
软件名称:teleport ultra 介绍:teleport ultra是一款专门的网页站点下载器,使用这款工具可以方便地下载网页数据,包括网站的文字.图片.flash动画等,可以轻松下载所有的网站 ...
- Boost 矩形布尔运算
本文主要介绍boost库中矩形布尔运算的思路和代码解析.在此感谢Intel对开源事业的贡献. 基本概念 图形的插入 所有的操作的第一步都是进行图形的插入,我们需要声明定义好我们要使用的图形类型,以矩形 ...
- docker基本底层原理
docker是怎么工作的 Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket客户端进行访问 DockerServer接收到DockerClie ...
- spring + spring mvc + tomcat 面试题(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...
- Luat Inside | 多功能YAP物联网终端机,你不会还不知道吧?
简洁高效是合宙产品的一个重要特点,合宙的工程师们用Demo取代繁杂的说明书,以便于开发者快速上手. 有没有可能把这个学习的过程变得更有趣,并且把技术入门难度进一步降低?作为一名Luat技术爱好者,我对 ...
- 【模拟8.09】轰炸行动(bomb) (tarjan缩点和拓扑排序)
很显然的tarjan嘛......拓扑也很容易想到 我是不会说我因为懒把拓扑改成DFS结果扔了40分然后就是纯板子了 因为我们一条路径的点如果不是一个一个炸,同时炸两个,他们一定会相互到达.... 找 ...