使用控制操作改变控制流

已完成

控制操作可让逻辑应用做出决策。 社交媒体监视将使用控制操作来根据推文和分支是正面还是负面情绪来检测其情绪分数。 在本单元中,我们将介绍协助管理应用执行路径的四个控制操作。 我们还将介绍如何使用逻辑应用设计器添加控制操作并配置其设置。

条件操作

condition 控制操作是 if 语句,可让应用根据正在处理的数据执行不同的操作。 它包含一个布尔表达式和两项操作。 在运行时,执行引擎会根据表达式是 true 还是 false 来计算表达式并选择操作。

例如,你可能希望根据金额将费用报表发送给其他管理人员。 如果你正在处理一封电子邮件,则可能需要测试它是否被标记为高优先级。 在我们的社交媒体应用中,我们将使用条件语句根据推文的情绪分数进行分支。 下图显示了在应用中使用 condition 控制操作。

An illustration showing a conceptual view of the entire social media monitor app. The *condition* control action is highlighted.

类型和运算符

可在 condition 控制操作中测试数值、字符串、布尔值和 JSON 对象。 以下伪代码显示了每种简单类型的一个示例:

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

每种类型都有一组可在比较中使用的运算符。 下表列出了每种类型的运算符。

数值 字符串 布尔 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 比较使用所谓的深度比较。 这种比较意味着相等运算符将比较整个对象,包括复杂对象中的任何后代标记。

使用 AND 和 OR 组合表达式

逻辑应用可使你通过使用 AND 或 OR 组合条件来创建复杂表达式。 假设想要识别中性情绪的推文(回想一下,接近 0.5 的分数才表示中性情绪)。 可编写类似于以下伪代码的表达式:

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

数据可用性

逻辑应用使所有先前步骤的数据在后续步骤中都可用。 此功能意味着表达式可以使用前面任何步骤生成的值。 甚至可以在一个表达式中组合来自不同步骤的值。 例如,以下伪代码查找不是由你的公司发送的带有正面情绪的推文。 请注意,评分来自“检测情绪”操作,而 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

逻辑应用的确支持此表达式,但不是直接支持。 可使用名为“组”的功能来执行此操作。 组是与 AND 或 OR 组合的表达式序列。 不能在组中混合 AND 和 OR。

让我们看一些表示为伪代码的示例。 为了便于阅读,我们将使用小写字母表示需要组合的表达式。 下面的第一个示例是合法的组,但第二个不是:

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

Switch 操作

Switch 控制操作将值与几种情况进行比较,并仅执行匹配的情况。 Switch 表达式支持的类型是字符串和整数。 Switch 可包含默认操作,如果没有匹配则运行该操作。

例如,假设你正在处理电子邮件,并希望根据消息重要性做出不同的答复。 Outlook 电子邮件中的重要性是 0-2 间的整数。 以下伪代码显示了如何为电子邮件重要性构建 switch 操作。

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 循环控制操作多次运行一组操作。 可设置三个不同的停止条件,循环运行直到其中一个为 true:

  • Condition:每次迭代后计算的表达式。
  • 计数:最大迭代次数(默认为 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)

使用设计器添加控制操作

逻辑应用设计器为你提供了一个用于添加和配置控制操作的 GUI。 它们都打包在控制连接器中,因此第一步是找到该连接器。 找到连接器后,你将看到我们讨论的四个控制操作以及一些有用的控制操作,但它们与我们管理控制流的目标没有直接关系。 下面的屏幕截图显示了在设计器中显示的可用控制操作。

A screenshot showing the contents of the **Control** connector in the Logic Apps Designer. The four control-flow actions are included in the list: **Condition**, **For each**, **Switch**, and **Until**.

设计器提供了一个 GUI,使你可以构建复杂的表达式,包括组。 下面的屏幕截图显示了设计器中显示的 Condition 操作。

A screenshot showing a configured **Condition** action in the Logic Apps Designer. The image contains a **Detect 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.

在我们的社交媒体监视应用中,我们将使用 Condition 控制操作添加 if 语句来测试情绪分数。