第8章 インテグレーションデータを次のコネクションのフィールドにマッピング

ほとんどのフローでは、すでに取得または処理された不データフィールドを、フローの次のコネクションで処理できるデータフィールドにマップする必要があります。Fuse Online は、これを行うためにデータマッパーを提供します。フローで、データフィールドをマップする必要がある各場所に、データマッパーステップを追加します。データフィールドをマッピングする詳細については、以下を参照してください。

8.1. データマッピングが必要な場所を特定

Fuse Online は、フローにデータマッピングが必要な場所を示す警告アイコンを表示します。

前提条件

  • フローを作成または編集することになります。
  • フローには必要なコネクションがすべて含まれている必要があります。

手順

  1. フロービジュアライゼーションで、 Warning アイコンを見つけます。
  2. アイコンをクリックして Data Type Mismatch 通知を確認します。
  3. メッセージで Add a data mapping step をクリックし、データマッパーを表示します。

8.2. マップするデータフィールドの検索

比較的ステップの数が少ないフローでは、データフィールドのマッピングは簡単で感覚的に行うことができます。より複雑なフローや、大量のデータフィールドを処理するフローでは、データマッパーの処理方法に関する背景が分かればソースからターゲットへのマッピングがより簡単になります。

データマッパーはデータフィールドの列を 2 つ表示します。

  • Sources は、フローのこれまでのステップすべてで取得または処理されたデータフィールドの一覧です。
  • Target は、フローの次のコネクションが予期して処理できるデータフィールドの一覧です。

マップするデータフィールドを素早く検索するには、以下のいずれかを行います。

  • 検索します。

    Sources パネルと Target パネルには、それぞれに上部に検索フィールドがあります。検索フィールドが表示されていない場合は、Sources または Target パネルの右上にある Magnifying Glass をクリックします。

  • マップするフィールドの名前を入力します。

    これには、Configure Mapper ページの右上にあるプラスマークをクリックして Mapping Details パネルを表示します。Sources セクションに、ソースフィールドの名前を入力します。Target セクションに、マップ先のフィールドの名前を入力します。

  • フォルダーを展開したり折りたたんで、表示するフィールドを制限します。

    特定のステップで利用可能なデータフィールドを表示するには、そのステップのフォルダーを展開します。

    手順をフローに追加すると、ステップに番号が割り当てられ、Fuse Online がステップを処理する順番を示します。データマッパーステップを追加する場合、ステップ番号は Sources パネルと Target パネルのフォルダーラベルに表示されます。

    フォルダーラベルには、ステップによって出力されるデータタイプの名前も表示されます。Twitter、Salesforce、SQL などのアプリケーションへのコネクションでは、独自のデータタイプを定義します。Amazon S3、AMQ、AMQP、Dropbox、FTP/SFTP などのアプリケーションに接続するには、コネクションをフローに追加するときにコネクションの入力および出力タイプを定義し、コネクションが実行するアクションを選択します。データタイプを指定するときに、タイプに名前を付けます。指定したタイプ名は、データマッパーのフォルダー名として表示されます。データタイプの宣言時に説明を指定した場合は、マッパーの step フォルダーにマウスオーバーするとタイプの説明が表示されます。

8.3. 1 つのソースフィールドを 1 つのターゲットフィールドへマッピング

1 つのソースフィールドを 1 つのターゲットフィールドにマップするのがデフォルトのマッピング動作です。たとえば、Name フィールドを CustomerName フィールドにマップします。

