源多分录写入目标一个分录时提示“列表长度不一致”

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

源多分录写入目标一个分录时提示“列表长度不一致”

问题描述:

通过集成方案同步数据时,在特殊场景会遇到如下相似类型报错。


解决方案:

问题分析:

在字段映射时,源数据为多分录结构,合并到目标一个分录上面,但是源数据的多分录长度不一致,因此会导致映射时,无法处理。为此,在这里推荐一种使用数据集成方案转换脚本来处理的方式,可以实现将多分录合一。


解决思路:

由于报错中断是在字段映射时就已经出现了,因此现场不光需要更改数据处理脚本,需要把字段映射处的目标分录所有字段全部取消,只保留源字段达到取数的效果,目标分录字段的赋值在脚本里实现。


下面提供脚本处理的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,直接赋值粘贴解决不了现场的问题,反而有可能带来麻烦。

源多分录写入目标一个分录时提示“列表长度不一致”

问题描述:通过集成方案同步数据时,在特殊场景会遇到如下相似类型报错。解决方案:问题分析:在字段映射时,源数据为多分录结构,合并到目...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息