适用于:Azure 逻辑应用(消耗 + 标准)
要在工作流程中存储和传递数值,可以创建变量。 变量支持整数、浮点数、布尔值、字符串、数组和对象值。
例如,变量可帮助跟踪某个循环运行的次数。 要遍历数组或检查特定项,使用变量引用每个数组项的索引号。
创建变量后,选择一个任务:
先决条件
一个 Azure 帐户和订阅。 获取 Azure 帐户。
要在其中创建变量的逻辑应用工作流,包括用于启动该工作流的触发器。
在你添加创建和处理变量的动作之前,你的工作流程必须 先从触发器作为 工作流程的第一步开始。
本指南使用Azure门户,但你也可以使用Visual Studio Code和相应的Azure 逻辑应用扩展来构建逻辑应用的工作流程:
- 消耗工作流:Visual Studio Code
- 标准工作流:Visual Studio Code
变量处理的考虑
默认情况下, 对于每个 循环,迭代是并行运行的。 为了确保循环中的变量产生可预测的结果,请顺序 运行循环。
变量存在且仅在创建它们的工作流程中是全局的。
变量只在该工作流程中跨循环迭代持续存在。
引用变量时应以名称引用,而不是创建该变量的动作名称,后者通常是引用动作输出的做法。
初始化变量
要创建变量,可以在工作流程中添加 初始化变量 操作。 你只能在工作流全局层面声明变量,不能在作用域、条件和循环中声明。
在 Azure 门户中,在设计器中打开逻辑应用工作流。
在设计器中,按照你的工作流程类型,按照一般步骤添加名为 Initialize 变量 的操作:
提供有关变量的以下信息:
属性 必填 值 描述 名称 是 < 变量名> 变量的名称。 类型 是 < 变量类型> 变量的数据类型。 值 否 < 启动值> 变量的初始值。
提示:尽管此值是可选的,但最好是设置此值,以便始终知道变量的起始值。若要一次创建多个变量,请选择 “添加变量”。
例如,这个 初始化变量 动作包含变量的名称、数据类型和初始值:
继续为您的场景添加所需的操作。 完成后,请在设计器工具栏上选择“保存”。
如果你从设计器视图切换到代码视图,以下示例展示了 初始化变量 动作如何出现在你的工作流定义中,该定义以JavaScript对象符号(JSON)格式呈现:
"actions": {
"Initialize_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "Count",
"type": "Integer",
"value": 0
}
]
},
"runAfter": {}
}
}
以下示例演示其他变量类型:
布尔值变量
"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。
提示:尽管此值是可选的,但最好是设置此值,以便始终知道用于递增变量的特定值。以下示例显示了此操作的示例值:
完成后,保存工作流。 在设计器工具栏上选择“保存”。
如果从设计器切换到代码视图,以下示例演示“递增变量”操作如何以 JSON 格式在工作流定义中显示:
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Count",
"value": 1
},
"runAfter": {}
}
},
示例:用循环计数电子邮件附件数
在这个例子中,你将计数器初始化为零,对每个邮件附件递增一次计数器,然后返回附件总数。
在 Azure 门户中,使用空白工作流创建逻辑应用资源。 添加一个触发器,用于检查新电子邮件和任何附件。
这个例子使用了名为“当新邮件到达时”的Office 365 Outlook触发器。 设置这个触发器只有在邮件带有附件时才触发。 但是,可以使用任何可检查包含附件的新电子邮件的连接器,例如 Outlook.com 连接器。
在触发器中,对以下属性选择“是”,以检查是否有附件并将这些附件传入你的工作流:
- 仅带有附件
- 包括附件
添加 初始化变量 操作 ,创建一个名为 Count 的整数变量,起始于 0。
在设计器中,按照你的工作流程类型,按照一般步骤添加名为 “For each” 的操作:
在流程中,请按照以下步骤操作:
- 在名为“从前面的步骤中选择输出”的框内进行选择,以查看输入选项。
- 选择闪电图标以查看动态内容列表。
- 从列表中,在 “新电子邮件到达时”下,选择 “附件”。
Attachments 属性将包含电子邮件附件的数组从触发器的输出传递到循环中,供工作流循环访问。
在For each循环中,选择添加操作。
在设计器中,按照你的工作流程类型,按照一般步骤添加名为 “增量变量 ”的动作:
注意
确保 Increment variable 操作位于循环内部。 如果该操作显示在循环外部,请将其拖到循环中。
在 递增变量 操作中,从 名称 列表中选择 Count 变量。 将 Value 属性设置为 1。
在该循环下方,添加一个可将附件数量发送给你的操作。 在操作中,包含来自 Count 变量的值,例如:
完成后,保存工作流。 在设计器工具栏上选择“保存”。
测试工作流
若要手动触发工作流,请在设计器工具栏上,选择“ 运行>运行 ”以手动运行工作流。
将包含一个或多个附件的电子邮件发送到本示例中使用的电子邮件帐户。
此步骤将触发工作流触发器,从而创建并运行工作流实例。 因此,工作流会发送消息或电子邮件,其中显示了发送的电子邮件中的附件数目。
如果您从设计器切换到代码视图,以下示例展示了 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" ]
}
}
},
递减变量
若要按特定常量值减小或递减变量,请遵循递增变量步骤,不过需要向工作流添加“递减变量”操作。 此操作仅适用于整数和浮点数变量。
下表描述了“递减变量”操作的信息:
| 属性 | 必填 | 值 | 描述 |
|---|---|---|---|
| 名称 | 是 | < 变量名> | 要递减的变量名称 |
| 值 | 否 | < 递减值> | 用于递减变量的值。 默认值为 1。 提示:尽管此值是可选的,但最好是设置此值,以便始终知道用于递减变量的特定值。 |
如果从设计器切换到代码视图,以下示例演示“递减变量”操作如何以 JSON 格式在工作流定义中显示:
"actions": {
"Decrement_variable": {
"type": "DecrementVariable",
"inputs": {
"name": "Count",
"value": 1
},
"runAfter": {}
}
},
设置变量
若要为现有变量赋予不同的值,请按照递增变量的步骤操作,但有以下例外:
改为找到并选择“设置变量”操作。
为此操作提供以下信息:
属性 必填 值 描述 名称 是 < 变量名> 要更改的变量名称。 值 是 < 新值> 您想要赋给该变量的值。 确保变量和新值的数据类型相同。 之所以需要该值,是因为此操作没有默认值。 注意
除非递增或递减变量,否则更改循环中的变量可能会产生意外的结果,因为循环在默认情况下是并行或并发运行的。 对于这种情况,请尝试将循环设置为按顺序运行。 例如,若要引用循环中的变量值,并且预期该循环实例开头和末尾的值相同,请遵循以下步骤更改循环的运行方式:
选择循环以查看信息窗格,然后选择 “设置”。
在 “常规 ”部分中,在 “并发控制”下,将设置从 “关闭 ”更改为 “打开”。
将 并行度 滑块拖动到 1。
如果你从设计器视图切换到代码视图,下面的示例展示了 Set 变量 操作如何出现在你的工作流定义中(该定义为 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" ]
}
}
},
追加到变量中
对于存储字符串或数组的变量,可以插入或追加一个变量值,作为这些字符串或数组中的最后一个项。 请按照递增变量的步骤操作,但以下情况除外:
根据变量是字符串还是数组,找到并选择以下操作之一:
- 追加到字符串变量中
- 追加到数组变量
提供要作为字符串或数组中的最后一项追加的值。
属性 必填 值 描述 名称 是 < 变量名> 要更改的变量名称。 值 是 < 追加值> 你想附加的值可以是任意类型。
如果从设计器切换到代码视图,以下示例演示“追加到数组变量”操作如何以 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" ]
}
}
},