7.14. 条件のマッピングへの適用

インテグレーションによっては、条件処理をマッピングに追加すると便利なものがあります。たとえば、ソースの zip コードフィールドに、ターゲットの zip コードフィールドをマッピングすると仮定し、ソースの zip コードフィールドが空白の場合には、ターゲットのフィールドに 99999 と入力することにします。これを実行するには、ソースの zip コードフィールドをテストして、空かどうかを判断するための式を指定し、空の場合は 99999 をターゲットの zip コードフィールドにマップします。

重要

条件のマッピングへの適用はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能により、近日発表予定の製品機能をリリースに先駆けてご提供でき、お客様は開発プロセス時に機能をテストして、フィードバックをお寄せいただくことができます。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、https://access.redhat.com/ja/support/offerings/techpreview を参照してください。

データマッパーがサポートする式は Microsoft Excel の式と似ていますが、Microsoft Excel のすべての式構文をサポートしていません。条件式は、個別のフィールド、またはコレクションにあるフィールドを参照できます。

各マッピングには 1 つの条件を定義でき、条件を定義しないことも可能です。

以下の手順は、条件をマッピングに適用できるようにします。

注記: 条件をマッピングに追加した後、Source および Target の変換オプションが無効になります。変換を条件式内に追加する必要があります。

前提条件

  • データマッパー ステップでフィールドをマッピングします。
  • Microsoft Excel 式に詳しいか、マッピングに適用する条件付きの式がある必要があります。

