Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

X12 データ変換の作成

ルーティング・ルールに、1 つ以上のデータ変換が必要な場合があります。データ変換言語 (DTL) データ変換の定義に関する一般情報は、"DTL 変換の開発" を参照してください。

DTL データ変換をプロダクションに統合するには、ルーティング・ルール[変換] フィールドに、そのデータ変換の完全なパッケージ名とクラス名を入力します。

X12 ドキュメント用の DTL データ変換を作成する場合は、次の手順に従います。

  • [変換] タブで、[ソースクラス][ターゲットクラス] の両方で EnsLib.EDI.X12.DocumentOpens in a new tab を指定する必要があります。

  • [ソースドキュメントタイプ] には、ビジネス・サービスによって割り当てられたスキーマ・カテゴリ名を指定する必要があります。

  • [ターゲットドキュメントタイプ] には、ターゲット・スキーマ・カテゴリの名前を指定する必要があります。これは、InterSystems IRIS にロードしたスキーマ・カテゴリ名と同じにする必要があります。

一般的な X12 DTL 使用事例

DTL エディタにより、以下のように、一般的な X12 使用事例でのデータ変換の作成が容易になります。

  • 複数の機能グループを持つことができます。

  • 通常、1 つのグループでは、1 タイプのトランザクション・セットのみが使用されます。

一般に、各 DTL には、入力メッセージ用に 1 つのスキーマ、出力メッセージ用に 1 つのスキーマがあります。これは、単一のスキーマで表されているメッセージには機能しますが、X12 では 3 つの異なるレベルに対して以下のように異なるスキーマが存在します。

  • インターチェンジ・エンベロープのスキーマ

  • 機能グループのスキーマ

  • トランザクション・セットのスキーマ

DTL では、レベルごとに 1 つのサブ変換を用意することでこれを処理しますが、DTL X12 サポートにより、階層内の各レベルにスキーマを指定できます。複数タイプのトランザクション・セットを持つメッセージなど、より複雑な X12 メッセージを扱う場合は、サブ変換を使用してこれを処理する必要があります。

X12 DTL を作成する手順

このセクションでは、ソース X12 ドキュメントの内容をターゲットの X12 ドキュメントにコピーするデータ変換を作成する方法について説明します。例では、ソースとターゲットの両方のドキュメントに HIPAA 5010 834 ドキュメント構造を使用します。他の形式にも同様の手順を使用できます。

"X12 エンベロープの構造" で説明している X12 メッセージの階層構造により、[変換] タブの [作成] フィールドの値を単に [コピー] に設定することはできません。代わりに、メッセージ構造の各レベルをコピーするデータ変換を構築します。Ens.Rule.FunctionSetOpens in a new tab のサブクラスであるクラス Ens.X12.FunctionSetOpens in a new tab は、このタスクに役立つ以下のクラス・メソッドを提供します。

  • X12NewFunctionalGroup()

  • X12NewTransactionSet()

  • X12CompleteTrailerAndReturnClear()

  • X12SaveDocumentAndReturnClear()

ソースおよびターゲット・クラスの作成

まず、適切なドキュメント・タイプのソースおよびターゲットのデータ変換クラスを作成します。

  1. [データ変換ビルダ] ページで [新規] をクリックしてデータ変換ウィザードを開きます。

  2. [パッケージ] フィールドで新しいクラスが属するパッケージの名前を入力するか、矢印をクリックして現在のネームスペースでパッケージを選択します。

  3. [名前] フィールドに、新しいデータ変換クラスの名前を入力します。

  4. [説明] フィールドに、データ変換の説明を入力します。

  5. [ソースタイプ][ターゲットタイプ] の両方で [X12] を選択します。このアクションにより、[ソースクラス][ターゲットクラス] に自動的に EnsLib.EDI.X12.DocumentOpens in a new tab が入力されます。

  6. [ソース・ドキュメント・タイプ] を選択するには、虫めがねアイコンをクリックします。

    • 表示されるダイアログ・ボックスで、HIPAA_5010 などの適切なスキーマ・カテゴリを選択します。

    • 右の列で、[Interchange>>] を選択します。

    • その右の列で、[グループ>>] を選択します。これは機能グループのスキーマです。

    • その右の列で、ドキュメント・タイプを表す名前 (この例では 834) を選択します。これはトランザクション・セットのスキーマです。

  7. これらのアクションにより、[ソース・ドキュメント・タイプ] として HIPAA_5010:Interchange:Group:834 が指定され、デフォルトで同じタイプが [ターゲット・ドキュメント・タイプ] に指定されます。

  8. [OK] をクリックすると、新しいソースとターゲットのクラスが作成されます。

