多重复制:将平面文件解析为副本


Due to his success on modernizing legacy applications,麦克斯的老板再次联系了他,请求他帮助实现COBOL应用程序的现代化。这是他公司的另一个主要应用程序,已经运行多年,仍然可靠。在不中断现有生产线的情况下,马克斯必须开发一个新的集成点来提取潜在价值。

Max通过收集数据格式/结构开始准备这个集成,继续进行数据转换,然后存储结果。经过快速评估,他确定输入数据是平面文件的形式,预期结果是一本抄写本。

他意识到抄写本格式仍处于早期使用阶段。带着一点疑问,他继续前进!

准备数据定义/模式

作为初始步骤,马克斯创建平面文件定义文件并将其另存为book.ffd在文件夹中src/main/resources

form: FLATFILE
name: 'flatFile'
segments:
- id: 'Book'
  tag: '1'
  name: Book Collection
  values:
  - { name: 'title', type: String, length: 32 }
  - { name: 'author', type: String, length: 32 }
  - { name: 'amount', type: Integer, length: 5 }

然后,他继续抄写下一个定义文件。该文件名为book.cpy并存储在同一个文件夹中。

       01  BOOK-RECORD.
           03  BOOK-KEY.
               05  BOOK-ISBN         PIC X(10).
           03  BOOK-TITLE            PIC X(32).
           03  BOOK-AUTHOR           PIC X(32).
           03  BOOK-CATEGORY         PIC X(10).
           03  BOOK-STOCK            PIC X(5).


创建配置文件

为了模拟转换过程,马克斯创建了以下流程:

  • 作为消息源,它监听用户请求。
  • 转换消息:负责将平面文件转换为抄写本的转换器。
  • 字节数组到字符串:将转换结果转换为字符串。
  • 文件:将转换结果存储到src/main/resources/output文件夹并将其另存为bookOrder.cpy

定义转换

打开转换消息属性后,马克斯转到输入部分并开始定义转换:

  1. 单击定义元数据链接时,将显示一个新的弹出窗口。
  2. 点击增加创建新的元数据类型。
  3. 设置类型idbookFlat点击创建类型确认。
  4. 设置类型使用FLATFILE。
  5. 选择平面文件模式文件(book.ffd)来自src/main/resources文件夹,方法是单击“…”(浏览)。
  6. 消息结构将被自动填充。
  7. 通过单击完成第一个定义挑选

接下来,他通过重复与上面类似的步骤来定义输出元数据。

  1. 点击定义元数据链接。
  2. 点击增加创建新的元数据类型。
  3. 设置类型idbookCpy点击创建类型确认。
  4. 设置类型与COPYBOOK(早期访问)。
  5. 选择抄写本文件(book.cpy)通过单击“…”(浏览)导入。
  6. 消息结构将被自动填充。
  7. 通过单击完成此定义挑选

然后,他通过将相关字段从输入部分拖放到输出部分来开始映射。此操作将触发自动数据编织表达式创建。之后,他可以根据需要修改或增强初始表达式。

最后,他通过增强数据编织表达式来完成映射:

%dw 1.0
%output text/plain schemaPath = "bookCpy.ffd" , segmentIdent = "BOOK-RECORD"
---
payload map ((payload01 , indexOfPayload01) -> {
    BOOK-KEY: {
        BOOK-ISBN: "000-" ++ indexOfPayload01
    },
    BOOK-TITLE: payload01.title,
    BOOK-AUTHOR: payload01.author,
    BOOK-CATEGORY: "Science",
    BOOK-STOCK: payload01.amount as :string
})


运行转换

在进行实时测试之前,马克斯准备数据作为输入值。他从前面的集成中举了一个简单的例子:

Mule in Action                  David Dossot & John D Emic         50
Undisturbed REST                Mike Stowe                        100

然后,他启动了Mule应用程序,并从REST客户端应用程序邮差那里执行了一个简单的HTTP Post请求。

他等了一会儿转换过程,得到了一个新文件:

000-0     Mule in Action                  David Dossot & John D Emic      Science   50   
000-1     Undisturbed REST                Mike Stowe                      Science   100  


马克斯脸上带着灿烂的笑容,成功地将一个平面文件解析成字帖。