手順

  1. Sources パネルで、マップ元となるデータフィールドをクリックします。

    ステップを展開して、提供されるデータフィールドを表示する必要がある場合があります。

    ソースフィールドが多数ある場合は、 Magnifying Glass をクリックして対象のフィールドを検索し、検索フィールドにデータフィールドの名前を入力します。

  2. Target パネルで、マップ先のデータフィールドをクリックします。

    データマッパーは、先ほど選択した 2 つのフィールドを接続する行を表示します。

  3. 必要に応じて、データマッピングの結果をプレビューします。これは、マッピングに変換を追加する場合や、マッピングにタイプ変換が必要な場合に便利です。

    1. データマッパーの右上で Editor settings をクリックし、Show Mapping Preview を選択して、ソースフィールドにテキスト入力フィールドを表示し、ターゲットフィールドに読み取り専用結果フィールドを表示します。
    2. ソースフィールドのデータ入力フィールドにテキストを入力します。
    3. このテキストボックスの外部をどこかクリックし、ターゲットフィールドの読み取り専用フィールドにマッピングの結果を表示します。
    4. 任意で、変換の結果を確認するには、Mapping Details パネルに変換を追加します。
    5. Editor settings を再度クリックし、Show Mapping Preview を選択して、プレビューフィールドを非表示にします。
  4. 任意で、マッピングが定義されていることを確認するには、右上の Grid をクリックし、定義されたマッピングを表示します。

    このビューでデータマッピングの結果をプレビューすることもできます。プレビューフィールドが表示されない場合は、 Editor settings をクリックし、Show Mapping Preview を選択します。前の手順で説明したデータを入力します。定義されたマッピングの表では、プレビューフィールドは選択したマッピングでのみ表示されます。別のマッピングのプレビューフィールドを表示するには、そのマッピングを表示します。

    Grid を再度クリックし、データフィールドパネルを表示します。

  5. 右上の Done をクリックし、データマッパーステップをインテグレーションに追加します。

代替手順

1 つのソースフィールドを 1 つのターゲットフィールドにマップする別の方法を以下に示します。

  1. Configure Mapper ページで、右上のプラスマークをクリックし、Mapping Details パネルを表示します。
  2. Sources セクションに、ソースフィールドの名前を入力します。
  3. Action セクションで、デフォルトの Map アクションを受け入れます。
  4. Target セクションで、マップ先のフィールドの名前を入力し、Enter をクリックします。

8.4. フィールドを組み合わせまたは分割する場合の不足または不必要なデータの例

データマッピングでは、ソースまたはターゲットフィールドに複合データが含まれている場合に、不足しているデータや不必要なデータを特定する必要がある可能性があります。たとえば、以下のような形式の long_address フィールドがあるとします。

number street apartment city state zip zip+4 country

long_address フィールドを numberstreetcitystate、および zip の別々のフィールドに分割するとします。これを行うには、long_address をソースフィールドとして選択し、ターゲットフィールドを選択します。次に、ソースフィールドの不要なパーツがある場所に、パディングフィールドを追加します。この例では、不要なパーツは apartmentzip+4、および country になります。

不要なパーツを特定するには、これらのパーツの順番を知っておく必要があります。順番は、複合フィールドにある内容の各パーツのインデックスを示します。たとえば、long_address フィールドには順番が付けられたパーツが 8 つあります。インデックスの各パーツの順番は次のようになり、1 で始まります。

1

number

2

street

3

apartment

4

city

5

state

6

zip

7

zip+4

8

country

データマッパーで apartmentzip+4、および country が不足していると識別するには、インデックス 3、7、および 8 にパディングフィールドを追加します。「複数のソースフィールドを 1 つのターゲットフィールドに組み合わせる」を参照してください。

numberstreetcitystate、および zip のソースフィールドを long_address ターゲットフィールドに組み合わせることにします。さらに、apartmentzip+4、および country の内容を提供するソースフィールドがないとします。データマッパーで、これらのフィールドが不足していると特定する必要があります。ここでも、インデックス 3、7、および 8 にパディングフィールドを追加します。「1 つのソースフィールドを複数のターゲットフィールドに分割」を参照してください。

8.5. 複数のソースフィールドを 1 つのターゲットフィールドに組み合わせる

データマッパーステップでは、複数のソースフィールドを 1 つの複合ターゲットフィールドに組み合わせることができます。たとえば、FirstName および LastName フィールドを CustomerName にマップできます。

前提条件

ターゲットフィールドでは、この複合フィールドの各パーツのコンテンツタイプ、コンテンツの各パーツの順番およびインデックス、および空白やコンマなどのパーツの区切り文字を知っている必要があります。「フィールドを組み合わせまたは分割する場合の不足または不必要なデータの例」を参照してください。