以下の図は、[ソース・ドキュメント・タイプ] の選択手順を示したものです。

Cascading menus with HIPAA_5010, Interchange, and Group highlighted in sequence

インターチェンジ・コントロール・ヘッダのコピー

ソースからターゲットへ、インターチェンジ・コントロール・ヘッダ (ISA) の内容をコピーできます。"DTL 変換の開発" の "ソース・プロパティからターゲット・プロパティへの値のコピー" で説明しているドラッグ・アンド・ドロップ手法を使用して、[set] アクションを作成できます。これらのアクションを [group] アクションにまとめることもできます。

機能グループのコピー

  1. [アクション追加] をクリックして [group] を選択して、新しい group アクションを作成します。

  2. ダイアグラムで [FunctionalGroups()] ノードを選択します。

  3. [アクション追加] をクリックして [for each] を選択して、新しい for each アクションを作成します。[FunctionalGroups()] を選択していれば、[プロパティ] フィールドのデフォルト値が指定されます。

  4. [アクション] タブにある新しい for each アクションの [プロパティ] フィールドにはデフォルト値 source.FunctionalGroups() が入力されています。これは、for each にソース・クラス内の機能グループを繰り返すよう指示します。

  5. [キー] フィールドには、ループを繰り返すのに使用される変数が含まれます。このデフォルト値は k1 です。これを覚えやすい変数名 (機能グループ・キーの場合 fgKey など) に変更します。

  6. [アクション追加] をクリックして [set] を選択して、for each ループで新しい set アクションを作成します。[プロパティ] フィールドで target.FunctionalGroups(fgKey) を追加します。

  7. [値] フィールドを編集するには、虫めがねアイコンをクリックして [値編集] を開きます。

  8. [値編集] ダイアログ・ボックスで、[関数] フィールドの右の矢印をクリックし、ドロップ・ダウン・リストを開きます。 関数 X12NewFunctionalGroup() を選択します。

  9. [InterchangeParent] フィールドで target と入力し、[DocType] フィールドで “Group” と入力して [OK] をクリックします。

  10. このアクションにより、[値] フィールドに ##class(Ens.X12.FunctionSet).X12NewFunctionalGroup(target,"Group") が追加されます。set アクション全体で X12NewFunctionalGroup() メソッドを使用し、ターゲット・クラスに機能グループを作成します。

次の手順ではトランザクション・セットをコピーします。

トランザクション・セットのコピー

  1. 前のセクションの for each アクション内で、[アクション追加] をクリックし、[group] を選択することにより、新しい group アクションを作成します。

  2. ダイアグラムで [TransactionSets()] ノードを選択します。

  3. [アクション追加] をクリックして [for each] を選択して、新しい for each アクションを作成します。[TransactionSets()] を選択していれば、[プロパティ] フィールドのデフォルト値が指定されます。

  4. [アクション] タブにある新しい for each アクションの [プロパティ] フィールドには値 source.FunctionalGroups(fgKey).TransactionSets() が入力されています。これは、for each にソース・クラス内のトランザクション・セットを繰り返すよう指示します。

  5. [キー] フィールドには、ループを繰り返すのに使用される変数が含まれます。このデフォルト値は k2 です。これを覚えやすい変数名 (トランザクション・セット・キーの場合 tsKey など) に変更します。

  6. [アクション追加] をクリックして [set] を選択して、新しい set アクションを作成します。[プロパティ] フィールドで target.FunctionalGroups(fgKey).TransactionSets(tsKey) を追加します。

  7. [値] フィールドを編集するには、虫めがねアイコンをクリックして [値編集] を開きます。

  8. [値編集] ダイアログ・ボックスで、[関数] フィールドの右の矢印をクリックし、ドロップ・ダウン・リストを開きます。関数 X12NewTransactionSet() を選択します。

  9. [GroupParent] フィールドで target.FunctionalGroups(fgKey) と入力し、[DocType] フィールドで “834” と入力して [OK] をクリックします。

  10. このアクションにより、[値] フィールドに ##class(Ens.X12.FunctionSet).X12NewTransactionSet(target.FunctionalGroups(fgKey),"834") が追加されます。set アクション全体で X12NewTransactionSet() メソッドを使用し、ターゲット・クラスにトランザクション・セットを作成します。

