仮想プロパティ・パス
ここでは、InterSystems IRIS® データ・プラットフォームで仮想ドキュメント内のデータにアクセスするために使用される仮想プロパティ・パスについて説明します。
概要
仮想ドキュメントを使用するには、仮想ドキュメント内の特定のデータ項目を識別できる必要があります。このデータ項目を仮想プロパティといいます。仮想プロパティ・パスは InterSystems IRIS で仮想プロパティの場所を指定するために使用される構文です。
XML 仮想ドキュメントを除いて、仮想プロパティ・パスは、該当する EDI スキーマが InterSystems IRIS にロードされている場合にしか使用できません。スキーマが InterSystems IRIS にロードされたら、InterSystems IRIS で対応するドキュメントを EDI スキーマによって意図されたように解釈するために必要なすべての情報が揃うことになります。
EDI ドキュメントの解釈:セグメントとフィールド
EDIFACT および X12 ドキュメントの場合は、未加工のデータ・ストリームがセグメントに分割され、さらにフィールドに分割されます。(詳細は、XML ドキュメントの場合と異なります。"プロダクション内での XML 仮想ドキュメントのルーティング" を参照してください。)
終端文字 (多くの場合はキャリッジ・リターン) は、セグメントの最後を示します。この場合は、各行が 1 つのセグメントです。
セグメント内では、セパレータ文字がフィールド間の境界を示します。この場合は、コロンがフィールド間のセパレータ文字で、セミコロンがサブフィールド間のセパレータ文字です。
フィールドには、サブフィールドとそのさらに下位区分を含めることができます。これらは他のセパレータ文字で区切られます。
ターミネータ文字とセパレータ文字の詳細は EDI 形式によって異なります。
セグメント構造
一般に、EDI 標準は、構成要素として使用可能な多数のセグメントを定義します。ドキュメント構造ごとに特定のセグメントしか含まることができません。複数のドキュメント構造で別々の順番または数量のセグメントを組み合わせることもできます。
(詳細は、XML ドキュメントの場合と異なります。"プロダクション内での XML 仮想ドキュメントのルーティング" を参照してください。)
仮想プロパティ・パスの特定
概念上は、仮想プロパティ・パスに以下のすべての単位が含まれています。
-
category:structure — その DocType
-
segment:field — その DocType の仮想ドキュメント内のデータ値へのパス
以下の図は、この規則を示しています。
通常、パスの segment 部分で、セグメントのグループや繰り返しブロックを含む、階層的なドキュメント構造内にあるターゲット・セグメントを識別します。例えば、2.3:ORM_O01 メッセージの NTE セグメントは、以下のように識別されます。
ORCgrp(1).OBRuniongrp.OBXgrp(3).NTE(1)
同様に、パスの field 部分で、ターゲット・セグメント内のフィールド、サブフィールド、および繰り返しグループの階層的な構造内にある、ターゲット・フィールドを識別します。実際には、NTE 内の各 field は、以下のように、簡単です。
SourceofComment
したがって、segment:field の完全なパスは次のようになります。
ORCgrp(1).OBRuniongrp.OBXgrp(3).NTE(1):SourceofComment
複雑な階層構造を持つフィールドもあります。同じ 2.3:ORM_O01 メッセージ構造の PID セグメントを見てみます。segment では、以下のように識別されます。
PIDgrp.PID
以下のような field パスを使用できます。
PatientIDInternalID(1).identifiertypecode
segment パスと異なり、パスの field 部分では、通常、フィールドやサブフィールドの名前の代わりに数値を使用できます。例えば、上記の名前の代わりに以下の番号を使用できます。
3(1).5
管理ポータルには、正しい segment:field パスを特定するのに役立つページが用意されています(これらのページにアクセスするには、[Interoperability]、[相互運用] の順にクリックします)。DTL エディタにも、特定の変換に使用するドキュメント構造を表示する機能が用意されています。
(詳細は、XML ドキュメントの場合と異なります。"プロダクション内での XML 仮想ドキュメントのルーティング" を参照してください。)
仮想ドキュメント・クラス
仮想ドキュメントを操作する場合は、メッセージ・クラスを作成する必要がありません。InterSystems IRIS にはメッセージ・クラスが用意されています。例えば、X12 ドキュメント、XML ドキュメントを転送するためのクラスがそれぞれ 1 つずつあります。ビジネス・ホスト・クラスでは、自動的に、適切なメッセージ・クラスが使用されます。
これらのメッセージは、総称して、仮想ドキュメントと呼ばれています。
仮想ドキュメント・クラスには、InterSystems IRIS でメッセージを処理するために必要な情報を転送するためのプロパティが用意されています。これらのプロパティには以下が含まれます。
未加工のメッセージの最初の 32 KB が含まれています。
このプロパティは、管理ポータルにも表示できます。形式が不正なメッセージの分析や報告に役立ちます。
このプロパティにはインデックスが付けられていないことに注意してください。このプロパティを SQL 検索クエリ内で使用した場合は、そのクエリがあまり有効に機能しない可能性があります。このプロパティにプログラム (DTL など) からアクセスすることはお勧めできません。代わりに、仮想プロパティ・パスを使用して必要なデータにアクセスしてください。
未加工のメッセージの内容を特定の DocType にマップする最近の試みが成功したか失敗したかを示す %StatusOpens in a new tab 値が含まれています。BuildMapStatus はコード内で以下のようにテストできます。
-
ObjectScript ではマクロ $$$ISOK(myX12Message.BuildMapStatus)、Basic ではメソッド $SYSTEM.Status.IsOK(myMessage.BuildMapStatus) を使用します。このテストで真の値が返された場合、BuildMapStatus には成功値が格納されています。
-
ObjectScript ではマクロ $$$ISERR(myMessage.BuildMapStatus)、Basic ではメソッド $system.Status.IsError(myX12Message.BuildMapStatus) を使用します。このテストで真の値が返された場合、BuildMapStatus にはエラー値が格納されています。
BuildMapStatus のエラー・コードの詳細を表示するには、"ポータル・ツール" で説明されている [スキーマ構造] ページを使用します。
仮想ドキュメント・クラスでは、InterSystems IRIS で特定の形式と DocType の仮想プロパティ・パスを解釈するために必要なロジックも提供されます。このクラスでは、仮想ドキュメント内で (状況に応じて) 値を取得または設定するために使用可能な以下のインスタンス・メソッドが提供されます。
仮想プロパティ・パスを所与として、メッセージ内の仮想プロパティの値を返します。
このメソッド (および次のメソッド) は、メッセージにアクセスしてカスタム・コードを実行可能なプロダクション内の任意の場所 (BPL <code> 要素内など) から呼び出すことができます。
仮想プロパティ・パスと値を所与として、メッセージ内に値を設定します。GetValueAt() に関するコメントを参照してください。
ターミナルでの仮想プロパティ・パスのテスト
特に、構文に精通している場合は、仮想ドキュメント・プロパティ・パスをビジネス・プロセスやデータ変換などで使用する前にターミナルでテストできると便利です。そのためには、以下のように操作します。
-
対応するスキーマを InterSystems IRIS にロードします (まだロードされていない場合)。これを実現するには、"ポータル・ツール" を参照してください。
-
ターミナルまたはテスト・コード内:
-
適切なドキュメントのテキストを含む文字列を作成します。
-
該当する仮想ドキュメント・クラスの ImportFromString() メソッドを使用して、この文字列から仮想ドキュメントのインスタンスを作成します。
このクラスの一覧表を以下に示します。
ドキュメント・タイプ 仮想ドキュメント・クラス EDIFACT EnsLib.EDI.EDIFACT.DocumentOpens in a new tab XML EnsLib.EDI.XML.DocumentOpens in a new tab -
このインスタンスの DocType プロパティを設定します。
-
このインスタンスの GetValueAt() インスタンス・メソッドを使用します。
-