我需要从传入的 JSON 创建一个 cobol copybook 文件。它是一个多段文件。我在 DW 中创建多个段时遇到问题。 为了这个问题,我只是硬编码了如下值。
DW代码:
%dw 2.0
output application/flatfile schemaPath = "schemas/schema.ffd" , segmentIdent = ":USRDSB:-DETAIL-RECORD"
---
{
SOURCE: {
":USRDSB:-SOURCE": "MULESOFT"
},
"R":payload map ( payload01 , indexOfPayload01 ) -> {
":USRDSB:-COMMENT-IND": "1",
":USRDSB:-FIELD-IND": 6111 as Number,
":USRDSB:-CARD-NBR":"15151515151515151" ,
":USRDSB:-CUST-IND": "D",
":USRDSB:-FIELD-DATA": "TETETETTETETETETET"
}
}
FFD:
form: COPYBOOK
segments:
- id: ':USRDSB:-SOURCE'
values:
- { name: ':USRDSB:-COMMENT-IND', type: String, length: 1 }
- { name: 'FILLER1', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-SOURCE', type: String, length: 6, value: 'SOURCE' }
- { name: 'FILLER2', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-SOURCE-ID ', type: String, length: 8, value: 'MULESOFT' }
- { name: 'FILLER3', usage: U, type: String, length: 103 }
- id: ':USRDSB:-HEADER'
values:
- { name: ':USRDSB:-COMMENT-IND', type: String, length: 1 }
- { name: 'FILLER1', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-HEADER', type: String, length: 6, value: 'HEADER' }
- { name: 'FILLER2', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-TRANSMISSION-ID', type: String, length: 8, value: 'TBC' }
- { name: 'FILLER3', usage: U, type: String, length: 1 }
- id: ':USRDSB:-DETAIL-RECORD'
values:
- { name: ':USRDSB:-COMMENT-IND', type: String, length: 1 }
- { name: 'FILLER1', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-FIELD-IND', type: Integer, length: 6, format: { justify: ZEROES, sign: UNSIGNED } }
- { name: 'FILLER2', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-CARD-NBR', type: String, length: 19 }
- { name: 'FILLER3', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-CUST-IND', type: String, length: 1 }
- { name: 'FILLER4', usage: U, type: String, length: 1 }
- { name: ':USRDSB:-FIELD-DATA', type: String, length: 80 }
- { name: 'FILLER5', usage: U, type: String, length: 9 }
预期输出:
SOURCE MULESOFT
HEADER NNNNSCRB
019303 4520111111112222 352
008902 4520111111112222 02
011206 4520111111112222 V02
014205 4520111111112222 F0015
019303 4520111111113333 353
008902 4520111111113333 03
011206 4520111111113333 V03
014205 4520111111113333 F0015
我没有看到任何构建多段文件的具体示例。如何解决这个问题?蒂亚!
该模式似乎缺少结构。在结构中,您可以将详细记录设置为具有多个记录,以便它可以接收记录数组。然后输出键需要与模式名称匹配。
具有结构的架构:
form: COPYBOOK
structures:
- id: 'main'
name: Main record
data:
- { idRef: ':USRDSB:-SOURCE' }
- { idRef: ':USRDSB:-HEADER' }
- { idRef: ':USRDSB:-DETAIL-RECORD', count: '>1' }
segments:
- id: ':USRDSB:-SOURCE'
...
请注意,我将缺失值设置为“空格”以提高可读性。我删除了
structureIdent
设置。
脚本:
%dw 2.0
output application/flatfile schemaPath = "schemas/schema.ffd" , missingValues="spaces"
---
{
":USRDSB:-SOURCE": {
":USRDSB:-COMMENT-IND": "A"
},
":USRDSB:-HEADER": {
":USRDSB:-COMMENT-IND": "B"
},
":USRDSB:-DETAIL-RECORD": payload map ( payload01 , indexOfPayload01 ) -> {
":USRDSB:-COMMENT-IND": "1",
":USRDSB:-FIELD-IND": 6111 as Number,
":USRDSB:-CARD-NBR":"15151515151515151" ,
":USRDSB:-CUST-IND": "D",
":USRDSB:-FIELD-DATA": "TETETETTETETETETET"
}
}
输入:
[1,2,3,4,5]
输出:
A SOURCE MULESOFT
B HEADER TBC
1 006111 15151515151515151 D TETETETTETETETETET
1 006111 15151515151515151 D TETETETTETETETETET
1 006111 15151515151515151 D TETETETTETETETETET
1 006111 15151515151515151 D TETETETTETETETETET
1 006111 15151515151515151 D TETETETTETETETETET
在您的应用程序中,您需要用来自有效负载的值替换固定值。