入力 | フォーマット | すべて |
---|---|---|
接続数 | 1 | |
説明 | すべてのストリームを入力できます。 | |
出力 | フォーマット | すべて |
説明 | 入力ストリームをそのまま出力します。 |
名前 | プロパティ型 | マッピング | 説明 | ||||||
---|---|---|---|---|---|---|---|---|---|
条件式 | condition | 入力&出力 |
フローを分岐するための条件式を指定します。 条件式の記述方法は下記トピック「条件式について」を参照してください。 |
||||||
判定方法 | choice | - |
入力ストリームが複数レコードの場合の判定方法を指定します。
|
コミット | 何もしません。 |
---|---|
ロールバック | 何もしません。 |
タイプ | パラメーター | エラー処理フロー へのストリーム | エラー コード | 説明 |
---|---|---|---|---|
汎用 | 「汎用のパラメーター
」
を参照してください。 | コンポーネントの入力ストリーム | なし | 条件式が不正な場合 |
No. | 名前 | 説明 |
---|---|---|
1 | Condition | エラー発生時の条件式 の値 |
条件式を使って、入力ストリームや各種変数を判定することができます。
フロー変数やセッション変数などの変数を判定する場合、以下のようなリファレンス表記で変数やプロパティを参照することができます。
変数の種類 | リファレンス表記 |
---|---|
フロー変数 | $flow.<フロー変数名> |
外部変数セット | $exvar.<外部変数セット名>.<変数名> |
システム変数 | $system.<システム変数名>(英語名) |
ストリーム変数 | $stream.<ストリーム変数名>(英語名) |
直前のコンポーネントのプロパティ | $prev.<プロパティ名>(英語名) |
ストリーム変数ではストリームに明示的に設定された変数だけでなく、レコード件数とレコード番号も参照できます。
(レコード番号はマッパーの条件式で使用する場合は有用ですが、このコンポーネントではほとんど使用されることはありません。)
コンポーネントプロパティは表示名(インスペクタ上に表示される名前)ではなく実名(xfpファイルに保存される名前)で参照されます。入力時には直接タイプするのではなくコード補完を利用してください。
※ 入力ストリーム型がXMLのときに条件式でbool値(true/false)と比較する場合は、下記「XPath」の「bool値との比較」を参照してください。
※ 入力ストリーム型がJSONのときには注意が必要です。詳しくは、下記「JsonPath」の「JSONストリームでの変数と値の比較」を参照してください。
フロー変数の場合
$flow.var1 > 5
外部変数セットの場合
$exvar.exvar1.var1 = "MATCH"
条件式による比較は、ストリーム全体または1レコードに対して行います。
ストリームを判定する条件式の記述には、以下の4種類の記述方法のいずれかを使用します。このうち、MQLとRQLは本製品独自の記述方法です。XPathはW3C勧告のXPath仕様に準拠しています。JsonPathはJsonPath仕様に準拠しています。式の種類を特定するためのプレフィクスを式の前に記述します。プレフィクスは省略可能で、省略した場合はストリーム型がMIMEの場合はMQL、XMLの場合はXPath、JSONの場合はJsonPath、それ以外の場合はRQLで記述されたものとします。
条件式の種類 | 説明 | プレフィクス | 評価対象のストリーム型 |
---|---|---|---|
RQL | レコード形式を評価 | record: | すべてのストリーム型 |
MQL | MIME形式を評価 | mql: | MIME |
XPath | XML形式を評価 | xpath: | XML |
JsonPath | JSON形式を評価 | json: | JSON |
Binary形式の以下のデータは、これらの条件式で判定できません。
Binary型の比較を行う場合はマッパー関数の論理タブの関数群を使用してください。
変数自身を判定する以外に、入力ストリームを判定する条件式の中でも変数を参照できます。ただし、MIME形式の判定には使用できません。
RQLの場合
$record.field1 != $flow.var1
XPathの場合
/root/element1[@attr1=$exvar.exvar1.var1]
結果はtrueまたはfalseのどちらかになります。条件式に誤りがある場合はエラーとなります。また、式でなく「True」「False」の文字列を直接記述して分岐することもできます。マッパーの中で論理タブの関数を使用して演算した結果を条件式 にマッピングして、その結果で分岐することができます。
RQLはレコードに対して条件式を記述するための言語です。レコードは「$record」というキーワードで参照されレコードの各フィールドにはフィールド名またはフィールドインデックスによってアクセスします。
$record.field1 = "aaa" $record.field2 < 3
$record[0] = "aaa" $record[1]< 3 $record[*] = "bbb"
比較演算子としては以下のものが使用できます。右辺には文字列、数値、bool値(true/false)、変数のいずれかが指定できます。また、比較演算子の両側には空白文字を入れてください。
= | 等価 |
---|---|
!= | 等価ではない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
~= | を含む (※右辺が文字列の場合のみ) |
!~ | を含まない (※右辺が文字列の場合のみ) |
これらのストリームは「Object」という名前の単一フィールドをもつ単一レコードとして扱われます。つまり、以下のような式を記述できます。
$record.Object="aaa"
MQLはMIMEヘッダーに対して条件式を記述するための言語です。MQLの書式の構成は以下のようになっています。
part[0].header[xxx].attribute[yyy] = "zzz"
<パート句>.<ヘッダー句>.<属性句><比較演算子><値>
以下にそれぞれの構成要素について説明します。
条件の対象とするMIMEのパートを指定します。
条件の対象とするMIMEのヘッダーを指定します。
条件の対象とするMIMEのパラメーターを指定します。
ヘッダー句と属性句は評価の対象範囲が異なります。属性句は必要に応じて使用します。
例:以下のようなMIMEヘッダーの場合
Content-Disposition: attachment; filename="TEST.txt"
ファイル名に「TEST」という文字列が含まれているかどうかを判定するには、次のように記述します。
header[Content-Disposition].attribute[filename] ~= "TEST"
ヘッダーの評価として、次のように記述すると結果はfalseになるため、注意が必要です。
header[Content-Disposition] ~= "TEST"
ヘッダー句の評価対象にパラメーターは含まれないので、ヘッダー句の対照範囲は「attachment」という文字列に限られます。
比較演算子は、「=(等しい)」「!=(等しくない)」「~=(値を含む)」「!~(値を含まない)」が使用できます。
値は、文字列、変数、ワイルドカード(*) が使用できます。ワイルドカードが指定された場合は値のチェックは行われず指定のヘッダー(またはパラメーター)の存在のみがチェックされます。
MQLにパート句のみを指定した場合、header[*] = *が補われて評価されます。
例えば、
part[0]
という記述は、
part[0].header[*]=*
と同じです。
XPathはW3C勧告のXPath仕様に準拠しています。
入力ストリーム型がXMLの場合に条件式でbool値(true/false)と比較したいときは、明示的にRQLで比較するようにプレフィクスを記述します。例えば、条件式が「$flow.var1 = true」の場合、「record:$flow.var1 = true」のように記述します。 これは、評価対象のストリーム型がXMLの場合は条件式の種類をXPathとして処理しますが、「$flow.var1 = true」のような条件式もXPathとして処理され、コンテキストノードに「true」という要素があるかないかの結果を$flow.var1と比較すると解釈されるためです。
/root/element[@attr='test'] /root/element >= 10 /root/element != 'test'
JsonPathはJsonPath仕様(正確にはそのJava実装)に準拠しています。
JsonPath式では指定したPathに対応するNodeが存在する場合はtrue、存在しない場合はfalseと判定されます。
JsonPathでは指定したPathに対する「=」や「>」などの比較式を用いた値の比較はできません。
値の比較を行いたい場合は「$[?(@.key == $flow.var1)]」のように「[]」内の条件式で指定してください。
JsonPathで変数が参照できるのは[]
内だけです。
$.key1.key2 $[?(@.key == 'hoge')] $[0]
入力ストリーム型がJSONの場合に、条件式で単純に変数と値を比較したいときは、明示的にRQLで比較するようにプレフィクスを記述します。例えば、条件式が「$flow.var1 = "aaa"」の場合、「record:$flow.var1 = "aaa"」のように記述します。 これは、評価対象のストリーム型がJSONの場合は条件式の種類をJsonPathとして処理しますが、JsonPathでは「$flow.var1 = "aaa"」のような条件式はエラーになるためです。そこで条件式に「record:」を付けてRQLとして処理させる必要があります。