コントロール アクションを使用して制御フローを変更する
コントロール アクションは、ワークフローに意思決定と代替アクション パスを追加するのに役立ちます。 ニュース監視アプリでは、コントロール アクションを使用して、記事に含まれるセンチメントのランク付けを確認し、ランク付けが肯定的か否定的かに基づいてワークフロー パスを分岐させます。 このユニットでは、ワークフローの実行パスを管理するのに役立つ 4 つのコントロール アクションを確認します。
Condition アクション
条件アクションは、実際には、指定した条件が true と false のどちらに評価されるかに基づいて、ワークフローを 2 つのパスに分割できる If
ステートメントです。 条件には、ブール式と 2 つのアクションの 3 つの部分があります。 実行時に、Azure Logic Apps 実行エンジンによって式が評価され、式が true か false かに基づいてアクションが選択されます。
たとえば、経費報告書を金額に基づいて別の管理者にルートすることができます。 電子メールを処理している場合は、メッセージに優先度が高いフラグが設定されているかどうかをテストする必要がある場合があります。 ニュース監視アプリの例では、条件アクションを使用して、記事のセンチメント ラベルに基づいて分岐します。 次の図は、ワークフローで条件アクションがどのように使用されるかを示しています。
型と演算子
条件アクションでは、数値、文字列、ブール値、および JSON オブジェクトを比較できます。 次の P コードは、いくつかのデータ型の例を示しています。
if (Favorited is-equal-to true) ... // Boolean type
if (URL does-not-contain "mycompany") ... // String type
if (confidenceScores is-equal-to 1) ... // Numeric type
各データ型には、比較で使用する演算子のセットが用意されています。 次の表に、型ごとの演算子を一覧表示します。
数値 | 文字列 | ブール値 | JSON オブジェクト |
---|---|---|---|
is-equal-to | is-equal-to | is-equal-to | is-equal-to |
is-not-equal-to | is-not-equal-to | is-not-equal-to | is-not-equal-to |
is-greater-than | contains | ||
is-greater-than-or-equal-to | does-not-contain | ||
is-less-than | starts-with | ||
is-less-than-or-equal-to | does-not-start-with | ||
ends-with | |||
does-not-end-with |
ほとんどの演算子は直感的ですが、2 つの演算子に次の考慮事項があります。
文字列比較では、大文字と小文字がすべて区別されます。
JSON 比較では、deep equal が使用されます。 この比較は、等値演算子でオブジェクト全体 (複雑なオブジェクト内のすべての子孫トークンを含む) を比較することを意味します。
AND と OR を使用して式を結合する
Azure Logic Apps を使用すると、AND または OR 演算子を使用して条件を結合することで、複雑な式を作成できます。
たとえば、センチメントが中立と混合の記事を特定したいとします。 次の擬似コードのような式を記述できます。
if (sentiment is-equal-to neutral OR sentiment is-equal-to mixed)
データの可用性
Azure Logic Apps を使用すると、ワークフロー内のすべての前の手順からの出力を後続の手順で使用できるようになります。 この機能は、前の任意のステップで生成された値を式で使用できることを意味します。 さまざまなステップの値を 1 つの式に結合することもできます。
たとえば、次の P コードは、会社が書いた肯定的なセンチメントを持つ記事を探します。 センチメント値はセンチメント アクションから取得されますが、URL 値は新しいニュース記事トリガーから取得されます。
if (sentiment is-equal-to positive AND URL does-not-contain "mycompany")
グループを使用して複雑な式を作成する
影響力のある関連記事を識別する式を作成するとします。 これらの記事を識別するために、次の条件が役立つと判断します。
- センチメントは肯定的です。
- カテゴリは "スポーツ" または "ビジネス" です。
これらの条件をキャプチャするために、次の P コードのような式を作成する必要がありますが、AND を OR 演算子と使用することはできません。
if (sentiment is-equal-to positive AND Category is-equal-to Sports OR Category is-equal-to Business) // Error, can't mix AND with OR
Azure Logic Apps では間接的にこの式がサポートされているため、このタスクを完了することはできますが、別の方法で実行できます。 代わりに、グループを使用できます。これは、AND または OR と組み合わせた一連の式です。 グループ内に AND と OR を混在させることはできません。
擬似コードとして表された例をいくつか見てみましょう。 例を読みやすくするため、結合する必要がある式は小文字を使用して表します。 最初の例は有効なグループですが、2 番目のグループは無効です。
if (a AND b AND c) // OK
if (a AND b OR c) // Error, can't mix AND and OR
代わりに、前の例で AND で結合された式に対してグループを作成する必要があります。 次に、OR を使用してグループを他の式につなぎます。 グループを表すために、次の P コードでは角かっこを使用します。
if ([a AND b] OR c) // OK
Switch アクション
スイッチ アクションでは、値を複数のケースに対して比較して、一致するものだけが実行されます。 スイッチ式は、文字列および整数のデータ型をサポートします。 スイッチ アクションには、一致するものがない場合に実行される既定値アクションも含まれます。
たとえば、メール メッセージを処理していて、メッセージの重要度に応じて異なる応答をしたいとします。 Outlook メールでは、重要度の値は、0 - 2 の整数です。 メールの重要度に対するスイッチ アクションを作成するには、次の P コードのようなロジックを使用できます。
switch (Importance)
case 0: ... // Actions for high importance
case 1: ... // Actions for medium importance
case 2: ... // Actions for low importance
default: ...
For each ループ
For each ループ アクションは、配列を処理します。 このループでは、各配列項目に対して同じアクションを実行します。 既定では、各配列項目のアクションは並列で実行されますが、ループの設定でこの動作を制御できます。
たとえば、Bing 検索コネクタには、クエリによってニュースを表示するアクションがあります。 アクションの出力はニュース記事の配列であり、各記事の URL が含まれています。 各 URL をデータベース内の行に挿入するとします。 For each アクションを使用して、次の P コードに示すように処理を実行できます。
foreach url in NewsArticle
insert-row
Until ループ
Until ループ アクションは、アクションのグループを少なくとも 1 回実行し、次のいずれかの停止条件が true になるまで繰り返します。
- 条件:イテレーションのたびに評価される式
- Count: イテレーションの最大数。 既定値は 60 です。
- タイムアウト:ISO 8601 形式で指定された、許可される最大実行時間。 既定値は 1 時間です。
このループを使用してデータを処理できますが、このループは、操作が成功するかタイムアウトするまでネットワーク操作を再試行するなどの場合にも適したオプションです。たとえば、ワークフローで HTTP 要求を行うアクションを実行する必要があるとします。 次の P コードに示された例にある Until ループを使用できます (PT5M
時刻値は 5 分間に相当します)。
repeat
HTTP GET
until (StatusCode is-equal-to 200 OR Count is-greater-than 3 OR Timeout is-greater-than PT5M)
デザイナーのコントロール アクション
コントロール アクションは Azure Logic Apps 実行エンジン内でネイティブに実行されるため、"組み込み" または "アプリ内" 操作と呼ばれます。 コネクタ ギャラリーでは、すべてのコントロール アクションがコントロール コレクション内にパッケージ化されます。 ギャラリーでこのコレクションを見つけたら、前に説明したコントロール アクションのいずれかを選択できます。 次のスクリーンショットは、選択できるコントロール アクションを示しています。
ヒント
すべてのアクションが表示されない場合は、コレクション名の横にある [詳細表示] を選択します。
ワークフローのセンチメントを評価するには、条件コントロール アクションを追加します。このアクションにより、If
ステートメントが追加されます。 条件アクションは、ブール式を作成する方法を提供します。 グループを使用した複雑な式を作成するために、[新しい項目] リストに [グループの追加] オプションが含まれています。次に例を示します。
次のユニットでは、ワークフロー デザイナーで 2 つの分岐を使用してコントロール アクションを追加および構成する方法を示します。