次の方法で共有


Visual Studio Code を使ってロジック アプリ ワークフローでデータを変換するマップを作成する

適用対象: Azure Logic Apps (Standard)

ロジック アプリ ワークフローで異なる XML 形式または JSON 形式を使用するメッセージを交換する場合は、"変換" する方法を指定するか、XML ドキュメント間や JSON ドキュメント間など、ソース形式からターゲット形式へとデータを変換する方法を指定する必要があります。 このタスクは、ソース スキーマとターゲットのスキーマのデータ構造の間にギャップがある場合に特に重要です。 "スキーマ" は、XML または JSON ドキュメント内のデータ要素、属性、およびデータ型を記述します。

データ構造間の変換を定義してギャップを埋めるには、ソースとターゲットのスキーマ内のデータ要素間のリレーションシップを指定するマップ (.xslt ファイル) を作成できます。 Standard ロジック アプリ プロジェクトのコンテキスト内で Azure Logic Apps (Standard) 拡張機能と共に Visual Studio Code を使用することで、マップを視覚的に作成および編集できます。 Data Mapper ツールでは、ドラッグ アンド ドロップ ジェスチャを使用したマッピングと変換の統合エクスペリエンス、式を構築するための事前構築済みの関数、マップをワークフローで使用する前に手動でテストする方法が提供されます。

マップを作成したら、ロジック アプリ プロジェクトのワークフローまたは Azure portal 内の Standard ロジック アプリ ワークフローから、そのマップを直接呼び出すことができます。 このタスクでは、Data Mapper XSLT を使用した変換という名前の Data Mapper 操作アクションをワークフローで使用することができます。

この攻略ガイドでは、空のデータ マップの作成、ソースおよびターゲット スキーマの選択、さまざまな種類のスキーマ要素間マッピングの作成、マップの保存とテストを行い、ロジック アプリ プロジェクトのワークフローからマップを呼び出す方法を示します。

制限事項と既知の問題

  • Data Mapper は、現在、Windows オペレーティング システムで実行されている Visual Studio Code でのみ機能します。

  • Data Mapper は現在、Azure portal ではなく Visual Studio Code 内でのみ使用でき、従量課金ロジック アプリ プロジェクトではなく Standard ロジック アプリ プロジェクト内からのみ使用できます。

  • Data Mapper は現在、コンマ区切り値 (.csv) ファイル形式を使用するスキーマをサポートしていません。

  • Data Mapper の Code ペインは現在読み取り専用です。

  • Data Mapper のレイアウトと項目の位置は現在自動で行われ読み取り専用です。

  • Filter 関数は、二重引用符で囲まれた数値条件を正しく処理します (例: ">=10")。 ただし、現在、この関数は、アイテム名が "= 'Pen'" かどうかのチェックなどの文字列比較では動作が一貫していません。

  • ソース スキーマとターゲット スキーマの親配列要素間のマッピングを作成すると、Mapper は配列項目要素を反復処理するループを自動的に追加します。 ただし、ソースとターゲットの配列項目要素の間のマッピングを明示的に作成する必要があります。

  • Data Mapper ツールで作成されたマップを呼び出すには、「Data Mapper XSLT を使用した変換」という名前の Data Mapper 操作アクションのみを使用できます。 他のツールによって作成されたマップの場合は、XML 変換という名前の XML 操作アクションを使用します

  • Data Mapper を使って作成したマップを Azure portal のワークフローで使うには、Standard ロジック アプリのリソースにそれを直接追加する必要があります。

  • 現在、カスタム関数はこのリリースではサポートされていません。

