SHR与EAS集成常见错误总结
金蝶云社区-韦花玲
韦花玲
2人赞赏了该文章 11639次浏览 未经作者许可,禁止转载编辑于2020年02月13日 08:41:06

近来发现产品论坛中对s-HR与EAS集成问题提问较多,特开此帖对出现的问题进行总结。 总结众多已经出现并解决的问题,大多发现是没有严格按照集成文档操作导致的,所以请一定要有耐心的仔细查看集成文档,并严格按照步骤一步一步操作。集成几点说明:1、 同步前已存在数据编码要一致。(eas为新建库的要手动创建根节点组织、根节点岗位及岗位的上级。)2、集成第一步先要做同步初始化,初始化需要通过手动执行后台事务执行(操作只执行一次,完成后不需要再执行除非换eas账套);执行时,信息按照编码进行对应,与EAS的信息进行比对,将两个系统的数据id对应关系记录到id映射表t_shr_idmapping中,建立id对应关系;3、启用系统集成后,不建议在EAS系统中新增人员、组织、岗位信息,但是可以进行修改(仅限于未同步字段)。集成需要查询数据检查问题涉及的相关表:shr:1、人员表 t_bd_person2、 岗位表t_org_position3、 组织表:t_org_adminEAS: 1、人员表 t_bd_person2、 岗位表t_org_position3、 组织表:t_org_admin4、 集成信息记录表T_HR_SyncDataStatus5、 集成映射表t_shr_idmapping --finnerid:EAS 的 fid ;--fouterid:shr 的fid

一、常见问题报错及处理方式
问题1:后台事务初始化失败,立即获取shr apusic日志,打开日志检查,有以下几种原因(注意集成包要是新的,不能从自己安装目录获取,需要联系金蝶工程师获取当前最新的集成私包,否则初始化也会失败)