手順

  1. データタイプが表示されない場合は、 Show/hide types icon をクリックして表示します。

    これは、条件を指定するための要件ではありませんが、データタイプを表示すると便利です。

  2. 条件を適用するマッピングを作成するか、現在選択しているマッピングが条件を適用するマッピングであることを確認します。たとえば、以下のマッピングについて考えてみましょう。

    lastName and firstName map to customerName

  3. 左上の the Add expression icon をクリックして条件式入力フィールドを表示します。

    データマッパーは、式フィールドに現在のマッピングにあるソースフィールドの名前を自動的に表示します。以下に例を示します。

    lastName + firstName

    式入力フィールドでは、ソースフィールドの順序は、マッピングの作成時に選択した順序になります。これは、データマッパーがこの順序でフィールド値を連結し、結果をターゲットフィールドに挿入するのがデフォルトのマッピング動作であるため、重要になります。この例では、このマッピングの作成では、最初に lastName が選択されてから firstName が選択されます。

  4. 式入力フィールドを編集して、データマッパーがマッピングに適用する条件式を指定します。サポートされる条件式の詳細は、次の手順に従います。

    条件マッピングに変換を含める場合は、条件式に変換を追加する必要があります。

    式を指定するときに、@ と入力してからフィールドの名前を入力します。データマッパーは入力内容に一致するフィールドのリストを表示します。式に指定するフィールドを選択します。

    フィールド名を式に追加するとき、データマッパーはそのフィールドをマッピングに追加します。たとえば、以下の条件式について考えてみましょう。

    if(ISEMPTY(lastName)

    実行中、データマッパーによって lastName が空であると判断されると、firstname フィールドのみを firstName フィールドのみをターゲット customerName フィールドにマップします。lastName フィールドに値が含まれ、空でない場合、データマッパーはソースの orderId および phone フィールドの値を連結し、結果を customerName フィールドに挿入します。(以下の例は論理の仕組みを示していますが、lastName フィールドに値があるときは、データマッパーと使って単にマッピングを実行し、他の値をターゲットにマップしない可能性が高いため、実践的な例とは言えません。)

    この例では、式の入力後にデータマッピングは次のようになります。

    lastName firstName orderId phone are mapped to customerName

    条件式で式が適用されるマッピングにあるフィールド名を削除すると、データマッパーはそのフィールドをマッピングから削除します。つまり、マッピングのすべてのフィールド名は条件式にある必要があります。

  5. マッピングプレビューフィールドが表示されていない場合は、 the Show/Hide Preview Mapping icon をクリックして表示します。
  6. ソースのプレビュー入力フィールドにサンプルデータを入力して、ターゲットフィールドが正しい値であることを確認します。
  7. オプションで、変換を適用する各フィールドの横にある the Transformation icon をクリックして、選択したマッピングの 1 つ以上のソースフィールドまたはターゲットフィールドに変換を適用し、プルダウンメニューから目的の変換を選択します。

    たとえば、この手順と同じマッピングで Mapping Details パネルにて Uppercase 変換を firstName フィールドに適用できます。これをテストするには、firstName フィールドのプレビュー入力フィールドにデータを入力します。

  8. 必要に応じて条件式を編集して、目的の結果を取得します。

条件式でサポートされる関数

  • SELECT(FILTER(source-collection-name, source-field-name1 != 'v1' ), source-field-name2)

    複数のフィールドを持つコレクションの場合、データマッパーは、(同じコレクション内の) 別のソースフィールドの値に基づいて、1 つのソースフィールドの値をフィルタリングします。たとえば、コレクション (person) に name および gender を含む複数のフィールドが含まれている場合は、次の条件式を使用して、gender フィールドの値で name をフィルター処理し、男性の名前のみがターゲットフィールドにマップされるようにすることができます。

    SELECT(FILTER(person, gender = 'male' ), name)`

  • ISEMPTY(source-field-name1 [+ source-field-name2])

    ISEMPTY() 関数の結果はブール値です。条件を適用するマッピングのソースフィールドの名前である引数を最低でも 1 つ指定します。指定したソースフィールドが空の場合、ISEMPTY() 関数は true を返します。

    必要に応じて、次の例のように + (連結) 演算子を追加のフィールドと追加します。

    ISEMPTY(lastName + firstName)

    この式は、ソースフィールドの lastNamefirstName が両方空の場合に true に評価されます。

    多くの場合、 ISEMPTY() 関数は IF() 関数の最初の引数になります。

  • IF(boolean-expression, then, else)

    boolean-expression が true に評価されると、データマッパーは then を返します。boolean-expression が false に評価されると、データマッパーは else を返します。3 つの引数がすべて必要です。最後の引数は null にすることができます。つまり、boolean-expression が false に評価されると何もマッピングされません。

    たとえば、ターゲット customerName フィールドの lastName および firstName を組み合わせるマッピングについて考えてみましょう。この条件式を指定できます。

    IF (ISEMPTY(lastName), firstName, lastName + ‘,' + firstName )

    実行中、データマッパーは lastName フィールドを評価します。

    • lastName フィールドが空で、 ISEMPTY(lastName) が true を返す場合、データマッパーは firstName の値のみをターゲット customerName フィールドに挿入します。
    • lastName フィールドに値が含まれ、ISEMPTY(lastName) が false を返す場合、データマッパーは firstName の値とコンマの後に lastName の値をターゲットの customerName フィールドにマップします。

      この式の 3 つ目の引数が null であった場合の動作について考えてみましょう。

      IF (ISEMPTY(lastName), firstName, null )

      実行中、データマッパーは lastName フィールドを評価します。

    • 前の例のように、lastName フィールドが空で、ISEMPTY(lastName) が true を返す場合、でデータマッパーは firstName の値のみをターゲットの customerName フィールドに挿入します。
    • しかし、3 つ目の引数が null であり、lastName フィールドに値が含まれ、ISEMPTY(lastName) が false を返す場合は、データマッパーはターゲットの customerName フィールドに何もマップしません。
  • LT(x,y) または <(x,y)

    データマッパーは x および y を評価し、小さい方の値を返します。xy はどちらも数字である必要があります。

  • TOLOWER(string)

    データマッパーは指定の文字列を小文字に変換し、返します。

表7.1 条件式でサポートされる演算子

演算子

説明

+

数値の値または連結文字列値を加算します。

-

1 つの数値を別の数値から減算します。

*

数値を乗算します。

\

数値を除算します。

&&
And

左と右のオペランドが両方 true の場合に true を返します。各オペランドは、ブール値を返す必要があります。

||
Or

左のオペランド、右のオペランド、または両方のオペランドが true の場合に true を返します。各オペランドは、ブール値を返す必要があります。

!

Not (否定)

>
Greater than

左の数値オペランドが右の数値のオペランドよりも大きい場合に true を返します。

<
Less than

左の数値オペランドが右の数値のオペランドよりも小さい場合に true を返します。

==
Equal

左の数値オペランドと右の数値のオペランドが同じ場合に true を返します。