手順

  1. Target パネルで、複数のソースフィールドをマップするフィールドをクリックします。
  2. Sources パネルに、ターゲットフィールドにマップするフィールドが含まれるフィールドがある場合は、そのコンテナーフィールドをクリックし、含まれるすべてのフィールドをターゲットフィールドにマップします。

    各ソースフィールドを個別に選択するには、ターゲットフィールドに組み合わせる最初のフィールドをクリックします。ターゲットフィールドに組み合わせる他の各フィールドにマウスオーバーし、CTRL-Mouse1 (MacOS では CMD-Mouse1) を押します。

    作業が完了したら、各ソースフィールドからターゲットフィールドへの線が表示されるはずです。

  3. Mapping Details パネルの Separator フィールドで、データマッパーが異なるソースフィールドからのコンテンツの間に挿入する文字を許可または選択します。デフォルトは空白文字です。
  4. Mapping Details パネルの Sourcesの下にあるソースフィールドの順番が、複合ターゲットフィールドの対応するコンテンツと同じになるようにしてください。

    必要な場合は、同じ順番になるようにソースフィールドをドラッグアンドドロップします。データマッパーは新しい順番を反映するためにインデックス番号を自動的に更新します。

  5. ソースフィールドを複合ターゲットフィールドの各パーツにマップした場合は、次のステップを省略します。

    ターゲットフィールドがマップできないデータを想定する場合、Mapping Details パネルで各ソースフィールドのインデックスを編集し、複合ターゲットフィールドの対応するデータのインデックスと同じになるようにします。データマッパーは、不足しているデータを示すために、必要に応じてパディングフィールドを自動的に追加します。

    誤って余分なパディングフィールドを作成した場合は、余分なパディングフィールドのごみ箱アイコンをクリックして削除します。

  6. 必要に応じて、データマッピングの結果をプレビューします。

    1. データマッパーの右上にある Editor settings をクリックします。Show Mapping Preview を選択して、テキスト入力フィールドを現在選択しているマッピングの各ソースフィールドに表示し、読み取り専用結果フィールドを現在選択しているマッピングのターゲットフィールドに表示します。
    2. ソースデータ入力フィールドにテキストを入力します。テキストボックスの外部をクリックし、ターゲットフィールドの読み取り専用フィールドにマッピングの結果を表示します。

      ソースフィールドの順序を変更したり、マッピングに変換を追加すると、ターゲットフィールドの結果フィールドにこれが反映されます。データマッパーがエラーを検出すると、Mapping Details パネルの上部に情報メッセージが表示されます。

    3. Editor settings を再度クリックし、Show Mapping Preview を選択して、プレビューフィールドを非表示にします。

      プレビューフィールドを再表示すると、入力したデータはデータマッパーが終了するまでそのまま存在します。

  7. マッピングが適切に定義されていることを確認するには、右上の Grid をクリックし、このステップで定義されたマッピングを表示します。複数のソースフィールドの値を 1 つのターゲットフィールドに組み合わせるマッピングは次のようになります。 Combine Fields Mapping

    このビューでは、マッピングの結果をプレビューすることもできます。 Editor settings をクリックし、 Show Mapping Preview を選択して、先ほどのステップの説明どおりにテキストを入力します。プレビューフィールドは選択したマッピングのみに表示されます。表の別のマッピングをクリックして、そのプレビューフィールドを表示します。

8.6. 1 つのソースフィールドを複数のターゲットフィールドに分割

データマッパーステップでは、複合ソースフィールドを複数のターゲットフィールドに分割できます。たとえば、Name フィールドを FirstName および LastName フィールドにマップします。

前提条件

ソースフィールドでは、この複合フィールドの各パーツのコンテンツタイプ、コンテンツの各パーツの順番およびインデックス、および空白やコンマなどのパーツの区切り文字を知っている必要があります。「フィールドを組み合わせまたは分割する場合の不足または不必要なデータの例」を参照してください。

