EDIFACT EDI コネクタ

Premium

EDIFACT EDI コネクタを使用すると、リストとマップを使用して、DataWeave 互換の表現との間で EDIFACT メッセージを変換できます。このコネクタは、すべての標準メッセージ用に提供されているスキーマ定義と共に EDIFACT バージョン D.93A、D.95B、D.96A、D.97A、D.98B、D.99A、D.99B、D.00A、D.01B、D.02A、D.03A をサポートします。

前提条件

このドキュメントは、読者が EDIFACT、Mule、Anypoint コネクタ、Anypoint Studio、Mule フロー、Mule グローバル要素に精通していることを前提としています。

互換性の詳細は、リリースノートを参照してください。リリースノートへのリンクは、このドキュメントの「関連情報」セクションに含まれます。

本番環境で EDIFACT EDI コネクタを使用するには、Anypoint B2B 用の MuleSoft ライセンスを購入している必要があります。

このコネクタの新機能

EDIFACT EDI コネクタ 2.x では、EDIFACT EDI コネクタ 1.x で実装されたものについて、設定と処理にいくつかの変更が加えられます。

  • EDIFACT EDI コネクタ 1.x では、標準の 1 つのバージョンからのメッセージのみがサポートされました。Mule 4 EDIFACT EDI コネクタ 2.x では、標準の複数のバージョンからのメッセージがサポートされます。メッセージヘッダー (UNH セグメント) データ内のバージョン情報を使用して標準バージョンを識別し、メッセージ識別子により特定のスキーマが決まります。

  • 読み取りおよび書き込み操作で ID パラメータが使用されなくなりました。書き込み操作に渡す実際のメッセージデータ内ですべてのパラメータ値を設定できます。

  • データが出力ストリームに書き込まれる前に、書き込まれるすべてのメッセージがチェックされ、エラーがないかどうかが確認されます。

  • ドキュメント化されていなかった、EDIFACT EDI コネクタ 1.x の「デフォルト」のスキーマ設定が EDIFACT EDI コネクタ 2.x で正式にサポートされるようになりました。設定でスキーマが参照されていない場合、メッセージごとに標準バージョンのスキーマがクラスパスから検索され、読み取りと書き込みで使用されます。これを行う場合、メタデータをメッセージデータ構造で使用することはできません。設計時に実際のメッセージが不明なためです。

Anypoint Studio 7 でこのコネクタをインストールする方法

  1. Anypoint Studio で、Studio タスクバーの Exchange アイコンをクリックします。

  2. Anypoint Exchange で [Login (ログイン)] をクリックします。

  3. コネクタを検索して [Install (インストール)] をクリックします。

  4. 画面の指示に従ってコネクタをインストールします。

Studio の更新がある場合、右下隅にメッセージが表示されます。メッセージをクリックすると、更新をインストールできます。

EDIFACT EDI コネクタ 2.0.0 を使用するようにデフォルトの Anypoint 設定を変更する必要があります。

スキーマの作成方法

実装規定が標準とは異なる場合、スキーマを作成し、実装に従ってメッセージを記述することができます。すべての定義済みの EDIFACT メッセージに対するスキーマの標準バージョンとサポートされるバージョンがディストリビューションに含まれます。

EDI スキーマ言語について

EDIFACT EDI モジュールでは、ESL (EDI スキーマ言語) と呼ばれる YAML 形式を使用して EDI スキーマを表します。基本 ESL は、構造 (EDIFACT 用語のメッセージ)、グループ、セグメント、複合、および要素の観点で、EDI メッセージの構造を定義します。EDIFACT バージョン d00a、d01b、d02a、d03a、d93a、d95b、d96a、d97a、d98b、d99a、および d99b の ESL が含まれます。

オーバーレイスキーマを定義することで、データに合わせて EDIFACT スキーマ定義をカスタマイズできます。オーバーレイスキーマは特別な形式の ESL です。これを使用すると、ユーザ固有の規定を使用してベーススキーマ (EDIFACT D.98B ORDERS スキーマなど) を変更できます。標準で定義されている構造を使用する場合、オーバーレイスキーマは不要ですが、ほとんどの EDI 交換の実装規定でベース定義が変更されています。

