Menu Close

第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) を押します。

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

    Mapping Details パネルの Sources に、デフォルトの多重変換である Concatenate が表示されます。これは、マッピングの実行により、Concatenate 変換が指定のソースフィールドの値に適用され、連結された値を指定のターゲットフィールドにマップすることを意味します。

    注記

    複数のソース値に適用できるその他の変換に関する情報は「1 つのターゲットフィールドにマップする前の複数のソース値の変換」を参照してください。

    また、Sources に選択した各ソースフィールドのエントリーがあります。

  3. Mapping Details パネルで、以下のようにマッピングを設定します。

    1. SourcesDelimiter フィールドで、異なるソースフィールドからのコンテンツの間に挿入される文字を指定または選択します。デフォルトは空白文字です。
    2. 任意設定。ソースフィールドエントリーごとに、Add Transformation をクリックすると、ソースフィールドがターゲットフィールドにマップされる前に変換をソースフィールド値に適用することができます。
    3. Sources で、選択したソースフィールドのエントリーの順番を確認します。エントリーの順番は、複合ターゲットフィールドの対応するコンテンツと同じである必要があります。

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

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

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

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

    5. 任意設定。TargetsAdd Transformation をクリックし、内容をターゲットフィールドにマップし、変換を適用します。
  4. 必要に応じて、データマッピングの結果をプレビューします。

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

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

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

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

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

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

その他のリソース

パディングフィールドの追加例: 1 つのソースフィールドを複数のターゲットフィールドに分割

この例は 1 対多のマッピング例ではありませんが、原理は同じです。

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

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

前提条件

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

手順

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

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

    Mapping Details パネルで以下を行います。

    • SourcesSplit が表示されます。これは、マッピングの実行によりソースフィールドの値が分割され、複数のターゲットフィールドにマップされることを意味します。
    • Targets に選択した各ターゲットフィールドのエントリーがあります。
  4. Mapping Details パネルで、以下のようにマッピングを設定します。

    1. SourcesDelimiter フィールドで、ソースフィールドの値を区切る場所を示すソースフィールドの文字を指定または選択します。デフォルトは空白文字です。
    2. 任意設定。Add Transformation をクリックすると、ソースフィールドがターゲットフィールドにマップされる前に変換をソースフィールド値に適用することができます。
    3. Targets で、選択したターゲットフィールドのエントリーの順番を確認します。エントリーの順番は、複合ソースフィールドの対応するコンテンツと同じである必要があります。ソースフィールドのコンテンツのパーツ 1 つ以上に対してターゲットフィールドを指定しなくても、問題ありません。

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

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

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

      この手順の最後にある例を参照してください。

    5. 任意設定。Add Transformation をクリックし、内容をターゲットフィールドにマップし、変換を適用します。
  5. 任意設定。データマッピングの結果をプレビューします。

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

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

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

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

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

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

1 つのフィールドを複数のフィールドに分割する例

ソースデータに 1 つのアドレスフィールドが含まれ、そのフィールドでは以下の例のようにコンマを使用してコンテンツのパーツを区切るとします。

77 Hill Street, Brooklyn, New York, United States, 12345, 6789

住所フィールドでは、コンテンツのパーツにこれらのインデックスがあります。

コンテンツインデックス

番地およびストリート名

1

2

3

国名

4

郵便番号

5

zip+4 コード

6

ターゲットデータに住所のフィールドが 4 つあるとします。

number-and-street
city
state
zip

マッピングを定義するには以下を行います。

  • ソースフィールドを選択します。
  • Mapping Details パネルの Sources セクションで、区切り文字を選択します。この例ではコンマが使用されます。
  • 4 つのターゲットフィールドを選択します。

この作業を行った後、TargetsMapping Details パネルに、選択した各ターゲットフィールドのエントリーが表示されます。例を以下に示します。

Example of initial entries .

データマッパーで表示される順にターゲットエントリーが表示されます。これはアルファベット順になります。この順番がソースフィールドの順番を反映するように変更する必要があります。この例では、ソースフィールドの city コンテンツの前に number-and-street コンテンツが含まれます。ターゲットエントリーの順序を修正するには、city インデックスフィールドを 2 に編集するか、city エントリーをドラッグして number-and-street エントリーの後になるよう配置します。結果は以下のようになります。

Example or reordered entries

