你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 逻辑应用中创建变量以存储和管理值

适用范围:Azure 逻辑应用(消耗型 + 标准型)

本操作指南展示如何创建和使用变量,以便在逻辑应用工作流中存储和使用值。 例如,变量可帮助跟踪某个循环运行的次数。 若要循环访问某个数组或检查特定项的数组,可以使用变量来引用每个数组项的索引号。

可为整数、浮点数、布尔值、字符串、数组和对象等数据类型创建变量。 创建变量后,可以执行其他任务,例如:

  • 获取或引用变量的值。
  • 按常量值增大或减小变量,也称为递增和递减。
  • 将不同的值赋给变量。
  • 插入或追加变量值作为字符串或数组中的最后一个项。

变量只在创建它们的工作流实例中存在并保持全局性。 另外,它们保留在工作流实例中的任何循环迭代之间。 引用变量时,请使用变量的名称作为令牌,而不要使用操作的名称。操作名称通常用于引用操作的输出。

重要

默认情况下,For each 循环中的迭代并行运行。 在循环中使用变量时,请按顺序运行循环,以便变量返回可预测的结果。

先决条件

  • Azure 帐户和订阅。 如果没有订阅,可注册免费的 Azure 帐户

  • 你要在其中创建变量的逻辑应用工作流和启动工作流的触发器。

    在添加用于创建和使用变量的操作之前,工作流的第一步必须使用触发器启动工作流。 有关详细信息,请参阅使用触发器或操作构建工作流

以下步骤使用 Azure 门户,但利用适当的 Azure 逻辑应用扩展,也可以使用以下工具来创建逻辑应用工作流:

根据你使用的是消耗工作流还是标准工作流,遵循相应的步骤:

初始化变量

可以在工作流中使用一个操作来创建一个变量并声明其数据类型和初始值。 可以仅在全局级别声明变量,而不是在作用域、条件和循环中声明。

  1. Azure 门户中,打开设计器的工作流。

  2. 在设计器中,按照这些常规步骤添加一个名为“初始化变量”的操作

  3. 提供有关变量的以下信息:

    属性 必须 说明
    名称 <variable-name> 要递增的变量的名称
    类型 <variable-type> 变量的数据类型
    <start-value> 变量的初始值

    提示:尽管此值是可选的,但最好是设置此值,以便始终知道变量的起始值。

    以下示例显示了此示例变量的初始值:

    屏幕截图显示 Azure 门户、使用者工作流和名为“初始化变量”的操作。

  4. 现在,继续添加你想在方案中用到的操作。 完成后,请在设计器工具栏上选择“保存”。

如果从设计器切换到代码视图,以下示例演示“初始化变量”操作如何以 JavaScript 对象表示法 (JSON) 格式在工作流定义中显示:

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ 
            {
               "name": "Count",
               "type": "Integer",
               "value": 0
            }
         ]
      },
      "runAfter": {}
   }
},

注意

尽管“初始化变量”操作具有已结构化为数组的 "variables" 对象,但该操作一次只能创建一个变量。 每个新变量都需要单独的初始化变量操作。

以下示例演示其他变量类型:

布尔值变量

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myBooleanVariable",
               "type": "boolean",
               "value": false
            }
         ]
      },
      "runAfter": {}
   }
},

浮点变量

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myFloatVariable",
               "type": "float",
               "value": 1.99999
            }
         ]
      },
      "runAfter": {}
   }
},

字符串变量

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myStringVariable",
               "type": "string",
               "value": "lorem ipsum"
            }
         ]
      },
      "runAfter": {}
   }
},

对象变量

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "MyObjectVariable",
               "type": "object",
               "value": {
                  "ProductItem": {
                     "Name": "myProductName",
                     "ProductID": "000000"
                  }
               }
            }
         ]
      },
      "runAfter": {}
   }
},

包含整数的数组

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": [1, 2, 3]
            }
         ]
      },
      "runAfter": {}
   }
},

包含字符串的数组

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": ["red", "orange", "yellow"]
            }
         ]
      },
      "runAfter": {}
   }
},