独自のスキーマを最初から定義したり、ベース EDIFACT スキーマ定義をコピーしてデータに合わせて編集したりできます。詳細は、EDI Schema Language Referenceを参照してください。

YAML では、リストとキー-値ペアのセットの組み合わせが使用されます。必須項目が存在する場合、値の順序は重要ではありません。数字で構成される可能性があっても文字列として解釈するように意図される値は、引用符 (単一引用符または二重引用符) で囲みます (そうしないと、YAML パーサーは値を数値として処理するため)。インデントを使用して、リストのネストを示します。

読みやすくすることを目的として、ここで示している ESL 構造では、同じ定義の一部であるリストの前に、すべての簡単なキー-値ペアを定義しています。

オーバーレイスキーマを使用して実装規定を定義する方法

実装規定に従ってスキーマを指定するには、次の手順に従います。

  1. カスタマイズするベーススキーマをインポートするオーバーレイスキーマを作成します (例: EDIFACT 005010 850)。

  2. セグメントの使用方法、位置、グループ、および数に関する全体的な構造をカスタマイズします。

  3. 使用方法や数など、セグメントをカスタマイズします。

オーバーレイスキーマの構造はEDI Schema Language Referenceとよく似ていますが、オーバーレイスキーマでは、スキーマ構造のすべての詳細が提供される代わりに、変更のみがリストされます。オーバーレイスキーマでは、実装規定をどのように使用するかを特定の取引パートナーと共に特定し、標準を拡張およびカスタマイズします。

次の例は、基本の EDIFACT D.98B ORDERS メッセージ定義を変更するオーバーレイスキーマの例の開始部分を示しています。この例では、PAI セグメントをカスタマイズし、それが未使用であることを指定しています。これにより、PAI セグメントは Anypoint Studio のマッピング構造に表示されなくなります。

form: EDIFACT
version: 'd98b'
imports: [ '/edifact/d98b/ORDERS.esl' ]
structures:
- idRef: 'ORDERS'
  name: Purchase Order
  heading:
  - { idRef: 'PAI', position: '0040', usage: U }

構造オーバーレイ

構造オーバーレイでは、EDIFACT メッセージのベーススキーマ定義への変更の詳細を記述します。ほとんどの場合、この変更では、ベース定義内のセグメントまたはグループを未使用としてマークするという形式が使用されますが、使用方法または反復数の変更が許可されます。

構造オーバーレイで使用される形式を次に示します。

- idRef: 'ORDERS'
  heading:
  - { idRef: 'PAI', position: '0040', usage: U }
  - { idRef: 'IMD', position: '0060', usage: U }
  - groupIdRef: 'Segment group 15'
    position: '0560'
    items:
    - { idRef: 'HAN', position: '0570', usage: U }
    - { idRef: 'MEA', position: '0580', usage: U }
    - { idRef: 'FTX', position: '0590', usage: U }

この例内の変更では、標準の ORDERS 見出しの PAI および IMD セグメントと、Segment group 15 内の選択したいくつかのセグメントを未使用にすることを指定しています。

構造レベルのキー-値ペアを次に示します。

Key (キー) 説明

idRef

変更するメッセージの ID。

name (名前)

メッセージ名 (省略可能)。

heading (見出し)、detail (詳細)、summary (概要)

構造の各セクション内のセグメントおよびグループの変更のリスト。これらは省略可能であり、該当のセクションに変更がある場合にのみそれぞれが使用されます。

構造の各セクション (heading、detail、summary) のセグメント変更のリストはすべて同じ構造を使用します。リスト内の各項目はセグメント参照またはグループ定義です。セグメント参照はコンパクト YAML 構文を使用して示されます。この構文では、各参照の値は、中括弧で囲まれたカンマ区切りのキー-値ペアとして提供されます。

値は次のとおりです。

Key (キー) 説明

idRef

参照されるセグメント ID。これは省略可能で、指定された場合は検証されますが、それ以外の場合は無視されます。position (位置) の値を使用して、セクション内のセグメントを一意に識別します。

position (位置)

