使用控制項動作改變控制流程

已完成

控制項動作可幫助您的邏輯應用程式工作流程做出決策。 社交媒體監視應用程式會使用控制項動作來測試推文的情緒分數,並根據分數為正面或負面來分支工作流程路徑。 在本單元中,我們將探討可協助您透過工作流程管理執行路徑的四個控制項動作。 我們也會了解如何使用工作流程設計工具來新增和設定控制項動作。

「條件」動作

條件控制項動作是 if 陳述句,可讓您的工作流程根據您正在處理的資料分割成兩個路徑。 此動作包含一個布林運算式和兩個動作。 在執行階段,執行引擎會評估運算式,並根據運算式為 true 或 false 來選擇動作。

例如,您可能想要根據金額來將費用報表路由傳送給不同的經理。 如果您正在處理電子郵件,您可能需要測試是否要將訊息標示為高優先順序。 在我們的社交媒體監視應用程式中,將使用「條件」陳述式,根據推文的情緒分數來設定分支。 下圖顯示工作流程如何使用「條件」控制項動作。

Diagram shows a conceptual view for the entire social media monitoring app. The *condition* control action appears highlighted.

類型和運算子

您可以在條件控制項動作中測試數值、字串、布林值及 JSON 物件。 下列虛擬程式碼會針對每一種簡單類型顯示一個範例:

if (score is-greater-than 0.7)              ... // Numeric
if (TweetedBy does-not-contain "MyCompany") ... // String
if (Favorited is-equal-to true)             ... // Boolean

每種類型都有一組您可以在比較中使用的運算子。 下表列出適用於每種類型的運算子:

數值 String 布林值 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

大部分作業都是直覺式的,但有兩種情況值得一提:

  • 字串比較全都會區分大小寫。
  • JSON 比較會使用所謂的「深層」相等。 這個比較意味著等號比較運算子將比較整個物件,包括複雜物件內的任何子系權杖。

使用 ANDOR 來結合運算式

Azure Logic Apps 可讓您使用 ANDOR 來結合條件,藉以建立複雜的運算式。 假設您想要識別中性情緒的推文 (接近 0.5 的分數為中性)。 您可以撰寫類似下列虛擬程式碼的運算式:

if (score is-greater-than 0.4 AND score is-less-than 0.6)

資料可用性

Azure Logic Apps 讓所有先前步驟中的資料,均可在後續步驟中使用。 此功能意味著您的運算式可以使用先前任何步驟所產生的值。 您甚至可以在一個運算式中結合來自不同步驟的值。 例如,下列虛擬程式碼會尋找具有正面人氣但「不是」由貴公司所傳送的推文。 請注意,分數來自 [偵測人氣] 動作,而 TweetedBy 值來自 [有新推文張貼時] 觸發程序。

if (score is-greater-than 0.7 AND TweetedBy does-not-contain "MyCompany")

使用群組建立複雜的運算式

假設您想要建置運算式來識別具影響力的推文。 您決定有兩個符合資格的準則:

  • 人氣分數超過 0.9 且已將推文標示為我的最愛。
  • 轉推計數大於 1000。

您想要建置類似下列虛擬程式碼的運算式來擷取此概念:

if (score is-greater-than 0.9 AND Favorited is-equal-to true OR RetweetCount is-greater-than 1000) // Error, cannot mix AND and OR

Azure Logic Apps 會間接支援此運算式,且您可以使用稱為「群組」的功能來啟用此支援。 「群組」是使用 ANDOR 結合的一連串運算式。 您不能在群組內混用 ANDOR

讓我們看看一些以虛擬程式碼表示的範例。 為了協助您更容易閱讀範例,我們將使用小寫字母以代表需要結合的運算式。 以下第一個範例是一個合法群組,但第二個並非合法:

if (a AND b AND c) // OK
if (a AND b OR  c) // Error, cannot mix AND and OR

您需要在上述範例中改為針對 AND 所連接的運算式建立群組。 您接著使用 OR,將群組連接至其他運算式。 我們會在下列虛擬程式碼中使用括弧來代表群組:

if ([a AND b] OR c) // OK

「切換」動作

「切換」控制項動作會將值與數個案例進行比較,然後僅執行相符的項目。 [切換] 運算式的支援類型為 stringinteger。 「切換」可以包含「預設」動作,以便在沒有相符項目時執行。

例如,假設您正在處理電子郵件訊息,而且想要根據訊息的重要性進行不同的回應。 Outlook 電子郵件中的重要性是介於 0 和 2 之間的整數。 下列虛擬程式碼示範如何針對電子郵件重要性建置「切換」動作。

switch (Importance)
  case 0: ... // action(s) for low importance
  case 1: ... // action(s) for medium importance
  case 2: ... // action(s) for high importance
  default: ...

Foreach 迴圈

Foreach 迴圈控制項動作會處理陣列。 迴圈會在每個陣列項目上執行相同動作。 根據預設,儘管您可以在迴圈設定中控制此行為,但每個陣列元素的動作都會平行執行。

例如,[有新推文張貼時] 觸發程序所傳回的部分推文資料為推文中所包含之媒體的 URL 陣列。 假設您想要在資料庫中將每個 URL 插入到它自己的資料列。 您可以使用類似下列虛擬程式碼的 foreach 動作來處理:

foreach url in MediaUrls
    insert-row

Until 迴圈

Until 迴圈控制項動作會執行一組動作多次。 您可以設定三個不同的停止條件,而迴圈會執行,直到其中一個條件成立為止:

  • 條件:每個反覆項目之後所評估的運算式
  • 計數:反覆項目的數目上限。 預設值是 60。
  • 逾時:使用 ISO 8601 格式所允許的最大時鐘時間。 預設為 1 小時。

您可以使用此迴圈來處理資料,但當您需要重試網路作業,直到作業成功或逾時為止,則此迴圈也是個不錯的選項。例如,假設您的工作流程需要執行提出 HTTP 要求的動作。 您可以使用類似下列虛擬程式碼所顯示範例的 until 迴圈 (時間值 PT5M 等於五分鐘):

repeat
    HTTP Get
until (StatusCode is-equal-to 200 OR Count is-greater-than 3 OR Timeout is-greater-than PT5M)

使用設計工具新增控制項動作

工作流程設計工具可讓您以視覺化方式新增和設定控制項動作。 所有控制項動作都會封裝在控制項連接器內,因此第一個步驟是尋找此連接器。 在您找到連接器之後,您將可選取我們先前討論過的控制項動作和一些有用的其他項目,但不會與我們管理控制流程的目標直接相關。 下列螢幕擷取畫面呈現設計工具中所顯示的可用控制項動作:

Screenshot shows the actions in the **Control** connector in the workflow designer. The list includes the following control flow actions: **Condition**, **For each**, **Switch**, and **Until**.

設計工具也提供視覺化方式來供您建置複雜的運算式,包括群組。 下列螢幕擷取畫面呈現設計工具中所顯示的「條件」動作:

Screenshot shows a configured **Condition** action in the workflow designer. The image contains a **Sentiment** action followed by a **Condition** action. The **Condition** action has a simple expression that tests whether the sentiment score is greater than 0.7.

在社交媒體監視器應用程式中,我們將使用條件控制項動作來新增 if 陳述式,以測試情緒分數。