次の方法で共有


Azure Logic Apps における各種コンテンツの扱い

適用対象: Azure Logic Apps (従量課金プラン + Standard)

Azure Logic Apps では、JSON、XML、フラット ファイル、バイナリ データなどのすべてのコンテンツ タイプがサポートされています。 一部のコンテンツ タイプにはネイティブサポートがあり、キャストや変換は必要ありませんが、他のコンテンツ タイプでは必要な形式を提供するために何らかの作業が必要です。

ワークフロー内のコンテンツまたはデータを処理する最適な方法を決定するために、Azure Logic Apps では、ワークフローが外部の呼び出し元から取得する HTTP 要求で Content-Type ヘッダー値を使用します。

次の一覧には、ワークフローで発生する可能性がある Content-Type 値の例を示します。

このガイドでは、Azure Logic Apps がさまざまなコンテンツ タイプを処理する方法について説明し、必要に応じてこれらの種類を正しくキャストまたは変換する方法を示します。

application/json

Content-Type ヘッダー値が application/json である HTTP 要求の場合、Azure Logic Apps はコンテンツを JavaScript Object Notation (JSON) オブジェクトとして格納して処理します。 既定では、キャストや変換を行わずに JSON コンテンツを解析できます。 を使用して、このコンテンツを解析することもできます。

たとえば、次の式では、 body() 関数と My_action が使用されます。これは、ワークフロー内の先行アクションの JSON 名です。

body('My_action')['client']['animal-type'][0]

次の手順では、キャストや変換を行わずに式がどのように動作するかを説明します。

  1. body()関数は、body アクションからMy_action出力オブジェクトを取得します。

  2. 返された body オブジェクトから、関数は client オブジェクトにアクセスします。

    client オブジェクトには、配列に設定された animal-type プロパティが含まれています。

  3. 関数は配列内の最初の項目にアクセスし、キャストや変換を行わずに値 dog を直接返します。

Content-Type ヘッダーを使用しない JSON データを使用する場合は、json() 関数を使用してそのデータを手動で JSON に変換できます。次に例を示します。

json(triggerBody())['client']['animal-type']

  1. triggerBody()関数は、ワークフローのトリガー出力からbody オブジェクトを取得します。 通常、このオブジェクトは JSON オブジェクトです。

    body オブジェクトのソースは、ワークフロー トリガーによって受信された受信 HTTP 要求またはイベントから生成されます。

  2. json()関数は、body関数から返されたtriggerBody() オブジェクトを JSON オブジェクトとして明示的に解析します。

    この動作は、たとえば、トリガー本体が JSON としての処理を必要とする文字列である場合に便利です。

残りの式の動作は、前の例のようになります。

JSON のプロパティに使用するトークンの作成

Azure Logic Apps では、JSON コンテンツのプロパティを表すわかりやすいトークンを生成できます。 その後、これらのトークンを使用して、ワークフローでこれらのプロパティとその値をより簡単に参照できます。