メッセージセクション内のセグメントの位置。

usage (使用方法)

使用方法コード。必須 (Mandatory) を表す M、省略可能 (Optional) を表す O、条件付き (Conditional) を表す C、未使用 (Unused) を表す U を使用できます。

count (数)

最大反復数の値。数値、または任意の反復数を意味する特別な値 (「>1」) を使用できます。count (数) の値は省略可能で、値を指定しない場合、ベース定義の値が使用されます。

グループオーバーレイは、キー-値ペアが個別の行に含まれる拡張形式で示されます。

グループ定義内の値を次に示します。

Key (キー) 説明

groupIdRef

参照されるグループ ID。このキーは省略可能で、指定された場合は検証されますが、それ以外の場合は無視されます。position (位置) の値を使用して、セクション内のグループを一意に識別します。

position (位置)

メッセージセクション内のセグメントの位置。

usage (使用方法)

使用方法コード。必須 (Mandatory) を表す M、省略可能 (Optional) を表す O、条件付き (Conditional) を表す C、未使用 (Unused) を表す U を使用できます。

count (数)

最大反復数の値。数値、または任意の反復数を意味する特別な値 (「>1」) を使用できます。count (数) の値は省略可能で、値を指定しない場合、ベース定義の値が使用されます。

items (項目)

グループを構成するセグメント (およびネストされている可能性のあるグループ) のリスト。

セグメントオーバーレイ

セグメントオーバーレイでは、ベーススキーマ定義の変更の詳細を記述します。ほとんどの場合、この変更では、ベース定義内の要素または複合を未使用としてマークするという形式が使用されますが、使用方法または反復数の変更が許可されます。

セグメントオーバーレイの例:

segments:
- { idRef: FTX, trim: 20 }
- idRef: LIN
  items:
  - { position: 40, usage: U }
- { idRef: ALC, trim: 30 }
- idRef: PCI
  items:
  - { position: 20, usage: U }
  - { position: 40, usage: U }

上の例では、切り捨てのみを含むセグメント変更のコンパクト形式を使用していますが、個々の値の変更は拡張形式で表されています。他のすべての YAML の例と同様に、この 2 つの形式は実際には同等であり、区別なく使用できます。

セグメントオーバーレイ内のキー-値ペアを次に示します。

Key (キー) 説明

idRef

セグメント識別子。

trim (切り取り)

セグメント内の切り取り位置。つまり、この位置以降のすべての値は未使用としてマークされます (省略可能)。

items (項目)

個々の値の変更のリスト

この項目リストは、セグメント内の値を位置によって参照します。この参照の値を次に示します。

Key (キー) 説明

position (位置)

セグメント内の値の位置。

name (名前)

セグメント内の値の名前 (省略可能。指定しない場合はベース定義の値を使用)。

usage (使用方法)

使用方法コード。必須 (Mandatory) を表す M、省略可能 (Optional) を表す O、条件付き (Conditional) を表す C、未使用 (Unused) を表す U を使用できます。

count (数)

最大反復数の値。任意の数値、または任意の反復数を意味する特別な値 (「>1」) を使用できます。count (数) の値は省略可能で、値を指定しない場合、ベース定義の値が使用されます。

EDIFACT スキーマの場所を特定する方法

コネクタを使用するには、プロジェクト内のスキーマの場所を認識しておく必要があります。標準の EDIFACT スキーマを使用し、何もカスタマイズしていない場合、スキーマの場所は /edifact/{version}/{message}.esl のパターンに従います。したがって、ORDERS メッセージの D.98B バージョンの場合、スキーマの場所は「/edifact/d98b/ORDERS.esl」になります。

1 つ以上のカスタムスキーマを使用している場合、それらを src/main/resources の下に配置し、このディレクトリを基準とする相対的な場所を参照する必要があります。 たとえば、ORDERS スキーマ (オーバーレイまたはフル) を「src/main/resources/mypartner/ORDERS.esl」に配置した場合、スキーマの場所は /mypartner/ORDERS.esl になります。

Anypoint Studio 7 で Mule プロジェクトを作成する方法

