Mule 4多段COBOL Copybook生成异常问题排查
解决Mule 4 DataWeave生成多段COBOL Copybook的拆分异常问题
核心问题
你的脚本错误地将每个JSON对象的多个字段合并到单个DETAIL-RECORD段中,而FFD schema要求每个字段对应一个独立的DETAIL-RECORD段。原代码里用(fieldDataArray map {...})是把多个FIELD-IND字段塞进同一个DETAIL-RECORD对象,而非生成多个DETAIL-RECORD实例。
修正步骤
- 重构字段映射逻辑:将每个JSON对象中需要转换的字段(如
Option_Set__c、Statement_Message_ID__c等)逐个映射为独立的DETAIL-RECORD段。 - 替换嵌套映射方式:放弃
payload map内部嵌套fieldDataArray map的写法,改为先将每个JSON对象的目标字段转成数组,再整体映射为DETAIL-RECORD数组。 - 动态匹配FIELD-DATA值:原代码固定取
Statement_Message_ID__c的值,需改为根据FIELD-IND对应的字段动态取值。
修正后的DataWeave代码
%dw 2.0 output application/flatfile schemaPath = "schemas/VP.ffd", structureIdent="MultiSegment" // 统一管理字段与FIELD-IND的映射关系,便于维护 var fieldMappings = [ { key: "Option_Set__c", ind: "019303" }, { key: "CDF23__c", ind: "008902" }, { key: "ASC__c", ind: "011206" }, { key: "Statement_Message_ID__c", ind: "014205" } ] --- { vps: { vps: [{ ":USRDSB:-SOURCE": { ":USRDSB:-SOURCE": "SOURCE", ":USRDSB:-SOURCE-ID ": "MULESOFT" }, ":USRDSB:-HEADER": { ":USRDSB:-HEADER": "HEADER", ":USRDSB:-TRANSMISSION-ID": "VTY" }, // 对每个payload对象,过滤出存在的目标字段并映射为独立的DETAIL-RECORD ":USRDSB:-DETAIL-RECORD": flatMap(payload, (item) -> fieldMappings filter ((mapping) -> item[mapping.key] != null) map ((mapping) -> { ":USRDSB:-FIELD-IND": mapping.ind as Number, ":USRDSB:-CARD-NBR": item.TSYS_ID__c, ":USRDSB:-CUST-IND": "D", ":USRDSB:-FIELD-DATA": item[mapping.key] }) ) }] } }
关键说明
- 用
fieldMappings集中管理字段与FIELD-IND的对应关系,避免重复的条件判断,提升代码可维护性。 - 通过
flatMap将每个JSON对象的多个字段转换为多个DETAIL-RECORD实例,确保每个字段对应独立的段。 - 利用
item[mapping.key]动态获取对应字段的值,解决了原代码FIELD-DATA取值固定的问题。
内容的提问来源于stack exchange,提问作者veejay
相关产品推荐
相关产品推荐

