概述:relations为系统关键字,一般用于模型关联取数。
示例:有两个表A、B,表A存储姓名、表B存储年龄,两表之间通过ID进行映射,如果需要同时获取姓名、年龄,则可通过relations关联进行获取。
应用:本讲解通过hcm.model.list接口,进行relations关联演示。日常使用过程中,可在模型元数据配置中的“relations[]”节点中进行配置,配置前请务必在测试环境中进行验证,以免因条件判断等因素导致生产环境数据异常。
hcm.model.list接口调用地址,环境域名/api/hcm.model.list,如下所示:
hcm.model.list接口参数讲解
{ "model":"", "filter_dict":{}, "extra_property":{ "state":"", "role":{"role":”XXX”}, "relations":[], “sorts”:[], "fields":[] }, "page_index":1, "page_size":20 } | |
参数示例说明: | |
model | 要查询的主模型名称 |
filter_dict | 将查询条件封装成一个字典,类似于SQL语句中的where部分 “filter_dict”:{ “name”:”张三”, “age_count”:{“lte”:50,”gte”:25}, “department.origin_id”:{“child_include”:[13613154]} } 说明:”name”、”age_count”为主模型所示字段,“department.origin_id”为关联的子模型字段(department为关联子模型的别名,即key值) |
extra_property | hcm.model.list接口的固定写法,用以支持关联、排序、角色、场景、输出字段等。 |
state | 主模型对应的场景,如在云函数中调用,建议结合"role":{"role":”XXX”}共同使用,以免权限异常 说明:如主模型的某个场景,已跟各模型进行了关联,可直接通过场景进行调用,不用再relations关联了。如Employee模型的all场景 |
relations | 多表关联,类似SQL语句中的left outer join XXX on XXX.XX = XXX.XX或inner join XXX on XXX.XX = XXX.XX “relations”:[ { “model”:”JobInformation”, “key”:”job_info”, “type”:”outer”, “filter”:{ “job_info.employee_id”:”:id”, “job_info.position_type”:1, “job_info.on_job”:1, “job_info.begin_date”:{“lte”:”=date_”}, “job_info.end_date”:{“gt”:”=date_”} } }, { “model”:”OrgPositionHistory”, “key”:”position”, “type”:”outer”, “filter”:{ “position.origin_id”:”:job_info.position_id”, “position.begin_date”:{“lte”:”=date_”}, “position.end_date”:{“gt”:”=date_”} } }, { “model”:”OrgDepartmentHistory”, “key”:”department”, “type”:”outer”, “filter”:{ “department.origin_id”:”:position.parent_id”, “department.begin_date”:{“lte”:”=date_”}, “department.end_date”:{“gt”:”=date_”} } } ] 说明: “model”:”XXXX” 为关联的模型名称 “key”:”XXXX” 为关联的模型的别名,可随意定义,但在filter需保持一致 “type”:”outer”或”type”:”inner”为不同的两种关联类型,分别对应SQL语法中的left outer join和inner join,一种是以主模型为基础进行扩展关联,一种是取模型与模型的数据交集。 “filter”:{} 为关联条件部分,该部分中必须写明模型之间的关联依据,如“department.origin_id”:”:position.parent_id” “=date_” 固定写法,可理解为系统全局变量,指向的是系统当前日期 |
sorts | 对输出的结果进行排序,可通过多模型的字段进行排序 “sorts”:[ { “key”:”position.orderno”, “type”:”asc”, “sequence”:1 }, { “key”:”job_info.orderno”, “type”:”asc”, “sequence”:5 } ] 说明: “key”:”XXX1.XXX” 为relations关联的模型的别名.对应的排序字段 “type”:”asc”或”type”:”desc” 分别对应着升序和降序,按需使用 “sequence”: 1 为排序字段的优先级,值越小、优先级越高 |
fields | 需要输出/展示的字段 “fields”:[ { “key”:”name”, “field”:[“name”] }, { “key”:”position_name”, “field”:[“job_info”,”position”,”name”] } ] 说明: “key”:”XXXX” 为输出字段的别名,可自定义 “field”:[“XXX”] 为要输出的模型字段,主模型可直接写明字段;关联模型的字段输出,需要列明层级,以上文为例,有两种写法: 写法一:[“job_info”,”position”,”name”] 写法二:[“job_info.position.name”] |
page_index | 将查询结果通过page_size进行分页,page_index指的是要展示第几页的数据,如”page_index”:2,”page_size”:20 指的是以每页20条数据对查询结果进行分页,输出第二页的数据。 |
page_size | 指的是输出结果每页展示多少条数据,如不指定,则默认为每页20条 |
备注:
针对relations关联基础,可通过多观察标准产品的方式快速掌握,如可通过【组织人事】--【人员信息管理】--【元数据配置】,Employee模型的all场景下编辑合并元数据,观察标准产品是如何进行relations关联设置的。
relations关联基础要掌握到何种程度?还是以人员信息管理,Employee的all场景为例,通过hcm.model.list接口直接进行各模型关联,输出的结果与人员信息管理人数保持一致,即可认为已初步掌握relations关联基础。
常用例子:人员主模型,在人员信息管理list界面关联最高教育经历以及最新职称的配置:
{ "relations": [{ "filter": { "highest_deg.employee_id": ":id", "highest_deg.u_is_highest_deg": true }, "model": "EmployeeEducation", "type": "outer", "name": "最高学位", "key": "highest_deg" }, { "filter": { "highest_title.employee_id": ":id", "highest_title.u_latest": "true" }, "model": "TechnicalSkills", "type": "outer", "name": "职称信息", "key": "highest_title" }]}