コネクタをインストールし、(必要に応じて) スキーマをカスタマイズしたら、コネクタの使用を開始できます。実装規定ごとに個別の設定を作成します。

  1. キャンバスの下部にある [Global Elements (グローバル要素)] タブをクリックし、[Create (作成)] をクリックします。

  2. [Choose Global Type (グローバル種別の選択)] ウィザードで [EDIFACT EDI: Configuration (EDIFACT EDI: 設定)] を見つけて選択し、[OK] をクリックします。

  3. [OK] をクリックして、グローバルコネクタ設定を保存します。

  4. Studio の [Message Flow (メッセージフロー)] タブに戻ります。

以降のセクションで説明するように、[Global Element Properties (グローバル要素のプロパティ)] の各タブを設定します。

[General (一般)] タブについて

[General (一般)] タブのプロパティ

[General (一般)] タブでは、EDIFACT メッセージの読み取りと書き込みに関する設定を定義できます。

  • 使用するメッセージ構造のスキーマ定義のリストを手動で作成するか、編集します。

  • 文字列置き換え文字。文字列データ内の無効な文字を置き換えるために使用します。

  • 区切り文字の使用方法。指定した値を書き込みのみのデフォルトとして使用するか、書き込みだけでなく読み取りのデフォルトとしても使用するか。

  • データ要素のデフォルトの区切り文字。

  • コンポーネント要素のデフォルトの区切り文字。

  • 反復のデフォルトの区切り文字。

  • セグメントのデフォルトの終端文字。

  • デフォルトのリリース文字。

[Identity (ID)] タブについて

[Identity (ID)] タブのプロパティ

[Identity (ID)] タブでは、EDIFACT EDI コネクタ設定内にある自分側と取引パートナー側のインターチェンジヘッダー (UNB) 識別子の値を設定できます。このすべての値は省略可能です。いずれかが設定されている場合、その値は、入力メッセージの読み取り時に検証されます。また、出力メッセージの書き込み時に出力データに値が指定されていない場合、デフォルトとして使用されます。

設定可能な値は、Mule アプリケーションと取引パートナーのインターチェンジ ID 修飾子とインターチェンジ ID です。Mule の値は、受信メッセージの受信者項目 (UNB3.1/UNB3.2) を特定し、送信メッセージの送信者項目 (UNB2.1/UNB2.2) に入力されます。

[Parser (パーサー)] タブについて

[Parser (パーサー)] タブのプロパティ

必要に応じて受信メッセージのパーサー検証を制御する以下のオプションを設定できます。

  • 受信値の最小長と最大長を適用します。

  • 受信値の反復数制限を適用します。

  • UNOA/UNOB 構文レベルの有効な文字を適用します。

  • メッセージ内の不明なセグメントを許可します。

  • メッセージ内のセグメント順序を適用します。

  • メッセージ内で「未使用」としてマークされたセグメントを許可します

  • メッセージ内のセグメントの反復数制限を適用します。

その他のパーサーオプションでは以下のことができます。

  • 受信メッセージの文字エンコードを上書きします。

  • 一意のインターチェンジ制御参照を要求します (UNB.5)。

  • グローバルで一意のメッセージ参照番号を要求します (UNH.1)。

  • ユニーク性を確認するためのインターチェンジおよびメッセージ番号を保存する最小日数を設定します。

[Writer (ライター)] タブについて

[Writer (ライター)] タブのプロパティ

メッセージを書き込むための設定

  • メッセージの書き込みで使用する文字エンコードを設定します。文字エンコードは EDIFACT 構文バージョンで定義する必要があります。

  • 構文バージョンを設定します (UNB1.2)。

  • 出力を読みやすくするように、セグメント間に書き込まれる行末を有効にします。

  • UNA サービスセグメントを常に送信します (通常は、非標準の区切り文字を使用する場合にのみ送信されます)。

  • UNOA および UNOB 構文レベルの有効な文字を適用します。

  • 肯定応答要求項目を使用して、送信インターチェンジの肯定応答を要求します (UNB.9)。

  • 送信インターチェンジで使用するテストインジケータ桁を設定します (UNB.11)。

例: EDIFACT Studio

