1. 实体多对象关联查询

多表关联查询。

请求方式:POST

请求地址:/bosfoundationservice/{appKey}/prototype/linked/query

1.1. 请求参数:

Headers:

参数名 类型 示例 是否必填 参数含义
Authorization string c4570cb9ca324bc8ba7dd9d1967710ea access_token

PathParas:

参数名 类型 示例 是否必填 参数含义
NULL NULL NULL NULL NULL

SearchParas:

参数名 类型 示例 是否必填 参数含义
page number 1 当前查询第几页,从1开始
per_page number 5 每页的查询数量

Body:

application/json:

{
    "condition": [
        {
            "bosclass": "documents", // 关联实体
            "alias": "e1", // 类别名,不可重复
            "subCondition": [
                { // 查询条件
                    "field": "name", // 查询字段
                    "operator": "like", // 匹配规则 精确查询,模糊查询等等
                    "value": "a", //值
                    "number": "false", //比较时将内容转化为数字后再比较
                    "logic": " And" // 条件连接,若只有一条查询条件则为空。值可为Or,And。
                }
            ],
            "nestAnd": [
                { //嵌套条件,表示内部数组之间是and关系
                    "field": "name",
                    "operator": "like",
                    "value": "doc",
                    "number": "false"
                },
                {
                    "nestOr": [
                        { //内部嵌套条件,与同级的条件并列
                            "field": "name",
                            "operator": "like",
                            "value": "a",
                            "number": "false"
                        },
                        {
                            "field": "name",
                            "operator": "like",
                            "value": "a",
                            "number": "false"
                        }
                    ]
                }
            ],
            "nestOr": [
                { //嵌套条件,表示内部数组之间是or关系
                    "field": "name",
                    "operator": "like",
                    "value": "a",
                    "number": "false"
                }
            ]
        },
        {
            "bosclass": "folders",
            "alias": "e2",
            "subCondition": [
                {
                    "field": "name",
                    "operator": "like",
                    "value": "e1.code",
                    "algorithm": "true" //当algorithm为true时,value值可为其他实体的属性,以alias.开头表示
                }
            ]
        },
        {
            "bosclass": "irFolderDocument",
            "alias": "e3", //关系类别名
            "type": "relationship", // type固定为relationship,表示是关联关系
            "from": "e1", //左关系类别名
            "to": "e2", //右关系类别名
            "subCondition": []
        }
    ],
    "select": {
        "documentName": "e1.name", // 查询字段
        "folderName": "e2.name",
        "gcomponents": "gcomponents" //当查询条件包含tags时,可通过gcomponents字段获取关联3D构件信息
    },
    "sort": [
        {
            "sortBy": "e1.name", // 排序字段
            "order": "asc" // 排序顺序,asc为升序,desc为降序
        }
    ]
}

1.2. 参数说明:

参数名 类型 示例 是否必填 参数含义
NULL NULL NULL NULL NULL

1.3. 正确返回:

Http Status Code:200
{
    "code": "SUCCESS",
    "message": "请求处理成功",
    "data": {
     count: 100,//总记录数
     data: [
            {
    //返回select字段
    "documentName": "A",
                "folderName": "folder1"
            },
        ]
    }
}

1.4. 状态码:

状态码 code message data 原因
200 JSON_FORMAT_WRONG Json格式错误 NULL 当传入Body格式错误时
200 ENTITY_BOSCLASS_NOTFOUND 实体类{entity}不存在 NULL 当传入body中bosclass错误时
200 ENTITY_QUERY_NUMBER_SETTING_CONFLICT 不可同时设置number为true、operator为非数字运算符{operator} NULL 如subcondition、nestAnd、nestOr参数中number值为true,但operator值为like
200 ENTITY_QUERY_NUMBER_SETTING_CONFLICT value参数值{value }非数字 NULL 如subcondition、nestAnd、nestOr参数中number值为true,但value值无法转换为数字
200 ENTITY_QUERY_NUMBER_SETTING_INVALID number参数值{number}无效 NULL 如subcondition、nestAnd、nestOr参数中number值为true、false、空以外的其他值
200 ENTITY_QUERY_PAGE_SETTING_INVALID page参数值{page}非数字 NULL 查询参数page值为数字以外的值时
200 ENTITY_QUERY_PERPAGE_SETTING_INVALID per_page参数值{per_page}非数字 NULL 查询参数per_page值为数字以外的值时
200 ENTITY_QUERY_RELATIONSHIP_FROMTO_REQUIRD 关系{bosclass}没有指定from、to左右关联对象 NULL 如subCondition参数中type字段为relationship
200 ENTITY_QUERY_RETURN_ATTRIBUTE_REQUIRED 需指定返回的属性 NULL select部分需指定返回的对象属性
200 ENTITY_QUERY_CONDITION_REQUIRED 需指定查询条件 NULL condition参数未提供或提供了但未指定查询条件时
200 ENTITY_QUERY_GROUPING_COLLECT_REQUIRED grouping中collect属性必填 NULL 当grouping不为空时,如果grouping下的collect为空时
200 ENTITY_QUERY_KEEP_COLLECT_MUTEX grouping中keep不能包含collect字段 NULL 当grouping不为空时,keep中有collect字段时
200 ENTITY_QUERY_AGGREGATE_MUSTIN_KEEP 聚合字段必须在keep中保留 NULL 当grouping不为空时,aggregate中字段未在keep中定义时
200 ENTITY_QUERY_SELECT_ERROR select字段必须在collect、count、aggregate中定义 NULL 当grouping不为空时,select内容不是collect、count、aggregate字段或keep时
200 ENTITY_QUERY_UNKNOWN_AGGREGATE 未知的聚合函数{xxx} NULL 当grouping不为空时,aggregate存在未定义的聚合方法时
200 ENTITY_QUERY_SORTBY_ERROR sortby字段必须在collect、count、aggregate中定义 NULL 当grouping不为空时,sortby字段不是collect、count、aggregate字段时
200 ENTITY_QUERY_FIELD_NOTDECLARE s分组聚合查询字段{field}必须在collect、count、aggregate中定义 NULL 当grouping不为空时,当grouping中condition、nestAnd、nestOr查询的field不是collect、count、aggregate字段时
200 ENTITY_QUERY_KEEPFIELD_NOTDECLARE 分组聚合查询keep字段{xxx}未定义 NULL 当grouping不为空时,当select中keep.xxx的field{xxx}不是keep中定义字段时
200 CLASS_READPERMISSION_REQUIRED 缺少实体类{bosclass}的读权限 NULL 当实体启用了类权限,但当前用户没有类的读权限时