获取变量的值

若要检索或引用变量的内容,可以在工作流设计器和代码视图编辑器中使用 variables() 函数。 引用变量时,请使用变量的名称作为令牌,而不要使用操作的名称。操作名称通常用于引用操作的输出。

例如,以下表达式使用 variables() 函数从本指南中创建的数组变量中获取项。 string() 函数以字符串格式返回变量的内容:"1, 2, 3, red"

@{string(variables('myArrayVariable'))}

递增变量

若要按特定常量值增大或递增某个变量,请将“递增变量”操作添加到工作流。 此操作仅适用于整数和浮点数变量。

  1. 在工作流设计器中,按照以下常规步骤添加名为“递增变量”的操作

  2. 为此操作提供以下信息:

    属性 必须 说明
    名称 <variable-name> 要递增的变量的名称
    <increment-value> 用于递增变量的值。 默认值为 1

    提示:尽管此值是可选的,但最好是设置此值,以便始终知道用于递增变量的特定值。

    以下示例显示了此操作的示例值:

    屏幕截图显示 Azure 门户、“消耗”工作流和名为“递增变量”的操作。

  3. 完成后,保存工作流。 在设计器工具栏上选择“保存”。

如果从设计器切换到代码视图,以下示例演示“递增变量”操作如何以 JSON 格式在工作流定义中显示:

"actions": {
   "Increment_variable": {
      "type": "IncrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

示例:创建循环计数器

变量通常用于统计某个循环的运行次数。 本示例通过创建一个统计电子邮件中附件数的循环,来演示如何创建和使用变量完成此任务。

  1. 在 Azure 门户中,使用空白工作流创建“消耗”逻辑应用资源。 添加一个触发器,用于检查新电子邮件和任何附件。

    本示例使用 Office 365 Outlook 触发器“收到新电子邮件时”。 可将此触发器设置为仅当电子邮件包含附件时才触发。 但是,可以使用任何可检查包含附件的新电子邮件的连接器,例如 Outlook.com 连接器。

  2. 在触发器中,若要检查附件并将这些附件传入工作流,请针对以下属性选择“是”:

    • 仅包含附件
    • 包括附件

    屏幕截图显示 Azure 门户、“消耗”工作流和选择待检查和添加附件的属性。

  3. 添加初始化变量操作以创建名为 Count 的整数变量,该变量的起始值设置为 0

  4. 若要循环访问每个附件,请按照以下常规步骤添加名为 For each 循环的操作

  5. 在循环中,选中“选择先前步骤中的输出”框。 出现动态内容列表后,在“新邮件到达时”下,选择“附件”。

    屏幕截图显示“消耗”工作流、For each 循环、打开的动态内容列表和选中的附件输出。

    Attachments 属性将包含电子邮件附件的数组从触发器的输出传递到循环中,供工作流循环访问。

  6. 在“For each”循环中,选择“添加操作”。

  7. 按照这些常规步骤将名为递增变量的操作添加到循环

    注意

    确保“递增变量”操作显示在循环内部。 如果该操作显示在循环外部,请将其拖到循环中。

  8. 在“递增变量”操作中,从“名称”列表中选择“Count”变量。 将 Value 属性设置为 1

    屏幕截图显示“消耗”工作流,所选的变量名为 Count。

  9. 在循环下,添加用于发送附件数目的任何操作。 在操作中,包含来自 Count 变量的值,例如:

    屏幕截图显示“消耗”工作流和发送结果的操作。

  10. 完成后,保存工作流。 在设计器工具栏上选择“保存”。

测试工作流

  1. 若要手动触发工作流,请执行相应的步骤:

    消耗工作流

    在设计器工具栏中选择“运行触发器”>“运行”来手动运行工作流。

    标准工作流

    在工作流菜单上,选择“概述”。 在工具栏上选择“运行”>“运行”。

  2. 将包含一个或多个附件的电子邮件发送到本示例中使用的电子邮件帐户。

    此步骤将触发工作流触发器,从而创建并运行工作流实例。 因此,工作流会发送消息或电子邮件,其中显示了发送的电子邮件中的附件数目。

如果从设计器切换到代码视图,以下示例演示 For each 循环和“递增变量”操作如何以 JSON 格式在工作流定义中显示:

"actions": {
   "For_each": {
      "type": "Foreach",
      "actions": {
         "Increment_variable": {
           "type": "IncrementVariable",
            "inputs": {
               "name": "Count",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['Attachments']",
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

递减变量

若要按特定常量值减小或递减变量,请遵循递增变量步骤,不过需要向工作流添加“递减变量”操作。 此操作仅适用于整数和浮点数变量。

下表描述了“递减变量”操作的信息:

属性 必须 说明
名称 <variable-name> 要递减的变量的名称
<increment-value> 用于递减变量的值。 默认值为 1。

提示:尽管此值是可选的,但最好是设置此值,以便始终知道用于递减变量的特定值。

如果从设计器切换到代码视图,以下示例演示“递减变量”操作如何以 JSON 格式在工作流定义中显示:

"actions": {
   "Decrement_variable": {
      "type": "DecrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

设置变量

若要将其他值赋给现有变量,请遵循递增变量步骤,不过需要:

  1. 改为找到并选择“设置变量”操作。

  2. 提供变量名称,以及要赋的值。 新值和变量的数据类型必须相同。 之所以需要该值,是因为此操作没有默认值。

下表描述了“设置变量”操作的信息:

属性 必须 说明
名称 <variable-name> 要更改的变量的名称
<new-value> 要赋给变量的值。 两者的数据类型必须相同。

注意

除非递增或递减变量,否则更改循环中的变量可能会产生意外的结果,因为循环在默认情况下是并行或并发运行的。 对于这种情况,请尝试将循环设置为按顺序运行。 例如,若要引用循环中的变量值,并且预期该循环实例开头和末尾的值相同,请遵循以下步骤更改循环的运行方式:

  1. 在循环中,查找并打开循环设置。

  2. 根据工作流类型,按照相应的步骤操作:

    • 消耗:将“并发控制”设置从“关”更改为“开”。

    • 标准:在“常规”下,将“并发控制”设置从“关”更改为“开”。

  3. 将“并行度”滑块拖到 1

如果从设计器切换到代码视图,以下示例演示“设置变量”操作如何以 JSON 格式在工作流定义中显示:

以下示例将 Count 变量的当前值更改为其他值:

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
               "name": "Count",
               "type": "Integer",
               "value": 0
          } ]
      },
      "runAfter": {}
   },
   "Set_variable": {
      "type": "SetVariable",
      "inputs": {
         "name": "Count",
         "value": 100
      },
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

追加到变量

对于存储字符串或数组的变量,可以插入或追加一个变量值,作为这些字符串或数组中的最后一个项。 可以按照递增变量步骤操作,但需要:

  1. 根据变量是字符串还是数组,找到并选择以下操作之一:

    • 追加到字符串变量
    • 追加到数组变量
  2. 提供要追加为字符串或数组中最后一个项的值。 此值是必需的。

下表描述了“追加到...”操作的信息:

属性 必须 说明
名称 <variable-name> 要更改的变量的名称
<append-value> 要追加的值,可以是任何类型

如果从设计器切换到代码视图,以下示例演示“追加到数组变量”操作如何以 JSON 格式在工作流定义中显示。

以下示例创建一个数组变量,并将另一个值添加为数组中的最后一个项。 结果是包含此数组的已更新变量:[1,2,3,"red"]

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
            "name": "myArrayVariable",
            "type": "Array",
            "value": [1, 2, 3]
         } ]
      },
      "runAfter": {}
   },
   "Append_to_array_variable": {
      "type": "AppendToArrayVariable",
      "inputs": {
         "name": "myArrayVariable",
         "value": "red"
      },
      "runAfter": {
        "Initialize_variable": [ "Succeeded" ]
      }
   }
},

后续步骤