次のフローをプロジェクトの XML に読み込むことができます。

マッピングフローの図
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:edifact="http://www.mulesoft.org/schema/mule/edifact"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
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/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/edifact
http://www.mulesoft.org/schema/mule/edifact/current/mule-edifact.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
  <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
    <http:listener-connection host="localhost" port="8081" />
  </http:listener-config>
  <edifact:config name="EDIFACT_EDI_Config" doc:name="EDIFACT EDI Config"
    interchangeIdSelf="mule"
    interchangeIdQualifierSelf="ZZZ"
    interchangeIdPartner="partner"
    interchangeIdQualifierPartner="ZZZ">
    <edifact:schemas>
      <edifact:schema value="/edifact/d96a/ORDERS.esl"/>
      <edifact:schema value="/edifact/d99b/CUSRES.esl"/>
    </edifact:schemas>
  </edifact:config>
  <flow name="edifactmappingFlow">
     <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/map" />
     <edifact:read doc:name="Read" config-ref="EDIFACT_EDI_Config"/>
     <ee:transform doc:name="Transform Message">
       <ee:message >
         <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
{
    Messages: {
        D96A: {
            ORDERS: payload.Messages.D96A.ORDERS
        }
    }
}]]></ee:set-payload>
       </ee:message>
     </ee:transform>
     <edifact:write doc:name="Write" config-ref="EDIFACT_EDI_Config"/>
  </flow>
</mule>

XML での設定オプション

Studio 設定に含まれるすべての値を XML で直接設定できます。

一般パラメータでは、送信と受信の両方のドキュメント処理を制御します (すべてが省略可能であり、デフォルト値は次に示すとおりです)。

XML 値 Visual Studio オプション

schemas=値のリスト

コネクタで使用するスキーマのパスのリスト。ファイルシステムまたはクラスパスのどちらかのパスを使用できます。

stringSubstitutionChar

構文レベル UNOA または UNOB を使用する場合、文字列値内の無効な文字を置き換えるために使用する置き換え文字。

separatorUsage="USE_DEFAULTS" "USE_SPECIFIED_FOR_WRITES" "USE_SPECIFIED_FOR_ALL"

メッセージのデフォルトとしての、指定した区切り文字/リリース文字の使用方法。

dataSeparator="+"

データ要素の区切り文字。

componentSeparator=":"

コンポーネント要素の区切り文字。

repetitionSeparator="*"

反復の区切り文字。

segmentTerminator="'"

セグメントの終端文字。

releaseCharacter="?"

リリース文字。

セルフ ID パラメータでは、取引パートナーリレーションの自分側を必要に応じて識別できます。

XML 値 Visual Studio オプション

interchangeIdSelf

Mule インターチェンジ送信者/受信者 ID (UNB2.1/UNB3.1)。

interchangeIdQualifierSelf

インターチェンジ送信者/受信者 ID 修飾子 (UNB2.2/UNB3.2)。

パートナー ID パラメータでは、パートナーを必要に応じて識別できます。

XML 値 Visual Studio オプション

interchangeIdPartner

Mule アプリケーションのパートナーインターチェンジ送信者/受信者 ID (UNB2.1/UNB3.1)。

interchangeIdQualifierPartner

パートナーインターチェンジ送信者/受信者 ID 修飾子 (UNB2.2/UNB3.2)。

パーサーパラメータでは、パーサー操作と、受信メッセージの拒否の原因となるエラー条件の種別を制御します (すべてが省略可能であり、デフォルト値は次に示すとおりです)。

XML 値 Visual Studio オプション

enforceLengthLimits="true"

受信値の最小長と最大長を適用します。

enforceValueRepeats="true"

受信値の反復数制限を適用します。

enforceReadCharacters="true"

読み取りで有効な文字を適用します (構文レベル UNOA および UNOB を使用する場合にのみ適用されます)。

allowUnknownSegments="false"

メッセージ内の不明なセグメントを許可します。

enforceSegmentOrder="true"

メッセージ内のセグメント順序を適用します。

allowUnusedSegments="false"

メッセージ内で「未使用」としてマークされたセグメントを許可します

