源多分录写入目标一个分录时提示“列表长度不一致”
问题描述:
通过集成方案同步数据时,在特殊场景会遇到如下相似类型报错。
解决方案:
问题分析:
在字段映射时,源数据为多分录结构,合并到目标一个分录上面,但是源数据的多分录长度不一致,因此会导致映射时,无法处理。为此,在这里推荐一种使用数据集成方案转换脚本来处理的方式,可以实现将多分录合一。
解决思路:
由于报错中断是在字段映射时就已经出现了,因此现场不光需要更改数据处理脚本,需要把字段映射处的目标分录所有字段全部取消,只保留源字段达到取数的效果,目标分录字段的赋值在脚本里实现。
下面提供脚本处理的demo,实际操作时需要将对应的字段与属性名与源和目标分别保持一致,这段脚本可以在集成的脚本工具直接执行,可以提前执行测试看一下结果是否和现场要求一致。
数据集成方案字段映射处理脚本,源数据多分录合一到目标分录
var src = {number : '001',name:'zty', entry1:[{a:11,b:12,c:13},{a:14,b:15,c:16},{a:17,b:18,c:19}], entry2:[{d:24,e:25},{d:26,e:27}], entry3:[{f:36}]}; //从这行开始改,src我拿来测试的数据。 //把分录entry1,entry2,entry3分别改成源的那几个分录,源的数量如果和demo里不一致也要在下面的for循环内对应修改 //这是分别取每个分录的长度 var o = src.entry1.length; var p = src.entry2.length; var q = src.entry3.length; var m = Collection.max(o,p,q);//计算三个分录的最大长度 var e = [];//拿一个临时list存一下目标分录 for(var i = 0 ; i < m ; i++ ){ var x = {}; //下面这些从x1到x6是所有目标分录的属性 //处理分录1 var se1 =src.entry1[i] if(se1 != null){ x.x1 = se1.a; x.x2 = se1.b; x.x3 = se1.c; } //处理分录2 var se2 =src.entry2[i] if(se2 != null){ x.x4 = se2.d; x.x5 = se2.e; } //处理分录3 var se3 =src.entry3[i] if(se3 != null){ x.x6 = se3.f; } e += x; } tar = {};//这行不要写,因为在上下文里tar已经被赋值了,如果也写了会把单头数据清空 //这里的entry应该是目标分录的属性名 tar.entry = e ; tar.entry ;//这行可以不要,这里这样写是为了脚本执行工具显示出一串结果 |
最后的分录输出结果如下图所示,达到将分录多合一的效果。
注意事项:
最重要的事,这段脚本是一定要改的!只是提供一个开发demo,直接赋值粘贴解决不了现场的问题,反而有可能带来麻烦。
源多分录写入目标一个分录时提示“列表长度不一致”
本文2024-09-23 00:51:21发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-142173.html