(1) 连接不上1、数据中心配错导致:检查 s-HR服务器安装目录\eas\server\profiles\server1\config\portalConfig\目录下autoLoginConfig 文件中的 datacenter值,其值应该为s-HR系统的数据中心代码;需重启服务器2服务器时间不一致导致token过期连接不上3、集成配置文件使用内网地址,客户端外网访问不到导致 集成初始化失败换成外网地址即可大致报错信息如下:2
2015-08-21 16:09:15 信息 [con.out] ======s-HRToken======:AAECAzU1RDZEQ0FCNTVENkUzQjN1c2VyMDE4N0NGOEUwMkQzMDA1OUUzREI3MkEyMUFFRUE4RjkwQzNGMjRDOQ%25253D%25253D
2015-08-21 16:09:15 信息 [con.out]Redirect:
2015-08-21 16:09:15 信息 [con.out]
Redirect:
(2)shrIntegradeEasConfig.properties配置文件折行或错误Caused by: java.lang.NumberFormatException
java.lang.
NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:465)
at java.lang.Integer.parseInt(Integer.java:538)
at com.kingdee.eas.hr.base.app.synch.
LtpaTokenManager.generate(LtpaTokenManager.java:99)
atcom.kingdee.eas.hr.base.app.synch.DataTool.getHRData(DataTool.java:224)
atcom.kingdee.eas.hr.base.app.synch.DataTool.getInitDataFromSHR(DataTool.java:178)
atcom.kingdee.eas.hr.base.app.synch.SynchronManager.init(SynchronManager.java:49)
atcom.kingdee.eas.hr.base.app.EASIntegratedSHRFacadeControllerBean._initData(EASIntegratedSHRFacadeControllerBean.java:140)
atcom.kingdee.eas.hr.base.app.AbstractEASIntegratedSHRFacadeControllerBean.initData(AbstractEASIntegratedSHRFacadeControllerBean.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
atcom.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.invoke(TxInvokerBean.java:125)
atcom.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.INVOKE_SUPPORTS(TxInvokerBean.java:64)
at com.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean_LocalObjectImpl_2.INVOKE_SUPPORTS(UnknownSource)
atcom.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:179)
atcom.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:324)
at com.sun.proxy.$Proxy239.initData(Unknown Source)
atcom.kingdee.eas.hr.base.EASIntegratedSHRFacade.initData(EASIntegratedSHRFacade.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
atcom.kingdee.bos.ResponseInvocationHandler.invoke(ResponseInvocationHandler.java:194)
at com.sun.proxy.$Proxy249.initData(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:619)
atcom.kingdee.bos.service.job.wrapper.FacadeInvoke.innerLocalInvoke(FacadeInvoke.java:215)
at com.kingdee.bos.service.job.wrapper.FacadeInvoke.localInvoke(FacadeInvoke.java:92)
atcom.kingdee.bos.service.job.wrapper.FacadeInvoke.localInvoke(FacadeInvoke.java:74)
atcom.kingdee.bos.service.job.wrapper.FunctionWrapper.call(FunctionWrapper.java:200)
at com.kingdee.bos.service.job.wrapper.FunctionWrapper.invoke(FunctionWrapper.java:185)
atcom.kingdee.bos.service.job.wrapper.FunctionWrapper.execute(FunctionWrapper.java:116)
atcom.kingdee.bos.service.job.core.ThreadWorker.execute(ThreadWorker.java:161)
atcom.kingdee.bos.service.job.core.ThreadWorker.run(ThreadWorker.java:106)
at java.lang.Thread.run(Thread.java:853)
(3)根节点岗位上级岗位有错,为空或者是不是自己本身Error message:null
Caused by: com.kingdee.bos.json.JSONException
com.kingdee.bos.json.JSONException: A JSONObject text must begin with '{' atcharacter 1
atcom.kingdee.bos.json.JSONTokener.syntaxError(JSONTokener.java:382)
atcom.kingdee.bos.json.JSONObject.(JSONObject.java:105)
atcom.kingdee.bos.json.JSONObject.(JSONObject.java:345)
atcom.kingdee.eas.hr.base.app.synch.DataTool.getHRData(DataTool.java:253)
atcom.kingdee.eas.hr.base.app.synch.DataTool.getInitDataFromSHR(DataTool.java:178)
atcom.kingdee.eas.hr.base.app.synch.SynchronManager.init(SynchronManager.java:52)
at
Caused by: java.lang.NullPointerException
… … …(
省略中间部分)
atcom.kingdee.shr.integration.eas.service.fetch.GetPositionService.getPositionColl(GetPositionService.java:122)(4)脚本文件没执行或者集成包不是最新的Caused by: com.kingdee.bos.BOSException:null
Caused exception message is: null
Caused exception message is: [Microsoft][SQLServer 2000 Driver forJDBC][SQLServer]
对象名'T_HR_SHRSyncConfigur' 无效。
atcom.kingdee.shr.base.syssetting.app.util.MsfServiceUtil.processService(MsfServiceUtil.java:127)
atcom.kingdee.shr.base.syssetting.app.MSFServiceFacadeControllerBean._processService(MSFServiceFacadeControllerBean.java:37)
atcom.kingdee.shr.base.syssetting.app.AbstractMSFServiceFacadeControllerBean.processService(AbstractMSFServiceFacadeControllerBean.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
atcom.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.invoke(TxInvokerBean.java:116)
atcom.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.INVOKE_SUPPORTS(TxInvokerBean.java:61)
atcom.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean_LocalObjectImpl_2.INVOKE_SUPPORTS(UnknownSource)
atcom.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:179)
at com.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:324)
at $Proxy173.processService(Unknown Source)
atcom.kingdee.shr.base.syssetting.MSFServiceFacade.processService(MSFServiceFacade.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
atcom.kingdee.bos.ResponseInvocationHandler.invoke(ResponseInvocationHandler.java:194)
at $Proxy172.processService(Unknown Source)
atcom.kingdee.shr.msf.web.controller.MSFServiceController.getRefAction(MSFServiceController.java:73)
... 94 more

问题二: 集成界面组织记录报财务集团错误时 修改select * fromT_org_oupartFI where funitid='根节点组织id' 的FisGroup=1 即可
问题三:新增的人员同步失败,启用了自动生成用户参数。Server Component wrapa Throwable. Exception Type is [javax.ejb.EJBException]
Caused exception message is: Unexpected system failure, see server log fordetails.; nested exception is: java.lang.reflect.UndeclaredThrowableException:TxEJB wrap a Not_BaseException while Reflect Invoke ControllerBean.
com.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:246)
com.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:324)
$Proxy250.syncPersonAddNew(Unknown Source)
com.kingdee.eas.hr.base.EASIntegratedSHRFacade.syncPersonAddNew(EASIntegratedSHRFacade.java:146)
sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:618)
com.kingdee.bos.ResponseInvocationHandler.invoke(ResponseInvocationHandler.java:194)
$Proxy249.syncPersonAddNew(Unknown Source)
com.kingdee.eas.hr.base.app.synch.handler.SynchPersonFromSHR.addPersonInfo(SynchPersonFromSHR.java:110)
com.kingdee.eas.hr.base.app.synch.handler.SynchPersonFromSHR.synchOtherData(SynchPersonFromSHR.java:86)
com.kingdee.eas.hr.base.app.synch.handler.AbstractSynchHandler.synchDataFromSHR(AbstractSynchHandler.java:28)
com.kingdee.eas.hr.base.app.synch.SynchronManager.synch(SynchronManager.java:80)
com.kingdee.eas.hr.base.app.synch.SynchronManager.syncData(SynchronManager.java:27)
com.kingdee.eas.hr.base.app.SyncDataToEASStatusControllerBean._effect(SyncDataToEASStatusControllerBean.java:83)
com.kingdee.eas.hr.base.app.AbstractSyncDataToEASStatusControllerBean.effect(AbstractSyncDataToEASStatusControllerBean.java:180)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:618)
com.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.invoke(TxInvo
原因:eas 调整了生成用户的新增用户添加默认角色的方法出了错,导致启用自动生成用户参数 人员同步不成功处理方式:私包处理,暂时处理方式 去掉新增用户添加默认角色的方法 用户可以自动生成 但角色不分配了问题四:组织同步报违反唯一约束条件 (ZMTCW.CST_ORG_PADMIN)错误

create dataerror.ORA-00001: 违反唯一约束条件 (ZMTCW.CST_ORG_PADMIN)

Caused exception message is: ORA-00001: 违反唯一约束条件(ZMTCW.CST_ORG_PADMIN)

com.kingdee.bos.dao.ormapping.ORMappingDAO.innerAddnew(ORMappingDAO.java:1064)
com.kingdee.bos.dao.ormapping.ORMappingDAO.addnew(ORMappingDAO.java:1003)
com.kingdee.bos.framework.ejb.AbstractEntityControllerBean.innerAddnew(AbstractEntityControllerBean.java:341)
com.kingdee.eas.framework.app.AbstractCoreBaseControllerBean._addnew(AbstractCoreBaseControllerBean.java:146)
com.kingdee.eas.framework.app.CoreBaseControllerBean._addnew(CoreBaseControllerBean.java:90)
com.kingdee.eas.basedata.org.app.AbstractOUPartCoreBaseControllerBean._addnew(AbstractOUPartCoreBaseControllerBean.java:223)
com.kingdee.eas.basedata.org.app.AbstractOUPartCoreBaseControllerBean.addnew(AbstractOUPartCoreBaseControllerBean.java:205)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
java.lang.reflect.Method.invoke(Method.java:619)
com.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.invoke(TxInvokerBean.java:125)
com.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean.INVOKE_REQUIRED(TxInvokerBean.java:60)
com.kingdee.bos.transaction.EJBTxFacade.TxInvokerBean_LocalObjectImpl_2.INVOKE_REQUIRED(UnknownSource)
com.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:171)
com.kingdee.bos.transaction.EJBTransactionProxy.invoke(EJBTransactionProxy.java:324)
com.sun.proxy.$Proxy602.addnew(Unknown Source)
com.kingdee.eas.basedata.org.OUPartCoreBase.addnew(OUPartCoreBase.java:139)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
java.lang.reflect.Method.invoke(Method.java:619)
com.kingdee.bos.ResponseInvoc处理方式:CST_ORG_PADMIN是t_org_oupartadmin这个的索引eas删掉组织时这个表数据没有删除干净 t_org_oupartadmin处理过程:1、在eas集成信息界面选中报此错误集成记录,ctrl+shift+C 拷贝出这行记录的id(如:EK1V2ix0SlS9pIkgATuVsJgpQr4=)。2、在eas查询分析器使用uuid查表名,查找到这条表记录数据 的 如下:select * from T_HR_SyncDataStatus where fid ='EK1V2ix0SlS9pIkgATuVsJgpQr4='取这个记录中的这个字段FEASOBJECTID值(如:uKZztds7TZC6wtElAlFaBMznrtQ=3、查询这个表的记录select * from t_org_oupartadmin where funitid='uKZztds7TZC6wtElAlFaBMznrtQ='备份select * into t_org_oupartadmin1107bak from t_org_oupartadmin where funitid='uKZztds7TZC6wtElAlFaBMznrtQ='确认备份成功select * from t_org_oupartadmin1107bak where funitid='uKZztds7TZC6wtElAlFaBMznrtQ='删除:DELETE FROM t_org_oupartadmin where funitid='uKZztds7TZC6wtElAlFaBMznrtQ='4、清除sql缓存:在eas集成信息记录界面,点击集成配置,修订一下其中一笔数据,不改内容直接打开保存操作5、点击处理同步异常的记录处理 即可


问题五:MissingRecord:Positionid = 'fx/7k89YTqKZPJUPQHNhPXSuYS4=',找不到岗位(EAS的职位)分析过程:打开eas查询分析器,使用select fouterid from t_shr_idmapping where finnerid='fx/7k89YTqKZPJUPQHNhPXSuYS4=';sql查询,找到fouterid字段值“fx/7k89YTqKZPJUPQHNhPXSuYS4=”;再到s-HR的查询分析器中查看一下,这个id (fx/7k89YTqKZPJUPQHNhPXSuYS4=)对应的岗位是哪个,查询语句:select* from T_ORG_Position where fid ='fx/7k89YTqKZPJUPQHNhPXSuYS4=',查询到岗位后,根据岗位的编码名称,到eas那边看看这个岗位是否同步过来了,如果没有同步过来,则要先同步依赖的这个岗位,才能接着同步当前报错的数据如下处理过程:--1、根据报错fid 取fouterid --g33RyK4DQOewtpmAJlsj/3SuYS4= 到shr 查询相应信息
select *from t_shr_idmapping where finnerid in('g33RyK4DQOewtpmAJlsj/3SuYS4=')
--2 根据shr取到的编码信息查询eas这边这个岗位是否同步过来 两个步骤
-- 1)
select *from t_org_position where fnumber='ZLGW454' --查询为空就是eas还没有同步过来 即eas没有建立这个岗位 所以岗位下的人肯定同步不过来
-- 2)检查mapping关系表有没有创建这个对应关系 取shr那边这个岗位的fid来查询mapping关系表 如下:
select * from t_shr_idmapping where fouterid='g33RyK4DQOewtpmAJlsj/3SuYS4='
--如 mapping关系表 有创建这个对应关系 则检查这个关系是否正确 取finnerid 查询eas这边
-- 检查发现对应关系有了 但eas这边还是没有数据则 shr web修改一下这个岗位信息 在集成界面刷新下
select *from t_org_position where fid='g33RyK4DQOewtpmAJlsj/3SuYS4='
--5、shr web修改一下这个岗位信息 在集成界面刷新下 果然出来了 同步此岗位, 然后同步此员工,搞定!