機能グループおよびトランザクション・セットのループの完了

前の 2 つのセクションでは、ソース内で機能グループを繰り返し、ターゲット内で対応する機能グループを作成するループと、各機能グループで必要なトランザクション・セットを作成する 2 つ目の入れ子のループの 2 つのループを作成しました。ここで、各トランザクション・セットとそれらを含む各機能グループに、トレーラ・セグメントを作成する必要があります。

トランザクション・セットのトレーラ・セグメントを作成するには、以下の手順に従います。

  1. トランザクション・セットを作成するループの末尾の直前の位置で、[アクション追加] をクリックし、[set] を選択することにより、新しい set アクションを作成します。[プロパティ] フィールドで target.FunctionalGroups(fgKey).TransactionSets(tsKey) を追加します。

  2. [値] フィールドを編集するには、虫めがねアイコンをクリックして [値編集] を開きます。

  3. [値編集] ダイアログ・ボックスで、[関数] フィールドの右の矢印をクリックし、ドロップ・ダウン・リストを開きます。関数 X12CompleteTrailerAndReturnClear() を選択します。

  4. [X12Document] フィールドで target.FunctionalGroups(fgKey).TransactionSets(tsKey) と入力し、[保存] フィールドで 1 と入力して [OK] をクリックします。

  5. このアクションにより、[値] フィールドに ##class(Ens.X12.FunctionSet).X12CompleteTrailerAndReturnClear(target.FunctionalGroups(fgKey).TransactionSets(tsKey),1) が追加されます。set アクション全体で X12CompleteTrailerAndReturnClear() メソッドを使用し、現在のトランザクション・セットにトランザクション・セット・トレーラを作成します。

機能グループのトレーラ・セグメントを作成するには、以下の手順に従います。

  1. 機能グループを作成するループの末尾の直前の位置で、[アクション追加] をクリックし、[set] を選択することにより、新しい set アクションを作成します。[プロパティ] フィールドで target.FunctionalGroups(fgKey) を追加します。

  2. [値] フィールドを編集するには、虫めがねアイコンをクリックして [値編集] を開きます。

  3. [値編集] ダイアログ・ボックスで、[関数] フィールドの右の矢印をクリックし、ドロップ・ダウン・リストを開きます。関数 X12CompleteTrailerAndReturnClear() を選択します。

  4. [X12Document] フィールドで target.FunctionalGroups(fgKey) と入力し、[保存] フィールドで 1 と入力して [OK] をクリックします。

  5. このアクションにより、[値] フィールドに ##class(Ens.X12.FunctionSet).X12CompleteTrailerAndReturnClear(target.FunctionalGroups(fgKey),1)) が追加されます。set アクション全体で X12CompleteTrailerAndReturnClear() メソッドを使用し、現在の機能グループに機能グループ・トレーラを作成します。

最後に、IEA セグメントを作成します。

  1. 機能グループを作成するループの末尾の直後の位置で、[アクション追加] をクリックし、[set] を選択することにより、新しい set アクションを作成します。[プロパティ] フィールドで temp を追加します。

  2. [値] フィールドを編集するには、虫めがねアイコンをクリックして [値編集] を開きます。

  3. [値編集] ダイアログ・ボックスで、[関数] フィールドの右の矢印をクリックし、ドロップ・ダウン・リストを開きます。関数 X12CompleteTrailerAndReturnClear() を選択します。

  4. [X12Document] フィールドで target と入力し、[保存] フィールドで 0 と入力して [OK] をクリックします。

  5. このアクションにより、[値] フィールドに ##class(Ens.X12.FunctionSet).X12CompleteTrailerAndReturnClear(target,0)) が追加されます。set アクション全体で X12CompleteTrailerAndReturnClear() メソッドを使用し、IEA セグメントを作成します。