1.5. 注意事项:

1、满足一般entity的查询要求,实体对象查询范围为bosclass对应数据表中所有bosclass值匹配的数据。

2、查询条件中,condition部分描述搜索内容。condition中主要包含两类对象: 实体对象:描述实体对象的搜索条件时,必须传入bosclass(实体对象类名)和alias(实体对象类别名),后面关系类中from、to、返回内容select、排序sortBy中引用实体对象类时需使用alias别名引用。 实体对象间关联关系:当需要进行多类实体对象之间的关联查询时,需要设置实体对象之间的关联关系,必须传入bosclass(关系类类名)、alias(关系类别名)、type(值为relationship则表明该类是关系类)、from(左关联实体对象类别名)、to(右关联实体对象类别名),后面返回内容select、排序sortBy中引用关系类时需使用alias别名引用。

3、目前不支持value值为数组的查询。

4、operator仅支持==,!=,<,<=,>,>=,like,regex, in, notIn,isNull,notNull操作: ==:等于 !=:不等于 <:小于 <=:小于等于

>:大于
>=:大于等于
like:模糊查询,如当field为name,value为AAA时,则查找name属性中值包含AAA的实体对象。
regex:正则表达式,如 ^a 表示查询以a开头的实体。
in: 数组中是否包含值,如field为name,value为["A","B","C"],则查找name的值是"A"、"B"、"C"的实体对象
notIn: 数组中是否不包含值,如field为name,value为["A","B","C"],则查找name的值不是"A"、"B"、"C"的实体对象
isNull: 为空,如field为name,则查找name的值为空或者name属性不存在的实体对象
notNull: 不为空,如field为name,则查找name的值不为空的实体对象

5、subcondition、nestAnd、nestOr参数中number可不传入,如传入且值为true则operator值不可为like,且比较时将数据转换为数字后再比较;如number值为false、空或number不传入,则进行字符串比较。

6、subCondition参数中当有多个搜索条件时,每个条件的logic表示与前一个条件的逻辑关系;第一个搜索条件的logic默认按"AND"处理,对第一个搜索条件的logic设置无需调整。多个条件的连接优先级为OR优先于AND,即当OR、AND同时存在于搜索条件中时,先进行OR连接,再进行AND连接。

7、subCondition、nestAnd、nestOr非必填。

8、select中必须指定返回的对象属性,通过类别名.属性名的方式指定。

9、sort非必填,如提供则查询结果按照sortBy字段的order顺序进行排序,通过类别名.属性名的方式指定排序字段。

10、nestAnd、nestOr可以嵌套在任意一个对象的查询条件中, nestAnd表示其内部的查询条件之间为and与关系,nesOr表示其内部的查询条件之间为or或关系。

11、查询结果需根据accessToken的用户信息进行权限校验和过滤,最小需要读的权限。

12、返回的body由count和data两部分构成,count为符合查询条件的总记录数,data为当前页取出的数据列表。在body中也可传入select参数,若select参数不为空,则返回消息列表中只返回select参数指定的数据,若select参数为空或者不传入select参数,则返回实体的所有字段的信息。若noRelation为true,返回值中没有parameter属性。

13、按照参数page和per_page获取用户有读取权限的数据:page>0,per_page>0 则data部分返回第page页数据(如无数据则为空数组),count值为总记录数;page未提供,per_page>0 则data部分返回第一页数据(如无数据则为空数组),count值为总记录数;per_page=0则data为空数组,count值为总记录数;per_page不传则data部分返回所有数据(如无数据则为空数组),count值为总记录数。

14、不建议subCondition与nestAnd/nestOr混用;一般情况简单的查询条件可使用subCondition,当多个查询条件需要进行and、or的复杂组合时建议使用nestAnd和nestOr。

15、在设置查询条件时,一般建议将排序属性所在的对象类、数据量大的对象类的查询条件放置在前面,以提高查询速度。

16、当查询条件或返回内容中需使用对象的惟一标识key时,写法为:_key

17、当使用grouping分组查询时,返回字段select内容必须是collect、count、aggregate的字段或keep字段、以keep.开头的字段。

18、当使用grouping分组查询时,select可以不传,如果select不传或为空,则返回collect、count、aggregate的字段和keep。

19、当使用grouping分组查询时,keep为JSON数组,内容是JSON对象,如果select字段为keep.xx,则返回该分组中xx字段所有值的数组形式。

20、当使用grouping分组查询时,聚合函数支持MAX、MIN、SUM、AVERAGE四种,分别取分组中最大值、最小值、总和、平均值。

21、当实体类启用了类权限时,需要当前用户对该实体类拥有读权限。

版权所有@盈嘉互联(北京)科技有限公司 京ICP备15051988号-9 Copyright © 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-05-16 19:01:04

results matching ""

    No results matching ""