手順

  1. Sources パネルで、分割するコンテンツのあるフィールドをクリックします。
  2. Target パネルで、ソースフィールドデータを区切る最初のフィールドをクリックします。
  3. Target パネルで、ソースフィールドのデータの一部を含める追加の各ターゲットフィールドにマウスオーバーし、CTRL-Mouse1 (MacOS では CMD-Mouse1) を押して選択します。

    ターゲットフィールドの選択を終了すると、ソースフィールドから各ターゲットフィールドへの線が表示されるはずです。

  4. Mapping Details パネルの Separator フィールドで、ソースフィールドの値を区切る場所を示すソースフィールドの文字を許可または選択します。デフォルトは空白文字です。
  5. Mapping Details パネルの Targets の下にあるターゲットフィールドの順番が、複合ソースフィールドの対応するコンテンツと同じになるようにしてください。

    必要な場合は、同じ順番になるようにターゲットフィールドをドラッグアンドドロップします。データマッパーは新しい順番を反映するためにインデックス番号を自動的に更新します。

  6. 複合ソースフィールドの各パーツをターゲットフィールドにマップした場合は、次のステップを省略します。

    ソースフィールドに、不必要なデータが含まれる場合は、Mapping Details パネルで、各ターゲットフィールドのインデックスを編集して、複合ソースフィールドの対応するデータのインデックスと同じになるようにします。データマッパーは、不要なデータを示すため、必要に応じてパディングフィールドを自動的に追加します。

  7. 必要に応じて、データマッピングの結果をプレビューします。

    1. データマッパーの右上で Editor settings をクリックし、Show Mapping Preview を選択して、ソースフィールドにテキスト入力フィールドを表示し、各ターゲットフィールドに読み取り専用結果フィールドを表示します。
    2. ソースフィールドのデータ入力フィールドにテキストを入力します。フィールドのパーツの間には必ず区切り文字を入力してください。テキストボックスの外部をクリックし、ターゲットフィールドの読み取り専用フィールドにマッピングの結果を表示します。

      ターゲットフィールドの順序を変更したり、ターゲットフィールドに変換を追加すると、ターゲットフィールドの結果フィールドにこれが反映されます。データマッパーがエラーを検出すると、Mapping Details パネルの上部に情報メッセージが表示されます。

    3. Editor settings を再度クリックし、Show Mapping Preview を選択して、プレビューフィールドを非表示にします。

      プレビューフィールドを再表示すると、入力したデータはデータマッパーが終了するまでそのまま存在します。

  8. マッピングが適切に定義されていることを確認するには、 Grid をクリックし、このステップで定義されたマッピングを表示します。ソースフィールドの値を複数のターゲットフィールドに分割するマッピングは次のようになります。 Separate Fields Mapping

    このビューでは、マッピングの結果をプレビューすることもできます。 Editor settings をクリックし、 Show Mapping Preview を選択して、先ほどのステップの説明どおりにテキストを入力します。プレビューフィールドは選択したマッピングのみに表示されます。表の別のマッピングをクリックして、そのプレビューフィールドを表示します。

8.7. データマッパーを使用したコレクションの処理

フローでは、ステップがコレクションを出力し、フローの後続のコネクションはコレクションを入力として想定する場合、データマッパーを使用してフローがどのようにコレクションを処理するかを指定できます。

ステップがコレクションを出力すると、フロービジュアライゼーションはステップの詳細で Collection を表示します。以下に例を示します。

Data Type: SQL Result (Collection)

データマッパーステップを、コレクションを提供するステップの後およびマッピングを必要とするステップの前に追加します。フローでこのデータマッパーステップが必要な場所は、フローの他のステップによって異なります。以下のイメージは、ソースコレクションフィールドからターゲットコレクションフィールドへのマッピングを示しています。

mapping collection

ソースおよびターゲットパネルで、データマッパーは this icon を表示し、コレクションを示します。ソースコレクションまたはターゲットコレクションにプリミティブタイプのみが含まれる場合、データマッパーはコレクションフィールドを表示する必要がないため表示しません。コレクション自体をマップ元またはマップ先としてマップすることができます。

コレクションに複数のプリミティブタイプが含まれる場合や、複雑なタイプが 1 つ以上含まれている場合、データマッパーはコレクションの子フィールドを表示します。各フィールドをマップ元またはマップ先とすることができます。しかし、入れ子のコレクションをマップ元またはマップ先とすることはできません。