enforceSegmentRepeats="true"

メッセージ内のセグメントの反復数制限を適用します。

receiveEncodingOverride="false"

受信メッセージで使用する Java 文字エンコード (受信 UNB を上書きします)。

requireUniqueInterchanges="true"

一意のインターチェンジ制御参照を要求します (UNB.5)。デフォルトの動作では、以前に処理されたインターチェンジ番号が記録され、同じパートナー (インターチェンジの送信者および受信者 ID により判別) からの重複するインターチェンジ番号が拒否されます。false の場合、代わりに、受信したインターチェンジの処理の続行が許可され、インターチェンジはアプリケーションフローに従い、番号が追跡され、適切に処理されます。

requireUniqueMessages="false"

受信したメッセージのグローバルで一意のメッセージ参照番号 (UNH.1) を適用します。デフォルトでは、メッセージ参照番号は特定のインターチェンジでのみ一意である必要があります。true の場合、代わりに、同じパートナーおよびアプリケーション (インターチェンジの送信者および受信者 ID により判別) から受信したすべてのインターチェンジにわたってメッセージ参照番号が一意であることが要求されます。

daysToStore="30"

ユニーク性を確認するためのインターチェンジ、グループ、およびメッセージ番号を保存する最小日数。

書き換えパラメータでは、書き換え操作を制御します (すべてが省略可能であり、デフォルト値は次に示すとおりです)。

XML 値 Visual Studio オプション

characterEncoding="ASCII_B"

メッセージの書き込みで使用する文字エンコード (EDIFACT 構文バージョンで定義されたものである必要があります)。

sendSyntaxVersion="VERSION4"

送信メッセージの構文バージョン。送信と受信の DataSense メタデータ内のサービスセグメントおよび CONTRL 肯定応答メッセージ構造で使用するデータ構造を決定するためにも使用されます。

lineEnding="NONE" "LF" "CRLF" "CR"

セグメント間に追加する行末。デフォルトは NONE。これにより、セグメント間に行末を追加して、出力メッセージテキストを読みやすくすることができます。

alwaysSendUNA="false"

UNA サービスセグメントを常に送信します。デフォルト設定の false では、構文の区切り文字が、使用中の構文バージョンと文字エンコードのデフォルトに一致しない場合にのみ、UNA がインターチェンジに含まれます。true に設定した場合、UNA は常に送信されます。

enforceWriteCharacters="true"

書き込みで有効な文字を適用します (構文レベル UNOA および UNOB を使用する場合にのみ適用されます)。

sendUniqueMessageNumbers="false"

一意のメッセージ参照番号を送信します (UNH.1)。デフォルトでは、メッセージ参照番号は各インターチェンジ内で順次割り当てられ、別のインターチェンジで再利用されます。true の場合、代わりに、同じパートナー (インターチェンジの送信者および受信者 ID により判別) に送信されたすべてのインターチェンジにわたって一意のトランザクションセット番号が割り当てられます。

initialInterchangeReference="1"

送信メッセージで使用する初期インターチェンジ制御参照。

initialMessageReference="1"

送信メッセージで使用する初期メッセージ参照番号。

requestAcks="false"

肯定応答要求項目を使用して、送信インターチェンジの肯定応答を要求します (UNB.9)。

testIndicator=""

送信インターチェンジで使用するテストインジケータ桁 (UNB.11)。デフォルトでは、インターチェンジはテストとして送信されません。

スキーマの場所を設定する方法

Anypoint Studio XML ビューでスキーマの場所を設定できます。

Anypoint Studio で、[Configuration XML (設定 XML)] をクリックして XML ビューに切り替えて、各ドキュメント種別の <http://edischema[edi:schema]> 要素を追加することで、含めたいすべてのスキーマのリストが含まれるように EDIFACT EDI 設定を変更します。

<edifact-edi:config name="EDIFACT_EDI__Configuration" identKeys="true" doc:name="EDIFACT EDI: Configuration">
  <edifact-edi:schemas>
    <edifact:schema value="/edifact/d96a/ORDERS.esl"/>
  </edifact-edi:schemas>
</edifact-edi:config>

