
HR软件系统对接如何确保与现有ERP、OA等系统数据互通?
最近跟几个做HR系统实施的朋友聊天,大家都被一个老问题折磨得够呛:新上的HR系统,怎么跟公司原来那些老古董系统——主要是ERP和OA——把数据打通。这事儿听起来简单,不就是导个数据嘛?真做起来,能让你怀疑人生。
我刚入行那会儿,也觉得技术嘛,无非是A系统调用B系统的接口。后来被现实狠狠教育了。有的老板觉得,花钱买软件就行,殊不知“对接”这个隐形工程,能把预算吃掉一大半。这里没有黑谁的意思,纯粹是行业现状。ERP管钱管物,OA管流程管审批,HR管人。三个系统,三个地盘,数据定义、格式、更新频率全是坑。
咱们今天就不整那些虚的,不谈什么高大上的战略,踏踏实实聊聊操作层面,怎么才能让这几个系统“和平共处”,数据顺畅地跑起来。
一、 地基得打牢:搞清楚到底要通什么数据
很多人一上来就问:用什么技术对接?其实这是个误区。技术是工具,核心是你要通什么。
我见过一个项目,HR系统上线三个月,员工在HR系统里改了电话号码,結果OA里没变,报销流程卡住了,HR被财务和员工两头骂。一查,发现当初两边约定只同步“入职”和“离职”信息,日常变更没做。这就是典型的范围没划清楚。
所以,第一步,不是看代码,是拉个清单。
1.1 数据流向图:画出来,别只在脑子里想

拿张白纸或者打开Visio,把HR、ERP、OA画三个圈。
- HR -> ERP:通常是什么?员工的入职、转正、调岗、离职信息。特别是薪资相关的档案和银行卡号。财务发工资,靠的是ERP里的数据,源头必须是HR。
- HR -> OA:组织架构、员工通讯录、请假出差等证明。OA里发起一个报销,得知道你是哪个部门的,审批流走到你老板那里。
- OA/ERP -> HR:这个方向容易被忽略。比方说,OA里的请假审批结果,要回写到HR系统,更新员工的年假余额。ERP里的部门成本中心变动,也要同步到HR,不然人力成本分析就乱了。
画完这个图,谁是主数据源、谁是消费者,就一目了然了。通常,HR是人的主数据源,ERP是组织和财务的主数据源。
1.2 别只看“静态数据”,“动态数据”才是魔鬼
静态数据,比如姓名、身份证号,一般不怎么变,同步起来相对简单。麻烦的是动态数据。
举个例子,员工异动。一个员工从销售部A区,调到市场部B区。这在HR系统里是一条记录。但在ERP里,他的成本中心变了,OA里汇报关系也变了。如果HR系统只推送了一个“员工调动”的消息,没有告诉ERP具体的成本中心代码,ERP那边就懵了,工资可能还会发到原来的部门预算里。
所以,在梳理的时候,一定要把一个业务场景的“前因后果”想清楚。不要只考虑增删改,还要考虑复杂的业务逻辑。
二、 老系统太老怎么办?API不是唯一出路

理想很丰满,通过标准API接口,一调了之。现实是,很多公司的ERP系统是十年前买的,或者干脆是定制开发的,根本没有API,或者API又慢又不稳定。OA系统可能用的是云服务,防火墙又是企业自己管的。怎么办?
2.1 API (接口) 对接:主流方式,但不是万能药
如果运气好,两边都支持RESTful API或者Web Service,这是最推荐的方式。实时性强,数据准确。
但是,这里有个坑叫“接口限流”。有些老ERP,一次调用要跑个5秒,HR系统那边每分钟同步几十个人,接口直接搞挂了。这就需要做异步处理。HR系统先把数据扔到中间的一个“消息队列”(比如MQ),ERP慢慢去消化,处理完了再回调告诉HR系统一声。
还有个细节是数据格式。HR系统吐出来的JSON格式,可能ERP那边要的是XML,或者字段名完全对不上。比如HR叫“EmployeeID”,ERP叫“Emp_Code”。这中间需要一个“翻译层”,很多企业会买个ESB(企业服务总线)来做这个翻译工作。
2.2 中间库/视图:传统企业最爱的“笨办法”
对于那些完全没接口的老系统,或者接口成本太高的情况,有一种很土但很有效的办法:中间库。
原理很简单:HR系统每天跑个脚本,把需要同步的数据,按照双方约定好的格式(比如一张Excel表或者数据库的一张表),写到一个中间的数据库里。另一边,ERP系统也跑个脚本,去这个库里读数据,然后更新自己的系统。
这种方式的优点是:解耦。两边系统都不用大改,只要会读写数据库就行。缺点也很明显:时效性差。通常是T+1,也就是隔天才能生效。如果HR今天上午办了离职,财务今天下午就要停发工资,这种方式就来不及了。除非改成每小时甚至每分钟同步一次。
我见过最绝的一个案例,因为中间库权限申请太麻烦,两边开发商量了一个“文件交换”的方式。HR生成一个txt文件,扔到FTP服务器上,ERP去拉取。为了保证文件传对了,还约定文件名里要带时间戳和MD5校验码。听起来像上个世纪的做法,但人家跑了五年没出过大问题。
2.3 RPA(机器人流程自动化):给旧系统续命的黑科技
还有一种情况,系统太老,连数据库都不让你直连。这时候RPA就派上用场了。
它的逻辑是模拟人工操作。比如,HR系统里新增一个员工。RPA机器人会自动打开ERP的网页(或客户端),像人一样输入账号密码,点击“新增员工”,把HR系统里的数据一个个填进去,最后点保存。
这种方式虽然看起来不优雅,但它能解决很多“历史遗留问题”。因为它不改变原有系统的任何架构,只是在上层加了一层“自动化操作”。
当然,RPA也有软肋。最怕界面改版。一旦ERP升级了,按钮位置变了,脚本就失效了,得重写。所以,这通常作为过渡方案,或者在变动不频繁的流程中使用。
三、 几个核心痛点:不解决就想摔键盘的那种
数据通了,不代表就能用了。接下来要处理的是数据治理层面的问题,这比技术对接更伤脑筋。
3.1 “主键”之战:谁是这对数据的“身份证号”?
不同的系统,对同一个实体的标识是不一样的。
| 系统 | 员工唯一标识 | 部门唯一标识 |
|---|---|---|
| HR系统 | 工号(比如:10086) | 部门编码(比如:HR-DEPT-01) |
| ERP系统 | 人员ID(比如:P00010086) | 成本中心编码(比如:CC201001) |
| OA系统 | 手机号(比如:13800138000) | 组织架构节点ID(比如:ORG10086) |
怎么办?建立“映射关系表”。这活儿既枯燥又重要。必须有一个权威的系统(通常是HR系统)作为“黄金数据源”,它拥有人员的唯一工号。然后建立一张Mapping表,记录着“工号10086”对应ERP的“P00010086”,对应OA的“ORG10086”。
每次同步数据时,先通过这张表查ID,再进行操作。如果映射丢失了,数据就会变成“孤儿”,在系统里怎么也找不着。
3.2 数据清洗:垃圾进,垃圾出
老系统里的数据质量,不敢细看,全是泪。
“张三”的手机号在ERP里缺了一位;“李四”在OA里是“软件部”,在HR系统里叫“研发软件部”。如果直接把这种脏数据同步过去,新系统刚上线就乱套了。
所以,在正式对接前,必须做一次数据清洗。
- 去重:同一个员工是不是在不同系统里有两个账号?
- 补全:身份证号、手机号、邮箱是不是缺项?
- 标准化:部门名称、职级、学历等字段必须统一。
这个过程最好有业务部门(HRBP)深度参与,因为只有他们才认得出来哪个是真人,哪个是历史遗留的假数据。
3.3 增量同步 vs 全量同步
刚上线那天,肯定是全量同步,把老数据一次性全倒过来。但之后日常运行,如果每次都全量同步,系统会被拖垮。
必须做增量同步。只同步那些“变动了”的数据。
怎么判断变动了?通常有几个办法:
- 时间戳:表单里有个“最后修改时间”,查这个时间。
- 日志表:系统自动记录变动日志。
- 触发器:数据库层面的触发器,一变动就打标记。
增量同步虽然快,但风险在于一旦漏掉一次,两边数据就永远对不上了。所以,定期(比如每周)的“数据校验”任务是必须的。对比两边关键字段的差异,发现不一致立刻修复。
四、 流程打通:从数据互通到业务协同
前面说的都是数据层面的。更高阶的对-接,是流程层面的。
4.1 单点登录(SSO):别让用户记那么多密码
数据通了,如果用户还得在HR系统、ERP、OA之间来回切换账号,体验极差。
SSO是必须要做的。通常以身份认证中心(IDaaS)为枢纽。用户登录OA后,点击HR系统的图标,OA发一个令牌(Token)给HR系统,HR系统验证一下是真的,就直接进去了,不用再输密码。
这背后是SAML或者CAS协议在起作用。技术不复杂,但对网络安全配置要求高,需要IT部门的专业支持。
4.2 触发式流程:点一盏灯,照亮整个流程
最典型的场景:入职。
以前的流程是: 1. HR在OA发起入职审批。 2. 审批通过。 3. HR手动在HR系统录入档案。 4. HR手动在ERP开账号。 5. HR手动在OA开账号。 6. 发邮件通知IT装电脑。
打通后的流程应该是: 1. HR在OA发起入职审批(名字、部门、岗位)。 2. 审批通过的瞬间,OA自动调用HR系统接口,创建“待入职”档案。 3. HR在HR系统确认入职日期,到达日期那天,HR系统自动触发ERP接口,创建工资账号、社保账号;同时触发OA接口,创建OA账号、开通门禁权限。 4. IT部门收到自动邮件,内容是“请为新员工张三(部门:市场部,工号:10086)准备电脑”,带着所有信息,一目了然。
这种自动化,靠的是工作流引擎(BPM)。核心在于定义好“触发器(Trigger)”和“动作(Action)”。
4.3 异常处理机制:天有不测风云,数据可能传不过去
这是最考验系统健壮性的地方。
如果ERP系统正好在维护,接口挂了,HR这边提交了异动信息,怎么办?
不能悄无声息地失败。必须有“补偿机制”。
- 失败告警:立刻发邮件或钉钉/企微消息给系统管理员,告知“数据同步失败,编号为XXX”。
- 重试机制:系统自动尝试重发3次。
- 补录界面:如果还是失败,HR系统里要有一个专门的“待办同步列表”,让HR知道哪些数据没发出去,并允许手工重发。
不要迷信系统永远不出错。做好容错,才能让业务不中断。
五、 权限与安全:数据的生命线
员工的薪资、身份证号、家庭住址,这些数据在系统间跑来跑去,最怕泄露。
5.1 传输加密
接口调用必须走HTTPS,这是底线。数据在数据库里存储,敏感字段(如身份证、银行卡)必须加密存储,最好脱敏展示。
5.2 最小权限原则
HR系统推送到ERP的数据,不需要把员工的“病历信息”也推过去。ERP也不需要知道员工的“家庭关系”。
在做数据映射时,只传递业务必要的字段。接口的调用权限也要严格控制,只允许特定的服务器IP地址访问。
5.3 审计与溯源
哪条数据是谁在什么时间推过来的?必须有日志记录。
如果发现某员工薪资突然变了,能查到是HR系统在10:05推送的,还是ERP手动修改的。这对于内部审计和责任界定至关重要。
六、 兵马未动,粮草先行——测试与灰度
以上都设计好了,千万别直接上线。一定要充分测试。
6.1 测试数据的构造
不能用线上的真实员工数据做测试(违反隐私)。要用构造的“假数据”,但要覆盖各种极端情况。
- 名字里带生僻字的(用于测试字符集)。
- 跨部门调动的(测试部门映射)。
- 入职日期是2月29日的(测试闰年逻辑)。
- 手机号15位的(测试字段长度)。
把各种奇葩数据喂给系统,看它会不会崩。
6.2 灰度发布(Shadow Mode)
正式上线前,开启“影子模式”。
HR系统正常运行,数据也按照新流程往ERP或OA推送。但是,推送过去的数据,ERP那边不实际应用,只是记录在日志里。然后人工去比对日志和实际数据,看完全一致了,再正式切换使用。
这一步能救命,能把99%的致命Bug挡在门外。
6.3 培训与运维手册
最后,别忘了文档。
开发人员觉得很简单的事,运维人员可能完全不懂。要写清楚:
- 什么算正常报警?(比如“单日同步超过1000条就算异常”。)
- 日志在哪里查?
- 如果同步中断了,第一步该重启哪个服务?
把这些写成文档,甚至做成傻瓜式操作的运维后台,这才是真正负责任的交付。
结语
打通HR、ERP、OA的数据,本质上是在修路。路修通了,信息才能流动,效率才能产生。但这活儿没有标准答案。每家公司的架构、系统版本、业务流程都不一样。
有时候你觉得技术方案无懈可击,结果上线第一天,因为ERP那边的数据库锁死导致超时;有时候你觉得最笨的方法,反而最稳定。
最重要的不是用了什么高深的技术,而是是否真正理解了业务逻辑,是否预判了各种可能出错的环节,并留出了人工干预的口子。这大概就是做系统集成的“道”吧。
海外招聘服务商对接