Fuse Online がフローを実行すると、ソースコレクション要素を繰り返し処理し、ターゲットコレクション要素が入力されます。1 つ以上のソースコレクションフィールドをターゲットコレクションまたはターゲットコレクションフィールドにマップする場合、ターゲットコレクション要素にはマップされたフィールドのみの値が含まれます。

ソースコレクションまたはソースコレクションのフィールドをコレクションではないターゲットフィールドにマップする場合、Fuse Online がフローを実行するときにソースコレクションの最後の要素のみから値を割り当てます。コレクションの他の要素は、そのマッピングステップで無視されます。しかし、後続のマッピングステップはソースコレクションのすべての要素にアクセスできます。

コネクションが JSON または Java ドキュメントに定義されたコレクションを返すと、データマッパーは通常コレクションとしてソースドキュメントを処理できます。

8.8. コレクションと非コレクション間のマッピング

データマッパーの Source および Target パネルには以下があります。

  • Collection icon はコレクションを示します。コレクションにプリミティブタイプが含まれる場合は、コレクションをマップ元またはマップ先として直接マッピングできます。コレクションに 2 つ以上の異なるタイプが含まれる場合、データマッパーはコレクションの子フィールドを表示し、コレクションのフィールドをマップ元またはマップ先としてマッピングできます。
  • Folder icon は、コンプレックスタイプの拡張可能なコンテナーを示します。コンプレックスタイプには、異なるタイプの複数のフィールドが含まれます。コンプレックスタイプのフィールドは、アレイなどのコレクションのタイプにすることができます。コンプレックスタイプのコンテナー自体をマップすることはできません。コンプレックスタイプにあるフィールドのみをマップできます。

データマッパーの右上にある (COMPLEX)STRING、および INTEGER などのデータタイプの表示を切り替えるには、 settings をクリックし、Show Type をクリックします。

以下の表は、コレクションフィールドとコレクション以外のフィールドとの間のマッピングにおけるデフォルトの動作を示しています。

マップ元ソースマップ先ターゲット実行中

コレクション。(データマッパーには子フィールドは表示されない)

コレクションにないフィールド。

データマッパーはソースコレクションの最後の要素にある値をターゲットフィールドにマップします。

コレクションにあるフィールド。

コレクションにないフィールド。

データマッパーは、ソースコレクションの最後の要素にあるマップされたフィールドの値をターゲットフィールドにマップします。

コレクションにないフィールド。

コレクション。(データマッパーには子フィールドは表示されない)

データマッパーは、マップされたソースフィールドの値をコレクションの最初の要素 (唯一の要素) にマップします。

コレクションにないフィールド。

コレクションにあるフィールド。

データマッパーは、マップされたソースフィールドの値をコレクションの最初の要素 (唯一の要素) にマップします。

マップしないフィールドがソースコレクションに含まれている場合、これらのフィールドはフローにある後続のステップでも使用できます。

コレクションフィールドからマップする場合のデフォルト動作の変更

コレクションフィールドからコレクションでないフィールドにマップする場合、ターゲットフィールドがその値をソースコレクションの最後の要素から取得するのがデフォルトの動作になります。このデフォルトの動作は、以下の方法で変更できます。

  • 選択する要素からマップするには、Item At 変換をソースに適用し、インデックスを指定します。たとえば、コレクションの最初の要素にある値をマップするには、インデックスに 0 を指定します。
  • ソースコレクションにあるすべての要素の値をマップするには、Concatenate 変換をソースコレクションまたはソースコレクションフィールドにマップし、必要に応じて区切り文字を指定します。デフォルトの区切り文字は空白文字です。たとえば、以下のソースコレクションについて考えてみましょう。

    • 最初の要素では、city フィールドの値は Boston です。
    • 2 つ目の要素では、city フィールドの値は Paris です。
    • 3 つ目の要素では、city フィールドの値は Tokyo です。

    実行中、データマッパーはターゲットフィールドに Boston Paris Tokyo を入力します。

コレクションでないフィールドからマップする場合のデフォルト動作の変更

コレクションでないフィールドからコレクションフィールドにマップする場合、コレクションでないソースフィールド値を持つ要素がターゲットコレクションに含まれるのがデフォルトの動作になります。ソースフィールドに同じ区切り文字で区切られた一連の値が含まれる場合、デフォルトの動作を変更できます。たとえば、以下が含まれるコレクションでないソース cities フィールドについて考えてみましょう。

Boston Paris Tokyo

これを、ターゲットコレクションまたはコレクションのターゲットフィールドにマップします。ソース cities フィールドで Split 変換を追加します。実行中、データマッパーはスペースの区切り文字で cities フィールドの値を分割します。結果として、3 つの要素が含まれる 1 つのコレクションが作成されます。最初の要素では、city フィールドの値は Bostonです。2 つ目の要素では、city フィールドの値は Paris です。3 つ目の要素では、city フィールドの値は Tokyo です。

8.9. ソースまたはターゲットデータの変換

マッピングの定義後、データマッパーでマッピングのフィールドを変換できます。データフィールドの変換は、データの格納方法を定義します。たとえば、Capitalize 変換を指定して、データ値の最初の文字が大文字になるようにすることができます。

手順

  1. フィールドをマップします。これは、1 対 1 のマッピング、組み合わせのマッピング、または分割のマッピングになります。
  2. Mapping Details パネルの Sources または Targets にある変換するフィールドのボックスで、ごみ箱を指す矢印をクリックします。データマッパーが実行する変換を選択するフィールドが表示されます。
  3. このフィールドをクリックして変換のリストを表示します。
  4. 実行する変換をクリックします。
  5. 変換に入力パラメーターが必要な場合は、該当する入力フィールドに指定します。
  6. 別の変換を追加するには、ごみ箱を指す矢印を再度クリックします。

その他のリソース

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

インテグレーションによっては、条件処理をマッピングに追加すると便利なものがあります。たとえば、ソースの 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 つの条件を定義できます。

以下の手順は、条件をマッピングに適用できるようにします。マッピングと条件に応じて、最も作業がしやすい順番で必要なステップを実行することができます。

前提条件

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

