在 Mule 4 中创建多段 Cobol 字帖文件

问题描述 投票:0回答:1

我需要从传入的 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

我没有看到任何构建多段文件的具体示例。如何解决这个问题?蒂亚!

mule dataweave mule4
1个回答
0
投票

该模式似乎缺少结构。在结构中,您可以将详细记录设置为具有多个记录,以便它可以接收记录数组。然后输出键需要与模式名称匹配。

具有结构的架构:

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

在您的应用程序中,您需要用来自有效负载的值替换固定值。

© www.soinside.com 2019 - 2024. All rights reserved.