O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置自定义数据查询语句JPQL及对应的视图。
一、先决条件
1、O2Server服务器正常运行,系统安装部署请参考文档《如何在服务器上安装部署O2OA》
2、以拥有管理员权限或拥有数据中心管理员(QueryManager角色)的用户账号登录O2OA(翱途)开发平台,如:xadmin
二、查询配置功能简介
查询配置是建立在表基础上的查询语句配置。配置查询语句后,在应用中可调用执行。
对系统表,目前支持流程平台的待办、已办、待阅、已阅、流程实例、已完成流程实例和阅读的查询操作;还支持内容管理平台的文档查询操作。
对自建表,支持查询、更新和删除操作。
查询配置功能入口
点系统的左上角图标->应用->数据中心平台->具体应用->查询配置打开
三、知识储备需求
1、JPQL语法
查询语句用的是JPA JPQL语句,如下面的语句从系统表Task中获取待办:
SELECT o FROM Task o WHERE o.person = :person
JPQL官网:JPA Query Structure (JPQL / Criteria)
中文简介:JPQL 语言语法 | 码农网
2、动态传参
查询语句中的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创建语句 | 如:
|
通过脚本创建语句 | 可以在查询语句和总数语句中使用脚本编写,可以通过返回字符串,如:
另外,在脚本中,可以使用parameters获取传入的parameter参数,见本文的“查询语句的后台服务->参数说明->body参数->parameter”。 | |
访问对象类型 | 系统表 | 指平台创建的表,选择此项后,支持流程平台的待办、已办、待阅、已阅、流程实例、已完成流程实例和阅读的查询操作;还支持内容管理平台的文档查询操作。 |
自建表 | 指二次开发人员在数据中心中创建的"数据表" | |
语句类型 | JPQL语句类型 | 访问对象类型选择“系统表”时,支持select。 访问对象类型选择“自建表”时,支持selectupdatedelete。 |
数据表 | 数据库表名称 | |
字段 | 帮助在语句编辑区域插入字段,不保存至后台。 | |
查询语句 | 查询数据表记录内容的语句 | 后台服务“executeV2”返回的data标签。 |
总数语句 | 查询数据表记录条数的语句 | 后台服务“executeV2”返回的count标签。 在进行分页查询的时候,可以在第一次查询执行,翻页的时候不执行,以节省服务器资源。 样例: |
测试语句 | 左侧 | 用json的方式传入语句中的参数 |
右侧 | 根据左侧参数执行的结果 | |
视图 | 以配置的形式可视化展现数据 | 详细配置见下一章节。 |
1、日期格式的写法
在jpql中,对日期格式有特殊的写法,格式如下:
Date - {d 'yyyy-mm-dd'} - for example: {d '2019-12-31'}
Time - {t 'hh:mm:ss'} - for example: {t '23:59:59'}
Timestamp(DateTime) - {ts 'yyyy-mm-dd hh:mm:ss'} - for example: {ts '2020-01-03 13:59:59'}
示例如下图:
2、in的写法
在jpql中,如果需要过滤字段的值在传入的列表范围中,可以使用in比较运算符。
如:
select o from test12 o where o.month in ("一月","二月")
六、配置查询视图
可以用查询视图来实现数据的展现。
点击界面上的“视图”Tab,可以切换到视图配置界面:
1、视图配置
视图支持查询语句的可视化展现。具有列式、分页、查询等功能。
1)基本属性
配置项 | 内容 | 说明 |
名称 | 视图名称 | |
别名 | 视图别名 | |
视图样式 | 选择后可切换不同的视图样式风格 | |
显示序号 | 是否显示每列的序号,分页每页序号延续编号 | |
每页行数 | 填写数字 | 每页返回的页数 |
隐藏操作条 | 是否显示操作条 操作运行的脚本api可以查看:链接 | |
选择 | 无、单选、多选 | 单选表示可以在视图中选中一行。 多选表示可以在视图中选中多行,并且分页后选中的行值会被保留。 脚本中获取选中行API查看:链接 |
无选择隐藏首列 | 选择设置为“无”的时候,是否隐藏系统默认创建的首列。 | |
无数据显示 | 当返回的数据为空时,视图上显示的文本。 | |
默认选中行脚本 | 视图加载每一行的时候运行 | 可以在脚本中使用this.target获取当前行。
结果 如:下面的脚本判断数据中的person和登录用户中文名称匹配即选中。 if(this.target.data.person ==this.session.user.name){ return true; } |
2)过滤配置
过滤配置分为“作为默认过滤条件”和“作为自定义过滤”。
作为默认过滤条件为加载视图的时候作为过滤条件。
作为自定义过滤是用户选择条件后点击查询的过滤条件。
默认过滤条件
配置项 | 内容 | 说明 |
标题 | 过滤标题 | |
参数 | 过滤的参数 | 和查询语句中形如 :field的where条件,见上图。 |
数据类型 | ||
值 | 输入 | 可以填写固定值,或者系统提供的一些默认公式,比如点击“当前人”,系统会填上 |
脚本 | 脚本API请查看链接,this.target指向当前视图的平台类对象。 |
自定义过滤条件
配置项 | 内容 | 说明 |
选择 | 可选择对应表的所有字段,选择后在标题、路径、数据类型中自动填写数据。不保存在后台 | |
标题 | 过滤标题 | |
路径 | 表别名.字段名 | 见上图。 |
数据类型 | ||
值 | 用户输入 | 在使用界面提供输入框让用户输入。 |
可选 | 脚本API请查看链接,this.target指向当前视图的平台类对象。 返回格式为:
|
3)样式配置
当在视图的基本配置中切换“视图样式”后,会替换成对应的css代码,可以修改代码呈现不同的视图界面。
样式名称 | 说明 |
container | 表格容器样式 |
table | 表格样式 |
titleTr | 标题行样式 |
titleTd | 标题单元格样式 |
contentTr | 内容行样式 |
contentSelectedTr | 选中的内容行样式 |
contentTd | 内容单元格样式 |
checkboxNode | 多选节点样式 |
checkedCheckboxNode | 选中的多选节点样式 |
radioNode | 单选节点样式 |
checkedRadioNode | 选中的单选节点样式 |
noDataTextNode | 视图无数据时显示的节点样式 |
tableProperties | 表格属性 |
4)事件配置
视图在加载或执行过程中的事件。
样式名称 | 说明 | |
queryLoad | 视图加载前执行 | 可以使用脚本计算单元格的内容。api可以查看:链接
|
postLoad | 视图,包括视图界面和当前页数据加载后执行 | |
postLoadPageData | 加载当前页数据后,画出界面内容前执行,跳页后也会执行 | |
postLoadPage | 加载当前页内容后执行,跳页后也会执行 | |
queryLoadItemRow | 加载每行之前执行 | 可以使用脚本计算单元格的内容。api可以查看:链接
|
postLoadItemRow | 加载每行之后执行 | |
selectRow | 选择行后执行 | 可以使用脚本计算单元格的内容。api可以查看:链接
|
unselectRow | 取消选择行后执行 |
2、视图列配置
1)基本属性
配置项 | 内容 | 说明 |
列标题 | 视图标题列上的文本 | |
列名 | 视图列名称 | |
默认值 | 对应列无内容时的值 | |
打开文档 | 打开文档 | 点击该列时是否打开文档 |
打开文档脚本(优先于id路径) | 点击该单元格时运行的脚本,api可以查看:链接 this.target指向单元格的平台类对象, | |
id路径 | 当查询语句的表是内容管理或者是流程时可以使用, Id是(cms文档id/流程work id)相对单条数据的路径。 如查询语句返回的是数组,那么填写的是"document id/work id"所在的下标。 如查询语句返回的是对象,那么填写"document id/work id"所在的标签名称。 | |
选择路径 | 正确填写了查询语句,再测试语句或刷新视图数据可显示(刷新)选择路径。选择以后自动在数据路径上填写路径名称,不在后台保存。 | |
数据路径 | 指该列相对单条数据的路径。比如 0,title,或 0.title。 如查询语句返回的是数组,那么填写的是该列值所在的下标。 如查询语句返回的是对象,那么填写该列值所在的标签名称。 | |
隐藏 | 是否隐藏该列 | |
组织对象 | 是否为组织对象,如果选是,会把全称转换成中文名称显示。 如:“张三@zhangshan@P” 显示成 “张三”。 | |
HTML值 | 如果选择是,那么使用innerHTML给单元格赋值,否则使用innerText给单元格赋值。 | |
显示脚本 | 可以使用脚本计算单元格的内容。api可以查看:链接
使用 |
2)单元格样式配置
样式名称 | 说明 |
标题单元格样式 | 标题单元格样式 |
标题单元格属性 | 表格样式 |
内容单元格样式 | 内容单元格样式 |
内容单元格属性 | 内容单元格属性 |
3)单元格事件配置
视图在加载或执行过程中的事件。
样式名称 | 说明 | 事件上下文 |
loadTitle | 加载标题单元格后执行的事件 | api可以查看:链接
|
loadContent | 加载内容单元格后执行的事件 | |
click | 点击单元格的事件 | |
mousedown | 按下鼠标时执行 | |
mouseup | 鼠标还原时执行 | |
mouseover | 鼠标经过时执行 | |
mouseout | 鼠标移除时执行 |
七、预览视图
点击预览按钮:
效果如下:
1、点击“导出Excel”可下载视图内容
2、输入文字->敲回车,进行搜索
3、点击高级搜索,可以输入文字进行搜索
八、使用查询语句
1、在脚本中使用查询语句
1)直接调用后台服务查询数据
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 //同步还是异步 )
2)使用平台封装好的api查询数据
参见api O2OA API: statement | O2OA开发平台
3)使用平台封装好的api选择数据
参见api O2OA API: statement | O2OA开发平台
2、表单和页面中的查询视图组件
可以在内容管理表单、流程管理表单或门户页面中嵌入查询视图组件,用来显示数据。
3、表单中的选择视图组件
可以在内容管理表单、流程管理表单嵌入选择视图组件,用来选择数据。
九、查询语句的后台服务
http://{hostip}/x_query_assemble_surface/jest/index.html
查询语句执行依托的后台服务是“executeV2”,如下图
1、参数说明
1)uri 参数:
flag: 查询语句的id/名称/别名
mode: data表示获取匹配的具体数据,返回的数据在data标签;count表示获取匹配的数据条目数,返回的数据在 count标签;all表示同时获取count和data数据。
page: 需要返回数据的页码。
size: 每页的数量。
2)body参数:
filterList: 参见api文档说明 O2OA API: Global | O2OA开发平台
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}%"。
-
以上是对查询配置开发的介绍,希望对您有帮助。如果您想进一步了解数据中心的其他设计元素,可以查看以下文章:
《数据中心-视图开发》
《数据中心-数据表开发》
《数据中心-统计配置》
《数据中心-导入模型配置》