关键词:数据中心,数据存储,自定义数据表,自定义数据,自定义业务数据,数据表

O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置自定义数据表格。


Table

数据表能够在系统数据库中自动创建真实表,并生成java实体对象,您可以使用JPQL操作数据表。当应用的数据特别大的时候,或者需要比视图更灵活的查询的时候,需要用到数据表。

入口

点系统的左上角图标->应用->数据中心平台->具体应用->数据表打开

数据表的后台服务

http://{hostip}:20020/x_query_assemble_surface/jest/index.html

创建数据表

1、创建数据表,并创建每一列;
2、点击工具栏image.png按钮,将数据表发布到编译状态;
3、点击工具栏image.png按钮,执行“编译所有数据表”操作
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)

推荐文章:

门户开发-门户脚本开发
2021-03-01
O2OA提供的门户管理平台可以让用户自由地为企业定制符合企业特色的门户系统,门户页面。可以让页面展现的内容真正满足企业自身的需求。本文主要介绍如何在O2OA中使
平台维护-在线部署自定义应用的WAR包和JAR包
2021-02-26
在使用O2OA实现项目的过程中,特殊需求在平台现有功能无法直接提供的情况下,可以通过平台提供的自定义war|jar包,实现平台功能的扩展,满足各种不同的需求功能
系统维护-如何压缩过大的H2数据库文件
2021-02-25
平台自带的H2数据库在使用过程中会随着数据量的增加而增长,但是并不会在删除数据后自动缩小。所以O2OA提供了数据库压缩命令用于缩小数据库占用的空间。
服务集成-表单界面上自定义弹出选择器功能
2021-03-15
O2OA允许用户对表单进行自由的功能定制,可以增加自定义的组件和插件。本文介绍如果在表单界面上自定义弹出选择器的功能。
通用项目环境使用说明
2021-02-18
O2OA演示环境。它并不是一款传统意义上的OA系统。它是一款以流程管理为核心的全开源全免费的信息化开发平台,完整的代码可以直接在Github和Gitee上下载,
论坛管理
2021-02-19
O2OA平台论坛管理为企业提供了一个员工公开交流的场所,经过配置后,论坛可以拥有丰富的栏目、版块,可以进行版块的权限设置,可见性,发贴回复权限设置。
报销申请使用手册
2021-02-19
O2OA报销申请是使用平台能力自定义开发的一个业务流程,它适用于企业内员工财务报销申请的电子审批。员工新建报销申请流程,确定报销申请信息,发起审批、财务处理、备
个人通讯录使用手册
2021-02-19
O2OA个人通讯录提供二部分个人信息展现和查询,并且提供人员信息二维码,可以用手机扫码后直接导入手机通讯录,支持批量导出人员信息vcf文件。
流程设计-简单流程的创建与设计
2021-02-26
本文主要介绍如何在O2OA中进行审批流程或者工作流设计,O2OA主要采用拖拽可视化开发的方式完成流程的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改
系统角色权限设置说明
2021-02-25
O2OA平台内置19种不同的系统角色,适应于各类应用的权限控制。本篇主要简单讲述初平台拥有的角色列表以及如何对指定的应用进行权限设置

results matching ""

    No results matching ""