構文ルール
ここでは、プロパティを参照したり、さまざまな BPL アクティビティ内で式を作成したりするための構文ルールについて説明します。
メッセージ・プロパティへの参照
BPL プロセス内部のアクティビティで、メッセージのプロパティを参照しなければならない場合があります。プロパティを参照するためのルールは、操作するメッセージの種類によって異なります。
-
仮想ドキュメント以外のメッセージの場合は、次のような構文を使用します。
message.propertyname
または
message.propertyname.subpropertyname
ここで、propertyname はメッセージ内のプロパティで、subpropertyname はそのプロパティのプロパティです。
-
XML 仮想ドキュメント以外の仮想ドキュメントの場合は、"仮想プロパティ・パスに関する構文ガイド" に記載された構文を使用します。
-
XML 仮想ドキュメントについては、"プロダクション内での XML 仮想ドキュメントのルーティング" を参照してください。
リテラル値
値をプロパティに代入するときに、リテラル値を指定することがよくあります。リテラル値は、trace アクション内の値のような他の場所にも適している場合があります。
リテラル値は次のどちらかです。
-
数値リテラルはただの数字です。例えば、42.3 などです。
-
文字列リテラルは二重引用符で囲まれた文字列です。例えば、"ABD" などです。
Note:この文字列には XML 予約文字を含めることができません。詳細は、"XML 予約文字" を参照してください。
仮想ドキュメントの場合は、この文字列に仮想ドキュメント形式で使用されるセパレータ文字を含めることができません。"仮想ドキュメント内のセパレータ文字" と "XML 予約文字がセパレータでもある場合" を参照してください。
XML 予約文字
BPL プロセスは XML ドキュメントとして保存されるため、XML 予約文字の代わりに XML エンティティを使用する必要があります。
この文字を含めるには... | 次の XML エンティティを使用します... |
---|---|
> | > |
< | < |
& | & |
' | ' |
" | " |
例えば、値の Joe’s "Good Time" Bar & Grill をプロパティに代入するには、[値] を次のように設定します。
"Joe's "Good Time" Bar & Grill"
InterSystems IRIS® では、エディタに入力されたテキストの周りに自動的に CData ブロックが配置されるため、この制限は <code> アクティビティと <sql> アクティビティの内部に適用されません(XML 標準では、CData ブロックの間に XML と解釈すべきではないテキストが入ります。そのため、そのブロックに予約文字を含めることができます)。
仮想ドキュメント内のセパレータ文字
ほとんどの仮想ドキュメント形式で、セグメント間、フィールド間、サブフィールド間などで特定の文字がセパレータとして使用されます。メッセージ内に値を設定するときにこれらの文字をリテラル・テキストとして含める必要がある場合は、代わりに、そのドキュメント形式に適切なエスケープ・シーケンス (存在する場合) を使用する必要があります。
これらのセパレータの情報については、以下を参照してください。
XML 予約文字がセパレータでもある場合
-
文字 (& など) がセパレータでそれをリテラル文字として含めたい場合は、仮想ドキュメント形式に適用されるエスケープ・シーケンスを使用します。
-
それ以外の場合は、"XML 予約文字" で示したような XML エンティティを使用します。
数字のコード
リテラル文字列には、10 進表現または 16 進表現を含めることができます。
文字列 &#n; は Unicode 文字を表します (n は Unicode 文字の 10 進数)。例えば、é は、揚音アクセント符号付きのラテン文字 e (é) を表します。
また、文字列 &#xh; も Unicode 文字を表します (h は 16 進の Unicode 文字番号)。例えば、¿ は逆さの疑問符 (¿) を表します。
有効な式
値をプロパティに代入するときに、BPL プロセス用に選択した言語で式を指定できます。式は、<if> アクティビティの条件、<trace> アクティビティ内の値、<code> アクティビティ内の文などの他の場所でも使用します。
有効なすべての式を以下に示します。
-
前節 で説明したリテラル値。
-
関数コール (InterSystems IRIS はビジネス・ルールやデータ変換で使用するための一連のユーティリティ関数を提供しています。詳細は、"プロダクションで使用するユーティリティ関数" を参照してください)。
-
"プロパティへの参照" で説明したプロパティへの参照。
-
BPL プロセス用に選択したスクリプティング言語の構文を使用してこれらを組み合わせた式。以下に留意してください。
-
ObjectScript の場合、連結演算子は、以下のように _ (アンダースコア) 文字です。
value='"prefix"_source.{MSH:ReceivingApplication}_"suffix"'
-
$CHAR や $PIECE などの便利な ObjectScript 文字列関数については、"ObjectScript リファレンス" を参照してください。
-
概要は、"ObjectScript の使用法" を参照してください。
-
間接指定
InterSystems IRIS では、以下に示す BPL 要素と属性の組み合わせについてのみ、値を間接的に指定できます。
アット・マーク記号 @ は間接演算子です。
例えば、<call> 要素では、name 属性または target 属性の値を間接指定できます。name は呼び出しを識別し、その後、<sync> 要素で参照できます。target は、要求の送信先であるビジネス・オペレーションまたはビジネス・プロセスの構成名です。どちらの文字列もリテラル値にすることができます。
<call name="Call" target="MyApp.MyOperation" async="1">
また、次のように @ 間接演算子を使用して、適切な文字列を含むコンテキスト変数の値にアクセスすることもできます。
<call name="@context.nextCallName" target="@context.nextBusinessHost" async="1">
@ 間接構文の詳細は、"<call>"、"<sync>"、および "<transform>" を参照してください。
BPL と DTL は多くの点で似ていますが、DTL は間接指定をサポートしていません。