源系统id值为非长整型场景集成异常之解决方案(For input string:)
问题描述
集成服务云在2021年9月(V4.0.008)补丁中,对涉及主键等长整型字段做了类型校验,即传入的必须是长整型,否则会抛出异常。
问题异常提示截图
执行日志失败提示:字段(id)赋值(lfkAAAZI/B8/0Wlk)出错,原因:For input string: "lfkAAAZI/B8/0Wlk",
Caused by: java.lang.NumberFormatException: For input string: "lfkAAAZI/B8/0Wlk"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at kd.isc.iscb.util.dt.D.l(D.java:53)
at kd.isc.iscb.util.dt.D.l(D.java:45)
at kd.isc.iscb.platform.core.util.setter.LongPropSetter.setObjValue(LongPropSetter.java:21)
at kd.isc.iscb.platform.core.util.setter.Setter.setObjValue(Setter.java:32)
at kd.isc.iscb.platform.core.connector.self.DoBizAction.setDynamicObjectValues(DoBizAction.java:630)
... 52 more
问题出现版本
2021年9月(V4.0.008)
原因分析
2021年9月集成云项目组发现:动态对象(DynamicObject)给long类型字段赋值字符串时,不会做校验,且保存过程中无报错。此时,如果用户的集成方案对long类型字段错误地映射了字符串的id,且设为了候选键(唯一标识),则单据每次同步都会新增,分录每次同步都会清空后再新增。
因此,2021年9月(V4.0.008),对涉及主键等长整型字段做了类型校验,即传入的必须是长整型,否则会抛出异常。
此次改动分析如下:
1、增加的字段值校验可以避免数据重复和分录清空的风险,增强数据的健壮性;
2、存在的影响:原有不合规范的字段映射需要调整好后才能继续执行。
解决方案
修改数据集成方案的配置
方法一:选择其他合适的字段如编码、序号作为候选键,一般不推荐id做候选键,建议移除。(候选键是两边系统具有业务语义的唯一标识,用于判定新增还是修改,由于两边业务系统id不同,所以首次同步都会新增,不适合作为候选键);
方法二:通过聚合运算,to_long_id函数生成新的id,以上面的为例,修改前和修改后的数据集成方案截图如下:
修改前:
修改后:
注意事项
方案修改过程如果有任何疑问,可以通过集成服务云对外交流群跟我们咨询。
源系统id值为非长整型场景集成异常之解决方案(For input string:)
本文2024-09-23 00:51:42发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-142210.html