前提条件

  • Standard ロジック アプリ ワークフローを作成する Visual Studio Code と Azure Logic Apps (Standard) 拡張機能

    Note

    以前は個別に存在していた Data Mapper 拡張機能は、Azure Logic Apps (Standard) 拡張機能と統合されました。 競合を回避するため、Azure Logic Apps (Standard) 拡張機能をインストールまたは更新すると、Data Mapper 拡張機能の既存のバージョンはすべて削除されます。 拡張機能のインストールまたは更新後、Visual Studio Code を再起動してください。

  • 変換するデータ型を記述するソースとターゲットのスキーマ ファイル。 これらのファイルには、次のいずれかの形式を使用できます。

    • .xsd ファイル拡張子を持つ XML スキーマ定義ファイル
    • .json ファイル拡張子を持つ JavaScript Object Notation ファイル
  • 少なくともトリガーを持つステートフルまたはステートレス ワークフローを含む Standard ロジック アプリ プロジェクト。 プロジェクトがない場合は、Visual Studio Code で次の手順に従います。

    1. Azure アカウントに接続します (またしていない場合)。

    2. ローカル フォルダー、ローカル Standard ロジック アプリ プロジェクト、ステートフルまたはステートレス ワークフローを作成します。 ワークフローの作成時に、[現在のウィンドウで開く] を選択します。

  • マップをテストし、変換が期待どおりに動作することを確認する場合は、サンプルの入力データ。

  • Run XSLT 関数を使うには、XSLT スニペットが、ファイル名拡張子 .xml または .xslt のいずれかのファイルに存在する必要があります。 XSLT スニペットは、ローカル プロジェクト フォルダー構造の InlineXslt フォルダー (Artifacts>DataMapper>Extensions>InlineXslt) に配置する必要があります。 このフォルダー構造が存在しない場合は、不足しているフォルダーを作成します。

データ マップを作成する

  1. Visual Studio Code で、Standard ロジック アプリ プロジェクトのフォルダーを開きます。

  2. Visual Studio Code の左側のメニューで、Azure アイコンを選択します。

  3. Azure ウィンドウの Data Mapper で、[データ マップの作成] を選択します。

    スクリーンショットには、Azure ウィンドウと [データ マップの作成] ボタンが選択されている Visual Studio Code をが示されています。

    Visual Studio Code のタイトル バーにプロンプト ボックスが開きます。そこでマップの名前を指定できます。

  4. プロンプト ボックスに、データ マップ名を入力します。

    このガイドでは、これらの手順で名前「Example-data-map」を使用します。

    スクリーンショットには、プロンプト ボックスとデータ マップ名の例が示されています。

    Data Mapper は、空のデータ マップを作成し開きます。

  5. 次の手順に従って、ソースおよびターゲット スキーマを選択します。

    1. [ソース] ペインで、 [新規追加]>[参照] を選択して、ソース スキーマを検索してアップロードします。

      スクリーンショットは、[新規追加] と [参照] のオプションが選択された Data Mapper と [ソース] ペインを示しています。

      ソース スキーマを追加すると、[ソース] ペインに、ソース スキーマ内のデータ型の XML 要素 "nodes" が設定されます。次に例を示します。

      スクリーンショットには、ソース スキーマの XML 要素ノードが設定された [ソース] ペインが示されています。

    2. [変換先] ペインで、[新規追加>[参照] を選択して、ターゲット スキーマを検索してアップロードします。

      スクリーンショットには、[新規追加] と [参照] のオプションが選択されている Data Mapper と [変換先] ペインが示されています。

      ターゲット スキーマを追加すると、[変換先] ペインに、ターゲット スキーマ内のデータ型の XML 要素 "nodes" が設定されます。次に例を示します。

      スクリーンショットには、ソース スキーマの XML 要素ノードが設定された [変換先] ペインが示されています。

ヒント

スキーマの読み込みに問題が発生した場合は、ソースとターゲットのスキーマ ファイルをロジック アプリ プロジェクトの [Artifacts]/[スキーマ] フォルダーにローカルに追加できます。 このシナリオでは、Data Mapper でソース スキーマとターゲット スキーマを指定するには、[ソース][変換先] ペインで、[新規追加] を使用するのではなく、[既存の一覧] を開き、スキーマを選択します。

スキーマ データ型

次の表では、スキーマに表示される可能性のあるデータ型について説明します。

Symbol 詳細情報
配列データ型を表すアイコン。 Complex (配列) 項目または繰り返し項目ノードを含む。

配列要素には、次の接続ポイントも表示されます。

配列要素の接続ポイントのアイコン。
bool データ型を表すアイコン。 Bool True または False のみ
複合データ型を表すアイコン。 Complex オブジェクト JSON 型に似た子プロパティを持つ XML オブジェクト
datetime データ型を表すアイコン。 DateTime
decimal データ型を表すアイコン。 Decimal
整数データ型を表すアイコン。 Integer 整数のみ
文字列データ型を表すアイコン。 String

要素間の直接マッピングを作成する

ソースおよびターゲット スキーマの同じ型の要素間での簡単な変換を指定するには、次の手順に従います。

  1. マッピングを作成する際のコードの動作を確認するには、Mapper の右上隅にある [コードの表示] を選択します。

  2. Mapper 画面の [ソース] ペインで、マップするソース要素を見つけます。

    • 既定では、親要素は自動的に展開され、子が表示されます。

    • 次の使用例は、ソース要素からマッピングを開始しますが、ターゲット要素からマッピングを開始することもできます。

  3. ポインターがプラス記号 (+) に変わるまで、ソース要素名の横にある円の上にマウス ポインターを移動します。

    この例では、Employee ID ソース要素から開始するマッピングを作成します。

    スクリーンショットには、ソース要素の上にポインターを置いた Data Mapper が示されています

  4. [変換先] ペインでソース要素がターゲット要素の円に接続されるように、線をドラッグして描画します。

    この例では、ソース要素と同じデータ型を持つ ID ターゲット要素とのマッピングを完了します。

    スクリーンショットには、Data Mapper、ターゲット要素上のポインター、ソース要素とターゲット要素の間の線が示されています。

    これで、同じデータ型を持つ両方の要素間の直接マッピングが作成されました。

    スクリーンショットには、ソース スキーマとターゲット スキーマの EmployeeID と ID の完全なマッピングが示されています。

    [コード] ペインには、作成したマッピング関係が表示されます。

    スクリーンショットには、ソースおよびターゲット スキーマ内のそれぞれ EmployeeID と ID の間の直接マッピングが表示された [コード] ペインが示されています。

    ヒント

    マッピングに問題があるかどうかを確認するには、[イシューの表示]を選択します。 たとえば、データ型が一致しない要素間のマッピングを作成すると、[警告] タブの [イシュー] リストに警告が表示されます。

    スクリーンショットには、一致しないデータ型間のマッピングが示されています。

要素間の複雑なマッピングを作成する

結合する要素や異なるデータ型を持つ要素など、ソース スキーマとターゲット スキーマの要素間のより複雑な変換を指定するには、1 つ以上の 関数 を使用してマッピングで必要な変換を実行できます。

Mapper 画面では、関数ラベルは関数グループに基づいて色分けされます。 関数名の横に、関数のシンボルが表示されます。次に例を示します。

スクリーンショットには、関数ラベルの例が示されています。

次の表に、使用可能な関数グループと関数の例を示します。 完全な一覧については、Data Mapper の [関数] の一覧を参照してください。

グループ 関数の例
コレクション Average、Count、Direct Access、Distinct 値、Filter、Index、Join、Maximum、Minimum、Reverse、Sort、Subsequence、Sum
Conversion To Date、To Integer、To Number、To String
日付と時刻 Add Days、Current Date、Current Time、Equals Date
論理比較 Equal、Exists、Greater、Greater or equal、If、If Else、Is Nil、Is Null、Is Number、Is String、Less、Less or Equal、Logical AND、Logical NOT、Logical OR、Not Equal
計算 Absolute、Add、Arctangent、Ceiling、Cosine、Divide、Exponential、Exponential (base 10)、Floor、Integer Divide、Log、Log (base 10)、Module、Multiply、Power、Round、Sine、Square Root、Subtract、Tangent
String Codepoints to String、Concat、Contains、Ends with、Length、Lowercase、Name、Regular Expression Matches、Regular Expression Replace、Replace、Starts with、String to Codepoints、Substring、Substring after、Substring before、Trim、Trim Left、Trim Right、Uppercase
Utility Copy、Error、Execute XPath、Format DateTime、Format Number、Run XSLT

マッピングなしで関数を追加する

このセクションの例では、ソース要素のデータを文字列からターゲット要素型である日付/時刻に変換します。 この例では、最初にマッピングを作成せずに開始し、1 つの入力を受け入れる To Date 関数を使用します。

  1. マッピングを作成する際のコードの動作を確認するには、Mapper の右上隅にある [コードの表示] を選択します。

  2. 関数の一覧から、使用する関数を見つけて選択すると、Mapper 画面にその関数が追加されます。 関数の一覧が折りたたまれている場合は、Mapper の左上隅にある関数アイコン (関数の一覧のアイコン。) を選択します。

    次の使用例では、Conversion 関数グループにある To Date 関数を選択します。

    スクリーンショットには、To Date という名前の選択した関数が示されています。

    Note

    マップ上にマッピングが存在しない場合、またはマップに関数を追加するときにマッピングが選択されている場合、関数は表示されますが、要素やその他の関数には接続されません。次に例を示します。

    スクリーンショットには、To Date という名前の接続されていない関数が示されています。

  3. 関数をソースおよびターゲット要素に接続します。

    1. ドラッグして、ソース要素と関数の左端の間に線を描画します。 ソース要素または関数のいずれからも開始できます。

      スクリーンショットには、ソース要素と関数の間のマッピングが示されています。

    2. 関数の右端とターゲット要素の間に線をドラッグして描画します。 ターゲット要素からでも関数からでも開始できます。

      スクリーンショットには、関数とターゲット要素の間のマッピングが示されています。

    [コード] ペインには、作成したマッピング関係が表示されます。

    スクリーンショットには、ソースおよびターゲット要素の間の直接マッピング リレーションシップが表示された [コード] ペインが示されています。

  4. Mapper 画面で、関数の図形を選択して関数の詳細を表示します。

  5. [入力] タブで、使用する入力を確認または編集します。

    スクリーンショットには、To Date という名前の関数の [入力] タブが示されています。

    一部のシナリオでは、ソース要素とターゲット要素の直接のペアを超えて変換を定義する必要があります。 たとえば、配列のペアとその項目の間の変換を定義するには、配列間にループを作成する必要があります。 要素の値が条件を満たすときにタスクを実行するには、要素間に条件を追加する必要があります。

複数の入力を使用する関数を追加する

このセクションの例では、複数のソース要素を入力として連結し、1 つの出力をターゲット要素にマップします。 この例では、複数の入力を受け取る Concat 関数を使用します。

  1. マッピングを作成する際のコードの動作を確認するには、Mapper の右上隅にある [コードの表示] を選択します。

  2. 関数の一覧から、使用する関数を見つけて選択すると、Mapper 画面にその関数が追加されます。

    関数の一覧が折りたたまれている場合は、Mapper の左上隅にある関数アイコン (関数の一覧のアイコン。) を選択します。

    次の使用例は、String 関数グループ内にある Concat 関数を選択します。

    スクリーンショットには、Concat という名前の選択した関数が示されています。

    Note

    マップ上にマッピングが存在しない場合、またはマップに関数を追加するときにマッピングが選択されている場合、関数は表示されますが、要素やその他の関数には接続されません。次に例を示します。

    スクリーンショットには、Concat という名前の接続されていない関数が示されています。

  3. Mapper 画面で、関数の図形を選択して関数の詳細を表示します。

  4. [入力] タブで、入力として使用するソース スキーマ要素を選択します。

    次の使用例は、FirstName および LastName ソース スキーマ要素を関数の入力として選択します。 Mapper は、それぞれについてソース要素と関数の間に対応するマッピングを自動的に追加します。

    スクリーンショットには、複数のソース要素が関数入力として示されています。

  5. マッピングを完了するには、関数の右端とターゲット要素の間に線をドラッグして描画します。 ターゲット要素または関数のいずれからでも開始できます。

    スクリーンショットには、複数の入力、Concat 関数、およびターゲット要素間の完了したマッピングが示されています。

    [コード] ペインには、作成したマッピング リレーションシップが表示されます。

    スクリーンショットには、複数の入力と 1 つの出力を持つ Concat 関数を含む [コード] ペインが示されています。

配列を反復処理する

ソース スキーマとターゲット スキーマに配列が含まれている場合は、配列の項目を反復処理するループを作成できます。 このセクションの例では、Employee ソース配列と Person ターゲット配列を処理するループを作成し、配列の項目間のマッピングを作成します。

  1. マッピングを作成する際のコードの動作を確認するには、Mapper の右上隅にある [コードの表示] を選択します。

  2. Mapper 画面の [ソース][変換先] のペインで、マップする配列を見つけます。

  3. 配列項目のペアの間に線をドラッグして描画します。 [ソース] ペインまたは [変換先] ペインのいずれからも開始できます。

    次の例では、[ソース] ペインから開始し、Employee ソース配列と Person ターゲット配列の Name 項目をマップします。

    スクリーンショットは、Mapper 画面を示し、ソースの Employee 配列とターゲット Person 配列の Name 項目の間のマッピングを描画しています。

    配列項目の最初のペアのマッピングが完了すると、Mapper は、次の接続ポイントの種類を持つソースとターゲットの配列の親要素の間にループを自動的に追加します。完了した接続ポイントを持つ配列要素のアイコン。

    次の例では、ソース Employee とターゲット Person の親配列の間に自動的に追加されたループが強調表示されています。

    スクリーンショットには、ソース Employee とターゲット Person の親配列の間のマッピングを行うループが示されています。

    [コード] ペインには、作成したマッピングとループが表示されます。

    スクリーンショットには、ソースとターゲットの親配列と配列項目の間のマッピングを行うループが表示された [コード] ペインが示されています。

  4. 引き続き他の配列要素をマッピングします。次に例を示します。

    スクリーンショットには、ソース配列とターゲット配列内の他の配列項目間のマッピングがさらに示されています。

タスクを実行する条件を評価する

条件を評価し、条件が満たされたときにタスクを実行するマッピングを追加したいとします。 このシナリオでは、複数の関数を使用できます。

次の例では、購入数量が 20 品目を超えると、マッピングは次の関数を使用して適用する割引を計算します。

関数グループ 機能 この例の目的
比較 より大きい 購入数量が 20 を超えているかどうかを確認します。
比較 次の場合 Greater 関数で true が返されるかどうかを確認します。
計算 Multiply 条件が true の場合は、品目価格に 10% を掛けて割引を計算します。
  1. [ソース][変換先] のペインで、自分のシナリオでマップする要素を見つけます。

    この例では、次のメトリックを使用します。

    • [ソース] ペイン: ItemPriceItemQuantity

    • [変換先] ペイン: ItemPriceItemQuantity、および ItemDiscount

      スクリーンショットには、例の条件シナリオのための Mapper 画面とデータ要素が示されています。

  2. 関数の一覧から、使用する関数を見つけて選択すると、Mapper 画面にその関数が追加されます。

    • 関数の一覧が折りたたまれている場合は、Mapper の左上隅にある関数アイコン ([関数] ペインのアイコン。) を選択します。

    • 必要に応じて、Mapper 画面上で関数図形を移動して、選択しやすくします。

    この例では、Mapper 画面に次の関数を追加します: GreaterIf、および Multiply

    スクリーンショットには、例の条件シナリオのための Mapper 画面、データ要素、および関数が示されています。

  3. マッピングを作成する際のコードの動作を確認するには、Mapper の右上隅にある [コードの表示] を選択します。

  4. 自分のシナリオに必要な特定の順序でソース要素、関数、およびターゲット要素を接続します。

    この例では、マッピングを正しく作成するために、指定した順序で次の項目を接続します。

    スタート End キー
    ItemPrice ソース要素 ItemPrice ターゲット要素
    ItemQuantity ソース要素 Greater 関数の入力 (図形の左端)。 この入力は、関数の詳細の Value 1 フィールドのデータを提供します。
    Greater 関数の出力 (図形の右端) If 関数の入力 (図形の左端)。 この入力は、関数の詳細の Condition フィールドのデータを提供します。
    ItemPrice ソース要素 Multiply 関数の入力 (図形の左端)。 この入力は、関数の詳細の Multiplicand フィールドのデータを提供します。
    Multiply 関数の出力 (図形の右端)。 If 関数の入力 (図形の左端)。 この入力は、関数の詳細の Value フィールドのデータを提供します。
    If 関数の出力 (図形の右端)。 ItemDiscount ターゲット要素

    次の例は、この時点でのマッピングを示しています。

    スクリーンショットには、例の条件シナリオのための Mapper 画面、データ要素、および関数とマッピングが示されています。

  5. [入力] タブの次の関数の詳細で、次の値を確認または指定します。

    機能 入力フィールドと値
    より大きい - Value 1: ItemQuantity ソース要素
    - Value 2: カスタム値として 20
    Multiply - Multiplicand 1: ItemPrice ソース要素
    - Multiplicand 2: カスタム値として .10
    次の場合 - Condition: is-greater-than (ItemQuantity, 20)
    - : multiply(ItemPrice, .10)

    完成した例を次のマップに示します。

    スクリーンショットには、完成した条件の例が示されています。

    [コード] ペインには、作成したマッピングが表示されます。

    スクリーンショットには、[コード] ペインが示されています。Greater、If、Multiply の各関数を使用したソースおよびターゲット要素の間の条件付きのマッピングが表示されています。

マップを保存する

完了したら、マップ ツール バーで [保存] を選択します。

Visual Studio Code では、マップは次の成果物として保存されます。

  • Artifacts>MapDefinitions プロジェクト フォルダー内の <your-map-name>.yml ファイル
  • Artifacts>Maps プロジェクト フォルダー内の <your-map-name>.xslt ファイル

マップをテストする

変換が期待どおりに動作することを確認するには、サンプル入力データが必要です。

  1. マップをテストする前に、マップを保存して、現在の <your-map-name>.xslt ファイルを生成します

  2. マップ ツール バーで、[テスト パネルを開く] を選択します。

  3. [マップのテスト] ペインの [サンプル データ] ボックスにサンプル入力を貼り付け、[テスト] を選択します。

    [結果] ボックスにテスト結果が表示されます。

プロジェクト内のワークフローからマップを呼び出す

  1. Visual Studio Code のアクティビティ バーで、[エクスプローラー] (ファイル アイコン) を選択して、ロジック アプリのプロジェクト構造を表示します。

  2. ワークフロー名を持つフォルダーを展開します。 workflow.json ファイルのショートカット メニューから、[デザイナーを開く] を選択します。

  3. ワークフロー デザイナーで、この一般的な手順に従って、Data Mapper XSLT を使用した変換という名前の Data Mapper 操作組み込みアクションを追加します

  4. デザイナーで、[Data Mapper XSLT を使用した変換] アクションを選びます。

  5. 表示されるアクション情報ペインで、[コンテンツ] の値を指定し、[ソースのマップ][ロジック アプリ] に設定したままにします。

  6. マップ名 一覧を開き、マップ (.xslt ファイル) を選択します。

    Data Mapper XSLT とアクション プロパティを使用した Transform という名前のアクションが選択されている Visual Studio Code、標準ワークフロー デザイナーを示すスクリーンショット。

    Azure portal で同じ [Data Mapper XSLT を使用した変換] アクションを使うには、マップを Standard ロジック アプリ リソースに追加する必要があります。