EDIFACT EDI のグローバル要素を作成したら、スキーマと操作を設定します。

EDIFACT メッセージ構造について

コネクタを使用すると、正規の EDI メッセージ構造との間で EDIFACT ドキュメントの読み書きができます。この構造は、DataWeave またはコードを使用して操作できる Java マップおよびリストの階層として表されます。各トランザクションには、上述のように、スキーマで定義された独自の構造があります。

メッセージ自体には以下のキーが含まれます (一部のキーは、以下に示すように、読み取り操作または書き込み操作のどちらかにのみ適用されます)。

キー名 説明

Delimiters (省略可能)

メッセージで使用する区切り文字 (読み取り操作で処理された最後のインターチェンジに基づいて設定されます)。書き込み操作に対して設定した場合、これはモジュール設定の値を上書きします。文字列内の文字は位置に基づいて次の順序で解釈されます。(データ要素の区切り文字)、(コンポーネント要素の区切り文字)、(反復の区切り文字)、(セグメントの終端文字)、(リリース文字)。

Errors (参照のみ)

入力全体、または有効なメッセージのないインターチェンジに関連付けられるエラーのリスト。以下の「EDIFACT EDI メッセージの読み取りと検証の方法」セクションの EdifactError 構造の説明を参照してください。

FunctionalAcksGenerated (参照のみ)

読み取り操作中にモジュールにより生成された CONTRL 肯定応答メッセージのリスト。肯定応答を送信するには、肯定応答の送信に関する以下のセクションを参照してください。

FunctionalAcksToSend (書き込みのみ)

書き込み操作中にモジュールにより送信される CONTRL 肯定応答メッセージのリスト。

Interchange (書き込みのみ)

インターチェンジの書き込み時にデフォルトとして使用する UNB インターチェンジヘッダーセグメントの値のマップ。

Messages

読み取り操作中にモジュールにより読み取られたメッセージ、または書き込み操作中にモジュールにより送信されるメッセージの階層。この最上位キーの値は、キーとしての標準バージョンへのマップです。たとえば、「D96A」の形式で表されます。たとえば、バージョン D96.A の ORDERS および CUSRES メッセージを使用している場合、Messages には 1 つのキー「D96A」へのマップが含まれます。このキーの値は、別のマップになります。このマップには「ORDERS」と「CUSRES」の 2 つのキーがあります。この各キーに個々の ORDERS メッセージおよび CUSRES メッセージのリストが含まれ、それらを後で処理できます。

個々のメッセージには、以下のキーを持つ独自のマップがあります。

Key (キー) 説明

Detail

メッセージの詳細セクションからのセグメントまたはループのマップ。値は、最大で 1 回のみ実行されるセグメントまたはループのマップ、反復される可能性のある値のマップのリストです。

Errors (参照のみ)

メッセージに関連付けられたエラーのリスト。 (EDI メッセージの読み取りと検証に関する以下のセクションの EdifactError クラスの説明を参照してください)。

Heading

メッセージの見出しセクションからのセグメントまたはループのマップ。値は、最大で 1 回のみ実行されるセグメントまたはループのマップです。反復される可能性のある値には、マップのリストが使用されます。

Id

メッセージ ID。含まれているメッセージリストのキーに一致する必要があります。

Interchange