问题六:组织同步报MissingRecord:AdminOrgUnitid = 'R8nTMPLqRvC99Ah7RUPtysznrtQ=',找不到组织打开eas查询分析器,使用select fouterid from t_shr_idmapping wherefinnerid='R8nTMPLqRvC99Ah7RUPtysznrtQ=' ;sql查询,找到fouterid字段值“R8nTMPLqRvC99Ah7RUPtysznrtQ=”;再到s-HR的查询分析器中查看一下,这个id对应的组织是哪个,查询语句:select * from T_ORG_Admin where fid ='R8nTMPLqRvC99Ah7RUPtysznrtQ=',查询到组织后,根据组织的编码名称后,到eas那边看看这个组织是否同步过来了,如果没有同步过来,则需要先同步依赖的这个组织,才能接着同步当前报错的数据。
问题七:报编码已经存在,请重新指定编码
查询映射表看看数据是否正确,如不正确可以依据现场情况来纠正数据。
问题八(问题七的场景之一):入职单据审批通过且生效日期已经过了后。过几天又反审批的场景 导致报编码已经存在 ,映射表有两笔映射关系。原因:入职反审批实际上是删除之前入职的员工的数据 重新录入新的数据。虽然是同一个员工。但是因为人员id发生了改变。故第一次入职审批沟通后数据已经同步到eas了,二反审批操作仅删除了s-HR的数据,没有删除对接系统(eas)的数据导致,eas已经存在了这个员工。反审批后再次提交审批,审批后录入了一笔新的id的数据,又同步到eas 但此前同步到eas的那边数据已经占用了这个编码了 导致报编码已经占用
目前尚有解决方案,需现场注意,如需反审批,则先看下eas那边的员工数据有没有被引用 是否能够删除。如果不能建议反审批后再次提交审批同步至eas 报错就调整映射表,将s-HR的新id对应eas那边的前面已经同步过去的员工id(旧),当成是eas手动录了员工这种场景处理
问题九:1、具有编码[0101]的管理单元、组织单元或合并单元组已经存在,请重新指定一个编码!处理过程:1、在eas客户端查询分析器中 根据这个提示 查找eas中0101的组织 。 select *from t_org_admin where fnumber='0101'人工确认 这个组织是否是s-HR里的0101的组织 如果不是,则需要调整编码 以便s-HR中0101这个组织可以同步到eas如果是一个组织,则取出这个查询结果中的fid字段值备用,然后按第2步操作2、在s-HR客户端查询分析器中 查询0101的组织取fid字段值 备用 select *from t_org_admin where fnumber='0101'
3、在s-HR客户端查询分析器中 查询映射关系表( --finnerid:EAS 的 fid ;--fouterid:shr 的fid)select * from t_shr_idmapping where finnerid='EAS的组织fid' or fouterid='s-HR的组织fid' 检查查询结果: (1) 如果没有记录 则需要插入一条新的映射关系insert into t_shr_idmapping(fouterid ,finnerid ,FBOSTYPE) values ('s-HR的id' , 'EAS的id', 'CCE7AED4'); (2)如果有两条记录,则删除其中一条,并把另外一条的映射关系修改正确 (3)如果只有一条,则修正映射关系正确即可
补充:
初始化报错:

初始化失败原因如下:1、现场配置不正确,未按照文档部署配置文件shrIntegradeEasConfig.properties 遗漏步骤导致后台事务报错为:Caused by: java.lang.NullPointerException at com.kingdee.eas.hr.base.app.synch.DataTool.getOsfServerUrl(DataTool.java:288) at com.kingdee.eas.hr.base.app.synch.DataTool.getHRData(DataTool.java:229) at com.kingdee.eas.hr.base.app.synch.DataTool.getInitDataFromSHR(DataTool.java:191) at com.kingdee.eas.hr.base.app.synch.SynchronManager.init(SynchronManager.java:49)2、s-HR后台报错日志为:302,配置为访问某个实例的地址,现场未配置s-HR各个实例下的单点登录账套导致5、数据有错误,请联系工程师解决!com.kingdee.eas.basedata.org.app.PositionHierarchyControllerBean.setLevelAndLongNumber(PositionHierarchyControllerBean.java:232)解决方案:

现场反馈是s-HR配置集群后 同步报错
at com.kingdee.eas.hr.base.app.EASIntegratedSHRFacadeControllerBean.syncDataFromShrByIdSet(EASIntegratedSHRFacadeControllerBean.java:112) at com.kingdee.eas.hr.base.app.EASIntegratedSHRFacadeControllerBean.SyncDataFromShrByPage(EASIntegratedSHRFacadeControllerBean.java:98)
故需检查:1、s-HR所有集群实例server 都必须配置eas\server\profiles\server\config\portalConfig的autoLoginConfig.properties 里面配置的数据中心编码2、eas 环境那边检查配置文件shrIntegradeEasConfig.properties的s-HR访问路径 设置成指定实例端口处理方式:暂时现场使用的是指定实例端口使用