如何在Boomi中映射EDI文件循环项并解决重复数据问题
解决Boomi EDI到Flat File映射中非循环数据重复问题
问题场景
你使用Boomi的EDI Profile解析以下ORDERS报文:
UNH+19472232+ORDERS:D:96A:UN:EAN008' BGM+220::9+19472232' DTM+137:20170823:102' DTM+2:20171031:102' NAD+BY+8714252029536::9' NAD+SU+4046568000003::9' NAD+DP+8714252029536::9' NAD+IV+8714252029536::9' NAD+UC+8714252029536::9' LIN+1++8718885840155:EN' PIA+5+69706-333-000:SA' QTY+21:3:PCE' LIN+2++9000068400333:EN' PIA+5+68400-333-000:SA' QTY+21:3:PCE'
映射到Flat File后,LIN/PIA/QTY循环项正常,但UNH/BGM/DTM/NAD等头部数据随每次LIN循环重复输出:
19472232 ORDERS D 96A UN EAN008 220 19472232 137 20170823 102 2 20171031 102 BY87142520295369 SU40465680000039 DP87142520295369 IV87142520295369 UC87142520295369 18718885840155EN 569706-333-000SA 213PCE 19472232 ORDERS D 96A UN EAN008 220 19472232 137 20170823 102 2 20171031 102 BY87142520295369 SU40465680000039 DP87142520295369 IV87142520295369 UC87142520295369 29000068400333EN 568400-333-000SA 213PCE
核心原因
Boomi的映射会跟随源数据的循环节点迭代输出。如果将非循环的头部字段和循环的LIN节点映射到Flat File的同一层级,每处理一个LIN项,头部字段就会被重复输出一次。
解决方法
1. 重构Flat File Profile结构
- 创建两级结构:头部段(包含UNH/BGM/DTM/NAD对应输出行)和循环项段(包含LIN/PIA/QTY对应输出行)。
- 设置头部段的最大出现次数为1,循环项段的最大出现次数为无限制(或设为
9999等足够大的数值)。
2. 调整映射逻辑
- 将EDI Profile中的UNH/BGM/DTM/NAD字段映射到Flat File的头部段对应的字段/行,确保这些字段仅关联到非循环的头部节点。
- 将LIN/PIA/QTY字段映射到Flat File的循环项段内部,并且以EDI Profile中的LIN循环节点作为映射的迭代源(即循环项的映射根节点为LIN)。
3. 用缓存确保头部只输出一次(备选方案)
如果无法调整Profile结构,可通过Boomi的流程组件实现:
- 使用Map Shape提取头部数据,存入Document Cache Shape(设置缓存键为唯一标识,比如UNH的报文编号)。
- 使用另一个Map Shape处理循环数据,在输出前从缓存中读取头部数据,仅输出一次头部,再遍历输出所有循环项。
4. 验证EDI Profile结构
确认EDI Profile中UNH/BGM/DTM/NAD节点的最大出现次数设置为1,LIN节点的最大出现次数设置为>1,避免源结构定义错误导致的迭代问题。
验证步骤
- 在Boomi中预览EDI解析结果,确认头部数据仅出现1次,LIN循环为多实例。
- 测试映射,检查Flat File输出是否头部仅输出一次,循环项正常迭代。
内容的提问来源于stack exchange,提问作者Wolf Alexander
相关产品推荐
相关产品推荐

