Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

DTL <subtransform>

別のデータ変換を呼び出します。

Synopsis

<subtransform class='Test.HL7.SegDTLa'                     targetObj='target.{IN1grp(iin).IN1}'                     sourceObj='source.{IN1grp(iin).IN1}'/>

属性

属性 説明
class

必須項目。呼び出されるデータ変換を含むクラスの名前です。このクラスは、これを呼び出すクラスと同じネームスペースにあることが必要です。

多くの場合、このトピックの例で示すように、class は、DTL <transform> 要素を使用して定義される DTL データ変換です。

または、class で、Transform メソッドを実装して DTL を使用しない Ens.DataTransformOpens in a new tab のカスタム・サブクラスを指定することができます。

完全なパッケージとクラスの名前。
sourceObject

必須項目。変換されるプロパティを指定します。これには、オブジェクト・プロパティまたは仮想ドキュメント・プロパティを指定できます。これは通常、対応する <transform> 要素の sourceClass および (仮想ドキュメントの場合は) sourceDocType によって指定されるソース・オブジェクトのプロパティです。この場合、以下のようにドット構文を使用して参照されます。

source.property または source.{propertyPath}

プロパティ名。仮想ドキュメントおよびそのセグメントの場合は、仮想プロパティ構文を使用します。
targetObject

必須項目。変換された値を書き込むプロパティを指定します。これには、オブジェクト・プロパティまたは仮想ドキュメント・プロパティを指定できます。これは通常、対応する <transform> 要素の targetClass および (仮想ドキュメントの場合は) targetDocType によって指定されるターゲット・オブジェクトのプロパティです。この場合、以下のようにドット構文を使用して参照されます。

target.property または target.{propertyPath}

[作成]new または copy として設定されている subtransform の場合は、既存のターゲット・オブジェクトを持っている必要がありません。

プロパティ名。仮想ドキュメントおよびそのセグメントの場合は、仮想プロパティ構文を使用します。

要素

要素 目的
<annotation> オプション。<subtransform> 要素について記述するテキスト文字列。

説明

<subtransform> 要素は、別のデータ変換を呼び出します。<subtransform> を呼び出すことによって、対応する <transform> 要素が他のデータ変換を呼び出し、その作業のセグメントを完了させることができます。これにより、開発者は、再利用可能な一連の DTL 変換コードをより柔軟に保持できます。

<subtransform> 要素が利用できるようになる前は、すべての DTL <transform> が孤立していました。同じ一連のアクションを含む複数の DTL 変換を記述するには、コードの該当部分を、クラス間でコピーして貼り付ける必要がありました。現在、これらの DTL クラスではそれぞれ、繰り返される行を <subtransform> 要素に置き換えることにより、別のクラスを呼び出して必要なシーケンスを実行できるようになりました。

<subtransform> のソース・オブジェクトまたはターゲット・オブジェクトは、通常の Ensemble オブジェクト、仮想ドキュメントのメッセージ・オブジェクト、または仮想ドキュメント・メッセージ内の個々のセグメントを示す仮想ドキュメントのセグメント・オブジェクトです。<subtransform> は、HL7 バージョン 2 またはその他の Electronic Data Interchange (EDI) 形式を扱うインタフェース開発者にとって特に重要です。EDI 形式のメッセージやドキュメントにはそれぞれ、変換が必要な独自のセグメントが多くあるためです。<subtransform> を使用することにより、変換を呼び出すためにコードをコピーせずに、再利用可能なセグメント変換のライブラリを作成して必要に応じて呼び出すことができます。

仮想ドキュメントおよびそのセグメントの場合、以下の例のように、中かっこ {} の構文などの仮想プロパティ構文を使用する必要があります。かっこ内のプロパティ・パスは、セグメントやセグメントのグループ内にあるフィールドではなく、特定のセグメントを参照する必要があります。背景情報は、"Ensemble 仮想ドキュメント" を参照してください。詳しい説明は、“仮想プロパティ・パス” の節にあります。

