泛微E9组织人员同步总结笔记

1、前言

随着泛微OA的使用,很多公司都会有将异构系统的组织、人员同步到OA的需求。
实现方式主流的有两种方式:
方式1:异构系统将新增、修改的组织人员数据调用泛微OA的组织人员同步接口推送给OA。
方式2:OA主动去调用异构系统的接口或中间库表,拿取数据,并自己调用泛微OA的组织人员同步接口。写入系统中。
本文主要介绍方式的同步方式。

2、实现方案

2.1、同步范围

泛微OA支持的同步数据范围包含 分部(即分子公司的概念)、部门、岗位、人员。
下面分别介绍各个维度同步的实现过程。

2.1.1、分部同步

分部的同步需要异构系统提供 分部编码、分部名称、上级分部编码、封存标志。
OA接口需要的字段信息如下图:
在这里插入图片描述

2.1.2、部门同步

部门的同步需要异构系统提供部门编码、部门名称、所属分部编码、上级部门编码、封存标志。
OA接口需要的字段信息如下图:
在这里插入图片描述

2.1.3、岗位同步

OA中的岗位是全局的,这一点区别于很多的HR系统的岗位是用于各个部门的,所以需要注意。
坑点
岗位同步是个硬伤。因为OA中的职务实际是存在上级的
职务类型-职务-岗位 ,而系统支持的岗位同步里没有职务类型和职务的同步。这样就造成了在岗位同步时候,如果新增一个岗位到OA中,会默认新建成:待定(职务类型)-待定(职务)-新增的岗位。
所以如果新增的岗位需要用户手动修改岗位所属职务类型和职务。

岗位同步需要异构系统提供:岗位编码、岗位名称
在这里插入图片描述

2.1.4、人员同步

人员同步涉及到字段较多,就不一一罗列了。只说一些必要字段。
需要异构系统提供:人员编码、人员分部编码、人员部门编码、人员岗位编码、人员姓名、
人员状态(汉字值:枚举:试用,正式,临时,试用延期, 解聘,离职,退休,无效)。

上面仅仅是异构系统需要提供的必要字段,这一点注意,如果需要同步其它非必要字段,请查看泛微的官方接口文档。(需要文档链接请私信我)

基于岗位同步的硬伤,人员的岗位赋值,给出一种折中的处理方式:
人员同步中岗位同步时需要传入职务类型汉字、职务的汉字、岗位的汉字,这三个字段。
这三个字段值在系统中都存在,则不会创建新的岗位。
所以我们要做的是根据异构系统人员数据中的岗位编码,反查OA系统中的这个岗位对应的职务类型、对应的职务汉字的值,然后赋值给接口字段。

下面是反查的sql,仅供参考

select a.jobtitlename ,b.jobactivityname ,c.jobgroupname from hrmjobtitles a, HrmJobActivities b, HrmJobGroups c where a.jobactivityid =b.id and b.jobgroupid =c.id and a.jobtitlecode =?

2.2、注意

注意各维度接口每次只接收不超过1000调数据,如果数据量大,需要做分批处理。
可以参考下面类似的代码做分批调用。

  List list = new ArrayList();
  String action = getAction("subcompany", code, canceled);
            item.putOpt("@action", action);
            item.putOpt("code", code);
            item.putOpt("shortname", shortname);
            item.putOpt("fullname", fullname);
            item.putOpt("parent_code", parent_code);
            item.putOpt("canceled", canceled);
            array.add(item);
            Map map = JSON.parseObject(item.toString());
            list.add(map);
        List<List> newList = Lists.partition(list, 1000);
        for (List listtmp : newList) {
    
    
            JSONObject data = new JSONObject();
            JSONObject rule = new JSONObject();
            rule.putOpt("subcompnay", "subcompanycode");
            data.putOpt("rule", rule);
            data.putOnce("data", JSONUtil.parseArray(listtmp));
            result.add(data);
            syn2OACmd.synSubcompany(result);
        }

猜你喜欢

转载自blog.csdn.net/u010048119/article/details/129580730
今日推荐