使用控制操作改变控制流

已完成

控制操作帮助你向工作流添加决策和备用操作路径。 新闻监视应用使用控制操作来检查文章的情绪排名,并根据排名是正面还是负面对工作流路径进行分支。 在本单元中,我们将查看能够帮助您管理工作流执行路径的四个控制操作。

条件操作

条件操作实际上是一个 If 语句,它可让你根据指定的条件计算结果为 true 还是 false 将工作流拆分为两个路径。 条件有三个部分:布尔表达式和两个操作。 在运行时,Azure 逻辑应用执行引擎会根据表达式是 true 还是 false 来计算表达式并选择操作。

例如,你可能希望根据金额将费用报表发送给其他管理人员。 如果你正在处理一封电子邮件,则可能需要测试它是否被标记为高优先级。 在示例新闻监视应用中,使用条件操作根据文章的情绪标签进行分支。 下图显示了该工作流如何使用条件操作:

示意图展示了整个新闻监测应用的概念视图。条件操作已高亮显示。

类型和运算符

条件操作中,可以比较数值、字符串、布尔和 JSON 对象。 以下伪代码展示了几个数据类型的示例:

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

大多数运算符都是直观的,但两个运算符有以下注意事项:

  • 字符串比较区分大小写。

  • JSON 比较使用深度相等。 这种比较意味着相等运算符会比较整个对象,包括复杂对象中的任何后代标记。

使用 AND 和 OR 组合表达式

Azure 逻辑应用使你可通过使用 AND 或 OR 运算符来组合条件以创建复杂表达式

例如,假设你想要识别在情绪方面保持中立和混合的文章。 可编写类似于以下伪代码的表达式:

if (sentiment is-equal-to neutral OR sentiment is-equal-to mixed)

数据可用性

Azure 逻辑应用使工作流中以前所有步骤的输出在后续步骤中可用。 此功能意味着表达式可以使用前面任何步骤生成的值。 你甚至可以将不同步骤的值组合到一个表达式中。

例如,以下伪代码会查找你的公司撰写的正面情绪的文章。 “情绪”值来自“情绪”操作,而“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 逻辑应用间接支持此表达式,因此你仍然可以完成此任务,但使用的是另一种方式。 相反,你可以使用一个组,该组是与 AND 或 OR 组合的表达式序列。 不能在组中混合 AND 和 OR。

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

if (a AND b AND c) // OK
if (a AND b OR c) // Error, can't mix AND and OR

相反,在前面的示例中,你必须为由 AND 连接的表达式创建一个组。 然后,使用 OR 将组连接到另一个表达式。 要表示一个组,在下面的伪代码中使用方括号。

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

Switch 操作

“Switch”操作会将值与几种情况进行比较,并仅执行匹配的情况。 “Switch”表达式支持字符串和整数数据类型。 “Switch”操作还包含在不存在匹配项时运行的默认操作。

例如,假设你正在处理一封电子邮件,并希望根据邮件的重要性做出不同的答复。 在 Outlook 电子邮件中,“重要性”值是 0-2 间的整数。 若要生成电子邮件重要性的“Switch”操作,可以使用类似于以下 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 循环操作处理数组。 该循环对每个数组项执行相同的操作。 在默认情况下,每个数组项的操作并行运行,但可在循环的设置中控制此行为。

例如,必应搜索连接器具有一个“按查询列出新闻”操作。 该操作的输出是一个新闻文章的数组,其中包含每篇文章的 URL。 假设你要将每个 URL 插入数据库中的一个行。 你可以使用“For each”操作来进行处理,如以下伪代码所示:

foreach url in NewsArticle
   insert-row

Until 循环

Until 循环操作会至少运行一组操作,并重复,直到以下任何停止条件为 true:

  • 条件:每次迭代后计算的表达式
  • Count:最大迭代次数。 默认值为 60。
  • 超时:允许的最大运行持续时间,以 ISO 8601 格式指定。 默认值为一小时。

可以使用此循环来处理数据,但对于重试网络操作直到操作成功或超时这样的情况,此循环也是一个不错的选择。例如,假设你的工作流必须运行发出 HTTP 请求的操作。 你可以使用以下 p 代码所述示例中的 Until 循环,其中 时间值等于五分钟:PT5M

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

设计器中的控制操作

控制操作在 Azure 逻辑应用执行引擎中原生运行,因此它们被称为“内置”或“应用内”操作。 在连接器库中,所有控制操作都打包在“控制”集合中。 在库中找到此集合后,可以选择前述的任何控制操作。 以下屏幕截图显示了可供你选择的控制操作:

屏幕截图显示了“**控制**”集合和可用的控制操作。

提示

如果未看到所有操作,请在集合名称旁边选择“查看更多”。

若要评估工作流中的情绪,请添加“条件”控制操作,该操作会添加 语句。If “条件”操作提供了一种生成布尔表达式的方法。 若要使用组创建复杂表达式,“新项”列表包含“添加组”选项,例如:

屏幕截图显示了工作流设计器,其中包含一个“**情绪**”操作,后跟一个“**条件**”操作。一个简单的表达式检查情绪排名是否为正面。

下一个单元将演示如何在工作流设计器中使用两个分支添加和配置控制操作。