概述: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"
    }]}



  • 无标签