# 功能描述

实现对数据库的增、删、改操作,可同时并行或嵌套多种操作类型和多条记录。
后可配置操作完成立即查询并将查询结果返回前台。

# 组成部分

本格式为JSON数组或JSON,由 head 和 option 以及 query 三个部分构成。

   [
        {
            head: { },  /* 必配,如果走通用接口则必须配置 */
            data: [{}],  /* 必配,选项 */
            query: { }   /* 选配,保存完后立即进行查询的选项,格式等同于提交查询格式query-request的option项,用于保存后的查询返回最新数据 */
        }
    ]
1
2
3
4
5
6
7

# 选项一览表

[
    {
        head: {
            module: 'sys_position', //模块编号,在sys_module表中找
            source: 'sysPositionList_01', //sql语句编号,在sys_data_sql表中找
            view: '', //视图名称,在数据库视图名称中找
            table: ''     //表名称,在sys_module表中maintable字段和subtable字段中找
        },
        query: {}, //选配,等同于request-query的option项,用于保存后的查询返回最新数据
        data: [
            {
                //插入操作
                action: "add", //必配, 操作类型:插入
                option: {
                    //选配
                    ignoreNoField: false, //选配, 服务器存储时是否忽略数据库中不存在的字段
                    keyVal: false   //选配, 是否在新增数据后返回新增数据的主键值
                },
                rows: [
                    //必配, 可能插入多行
                    {
                        attFile: [], //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称, 多个字段间逗号分隔
                        row: {
                            //必配, 新增一行的数据
                            w1: "12", //w1字段的值
                            w2: "1", //w2字段的值
                            ...         //其它字段的值
                        },
                        log: { // 选配,日志记录, 建议配上
                            字段名: {
                                _T: '字段标题'
                            }
                        },
                        filter: []     //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行本条记录的插入操作
                        serverEvn: []  //选配, 嵌套操的又一个save-request操作
                    }
                ],
                filter: []    //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
                serverEvn: []  //选配, 嵌套操的又一个save-request操作
            },
            {
                //编辑操作
                action: "edit", //必配, 操作类型:修改
                option: {
                    //选配
                    ignoreNoField: false //选配, 服务器存储时是否忽略数据库中不存在的字段
                },
                rows: [
                    //必配, 可能修改多行
                    {
                        attFile: [], //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称
                        keyVal: "111", //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
                        row: {
                            //必配, 编辑一行的新数据
                            w1: "12", //w1字段的值
                            w2: "1", //w2字段的值
                            ...         //其它字段的值
                        },
                        log: { // 选配,日志记录, 建议配上
                            字段名: {
                                _T: '字段标题',
                                _O: '原始值',
                                _V: '新值'
                            }
                        },
                        filter: [], //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行次编辑操作
                        serverEvn: []    //选配, 嵌套操的又一个save-request操作
                    }
                ],
                filter: [], //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
                serverEvn: []            //选配, 嵌套操的又一个save-request操作
            },
            {
                //删除操作
                action: "del", //必配, 操作类型:修改
                rows: [
                    //必配, 可能修改多行
                    {
                        attFile: [], //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称,用于删除附件
                        keyVal: "111", //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
                        filter: [], //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行次编辑操作
                        serverEvn: [],    //选配, 嵌套操的又一个save-request操作
                        log: { // 选配,日志记录, 建议配上
                            字段名: {
                                _T: '字段标题',
                                _O: '原始值'
                            }
                        },
                    }
                ],
                filter: [], //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
                serverEvn: []            //选配, 嵌套操的又一个save-request操作
            }
        ]
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

# head选项

# 选项格式

说明:head 结构体为 JSON 格式。如果不使用自定义接口,则必须配置头部参数

{
    head: {
        dbType:'mongodb'    //选配, 数据库类型,支持关系数据库和非关系数据库,默认为关系数据库, 非关系数据库目前只支持mongodb
        module: 'sys_position', //模块编号,在sys_module表中找
        source: 'sysPositionList_01', //sql语句编号,在sys_data_sql表中找
        view: '',   //视图名称,在数据库视图名称中找
        table: '',     //表名称,在sys_module表中maintable字段和subtable字段中找
    }
}
1
2
3
4
5
6
7
8
9

# 选项说明

说明:head 结构体为 JSON 格式,通过通用接口提交则必须配置此。

参数 必填 数据类型 默认值 可选值 说明
dbType String mongodb 数据库类型,除非指明是非关系数据库mongodb,其余都为关系数据库
module String 说明本组件所属模块编号,建议设置,用于数据操作时的权限判断以及获取该模块的主表
source String 说明本组件操作的sql语句编号(需事先设置sql语句并编号)
view String 说明本组件操作的视图编号(需事先在数据库中设置视图),使用本项必须设置module值
table String 说明本组件操作的表名,使用本项必须设置module值,只有在该module下有子表并且使用子表时才设置

# data选项

# 选项总体格式

data选项用于告诉后端对数据的操作,主要操作功能有:
(1) 插入数据(一条或多条)
(2) 修改数据(一条或多条)
(3) 删除数据(一条或多条)
(4) 在插入/修改/删除的时候可同时并行或嵌套操作

data选项总体简要格式:

data: [
    {插入/删除/修改 操作格式},
    {插入/删除/修改 操作格式},
    ...
]
1
2
3
4
5

data选项总体详细格式:

data: [
        {   //插入操作
            action: "add",      //必配, 操作类型:插入
            option: {           //选配
                keyVal: false   //选配, 是否在新增数据后返回新增数据的主键值
            },
            rows: [             //必配, 可能插入多行
                {
                    attFile: [],    //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称, 多个字段间逗号分隔
                    row: {          //必配, 新增一行的数据
                        w1: "12",   //w1字段的值
                        w2: "1",    //w2字段的值
                        ...         //其它字段的值
                    },
                    filter:[],      //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行本条记录的插入操作
                    serverEvn:[]    //选配, 嵌套操的又一个save-request操作
                }
            ],
            filter: [],            //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
            serverEvn:[]           //选配, 嵌套操的又一个save-request操作
        },
        {  //编辑操作
            action: "edit",   //必配, 操作类型:修改
            rows: [           //必配, 可能修改多行
                {
                    attFile: [],    //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称
                    keyVal: "111",  //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
                    row: {          //必配, 编辑一行的新数据
                        w1: "12",   //w1字段的值
                        w2: "1",    //w2字段的值
                        ...         //其它字段的值
                    },
                    filter:[],      //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行次编辑操作
                    serverEvn:[]    //选配, 嵌套操的又一个save-request操作
                },
            ],
            filter: [],             //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
            serverEvn:[]            //选配, 嵌套操的又一个save-request操作
        },
        {  //删除操作
            action: "edit",   //必配, 操作类型:修改
            rows: [           //必配, 可能修改多行
                {
                    attFile: [],    //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称
                    keyVal: "111",  //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
                    row: {          //必配, 编辑一行的新数据
                        w1: "12",   //w1字段的值
                        w2: "1",    //w2字段的值
                        ...         //其它字段的值
                    },
                    filter:[],      //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行次编辑操作
                    serverEvn:[]    //选配, 嵌套操的又一个save-request操作
                },
            ],
            filter: [],             //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
            serverEvn:[]            //选配, 嵌套操的又一个save-request操作
        }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 插入操作格式

说明:在插入数据时可以先查询,查询结果记录数大于0时才能进行插入操作
插入操作格式:

{
    action: "add",      //必配, 操作类型:插入
    option: {           //选配
        keyVal: false   //选配, 是否在新增数据后返回新增数据的主键值
    },
    rows: [             //必配, 可能插入多行
        {
            attFile: [],    //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称, 多个字段间逗号分隔
            row: {          //必配, 新增一行的数据
                w1: "12",   //w1字段的值
                w2: "1",    //w2字段的值
                ...         //其它字段的值
            },
            filter:[]     //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行本条记录的插入操作
            serverEvn:[]  //选配, 嵌套操的又一个save-request操作
        }
    ],
    filter: [],          //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
    serverEvn:[]         //选配, 嵌套操的又一个save-request操作
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 修改操作格式

说明:在修改数据时可以先查询,查询结果记录数大于0时才能进行插入操作
修改操作格式:

{
    action: "edit",   //必配, 操作类型:修改
    rows: [           //必配, 可能修改多行
        {
            attFile: [],    //选配, 如果该文档中包含附件,则指明包含附件路径的字段名称
            keyVal: "111",  //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
            row: {          //必配, 编辑一行的新数据
                w1: "12",   //w1字段的值
                w2: "1",    //w2字段的值
                ...         //其它字段的值
            },
            filter:[],      //选配, 查询条件, 与上一层的filter条件合并来查询结果记录数大于0时才能进行次编辑操作
            serverEvn:[]    //选配, 嵌套操的又一个save-request操作
        },
    ],
    filter: [],             //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
    serverEvn:[]            //选配, 嵌套操的又一个save-request操作
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 删除操作格式

删除操作格式:

{
    action: "del",  //必配, 操作类型:删除
    rows:[          //必配, 可能删除多行
        {
            keyVal: "111",  //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
            filter:[],      //选配, 查询条件, 与上一层的filter条件合并来进行删除操作
            serverEvn:[]    //选配, 嵌套操的又一个save-request操作
        }
    ],
    filter: [],             //选配, 查询条件, 如果rows内的filter还要,则需要与rows内的filter进行合并
    serverEvn:[]            //选配, 嵌套操的又一个save-request操作
}
1
2
3
4
5
6
7
8
9
10
11
12

# 例1: 配置head

# 例1.1: 配置模块

配置模块后,系统会检查该模块是否存在,如果存在并且该模块设置了主表,则使用该模块下的主表进行操作。例如访问user模块下的主表,则配置的head结构体为:

    head:{
        module: 'user'       /* user模块编号 */
    }
1
2
3

TIP

说明:由于默认访问关系数据库,因此省略dbType参数,由于只操作user模块的主表因此省略source、view和table。

# 例1.2: 配置表

如果访问模块下的主表,则不用配置table,如果该模块还有多个子表,可指明访问该模块下的哪个子表,例如访问user模块下的 member表,则配置的head结构体为:

    head:{
        module: 'user',       /* user模块编号 */
        table: 'member'     /* user模块下的子表名 */
    }
1
2
3
4

TIP

说明:由于默认访问关系数据库,因此省略dbType参数。

# 例1.3: 配置自定义SQL数据源

针对自定义的SQL语句,系统支持对自定义SQL设置编号,在此配置自定义SQL的编号

    head:{
        source: 'sql_user'       /* 使用后端定义的编号为sql_user的数据源 */
    }
1
2
3

TIP

说明:由于默认访问关系数据库,因此省略dbType参数。

# 例2: 配置插入一条记录

将字段uid值为1,字段uname值为'zs'插入到user模块下的member表中

[{
    head: {
        module: 'user',       /* user模块编号 */
        table: 'member'     /* user模块下的子表名 */
    },
    data: [
        {
            action: "add",      //必配, 操作类型:插入
            option: {           //选配
                keyVal: false   //选配, 是否在新增数据后返回新增数据的主键值
            },
            rows: [             //必配, 可能插入多行
                {
                    row: {            //必配, 新增一行的数据
                        uid: 1,       //uid字段及值
                        uname: 'zs'  //uname字段及值
                    }
                }
            ]
        }        
    ]
}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

等同于下面QL:

INSERT INTO member(uid, uname) VALUE (1, 'zs');
1

# 例2: 配置插入两条记录

将字段uid值为1,字段uname值为'zs',字段uid值为2,字段uname值为'ls'这两条记录插入到user模块下的member表中

[{
    head: {
        module: 'user',       /* user模块编号 */
        table: 'member'     /* user模块下的子表名 */
    },
    data: [
        {
            action: "add",      //必配, 操作类型:插入
            option: {           //选配
                keyVal: false   //选配, 是否在新增数据后返回新增数据的主键值
            },
            rows: [             //必配, 可能插入多行
                {
                    row: {            //必配, 新增一行的数据
                        uid: 1,       //uid字段及值
                        uname: 'zs'  //uname字段及值
                    }
                },
                {
                    row: {            //必配, 新增一行的数据
                        uid: 2,       //uid字段及值
                        uname: 'ls'  //uname字段及值
                    }
                }
            ]
        }        
    ]
}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

等同于下面QL:

INSERT INTO member(uid, uname) VALUE (1, 'zs');
INSERT INTO member(uid, uname) VALUE (2, 'ls');
1
2

# 例3: 配置修改一条记录

注意:不用写主键字段的实际字段名称,使用keyVal代表主键字段的值,后台自己知道主键字段是哪个,会自动代替keyVal为实际主键字段。 将user模块下的member表中主键字段值为"111"的记录修改w1字段值为"12",w2字段值为"1"

[{
    head: {
        module: 'user',       /* user模块编号 */
        table: 'member'     /* user模块下的子表名 */
    },
    data: [
        {
            action: "edit",   //必配, 操作类型:修改
            rows: [
                {
                    keyVal: "111",  //选配, 主键字段的值,如果不配置,则必须配置filter条件来确定数据行
                    row: {          //必配, 编辑一行的新数据
                        w1: "12",   //w1字段的值
                        w2: "1",    //w2字段的值
                    }
                }
            ]
        }      
    ]
}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

等同于下面QL:

UPDATE member SET w1='12', w2 = '1' WHERE 主键字段 = '111';
1

# 例4: 配置删除一条记录

注意:不用写主键字段的实际字段名称,使用keyVal代表主键字段的值,后台自己知道主键字段是哪个,会自动代替keyVal为实际主键字段。 将user模块下的member表中主键字段值为"111"的记录删除

[{
    head: {
        module: 'user'       /* user模块编号 */
        table: 'member'     /* user模块下的子表名 */
    },
    data: [
        {
            action: "del",  //必配, 操作类型:删除
            rows:[ 
                {
                    keyVal: "111"
                }
            ]
        }   
    ]
}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

等同于下面QL:

DELETE FROM member WHERE 主键字段 = '111';
1