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

構文ルール

この章では、さまざまな DTL アクション内でプロパティを参照したり、式を作成したりするための構文ルールについて説明します。

メッセージ・プロパティへの参照

変換内のほとんどのアクションにおいて、ソースまたはターゲット・メッセージのプロパティを参照する必要があります。プロパティを参照するためのルールは、操作するメッセージの種類によって異なります。

  • 仮想ドキュメント以外のメッセージの場合は、次のような構文を使用します。

    source.propertyname
    

    または

    source.propertyname.subpropertyname
    

    ここで、propertyname はソース・メッセージ内のプロパティで、subpropertyname はそのプロパティのプロパティです。

    メッセージにコレクション・プロパティが含まれている場合は、"プロダクション内での仮想ドキュメントの使用法" の "繰り返しフィールドの特殊なバリエーション" を参照してください。ここで紹介する情報の一部は、仮想ドキュメントと標準メッセージの両方に適用されます。

  • XML 仮想ドキュメント以外の仮想ドキュメントの場合は、"プロダクション内での仮想ドキュメントの使用法" の “仮想プロパティ・パスに関する構文ガイド” に記載された構文を使用します。次の項も参照してください。

  • XML 仮想ドキュメントについては、"プロダクション内での XML 仮想ドキュメントのルーティング" を参照してください。

リテラル値

値をターゲット・プロパティに代入するときに、リテラル値を指定することがよくあります。リテラル値は、trace アクション内の値のような他の場所にも適している場合があります。

リテラル値は次のどちらかです。

  • 数値リテラルはただの数字です。例えば、42.3 などです。

  • 文字列リテラルは二重引用符で囲まれた文字列です。例えば、"ABD" などです。

    Note:

    この文字列には XML 予約文字を含めることができません。詳細は、“XML 予約文字” を参照してください。

    仮想ドキュメントの場合は、この文字列に仮想ドキュメント形式で使用されるセパレータ文字を含めることができません。“仮想ドキュメント内のセパレータ文字” と “XML 予約文字がセパレータでもある場合” を参照してください。

XML 予約文字

DTL 変換は XML ドキュメントとして保存されるため、XML 予約文字の代わりに XML エンティティを使用する必要があります。

この文字を含めるには... 次の XML エンティティを使用します...
> >
< &lt;
& &amp;
' &apos;
" &quot;

例えば、値の Joe’s "Good Time" Bar & Grill をターゲット・プロパティに代入するには、[値] を次のように設定します。

"Joe&apos;s &quot;Good Time&quot; Bar &amp; Grill"

InterSystems IRIS® では、エディタに入力されたテキストの周りに自動的に CData ブロックが配置されるため、この制限は code アクションと sql アクションの内部に適用されません(XML 標準では、CData ブロックの間に XML と解釈すべきではないテキストが入ります。そのため、そのブロックに予約文字を含めることができます)。

仮想ドキュメント内のセパレータ文字

ほとんどの仮想ドキュメント形式で、セグメント間、フィールド間、サブフィールド間などで特定の文字がセパレータとして使用されます。メッセージ内に値を設定するときにこれらの文字をリテラル・テキストとして含める必要がある場合は、代わりに、そのドキュメント形式に適切なエスケープ・シーケンス (存在する場合) を使用する必要があります。

これらの文字は該当するドキュメント内で文書化されます。詳細は、以下を参照してください。

  • "プロダクション内での EDIFACT ドキュメントのルーティング" の参照節内の “セパレータ

  • "プロダクション内での X12 ドキュメントのルーティング" の参照節内の “セパレータ

Important:

データ変換では、セパレータ文字とエスケープ・シーケンスをソース・メッセージとターゲット・メッセージで分けることができます。InterSystems IRIS が、自動的に、変換の実行後に必要に応じて値を調整します。これは、ソース・メッセージに適用されるセパレータ文字とエスケープ・シーケンスだけを考慮すればいいことを意味します。

XML 予約文字がセパレータでもある場合

  • 文字 (& など) がセパレータでそれをリテラル文字として含めたい場合は、仮想ドキュメント形式に適用されるエスケープ・シーケンスを使用します。

  • それ以外の場合は、“XML 予約文字” で示したような XML エンティティを使用します。

数字のコード

リテラル文字列には、10 進表現または 16 進表現を含めることができます。

文字列 &#n; は Unicode 文字を表します (n は Unicode 文字の 10 進数)。例えば、&#233; は、揚音アクセント符号付きのラテン文字 e (é) を表します。

また、文字列 &#xh; も Unicode 文字を表します (h は 16 進の Unicode 文字番号)。例えば、&#x00BF は逆さの疑問符 (¿) を表します。

有効な式

値をターゲット・プロパティに代入するときに、データ変換用に選択した言語で式を指定できます。式は、if アクションの条件、trace アクション内の値、code アクション内の文などの他の場所でも使用します。

有効なすべての式を以下に示します。

  • 前の節で説明したリテラル値。

  • 関数コール (InterSystems IRIS はビジネス・ルールやデータ変換で使用するための一連のユーティリティ関数を提供しています。詳細は、"ビジネス・ルールの開発" の “プロダクションで使用するユーティリティ関数” を参照してください)。InterSystems IRIS にはこれらのためのウィザードが用意されています。

  • プロパティへの参照” で説明したプロパティへの参照。

  • ルールでパスされた aux 変数への参照。データ変換がルールから呼び出される場合、aux 変数で以下の情報を提供します。

    • aux.BusinessRuleName—ルールの名前。

    • aux.RuleReason—ルールが起動された理由。これは、ロギングで使用される名前と同じです。例えば、'rule#1:when#1' などの値です。RuleReason が 2,000 文字を超える場合は、2000 文字に省略されます。

    • aux.RuleUserData—ルールで 'RuleUserData' プロパティに割り当てられた値。'RuleUserData' の値は常に、最後に設定されていた値になります。

    • aux.RuleActionUserData—ルールの when 節または otherwise 節でプロパティ 'RuleActionUserData' に割り当てられた値。

    データ変換がルールからではなくコードから直接呼び出される場合、コードは 3 番目のパラメータで予備のデータを渡すことができます。3 番目のパラメータが設定されていないコードからデータ変換が呼び出される可能性がある場合、DTL コードは $ISOBJECT 関数を使用して aux 変数が if アクションのオブジェクトであることを確認する必要があります。

  • データ変換用に選択したスクリプティング言語の構文を使用してこれらを組み合わせた式。前述した “変換詳細の指定” を参照してください。以下に留意してください。

    • ObjectScript の場合、連結演算子は、以下のように _ (アンダースコア) 文字です。

      value='"prefix"_source.{MSH:ReceivingApplication}_"suffix"'

    • $CHAR$PIECE などの便利な ObjectScript 文字列関数については、"ObjectScript リファレンス" を参照してください。

    • 概要は、"ObjectScript の使用法" を参照してください。

FeedbackOpens in a new tab