フラットファイルの読み取りと書き込み

次の例では、フラットファイルのコンテンツを読み取る方法に加えて、指定されたスキーマに従ってフラットファイルを書き込む方法も示しています。それぞれの例は、DataWeave を使用してフラットファイルの読み取りと書き込みを行う Mule アプリケーションで構成されています。

フラットファイルを操作するときは、フラットファイルのコンテンツの読み取りと書き込みに使用するフラットファイルスキーマを設定します。フラットファイルスキーマによってフラットファイルの構造が定義され、これによって Mule はこの形式で書き込みと読み取りを行うことができます。

これらの例のアプリケーションは、​「フラットファイルスキーマ」​で指定されているサンプルのフラットファイルデータとフラットファイルスキーマの例を操作するように設定されています。

フラットファイルの読み取りの例

次の例のアプリケーションは、以下で構成されています。

  1. フローをトリガーする Scheduler コンポーネント

  2. 指定されたパスからフラットファイルを読み取る File Read 操作

  3. フラットファイルから読み取られた内容を JSON 形式に変換する Transform Message コンポーネント

  4. 現在のペイロードを出力する Logger コンポーネント

Mule アプリケーションの例

アプリケーション XML ファイル
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
  xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
  <file:config name="File_Config" doc:name="File Config" >
    <file:connection workingDir="${fileWorkingDir}" />
  </file:config>
  <configuration-properties doc:name="Configuration properties" file="flatfileconfig.properties" />
  <flow name="ReadFlatfileFlow" >
    <scheduler doc:name="Scheduler">
      <scheduling-strategy>
        <fixed-frequency frequency="10000" />
      </scheduling-strategy>
    </scheduler>
    <file:read doc:name="Read flat file" config-ref="File_Config"
    path="${fileReadPath}"
    outputMimeType='application/flatfile; schemapath=${schemaPath}'/> (1)
    <ee:transform doc:name="Transform to JSON"  >
      <ee:message >
        <ee:set-payload ><![CDATA[%dw 2.0
        output application/json
        ---
        payload]]>
        </ee:set-payload>
      </ee:message>
    </ee:transform>
    <logger level="INFO" doc:name="Logger" message='#["\n"]Reading flat file from: ${mule.home}/apps/${app.name}/${fileReadPath}#["\n"]#[payload]' />
  </flow>
</mule>
1 File Read 操作では次の属性が設定されます。
  • path​: 読み取るフラットファイルのパス

  • outputMimeType​: 内容の出力 MIME タイプで、この場合は ​application/flatfile

  • schemapath​: フラットファイルスキーマ (​.ffd​ ファイル) へのパスを指定するリーダープロパティ

このアプリケーション例の実行後に、次の出力が生成されます。

{
  "Batch": [
    {
      "TDR": [
        {
          "Record Type": "BAT",
          "Sequence Number": 2,
          "Amount": 32876,
          "Account Number": "0123456789",
          "Batch Function": "D",
          "Type": "CR"
        },
        {
          "Record Type": "BAT",
          "Sequence Number": 3,
          "Amount": 87326,
          "Account Number": "0123456788",
          "Batch Function": "D",
          "Type": "CR"
        }
      ],
      "BCF": {
        "Record Type": "BAT",
        "Sequence Number": 4,
        "Batch Transaction Count": 2,
        "Batch Transaction Amount": 120202,
        "Unique Batch Identifier": "A000000001",
        "Batch Function": "T",
        "Type": "CR"
      },
      "BCH": {
        "Record Type": "BAT",
        "Company Name": "ACME RESEARCH",
        "Sequence Number": 1,
        "Unique Batch Identifier": "A000000001",
        "Batch Function": "H"
      }
    },
    {
      "TDR": [
        {
          "Record Type": "BAT",
          "Sequence Number": 6,
          "Amount": 3582,
          "Account Number": "1234567890",
          "Batch Function": "D",
          "Type": "DB"
        },
        {
          "Record Type": "BAT",
          "Sequence Number": 7,
          "Amount": 256,
          "Account Number": "1234567891",
          "Batch Function": "D",
          "Type": "CR"
        }
      ],
      "BCF": {
        "Record Type": "BAT",
        "Sequence Number": 8,
        "Batch Transaction Count": 2,
        "Batch Transaction Amount": 3326,
        "Unique Batch Identifier": "A000000002",
        "Batch Function": "T",
        "Type": "DB"
      },
      "BCH": {
        "Record Type": "BAT",
        "Company Name": "AJAX EXPLOSIVES",
        "Sequence Number": 5,
        "Unique Batch Identifier": "A000000002",
        "Batch Function": "H"
      }
    }
  ],
  "RQF": {
    "Record Type": "RQF",
    "File Batch Count": 2,
    "File Transaction Count": 8,
    "File Transaction Amount": 116876,
    "Unique File Identifier": "A000000001",
    "Type": "CR"
  },
  "RQH": {
    "Record Type": "RQH",
    "File Creation Time": "10:10:00",
    "File Creation Date": "2018-09-01",
    "Currency": "USD",
    "Unique File Identifier": "A000000001"
  }
}

フラットファイルの書き込みの例

次の例のアプリケーションは、以下で構成されています。

  1. フローをトリガーする Scheduler コンポーネント

  2. 前の例からの JSON 出力が含まれるファイルを読み取る File Read 操作

  3. JSON ペイロードを指定されたフラットファイル形式に変換する Transform Message コンポーネント

  4. 現在のペイロードを出力する Logger コンポーネント

  5. ペイロードを指定された対象パスのフラットファイルに出力する File Write 操作

Mule アプリケーションの例