ターゲットフィールドエントリーでは、インデックス番号はこのターゲットフィールドにマップされるソースフィールドのパーツを示します。インデックス値の 1 つを変更してターゲットフィールドの値を修正する必要があります。以下のターゲットフィールドを見てみましょう。

  • number-and-street: ソースフィールドの番地およびストリート名コンテンツのインデックス番号は 1 です。インデックスが 1 のソースを number-and-street ターゲットフィールドにマップするのは適切です。このターゲットエントリーに変更を加える必要はありません。
  • city: のソースフィールドの市コンテンツのインデックス番号は 2 です。このターゲットエントリーも適切です。
  • state: ソースフィールドの州コンテンツのインデックス番号は 3 です。このターゲットエントリーも適切です。
  • zip: ソースフィールドの郵便番号コンテンツのインデックス番号は 5 です。ターゲットフィールドエントリーのインデックス番号は 4 で、正しくありません。これを変更しないと、実行中にソースフィールドの国パーツが zip ターゲットフィールドにマップされます。インデックス番号を 5 に変更する必要があります。インデックス 5 のソースコンテンツを zip ターゲットフィールドにマップするよう、データマッパーに指示します。インデックスの変更後、インデックス番号が 4 のパディングフィールドがデータマッパーによって追加されます。結果は以下のようになります。

Example entries with padding

これでこのマッピングが完了します。ソースフィールドにはインデックス番号が 6 のコンテンツ (zip+4) がありますが、このデータはターゲットに必要なく、何もする必要はありません。

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

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

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

Data Type: SQL Result (Collection)

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

mapping collection

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

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

ソースフィールドが複数のコレクションで入れ子になっている場合、以下の条件の 1 つを満たすターゲットフィールドにマップできます。

  • ターゲットフィールドは、ソースフィールドと同じ数のコレクションで入れ子になっています。たとえば、以下のマッピングが許可されます。

    • /A<>/B<>/C → /D<>/E<>/F
    • /A<>/B<>/C → /G<>/H/I<>/J
  • ターゲットフィールドは 1 つのコレクションでのみ入れ子になっています。たとえば、以下のマッピングが許可されます。

    /A<>/B<>/C → /K<>/L

    この場合、データマッパーで深さ優先アルゴリズムが使用され、ソースのすべての値が反復処理されます。データマッパーによって、ソース値は発生順に単一のターゲットコレクションに配置されます。

以下のマッピングは許可されません。

/A<>/B<>/C cannot-map-to /M<>/N/O<>/P<>/Q

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

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

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

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

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

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

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

コレクションから非コレクション (多対 1) へのマッピング

コレクションフィールドから非コレクションフィールドにマップする場合、多対 1 のマッピングがデータマッパーによって認識されます。デフォルトの動作では、データマッパーによって Concatenate 変換がソースコレクションまたはソースコレクションフィールドに適用されます。デフォルトの区切り文字は空白文字です。たとえば、以下のソースコレクションについて考えてみましょう。

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

実行中、ターゲットフィールドに以下が入力されます。

Boston Paris Tokyo

別の変換を適用すると、このデフォルトの動作を変更できます。たとえば、選択する要素からのみマップするには、Item At 変換をソースに適用し、インデックスを指定します。ソースコレクションの最初の要素にある値をマップするには、インデックスに 0 を指定します。

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

非コレクションからコレクション (1 対多) へのマッピング

非コレクションソースフィールドからターゲットコレクションやコレクション要素のターゲットフィールドにマップする場合、1 対多のマッピングがデータマッパーによって認識されます。デフォルトの動作では、空白を区切り文字として使用し、ソース値を複数の値に分割して Split 変換がデータマッパーによって適用されます。実行中、それぞれの分割値がターゲットコレクションの独自の要素に挿入されます。たとえば、ソースフィールドが 4 つの値に分割される場合、ターゲットコレクションには 4 つの要素が存在します。

本リリースでは、Split 変換のみを 1 対多マッピングに適用できます。

たとえば、以下が含まれるコレクションでない cities ソースフィールドについて考えてみましょう。

Boston Paris Tokyo

このソースフィールドをターゲットコレクションまたはコレクションのターゲットフィールドにマップできます。実行中、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. 必要な場合は入力パラメーターを指定します。

      詳細は、「利用可能な変換の説明」および「1 つのターゲットフィールドにマップする前の複数のソース値の変換」を参照してください。

    たとえば、この手順と同じマッピングで 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 フィールドに何もマップしません。
  • LT(x,y) または <(x,y)

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

  • TOLOWER(string)

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

表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 つのターゲットフィールドにマップする前の複数のソース値の変換

複数のソースフィールドや、コレクションなどの複数の値が含まれるソースフィールドの値に適用できる変換があります。変換の結果はデータマッパーによってターゲットフィールドに挿入されます。以下の表は、これらの多重変換について説明しています。

多重変換説明

Add

ソースの数値を追加し、その合計をターゲットフィールドに挿入します。選択したソースフィールドまたは選択したコレクションの値は数値である必要があります。

Average

ソースの数値の平均を算出し、その算出値をターゲットフィールドに挿入します。選択したソースフィールドまたは選択したコレクションの値は数値である必要があります。

Concatenate

ソース値を結合し、その結合値をターゲットフィールドに挿入します。空白文字または他の文字を区切り文字として指定できます。区切り文字は、ターゲットフィールドのソース値の間に挿入されます。FirstNameMiddleName、および LastName などの複数のソースフィールド値を、CustomerName などの 1 つのターゲットフィールドに組み合わせるのが、この変換の一般的な使用方法です。

Contains

ソース値を評価し、指定したパラメーター値が含まれる値があるかどうかを判断します。指定のパラメーター値が含まれるソース値がある場合、true がターゲットフィールドに挿入されます。指定のパラメーター値が含まれるソース値がない場合は、false がターゲットフィールドに挿入されます。

たとえば、特定の顧客に関連するアクティビティーを追跡するとします。この場合、各コレクションメンバーに顧客情報が含まれるソースコレクションフィールドを選択します。Value パラメーターに特定のメールアドレスを指定します。コレクションで指定のメールアドレスが見つかった場合、true がターゲットフィールドに挿入されます

Count

ソース値の数をターゲットフィールドに挿入します。これは、ソースフィールドがコレクションである場合に便利です。データマッパーによって、コレクションのサイズがターゲットフィールドに挿入されます。

たとえば、アイテムオブジェクトのコレクションである Order ソースフィールドを選択するとします。Count 変換を適用すると、その Order のアイテム数がターゲットフィールドに挿入されます。

また、4 つの個別のソースフィールドを選択した場合は 4 がターゲットフィールドに挿入されます。

Divide

最初のソース値を 2 つ目のソース値で割り、その値をターゲットフィールドに挿入します。3 つ以上のソース値がある場合は、次の値で割って除算を継続します。例として、{1000, 100, 10} が含まれる numbers[] コレクションについて考えてみましょう。1000100 で割った値は 10 になります。その 1010 で割ると、値は 1 になります。1 がターゲットフィールドに挿入されます。

Format

指定したテンプレートのプレースホルダーを選択したソースフィールドの値に置き換えます。置き換え後の文字列がターゲットフィールドに挿入されます。たとえば、以下の 3 つのソースフィールドを選択したとします。

time
name
text

Format 変換を選択し、Template パラメーターに以下を指定します。

At $time, $name tweeted: $text

その結果、ターゲットフィールドは次のようになります。

At 8:00 AM, Aslan tweeted: ROAR!

これは、Java や C などのプログラミング言語で使用できるメカニズムに似ています。

Item At

選択したソースフィールドに対して、指定したインデックスの値を見つけ、その値をターゲットフィールドに挿入します。ソースフィールドは、区切り文字で区切られた複数の値が含まれるコレクションまたはフィールドである必要があります。

たとえば、選択したソースフィールドが顧客メールアドレスのコレクションであるとします。Item At 変換の選択後、0Index パラメーターフィールドに指定します。データマッパーによって、インデックス 0 の最初のメールアドレスがターゲットフィールドに挿入されます。

Maximum

ソース値を評価し、最大値をターゲットフィールドに挿入します。ソース値は数字である必要があります。

Minimum

ソース値を評価し、最小値をターゲットフィールドに挿入します。ソース値は数字である必要があります。

Multiply

最初のソース値と 2 つ目のソース値を掛けて、その値をターゲットフィールドに挿入します。3 つ以上のソース値がある場合は、次の値を掛けて乗算を継続します。例として、{10, 100, 1000} が含まれる numbers[] コレクションについて考えてみましょう。10100 を掛けた値は 1000 になります。その 10001000 で掛けた値は 1000000 になります。1000000 がターゲットフィールドに挿入されます。

Subtract

最初のソース値から 2 つ目のソース値を引き、その値をターゲットフィールドに挿入します。3 つ以上のソース値がある場合は、次の値を引いて減算を継続します。例として、{100, 90, 9} が含まれる numbers[] コレクションについて考えてみましょう。100 から 90 を引いた値は 10 になります。さらに、その 10 から 9 を引いた値は 1 になります。1 がターゲットフィールドに挿入されます。

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

データマッパーでは、以前のインテグレーションステップで提供できるソースフィールドの最大セットが表示されます。ただし、すべてのコネクションによって、表示された各ソースフィールドにデータが提供されるわけではありません。たとえば、サードパーティーアプリケーションへの変更によって、特定のフィールドにデータが提供されなくなる可能性があります。インテグレーションの作成時に、データマッピングが想定どおりに機能していないことが判明した場合は、マップするソースフィールドに予想されるデータが含まれていることを確認してください。

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