手順

  1. データタイプが表示されない場合は、 Editor settings をクリックした後、Show Types をクリックして表示します。

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

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

    lastName and firstName map to customerName

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

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

    lastName + firstName

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

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

    式を指定する際に、以下を実行できます。

    • @ を入力してフィールドの名前の入力を開始します。データマッパーは入力内容に一致するフィールドのリストを表示します。式に指定するフィールドを選択します。
    • フィールドをマッピングキャンバスから式入力フィールドにドラッグします。

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

      if(ISEMPTY(lastName)

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

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

      lastName

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

  5. マッピングプレビューフィールドが表示されていない場合は、 Editor settings をクリックした後に Show Mapping Preview をクリックして表示します。
  6. ソースのプレビュー入力フィールドにサンプルデータを入力して、ターゲットフィールドが正しい値であることを確認します。
  7. 必要に応じて、マッピングにある 1 つ以上のソースまたはターゲットフィールドに変換を適用します。

    1. Mapping Details パネルで、変換を適用するフィールドを見つけます。
    2. 下にある Add Transformation をクリックします。
    3. データマッパーが実行する変換をクリックします。
    4. 必要な場合は入力パラメーターを指定します。

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

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

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

  • 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 フィールドに何もマップしません。

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

演算子

説明

+

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

-

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

*

数値を乗算します。

\

数値を除算します。

&&
And

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

||
Or

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

!

Not (否定)

>
Greater than

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

<
Less than

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

==
Equal

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

8.11. ステップでのマッピングの表示

データマッパーステップを追加または編集する間に、このステップにすでに定義されたマッピングを表示できます。これにより、正しいマッピングがあるかどうかを確認できます。

前提条件

  • インテグレーションを作成または更新することになります。
  • データマッパーステップを追加することになります。よって、データマッパーは表示されます。

手順

  1. 右上の grid をクリックします。
  2. マッピングのリストを解除し、ソースおよびターゲットフィールドを再表示するには、 grid を再度クリックします。

8.12. 利用可能な変換の説明

以下の表では利用可能な変換について説明します。日付と時刻のタイプは、これらの概念のいずれの形式にも汎用的に参照されます。よって、数字には integerlongdouble などが含まれます。日付には dateTimeZonedDateTime などが含まれます。

変換入力タイプ出力タイプパラメーター(* = 必須)説明

AbsoluteValue

number

number

なし

数字の絶対値を返します。

AddDays

date

date

days

日付に日を追加します。デフォルトは 0 日です。

AddSeconds

date

date

seconds

日付に秒数を追加します。デフォルトは 0 秒です。

Append

文字列

文字列

文字列

文字列の最後に文字列を追加します。デフォルトでは、何も追加しません。

Camelize

文字列

文字列

なし

空白を削除し、最初の単語を小文字にし、その後の各単語の最初の文字を大文字にして、キャメルケースを用いた文字列に変換します。

Capitalize

文字列

文字列

なし

文字列の最初の文字を大文字にします。

Ceiling

number

number

なし

数字の整数上限を返します。

Contains

any

ブール値

value

フィールドに指定された値が含まれる場合、true を返します。

ConvertAreaUnit

number

number

fromUnit*

toUnit *

範囲を表す数値を別の単位に変換します。From Unit および To Unit メニューから fromUnit および toUnit パラメーターに適した単位を選択します。Square FootSquare Meter、または Square Mile を選択できます。

ConvertDistanceUnit

number

number

fromUnit *

toUnit *

距離を表す数値を別の単位に変換します。From Unit および To Unit メニューから fromUnit および toUnit パラメーターに適した単位を選択します。FootInchMeterMile、または Yard を選択できます。

ConvertMassUnit

number

number

fromUnit *

toUnit *

質量を表す数値を別の単位に変換します。From Unit および To Unit メニューから fromUnit および toUnit パラメーターに適した単位を選択します。Kilogram または Pound を選択できます。

ConvertVolumeUnit

number

number

fromUnit *

toUnit *

体積を表す数値を別の単位に変換します。From Unit および To Unit メニューから fromUnit および toUnit パラメーターに適した単位を選択します。Cubic FootCubic MeterGallon US Fluid、または Liter を選択できます。

DayOfWeek

date

number

なし

日付に対応する週 (1 から 7) を返します。

DayOfYear

date

number

なし

日付に対応する年間通算日 (1 から 366) を返します。

EndsWith

文字列

ブール値

string

文字列が指定の string で終わり、両方の文字列で大文字と小文字が同じである場合に true を返します。

Equals

any

ブール値

value

フィールドが指定の value と同等で、大文字と小文字がフィールドと値で同じ場合に true を返します。

FileExtension

文字列

文字列

なし

ファイル名を表す文字列から、ドットなしでファイル拡張子を返します。

Floor

number

number

なし

数字の整数下限を返します。

Format

any

文字列

template *

template で各プレースホルダー (%s など) を入力フィールドの値に置き換え、結果が含まれる文字列を返します。これは、Java や C などのプログラミング言語で使用できるメカニズムに似ています。

IndexOf

string
最初の文字はインデックス 0。

number

string
この文字列の入力文字列を検索します。

パラメーター文字列の最初の文字である、入力文字列の文字のインデックスを返します。パラメーター文字列が見つからないと -1 が返されます。

IsNull

any

ブール値

なし

フィールドが null の場合、true を返します。

LastIndexOf

string
最初の文字はインデックス 0。

number

string
この文字列の入力文字列を検索します。

パラメーター文字列の最後の文字である、入力文字列の文字のインデックスを返します。パラメーター文字列が見つからないと -1 が返されます。

Length

any

number

なし

フィールドの長さを返し、フィールドが null の場合は -1 を返します。

Lowercase

文字列

文字列

なし

文字列を小文字に変換します。

Normalize

文字列

文字列

なし

連続した空白文字を単一のスペースに置き換え、文字列の前後にある空白文字を切り取ります。

PadStringLeft

文字列

文字列

padCharacter *

padCount *

padCharacter に指定された文字を文字列の最初に挿入します。これを padCount に指定された回数行います。

PadStringRight

文字列

文字列

padCharacter *

padCount *

padCharacter に指定された文字を文字列の最後に挿入します。これを padCount に指定された回数行います。

Prepend

文字列

文字列

string

string を文字列の最初に追加します。デフォルトでは何も追加しません。

ReplaceAll

文字列

文字列

match *

newString

文字列で、提供された一致する文字列をすべて提供された newString に置き換えます。デフォルトの newString は空の文字列です。

ReplaceFirst

文字列

文字列

match *

newString *

文字列で、最初に見つかった指定の match 文字列を指定の newString に置き換えます。デフォルトの newString は空の文字列です。

Round

number

number

なし

数字の四捨五入した整数を返します。

SeparateByDash

文字列

文字列

なし

空白文字、コロン (:)、アンダーライン (_)、プラス記号 (+)、および等号 (=) をハイフン (-) に置き換えます。

SeparateByUnderscore

文字列

文字列

なし

空白文字、コロン (:)、ハイフン (-)、プラス記号 (+)、および等号 (=) をアンダーライン (_) に置き換えます。

StartsWith

文字列

ブール値

string

文字列が指定の文字列で始まり、両方の文字列で大文字と小文字が同じである場合に true を返します。

Substring

文字列

文字列

startIndex *

endIndex

指定された startIndex (含まれる) から指定された endIndex (含まれない) までの文字列のセグメントを取得します。両方のインデックスはゼロで始まります。startIndex は含まれます。endIndex は含まれません。endIndex のデフォルト値は文字列の長さになります。

SubstringAfter

文字列

文字列

startIndex *

endIndex

match *

指定された startIndex (範囲に含まれる) から指定された endIndex (範囲に含まれない) までの match 文字列の後にある文字列のセグメントを取得します。両方のインデックスはゼロで始まります。endIndex のデフォルト値は、指定の match 文字列の後にある文字列の長さになります。

SubstringBefore

文字列

文字列

startIndex *

endIndex

match *

指定された startIndex (範囲に含まれる) から指定された endIndex (範囲に含まれない) までの match 文字列の前にある文字列のセグメントを取得します。両方のインデックスはゼロで始まります。endIndex のデフォルト値は、指定の match 文字列の前にある文字列の長さになります。

Trim

文字列

文字列

なし

文字列の前後にある空白文字を削除します。

TrimLeft

文字列

文字列

なし

文字列の前にある空白文字を削除します。

TrimRight

文字列

文字列

なし

文字列の後にある空白文字を削除します。

Uppercase

文字列

文字列

なし

文字列を大文字に変換します。

8.13. データマッピングのトラブルシューティング

すでにマップされたフィールドに影響するデータシェイプの変更により、データマッパーがドキュメントをロードできない場合があります。このような場合、影響を受けるフィールドをマップするデータマッパーステップを編集しようとすると、データマッパーはソースおよびターゲットパネルを表示できません。その代わりに、ドキュメントのロードまたは検索が不可能であることを示すエラーが表示されます。エラーメッセージは、以下のメッセージの 1 つのようになります。

  • Data Mapper UI Initialization Error: Could not load document '-La_rwMD_ggphAW6nE9o': undefined undefined
  • Could not find document for mapped field 'last_name' at URI atlas:json:-LaX4LMC1CfVJYp3JXM6

このデータマッパーステップを削除し、更新されたフィールドをマップする新しいデータマッパーステップに置き換える必要があります。

マップされたフィールドのデータシェイプを変更するには、必ずマッピングをやり直す必要がありますが、常にデータマッパーステップを削除する必要はありません。たとえば、XML インスタンスが入力データシェイプを指定し、ユーザーが要素の名前を変更すると、データマッパーは古いフィールド名をマップ元またはマップ先とするマッピングを削除します。更新された名前でフィールドをマップ先またはマップ元としてマッピングする必要があります。

以下の方法で、マップされたフィールドのデータシェイプを変更できます。

  • API プロバイダーインテグレーションでフローの編集中に、オペレーションを定義する OpenAPI ドキュメントを編集します。

    オペレーションの応答のデータシェイプを変更すると、データマッパーがドキュメントをロードできなくなります。

  • フローでは、以下に記載されているコネクションの 1 つの入力データタイプや出力データタイプを編集します。

    • Amazon S3
    • AMQ
    • AMQP
    • Dropbox
    • FTP/SFTP
    • HTTP/HTTPS
    • Kafka
    • IRC
    • MQTT