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、当实体类启用了类权限时,需要当前用户对该实体类拥有读权限。