UNB インターチェンジヘッダーセグメントの値のマップ。メッセージの読み取り時に、このマップは、囲んでいるインターチェンジからの実際のデータになります (インターチェンジ内のすべてのメッセージからリンクされた 1 つのマップ。メッセージの書き込み時に、この値を使用して、囲んでいるインターチェンジを作成します (実際のマップが同じかどうかに関係なく、同じインターチェンジ値を持つメッセージを 1 つのインターチェンジに集めます)。このマップで入力されていない値は、デフォルトでメッセージレベルのインターチェンジマップからの値になります。

MessageHeader

UNH メッセージヘッダーセグメントの値のマップ。これにより、読み取り操作の実際のヘッダーデータが提供され、書き込み操作の設定の上書きを提供できます。

Name (名前)

メッセージ名。

Summary

メッセージの概要セクションからのセグメントまたはループのマップ。値は、最大で 1 回のみ実行されるセグメントまたはループのマップです。反復される可能性のある値には、マップのリストが使用されます。

生成された CONTRL 機能肯定応答メッセージは、インターチェンジ情報の処理で受信したメッセージとは異なります。

キー名 説明

Interchange

UNB インターチェンジヘッダーセグメントの値のマップ。受信処理で生成された機能肯定応答の場合、このマップは、交換された送信者と受信者の ID コンポーネント (UNB2.1/UNB2.2 および UNB2.1/UNB3.2) を持つ、含まれているインターチェンジのデータのコピーになります。メッセージの書き込み時に、この値を使用して、囲んでいるインターチェンジを作成します (実際のマップが同じかどうかに関係なく、同じインターチェンジ値を持つメッセージを 1 つのインターチェンジに集めます)。このマップで入力されていない値は、デフォルトでメッセージレベルのインターチェンジマップからの値になります。

EDIFACT EDI メッセージの読み取りと検証の方法

  1. EDIFACT メッセージを読み取るには、EDIFACT EDI のパレットを探し、EDIFACT Read 操作をフローにドラッグします。

  2. プロパティビューに移動し、上で作成したコネクタ設定を選択して、Read 操作を選択します。この操作では、任意のバイトストリームを、EDIFACT スキーマで記述された構造に読み取ります。

EDIFACT モジュールはメッセージの読み取り時にメッセージを検証します。メッセージ検証では、メッセージ内の実際のメッセージだけでなく、エンベロープセグメント UNB および UNZ の構文とコンテンツを確認します。通常、エラーは記録および蓄積され、CONTRL 肯定応答メッセージでレポートされます。受け入れられたすべてのメッセージは (エラーがなくても、または致命的でないエラーであっても) 渡されて、出力メッセージのマップの一部として処理されます。入力データの読み取りでエラーになると、例外がスローされます。

受信データのマップに入力されたエラーデータは、以下のプロパティを持つ参照のみの JavaBean である EdifactError クラスを使用します。

プロパティ 説明

segment

エラーの原因となったセグメントの入力内の開始値 0 のインデックス。

fatal

致命的エラーのフラグ。エラーの結果として、関連付けられたメッセージ、グループ、またはインターチェンジが拒否されたことを意味します。

errorCode

EDIFACT 構文エラーコード。

errorText

エラーの説明

エラーデータは、データ構造のルートレベルとメッセージレベルの両方で、「Errors」キーを持つ省略可能なリストとして読み取り操作によって返されます。メッセージレベルでは、このリストには、そのメッセージの解析中に発生した致命的でないエラーが含まれます。ルートレベルでは、このリストには、インターチェンジエラーと致命的なメッセージエラーの両方が含まれます。

EDIFACT EDI メッセージの書き込み方法

出力メッセージを書き込むには、EDIFACT EDI のパレットを探し、EDIFACT Write 操作をフローにドラッグします。書き込み操作への入力として上で定義されている構造に従って、出力 EDIFACT EDI メッセージを作成します。書き込み操作で致命的なエラーが見つからない場合、通常のフローが続行されます。それ以外の場合、エラーを記述する例外がスローされます。

機能肯定応答の送信方法

生成された機能肯定応答 (CONTRL メッセージ) を送信する方法は、読み取り操作中に生成された肯定応答にトランザクションを設定することを除いて、他の EDI メッセージを書き込む方法と同じです。

次に例を示します。

肯定応答フローの図
<edifact-edi:read config-ref="EDIFACT_EDI__Configuration" doc:name="Read EDI Doc"/>
  ...
<dw:transform-message doc:name="Create Outgoing Acks Message">
    <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
	FunctionalAcksToSend: payload.FunctionalAcksGenerated
}]]></dw:set-payload>
</dw:transform-message>
<edifact-edi:write config-ref="EDIFACT_EDI__Configuration" doc:name="Send Acks"/>

生成された機能肯定応答には、元のメッセージの送信者に返信するためのインターチェンジデータがセットアップされているため、送信を行うためにトランザクション内の何かを変更する必要はありません。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub