关键词:数据中心,自定义数据,数据存储,数据表,自定义数据表,自定义业务数据
O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置自定义数据表格。
Table
数据表能够在系统数据库中自动创建真实表,并生成java实体对象,您可以使用JPQL操作数据表。当应用的数据特别大的时候,或者需要比视图更灵活的查询的时候,需要用到数据表。
入口
点系统的左上角图标->应用->数据中心平台->具体应用->数据表打开
数据表的后台服务
http://{hostip}:20020/x_query_assemble_surface/jest/index.html
创建数据表
1、创建数据表,并创建每一列;
2、点击工具栏按钮,将数据表发布到编译状态;
3、点击工具栏按钮,执行“编译所有数据表”操作
4、重启服务器,数据表就可以使用了。
JPA JPQL语句
在数据表的查询中,调用服务的时候需要传入JPA JPQL语句,如o.name='zhangsan'
。
了解JPQL语句可以点击链接查看:https://www.objectdb.com/java/jpa/query/jpql/structure
数据表脚本
目前在表单和页面中还没有数据表组件,需要通过脚本来进行增删改查的执行。
1、创建一个脚本名称为 queryTableService,代码如下:
var _self = this; window.QueryTableService = new Class({ Implements: [Options, Events], options : { tableFlag : "" }, initialize : function( options ){ this.setOptions( options || {}); this.action = new _self.Action("x_query_assemble_surface", { "listRowNext" : { "uri" : "/jaxrs/table/list/{tableFlag}/row/{id}/next/{count}", "method": "GET" }, "listRowPrev" : { "uri" : "/jaxrs/table/list/{tableFlag}/row/{id}/prev/{count}", "method": "GET" }, //通过where 获取表中的数据,格式为jpa jpql语法,o.name='zhangsan' "listRowSelectWhere" : { "uri" : "/jaxrs/table/list/{tableFlag}/row/select/where/{where}", "method": "GET" }, "rowGet" : { "uri": "/jaxrs/table/{tableFlag}/row/{id}", //获取表中某一行数据 "method": "GET" }, "rowUpdate":{ "uri": "/jaxrs/table/{tableFlag}/row/{id}", //更新指定表中指定行数据. "method": "PUT" }, "rowInsert":{ "uri": "/jaxrs/table/{tableFlag}/row", //插入一行 "method": "POST" }, "rowCountWhere" : { "uri": "/jaxrs/table/{tableFlag}/row/count/where/{where}", //通过where 统计数量 "method": "GET" }, "rowDelete" : { "uri": "/jaxrs/table/{tableFlag}/row/{id}", //更新指定表中指定行数据. "method": "DELETE" }, "rowDeleteAll" : { "uri": "/jaxrs/table/{tableFlag}/row/delete/all", //通过where 统计数量 "method": "DELETE" } }); }, listNext : function(rowId, count, callback_success, callback_fail, async){ var opt = { "name": "listRowNext", "parameter": { "tableFlag": this.options.tableFlag, "id" : rowId, "count" : count || 20 }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke( opt ); }, listPrev : function(rowId, count, callback_success, callback_fail, async){ var opt = { "name": "listRowPrev", "parameter": { "tableFlag": this.options.tableFlag, "id" : rowId, "count" : count || 20 }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async } if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, listByWhere : function(where, callback_success, callback_fail, async){ var opt = { "name": "listRowSelectWhere", "parameter": { "tableFlag": this.options.tableFlag, "where" : where }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, get : function( rowId, callback_success, callback_fail, async ){ var opt = { "name": "rowGet", "parameter": { "tableFlag": this.options.tableFlag, "id" : rowId }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, create : function( data, callback_success, callback_fail, async ){ data.o2_createPerson = layout.desktop.session.user.distinguishedName; data.o2_createUnit = Utils.getCurrentDepartment(); var opt = { "name": "rowInsert", "parameter": { "tableFlag": this.options.tableFlag }, "data" : data, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, update : function( rowId, data, callback_success, callback_fail, async ){ data.o2_updatePerson = layout.desktop.session.user.distinguishedName; var opt = { "name": "rowUpdate", "parameter": { "tableFlag": this.options.tableFlag, "id" : rowId }, "data" : data, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, save : function( data, callback_success, callback_fail, async ){ var opt = { "name": data.id ? "rowUpdate" : "rowInsert", "parameter": { "tableFlag": this.options.tableFlag }, "data" : data, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } if(data.id)opt.parameter.id = data.id; this.action.invoke(opt); }, count : function( where, callback_success, callback_fail, async ){ var opt = { "name": "rowGet", "parameter": { "tableFlag": this.options.tableFlag, "where" : where }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, delete : function( rowId, callback_success, callback_fail, async ){ var opt = { "name": "rowDelete", "parameter": { "tableFlag": this.options.tableFlag, "id" : rowId }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); }, deleteAll : function( callback_success, callback_fail, async ){ var opt = { "name": "rowDelete", "parameter": { "tableFlag": this.options.tableFlag }, "success": function(json){ if(callback_success)callback_success(json); }.bind(this), "async" : async }; if( callback_fail ){ opt.failure = function(xhr, text, error){ callback_fail( xhr, text, error ); } } this.action.invoke(opt); } });
2、在表单/页面的 queryLoad 里添加: this.include("queryTableService");
3、调用
var service = new QueryTableService({ tableFlag : "testTable" }); //保存 service.save({ "subject" : "标题", "name" : "zhangsan" }, function(){ this.form.notice("保存成功", "success"); }.bind(this)) //根据条件查询 service.listByWhere("o.name='zhangsan'", function( json ){ //json 为符合条件的数据列表 }, null, false) //根据id获取数据 service.get( id, function( json ){ //json 为id对应的数据 }, null, false)
推荐文章:
常见问题-服务器错误:can not decrypt token
2021-02-07
cannotdecrypttoken服务端无法解开token,可能的原因是,xadmin的密码刚刚修改过而前台没有刷新页面.重新刷新前台页面即可,app端需要重
日志管理-访问日志相关配置
2021-12-14
@日志管理@O2OA@平台日志@履职日志@访问日志O2OA平台默认未开启访问日志,可以通过配置来开启平台的访问,用于记录系统上访问服务的详细信息。本篇主要介绍如
o2oa PAAS平台部署
2021-06-18
一、镜像制作1、将安装介质o2server-5.0.3-linux.zip上传至镜像制作服务器上。(上传目录为/paas/xxhpaas/moka/o2oa)2
开发知识-人大金仓数据安装
2021-02-07
一、安装程序 1、在安装前要创建一个帐号,不能用root帐号安装。 2、安装执行./setup.sh -iconsole 3、接受“此许可协议条款”,
常见问题-IOS移动办公无法收到验证码
2021-02-07
iphone7withIOS10.2.1无法收到服务器绑定的验证码。一、错误描述错误!underlying(ErrorDomain=NSURLErrorDoma
移动办公-手机移动端APP功能简介
2021-02-25
O2OA平台拥有配套的原生开发的安卓和IOS移动APP,开发者在拥有公网IP或者域名的服务器上可以轻松体验移动办公环境。本篇主要向大家简要介绍移动APP的主机功
表单-手写板组件配置
2021-10-22
简介V6.4版本中,O2OA平台的表单中新增了组件-手写板。该组件基于浏览器Canvas实现了手写和涂鸦基本功能、更改笔触大小颜色、插入背景图、橡皮檫、历史记录
系统集成-单点认证SSO配置之约定密钥
2021-03-15
O2OA平台提供灵活的系统集成方案,让企业信息平台与各类第三方系统进行集成。本篇主要介绍如何在O2OA中使用简单的约定密钥的方案与其他系统实现单点登入。
Office在线协作使用手册
2022-01-04
@在线Word编辑@在线协同@开源办公系统@在线Excel编辑@在线Office @文档管理@文档协同O2OAOffice在线协作模块,可以让使用者完全基于浏览
移动办公-创建自定义企业微信应用
2022-03-01
O2OA平台拥有配套的原生开发的安卓和IOS移动APP,可以以自建应用的方式集成到企业微信,同步企业微信的企业通讯录作为本地组织人员架构,并且可以将待办等通知直