以下の一連の例は、3 つの <transform> 要素に対するクラス・コードを示しています。この例の 2 番目および 3 番目の変換は、サブ変換として最初の <transform> を呼び出します。DTL 構文の要件により、3 つの <transform> 要素はそれぞれ、個別のデータ変換クラスの XData DTL ブロックにあります。

  • 以下の <transform> は、HL7 バージョン 2.3.1 メッセージの仮想ドキュメント・セグメント IN1 内のフィールドに適用されます。IN1 は、ADT の一連の患者入院メッセージに対して保険情報を提供します。次の 2 つの <transform> の例を見るとわかるように、<subtransform> 要素を使用してこの <transform> を呼び出しています。

    この役割を果たす <transform> を通常、サブ変換と呼びます。ただし、<subtransform> 要素はこのコードを定義しません。この例の XData DTL ブロックは、<transform> 要素が、この変換のプライマリ・コンテナであることを示しています。別の <transform> が <subtransform> 要素を使用してこれを呼び出すまで、実際にサブ変換にはなりません。

    Class Test.HL7.SegDTLa Extends Ens.DataTransformDTL
    {
    Parameter REPORTERRORS = 1;
    
    XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
      {
      <transform targetClass='EnsLib.HL7.Segment' targetDocType='2.5:IN1'
                 sourceClass='EnsLib.HL7.Segment' sourceDocType='2.3.1:IN1'
                 create='copy' language='objectscript'>
        <assign property='target.{InsurancePlanID.Identifier}'
                value='source.{InsuranceCompanyID(1).ID}'
                action='set'/>
        <assign property='target.{InsuranceCompanyID}'
                value='""'
                action='remove'/>
        <assign property='target.{InsuranceCompanyName}'
                value='..ToLower(source.{InsuranceCompanyName})'
                action='set'/>
      </transform>
      }
    }
    
  • 以下の <transform> は、<subtransform> を呼び出すために使用できる構文の 1 つのタイプを示しています。この例では、<subtransform> を <foreach> 内に入れて、ADT_A01 の繰り返しグループ IN1grp 内にある各 IN1 セグメントに対して同じタスクを実行します。

    Class Test.HL7.A01SegDTL Extends Ens.DataTransformDTL
    {
    Parameter REPORTERRORS = 1;
    
    XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
      {
      <transform targetClass='EnsLib.HL7.Message'
                 targetDocType='2.5:ADT_A01'
                 sourceClass='EnsLib.HL7.Message'
                 sourceDocType='Demo.HL7.MsgRouter.Schema:ADT_A01'
                 create='copy' language='objectscript'>
        <foreach property='source.{IN1grp().IN1}' key='iin'>
          <subtransform class='Test.HL7.SegDTLa'
                        targetObj='target.{IN1grp(iin).IN1}'
                        sourceObj='source.{IN1grp(iin).IN1}'/>
        </foreach>
      </transform>
      }
    }
  • 以下の <transform> には、別の <subtransform> 構文の例が含まれています。この <transform> は <foreach> と <if> を組み合わせて、メッセージ内の各 IN1 セグメントを検索し、変換します。

    Class Test.HL7.A01SegDTLb Extends Ens.DataTransformDTL
    {
    Parameter REPORTERRORS = 1;
    
    XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
      {
      <transform targetClass='EnsLib.HL7.Message'
                 targetDocType='2.5:ADT_A01'
                 sourceClass='EnsLib.HL7.Message'
                 sourceDocType='Demo.HL7.MsgRouter.Schema:ADT_A01'
                 create='copy' language='objectscript'>
        <foreach property='source.{()}' key='i'>
          <assign property='target.{(i):1}' value='i' action='set'/>
          <if condition='target.GetSegmentAt((i)).Name="IN1"'>
            <true>
              <subtransform class='Test.HL7.SegDTLa'
                            targetObj='target.{(i)}'
                            sourceObj='source.GetSegmentAt(i)'/>
            </true>
          </if>
        </foreach>
      </transform>
      }
    }
FeedbackOpens in a new tab