アプリケーション XML ファイル
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
  xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
  xmlns="http://www.mulesoft.org/schema/mule/core"
  xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
  <file:config name="File_Config" doc:name="File Config" >
    <file:connection workingDir="${fileWorkingDir}" />
  </file:config>
  <configuration-properties doc:name="Configuration properties" file="flatfileconfig.properties" />
  <flow name="WriteFlatFile" >
    <scheduler doc:name="Scheduler" >
    	<scheduling-strategy >
        <fixed-frequency frequency="10000" />
    	</scheduling-strategy>
    </scheduler>
    <file:read doc:name="Read JSON file" config-ref="File_Config" path="${jsonFileReadPath}"/>
    <ee:transform doc:name="Transform to flat file"> (1)
    	<ee:message>
        <ee:set-payload><![CDATA[%dw 2.0
output application/flatfile schemaPath = "flatfileschema.ffd"
%dw 2.0
---
{
	RQH: {
		"Record Type": payload.RQH."Record Type",
		"File Creation Date": payload.RQH."File Creation Date" as Date {format: "yyyy-MM-dd"},
		"File Creation Time": payload.RQH."File Creation Time" as Time,
		"Unique File Identifier": payload.RQH."Unique File Identifier",
		Currency: payload.RQH.Currency
	},
	Batch: payload.Batch map ( batch , indexOfBatch ) -> {
		BCH: {
			"Record Type": batch.BCH."Record Type",
			"Sequence Number": batch.BCH."Sequence Number",
			"Batch Function": batch.BCH."Batch Function",
			"Company Name": batch.BCH."Company Name",
			"Unique Batch Identifier": batch.BCH."Unique Batch Identifier"},
		TDR: batch.TDR map (tdr, indexOfTdr) ->
			{
			"Record Type": tdr.TDR."Record Type",
			"Sequence Number": tdr.TDR."Sequence Number",
			"Batch Function": tdr.TDR."Batch Function",
			"Account Number": tdr.TDR."Account Number",
			"Amount": tdr.TDR.Amount,
			"Type": tdr.TDR.'Type'
			},
		BCF: {
			"Record Type": batch.BCF."Record Type",
			"Sequence Number": batch.BCF."Sequence Number",
			"Batch Function": batch.BCF."Batch Function",
			"Batch Transaction Amount": batch.BCF."Batch Transaction Amount",
			"Type": batch.BCF.'Type',
			"Batch Transaction Count": batch.BCF."Batch Transaction Count",
			"Unique Batch Identifier": batch.BCF."Unique Batch Identifier"}
		},
	RQF: {
		"Record Type": payload.RQF."Record Type",
		"File Batch Count": payload.RQF."File Batch Count",
		"File Transaction Count": payload.RQF."File Transaction Count",
		"File Transaction Amount": payload.RQF."File Transaction Amount",
		Type: payload.RQF.Type,
		"Unique File Identifier": payload.RQF."Unique File Identifier"
	}
}
]]>
      </ee:set-payload>
    	</ee:message>
    </ee:transform>
    <logger level="INFO" doc:name="Logger" message='#["\n"]Writing flat file to: ${mule.home}/apps/${app.name}/${fileWritePath}#["\n"]#[payload]'/>
    <file:write doc:name="Write flat file" config-ref="File_Config" path="${fileWritePath}" /> (2)
	</flow>
</mule>
1 Transform コンポーネントでは、スクリプトヘッダーで次のライタープロパティが指定されます。
  • output​: 変換の出力 MIME タイプで、この場合は ​application/flatfile

  • schemapath​: フラットファイルスキーマ (​.ffd​ ファイル) へのパスを指定するライタープロパティ

2 File Write 操作では ​path​ プロパティが指定され、フラットファイルをどこに書き込むかが定義されます。

このアプリケーション例の実行後に、次の出力が生成されます。

RQH201809011010A000000001USD
BAT000001HACME RESEARCH                 A000000001
BAT000000D          0000000000
BAT000000D          0000000000
BAT000004T0000120202CR000002A000000001
BAT000005HAJAX EXPLOSIVES               A000000002
BAT000000D          0000000000
BAT000000D          0000000000
BAT000008T0000003326DB000002A000000002
RQF0002000008000000116876CRA000000001

例をローカルでテストする

例をローカルでテストするには、次の手順に従って Mule アプリケーション例を作成して設定します。

  1. Anypoint Studio で新しい ​Mule プロジェクト​を作成します。

  2. テストするアプリケーションの XML コードをプロジェクトの ​[Configuration XML (設定 XML)]​ ビューにコピーします。

  3. [Add Modules (モジュールを追加)]​ を使用して、ファイル用 Anypoint Connector (File Connector) をプロジェクトに追加します。

  4. Mule アプリケーションの ​src/main/resources​ フォルダー内に ​flatfileconfig.properties​ という名前のファイルを作成し、次のプロパティを使用してその内容を設定します。

    fileReadPath=flatfile
    schemaPath=flatfileschema.ffd
    fileWritePath=flatfilenew
    jsonFileReadPath=flatFileJson.json
    fileWorkingDir=#["${mule.home}/apps/${app.name}/"]
  5. Mule アプリケーションの ​src/main/resources​ フォルダー内に ​flatfile​ という名前のファイルを作成し、DataWeave フラットファイルスキーマ例からのフラットファイルサンプルデータを使用してその内容を設定します。

  6. Mule アプリケーションの ​src/main/resources​ フォルダー内に ​flatfileschema.ffd​ という名前のファイルを作成し、DataWeave フラットファイルスキーマ例からの​完全なスキーマ例​を使用してその内容を設定します。

  7. Mule アプリケーションの ​src/main/resources​ フォルダー内に ​flatFileJson.json​ という名前のファイルを作成し、フラットファイルを読み取る例からの ​JSON 変換出力​を使用してその内容を設定します。