各インタフェースでは、いくつかのデータ変換が必要になることがあります。変換を作成する場合は、予約パッケージ名を使用しないでください。"プロダクションの開発" の “予約パッケージ名” を参照してください。
Important:
データ変換内の HL7 エスケープ・シーケンスを手動で変更しないでください。これらは自動的に処理されます。
データ変換を作成するには、[データ変換ビルダ] ページを使用します (ホーム・ページから [Interoperability]→[ビルド]→[データ変換] を選択します)。このページの使用に関する一般情報は、"DTL 変換の開発" を参照してください。
以下の図は、[データ変換ビルダ] ページを示しています。
次のヒントに留意してください。
-
"DTL 変換の開発" を手元に置いてください。このドキュメントでは、各種の DTL アクションを追加する方法を説明しています。
-
データ変換クラスの create オプションに指定する値を明確に理解してください。create には、次のいずれかの値を指定できます。
-
new — データ変換内の要素を実行する前に、ターゲット・タイプの新しいオブジェクトを作成します。ターゲット・オブジェクトに明示的に割り当てていないソース・セグメントは無視されます。これがデフォルトです。
-
copy — 変換内の要素を実行する前に、ターゲット・オブジェクトとして使用するソース・オブジェクトのコピーを作成します。
-
existing — データ変換の呼び出し側から指定された既存のオブジェクトをターゲット・オブジェクトとして使用します。
ソースの完全コピーであるターゲット・オブジェクトを作成する場合、次のようなアクションを使用しないでください。
<assign property='target' value='source' />
代わりに、データ変換クラスで create='copy' 属性を使用します。
-
データ変換クラスによって、次の属性の正しいスキーマ・カテゴリが特定されることを確認します。
-
sourceDocType 属性
-
targetDocType 属性
スキーマ・カテゴリは、ソース・オブジェクトとターゲット・オブジェクトで同じ場合もあれば、異なる場合もあります。
-
そのデータ変換内のすべての式および code アクションに使用するスクリプト language を [変換] タブで指定していることを確認します。ObjectScript がデフォルトの言語です。
-
assign アクションを使用して、ドラッグ・アンド・ドロップ操作によってソース・メッセージからターゲット・メッセージに HL7 セグメントを割り当てます。
場合によっては、複数の手法を組み合わせて使用します。まず、ドラッグしてコード行を生成した後、テキストを編集してコードを微調整することができます。
-
データ変換では、次のような HL7 メッセージ・オブジェクトのプロパティを参照できます。
-
クラス・プロパティ DocType、TypeCategory、BuildMapStatus、および Name。
-
“プロダクション内での仮想ドキュメントの使用法” で構文ガイドの節の “中かっこ {} の構文” に記載されている仮想ドキュメント・プロパティ。
データ変換クラスのコード内では、次の例のように、特殊変数 source と target はそれぞれの HL7 メッセージ・オブジェクトを表します。
source.Name
target.DocType
source.{PIDgrp.PV1grp.PV1:18}
target.{PIDgrp.PID:PatientName.familylastname}
source.{ORCgrp(1).OBRuniongrp.OBRunion.OBR:4.3}
-
任意のリテラル文字列値を割り当てるか、条件付きの割り当てを行います。"DTL 変換の開発" の “構文ルール” の章を参照してください。
Note:
文字列リテラルに XML 予約文字を含めることはできません。HL7 で使用される区切り文字を含めることもできません。
また、HL7 の NULL マッピング・コード "" は特殊な処理を必要とします。次の例は、ソース・メッセージで NULL マッピング・コードを確認し、それをターゲット・メッセージで空白の文字列に置き換えます。
<if condition='source.{PV1:7().4}=""""""'>
<true>
<assign property='target.{PV1:7().4}' value='""' />
</true>
</if>
詳細は、“追加の手順” の章の “NULL マッピング・コード” を参照してください。
-
単純な計算については、DTL データ変換で次のことが可能です。
より複雑な計算については、独自のクラス・メソッドを記述し、code アクションから、または別の DTL 要素内の値文字列からそれらのメソッドを呼び出すことができます。
-
変換と各アクションの説明を追加します。
-
データ変換をコンパイルすると、同時に保存も行われます。
-
DTL データ変換をプロダクションで使用するには、ルーティング・ルール・セットの [変換] フィールドにそのパッケージとクラスの完全名を入力するだけです。
NULL マッピング・コード
NULL マッピング規則を使用する HL7 アプリケーションがあります。この規則に従って、このフィールドにデータがある場合、2 つの連続する二重引用符 ("") で構成されるフィールドをソース・アプリケーションが送信して、アプリケーションから削除することを示すことができます。
多くのターゲット・アプリケーションはこのような指示を想定しておらず、これに対応するように設計されていません。このような場合、二重引用符がターゲット・アプリケーションで実際の患者データとして保存されると、アプリケーション・ユーザの画面に二重引用符が表示されます。これは厄介で誤解を招く可能性があります。
ソース・アプリケーションが NULL マッピング規則を使用している場合、HL7 データ変換によって HL7 フィールドの NULL マッピング・エントリをチェックし、それらを空の文字列に置き換えるか、ターゲット・アプリケーションに適したデータを入力することができます。
次の <if> 文は、最も単純な例を表しています。この例は、ソースで NULL マッピングをチェックし、それをターゲットで空の文字列に置き換えます。<if> condition は、引用符で囲まれた 2 つの引用符で構成される文字列を使用して、NULL マッピング・コード "" をテストします。この結果、二重引用符が合計 6 つになります。condition 値全体を囲む一重引用符は含みません (慎重に数えてください)。
<if condition='source.{PV1:7().4}=""""""'>
<true>
<assign property='target.{PV1:7().4}' value='""' />
</true>
</if>
上の例では、<assign> value は、2 つの連続する二重引用符を使用し、value 全体を一重引用符で囲んで空の文字列を示しています。
次の構文も同様に有効です。
<if condition='source.{PV1:7().4}=""""""'>
<true>
<assign property='target.{PV1:7().4}' value='""' />
</true>
</if>
NULL マッピングの処理について、より高度な目標を達成することもできます。次の例は、{PV1:3} に実際に値があるかどうかに基づいて、別のアクションを実行します。フィールドに NULL マッピング・コードが含まれている場合、<true> 要素が実行されます。それ以外の場合は、<false> 要素が実行されます。
<if condition='source.{PV1:3}=""""""'>
<true>
<assign property='target.{PV1:3.1}' value='source.{PV1:PatientType}' />
<assign property='target.{PV1:3.2}' value='source.{PV1:PatientType}' />
</true>
<false>
<code>
// Dr Chart pulls subfields as follows:
// 1 location, 2 desc, 3 room, 4 bed, 5 wing, 6 floor
</code>
<assign property='target.{PV1:3.1}' value='source.{PV1:3.1}' />
<assign property='target.{PV1:3.2}' value='source.{PV1:3.1}' />
<assign property='target.{PV1:3.3}' value='source.{PV1:3.2}' />
<assign property='target.{PV1:3.4.1}' value='source.{PV1:3.3}' />
<assign property='target.{PV1:3.5}' value='source.{PV1:3.1}' />
</false>
</if>