次の一覧では、一般的なワークフロー操作と、JSON コンテンツ内のプロパティのトークンを生成できる対応する方法について説明します。

  • HTTP 要求が受信されたときという名前のトリガー请求

    要求トリガーを使用してデザイナーで作業する場合は、必要に応じて、各プロパティ値の JSON オブジェクト、プロパティ、および予想されるデータ型を定義する JSON スキーマを指定できます。 JSON スキーマがない場合は、使用できる JSON スキーマを生成するペイロードの例を指定できます。

    トリガーでは、スキーマを使用して受信 HTTP 要求からの JSON コンテンツを解析し、JSON コンテンツのプロパティを表すトークンを生成します。 その後、ワークフロー内の後続のアクションで、これらのプロパティとその値を簡単に参照して使用できます。

    次の手順では、JSON スキーマを生成するペイロードの例を指定する方法について説明します。

    1. デザイナーで、[ 要求 ] トリガーを選択して情報ウィンドウを開きます。

    2. [ パラメーター ] タブの [ 要求本文の JSON スキーマ ] ボックスで、[ サンプル ペイロードを使用してスキーマを生成する] を選択します。

    3. [ サンプル JSON ペイロードの入力または貼り付け ] ボックスにサンプル ペイロードを入力し、[ 完了] を選択します。

      HTTP 要求の受信時という名前の要求トリガーとサンプル JSON ペイロードを示すスクリーンショット。

      生成されたスキーマがトリガーに表示されます。

      サンプル JSON ペイロードから生成された JSON スキーマを示すスクリーンショット。

      コード ビュー エディターでは、 要求 トリガーの基になる JSON 定義を確認できます。

      "triggers": { 
         "When_an_HTTP_request_is_received": {
            "type": "Request",
            "kind": "Http",
            "inputs": { 
               "schema": {
                  "type": "object",
                  "properties": {
                     "client": {
                        "type": "object",
                        "properties": {
                           "animal-type": {
                              "type": "array",
                              "items": {
                                 "type": "string"
                              },
                           },
                           "name": {
                              "type": "string"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    4. ワークフローをトリガーするには、 ワークフロー URL またはトリガーの HTTP URL を取得します。これは、ワークフローを初めて保存した後に生成されます。

    5. ワークフローをテストするには、HTTP 要求をワークフロー URL またはトリガー URL に送信できるクライアント ツールまたはアプリを使用します。 要求に Content-Type という名前のヘッダーが含まれており、ヘッダー値が application/json に設定されていることを確認します。

  • Parse JSON アクション

    デザイナーでこのアクションを使用すると、JSON 出力を解析し、JSON コンテンツのプロパティを表すわかりやすいトークンを生成できます。 その後、ロジック アプリのワークフローの至る所で、これらのプロパティを簡単に参照して使用することができます。

    要求トリガーと同様、解析したい JSON コンテンツの JSON スキーマを指定または生成することができます。 これにより、Azure Service Bus や Azure Cosmos DB などのデータが利用しやすくなります。

    サンプルから生成されたスキーマを含む JSON の解析アクションを示すスクリーンショット。

text/plain

ワークフローが HTTP 要求を受信した場合、 Content-Type ヘッダー値は テキスト/プレーンです。 Azure Logic Apps は、生の形式でコンテンツを格納および処理します。 キャストや変換を行わずに後続のワークフロー アクションでこのコンテンツを参照または使用する場合、送信要求にも Content-Type ヘッダー値が text/plain に設定されます。

たとえば、フラット ファイルを使用していて、受信 HTTP 要求に Content-Type ヘッダー値が text/plain に設定されている場合です。

Date,Name,Address
Oct-1,Frank,123 Ave

要求本文を使用して別の要求を送信する後続のアクションにこの要求を送信した場合、2 番目の要求にも Content-Type ヘッダー値が text/plain に設定されます。 プレーン テキストでデータを操作してもヘッダーを指定しなかった場合は、 string() 関数を使用して手動でこのデータをテキストにキャストできます。次に例を示します。

string(triggerBody())

application/xml と application/octet-stream

Azure Logic Apps では、受信 HTTP 要求または応答で常に Content-Type ヘッダー値が保持されます。 ワークフローで、 Content-Typeapplication/octet-stream に設定されたコンテンツを受信し、そのコンテンツをキャストせずに後続のアクションに含める場合、送信要求では Content-Typeapplication/octet-streamに設定されます。 この方法により、ワークフローを移動するときにデータが失われないようにします。 ステートフル ワークフローでは、後続のアクションの状態、入力、出力は JSON オブジェクトに格納され、状態はワークフロー内を移動します。

コンバーター関数

一部のデータ型を保持するために、Azure Logic Apps はコンテンツをバイナリの base64 でエンコードされた文字列に変換します。 この文字列には、 $content ペイロードと、自動的に変換される $content-typeの両方を保持する適切なメタデータがあります。

次の一覧では、特定の 関数を使用するときに Azure Logic Apps によってコンテンツがどのように変換されるかについて説明します。

  • json(): データを application/jsonにキャストします。
  • xml(): データを application/xmlにキャストします。
  • binary(): データを application/octet-streamにキャストします。
  • string(): データを text/plainにキャストします。
  • base64(): コンテンツを base64 でエンコードされた文字列に変換します。
  • base64toString(): base64 でエンコードされた文字列を text/plainに変換します。
  • base64toBinary(): base64 でエンコードされた文字列を application/octet-streamに変換します。
  • dataUri(): 文字列をデータ URI に変換します。
  • dataUriToBinary(): データ URI をバイナリ文字列に変換します。
  • dataUriToString(): データ URI を文字列に変換します。

たとえば、ワークフロー トリガーが HTTP 要求を受け取り、そのコンテンツが次のサンプルのようにContent-Typeapplication/xmlに設定されているとします。

<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>

このコンテンツは、 xml() 関数と triggerBody() 関数を使用する次の式を使用してキャストできます。

xml(triggerBody())

その後、ワークフロー内の後続のアクションで結果のコンテンツを使用できます。 または、代わりに xpath() 関数と xml() 関数を使用する次の式を使用することもできます。

xpath(xml(triggerBody()), '/CustomerName')

他のコンテンツ タイプ

Azure Logic Apps では他のコンテンツ タイプがサポートされていますが、 $content 変数をデコードして HTTP 要求からメッセージ本文を手動で取得する必要がある場合があります。

たとえば、 Content-Typeapplication/x-www-url-formencoded に設定されている HTTP 要求をワークフローが受信するとします。 すべてのデータを保持するために、要求本文には、ペイロードが base64 文字列としてエンコードされる $content 変数が含まれています。

CustomerName=Frank&Address=123+Avenue

このコンテンツ タイプはプレーン テキストまたは JSON 形式ではないので、Azure Logic Apps では、次のCustomerName=Frank&Address=123+Avenue変数と$content-type変数を使用して$contentが格納されます。

"body": {
   "$content-type": "application/x-www-url-formencoded",
   "$content": "AAB1241BACDFA=="
}

Azure Logic Apps には、フォーム データを処理するためのネイティブ関数も含まれています。次に例を示します。

または、次の例のような式を使用して、データに手動でアクセスできます。

string(body('formdataAction'))

送信要求で application/x-www-url-formencodedContent-Type ヘッダー値として使用するには、 body('formdataAction')などの式を使用してキャストせずに、要求の内容をアクション本文に追加します。 このメソッドは、アクション本文が body 入力オブジェクト内の唯一のパラメーターである場合にのみ機能します。 コンテンツ タイプがbody('formdataAction')されている要求でapplication/json式を使用すると、本文がエンコードされて送信されるため、ランタイム エラーが発生します。