バッチ全体用のデータ変換

バッチ全体ドキュメントをグループ・レベルまたはトランザクション・セット・レベルで変換するには、各グループを反復処理すると共に、各グループ内の各トランザクション・セットを反復処理する必要があります。このためには、以下の手順を実行します。

各インターチェンジ内のグループのループ処理

  1. [アクション追加] をクリックして [for each] を選択して、新しい for each アクションを作成します。

  2. [プロパティ] フィールドに [source.{GroupDocsRef}] と入力します。

  3. [キー] フィールドに [Group] と入力します。Group は、実際のグループ・レベルのドキュメント・オブジェクトです。

  4. 各グループにサブ変換を追加します。サブ変換に渡される値は、Group (for each からのキー) であり、プロパティは新しい Group (これは GroupOut という名前の可能性があります) になります。

  5. メインの変換のソースとターゲットは、インターチェンジ・ドキュメントです。このサブ変換では、グループ・ドキュメントがソースおよびターゲットであるため、DTL のドラッグ・アンド・ドロップ機能により、グループ・セグメントを容易に操作でき、また個々のトランザクション・セットを容易にループできます。

各グループ内のトランザクション・セットのループ処理

  1. グループ・サブ変換内で、[アクション追加] をクリックして [for each] を選択して、新しい for each アクションを作成します。

  2. 次に、各トランザクション・セットで別のサブ変換を実行します。 for each のキーであったトランザクション・セット・オブジェクトを渡します。返されるプロパティもトランザクション・セットです。 このサブ変換には、ソースとターゲットのトランザクション・セットのドキュメント・タイプが含まれます (HIPAA_5010:834 または HIPAA_5010:837P など)。

  3. バッチにさまざまなドキュメント・タイプのトランザクション・セットが存在する可能性がある場合、ドキュメント・タイプに条件を追加して、どのトランザクション・セット・サブ変換を実行するかを特定できます。このシナリオは、前のセクションで説明した手法ではなく、この手法を使用する理由にもなり得ます。

各グループ変換およびインターチェンジ変換で、サブ変換の後、ForEach のクローズ前に、返された子オブジェクトを親ターゲット・ドキュメントに追加する必要があります。 これを行うにはカスタム関数が必要です。 このカスタム関数は、以下のようなものにできます。

/// Adds a child X12 document <var>pChild</var>, (a Transaction Set or a Group) 
as the child of a Group or Interchange

/// <var>pParent</var>'s DocsRef segment. <var>pDocsRefSeg</var> 
is the segment name for the DocsRef segment

/// ("TransactionSetDocsRef" for a Group or "GroupDocsRef" for an Interchange) 
Returns a status code. 

ClassMethod AddChildToDocsRef(pChild As EnsLib.EDI.X12.Document, 
 pParent As EnsLib.EDI.X12.Document, pDocsRefSeg As %String) As %Status
{
    Set tSC = $$$OK
    Set tSC = pParent.BuildMap() Quit:$$$ISERR(tSC) tSC
    Set index = pParent.GetSegmentIndex(pDocsRefSeg,.tSC) Quit:$$$ISERR(tSC) tSC
    Set tSC = pParent.AddChild(index,pChild) Quit:$$$ISERR(tSC) tSC
    Set tSC = pParent.SetValueAt(1+pParent.GetValueAt((index+1)_":1"),(index+1)_":1") 
     Quit:$$$ISERR(tSC) tSC
    Set tSC = pParent.%Save()
    Quit tSC
}

X12 データ変換のテスト

DTL エディタの [ツール] タブは、データ変換を迅速にテストできる [テスト] ボタンを備えています。[テスト] をクリックし、X12 テキストを [入力メッセージ] フィールドに貼り付け、[変換のテスト] ダイアログの [テスト] ボタンをクリックします。

利用可能なツール” の章の説明に従って、X12 ドキュメント・ビューワ・ページを使用して変換をテストすることもできます。ドキュメント・ビューワでは、さまざまな X12 データ・ソースに対して DTL を実行できます。

Note:

データ変換には、[バッチハンドリング] の設定を必ず反映させてください。

FeedbackOpens in a new tab