Microsoft-Power-Automate-工作流自动化-二-
Microsoft Power Automate 工作流自动化(二)
原文:Workflow Automation with Microsoft Power Automate
译者:飞龙
注意
是的,字符串和文本可以使用大于或等于等比较运算符,但这可能会导致意料之外的结果,或让你的流更难调试。使用数值运算符时的结果将基于字符串的字母顺序,而不是实际值。例如,评估abc > def的结果为 False,因为字符串abc的第一个字符的字母顺序低于字符串def的第一个字符。
回顾你在“生成通知”中创建的流,你可以看到条件如何用于比较动态内容的值:在这种情况下,我们不希望在每次收到电子邮件时都发送通知;我们只想在发件者值相同时生成通知。这是通过is equal to实现的,它可以用于评估字符串或数值值。
在接下来的示例中(基于第 2 章“开始使用 Power Automate”中的“创建你的第一个流”部分),你可以看到我们已对其修改以包含一个条件。更新后的流包含一个条件,用于评估发布的推文是否至少有 100 个粉丝,如果是,则向通道启动发布操作:
图 8.2 – 实现计算粉丝数量的条件
如你所见,使用条件评估文本或数值字符串是相当直接的。
在 Power Automate 中评估对象
除了能够评估字符串、数字、表达式结果或动态内容值外,Power Automate Desktop 还有特殊的条件来处理不同类型的对象:
-
If file exists(如果文件存在):在执行一组操作之前检查文件是否存在。 -
If folder exists(如果文件夹存在):在执行一组操作之前检查文件夹是否存在。 -
If window exists(如果窗口存在):如果特定窗口处于打开状态,则执行一组操作 -
If window contains(如果窗口包含):如果窗口中存在特定文本或 UI 元素,则执行一组操作 -
If image exists(如果图像存在):如果在屏幕上找到特定图像,则执行一组操作 -
If web page contains(如果网页包含):如果网页包含特定元素或文本值,则执行一组操作
接下来,我们将查看如何将表达式作为条件公式的一部分。
使用动态值和多个条件
可能基于单个静态值(例如电子邮件消息的发件者)的条件并不能提供流所需的粒度、灵活性或可移植性。在这种情况下,你也可以同时使用多个条件(包括评估动态内容值的条件)来做出决策。
你已经见过在第 4 章“复制文件”中将表达式作为动态内容一部分的示例,例如使用dateTime()和utcNow()。在那个示例中,表达式被用于帮助生成存储费用报告的文件夹名称值。你也可以将表达式或函数作为条件的一部分。我们将在下一章中探索更多表达式;你可以将对条件的知识扩展到包含使用表达式。
执行多次评估的条件通常被称为“高级条件”。你可以简单地使用“添加”按钮并继续添加准则。在添加多个待评估的准则时,有两种运算符可用:AND和OR。选择AND要求所有条件都评估为真,控制操作才会评估为真。选择OR则只需要其中一个条件评估为真即可。
在接下来的章节中,我们将查看两种利用多个准则创建高级条件的场景。第一个将一起使用多个条件,第二个将使用多个条件组。
添加多个条件
现在你已经理解了可以使用哪些内容进行评估,让我们来看看整合一些条件逻辑以增加流的复杂性。使用条件更改流的行为是一个重要概念,它将让你在处理业务场景时变得非常精确。
以下示例了向我们的 Monitor X 中添加一个条件,以评估推文语言是英语还是西班牙语:
-
从 Power Automate 门户(
https://make.powerautomate.com),选择“My flows”(我的流),然后选择“Monitor X”进行编辑。 -
在“发布推文”和“在通道中发布消息”操作之间点击
+图标以插入新步骤,如图 8.3 所示: -
选择“Add action”(添加操作)。
-
在“Choose operation”框中,搜索并添加“Condition”(条件)控件。
-
从动态内容菜单中,选择 Tweet language(推文语言)令牌和
is equal to运算符,然后输入en作为值。这添加了英语作为条件,以便控制操作评估为真。 -
选择“New item”(新建项目),然后点击“Add row”(添加行):
-
选择 Tweet language 动态内容令牌和
is equal to运算符,然后输入es作为值(或另一个两位语言代码)。这添加了西班牙语作为条件,以便控制操作评估为。在此时,推文语言必须同时评估为英语和西班牙语,条件才为真。虽然从语法角度来看这是一个有效配置,但它将导致没有内容可以通过条件。 -
选择“Condition”表达式标题下的下拉框,然后选择
OR运算符
图 8.6 – 将运算符更新为 OR
- 点击“Post message in a channel”操作的标题,将其拖到“True”(真)分支框的正文中,如图 8.7 所示。
图 8.7 – 将操作移动到条件分支
- 点击“Save”(保存)。
此时,需要发布一条语言为英语或西班牙语的推文,条件才能评估为真。这个简单的示例展示了你如何使用条件来帮助过滤或识别符合特定业务准则的内容,并对其进行操作。
在下一节中,我们将介绍条件组(condition groups)的概念以及如何使用它们进一步控制流的处理。
添加条件组
在之前的示例中,我们配置了一个条件,只需满足一个标准即可处理流。然而,在某些场景下,你可能需要从一个或多个条件组中选择多个值。组允许你从一个或多个条件集中指定一个或多个需要满足的条件,以满足控制需求。
在本示例中,我们将重新配置流以满足以下条件之一:
-
推文语言必须是英语或西班牙语
-
发送推文的账户累计粉丝数超过 100 人,或点赞数超过 100 个(我们用此作为一种识别和忽略机器人的简单方法)
为了实现这一点,我们将创建两个逻辑组:一个用于评估语言,另一个用于评估粉丝和点赞数。
请按照以下步骤创建条件组:
-
从 Power Automate 门户(
https://make.powerautomate.com),选择“流”(Flows),然后选择“Monitor X”流进行编辑。 -
选择你在上一个练习中创建的“条件”(Condition)控件以将其展开。
-
勾选两个推文语言条件的复选框,点击其中一行的省略号(...),并选择“创建组”(Make group)。
图 8.8 - 将现有条件移动到条件组
- 情况下,Power Automate 将新条件组的运算符配置为
AND(与)。选择下拉菜单将其更改为OR(或),如图 8.9 所示;
图 8.9 – 更新条件组运算符
-
如果 Power Automate 在你的新组之外创建了额外的条件(如图 8.9 所示),只需选择并删除它。
-
点击“条件”控件底部的“添加”(Add)按钮并选择“添加组”(Add group),如图 8.10 所示。
图 8.10 – 添加新的条件组
-
在新条件组中,将运算符更改为
OR。 -
在新条件组中,选择行中的第一个文本框。添加“粉丝数”(Followers count)动态内容值,选择“大于等于”(is greater than equal to)运算符,然后输入值 100。
-
在新条件组中,点击“添加”按钮并选择“添加行”(Add row)。选择“点赞数”(Favorites)动态内容值,选择“大于等于”运算符,输入值 100。
-
将整体条件的顶层运算符从
OR为AND。查看图 8.11 查看完成的条件控件。
图 8.11 - 检查已完成的条件控件
-
点击“保存”(Save)。
-
使用另一个浏览器窗口,准备一条符合触发流标准的推文。如果你没有符合所需粉丝数或点赞数要求的 X 账户,可以更新条件以匹配你可以满足的场景。
-
在 Power Automate 门户中,点击“测试”(Test),选择“我将触发操作”(I will perform the trigger action)按钮,然后点击“测试”。
-
回到之前的浏览器窗口并发送推文。
-
返回 Power Automate 设计器门户,通过展开触发器和条件来验证结果。如果你满足发布到 Teams 频道的条件,你也可以去那里查看你的推文!
你可以从图 8.11 中看到,每个条件组至少有一个条件被成功满足,条件被评估为true(真),导致条件的“是”(Yes)分支执行。
使用切换条件(switch condition)
在大多数情况下,你可能会使用条件来检查布尔(真/假)值。然而,在某些情况下,流需要能够评估不仅仅是“是/否”、“等于/不等于”或“大于/小于”。你可以通过嵌套条件来实现更复杂的评估,但 Power Automate 提供了另一种结构:切换(switch)。
切换条件允许 Power Automate 从多个分支或路径中选择。如果你熟悉脚本或开发语言,switch或case语句的函数和语法会让你感到熟悉。
切换条件为流提供了从一组值中进行匹配的机会;如果没有匹配的值,流也有一个可以采取的默认(default)操作或路径。
考虑之前的流,你在其中添加了一个条件来检查推文的语言。与其用英语向 Teams 频道发送消息通知,如果你想根据推文的语言使用不同的语言发送通知会怎样?
让我们编辑该流并进行一些更改:
-
从上一个练习中打开“Monitor X”流。
-
展开“真或 / 如果是”(True or If yes)分支。
-
添加操作(Add action)。
-
选择“切换”(Switch)控件,如图 8.13 所示。
https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/workflow-automation-with-microsoft-power-automate/img/bfc58bb450784476738fab1c5bfe829d_163_1.png (注:此处示例图编号可能与原文略有出入,按逻辑翻译)
- 在操作操作。 .. 14 所示。
- 在参数选项卡中,展开下拉菜单,“推推语言”(Tweet language)。这表明我们将根据语言执行操作。
-
在切换控件内部点击
+图标,如图 8.15 所示。 -
在
Equals字段中,输入en。这是当语言代码为英语时的操作。
- 接下来,将“在聊天频道中发布消息”(Post message in a channel)操作拖入
Case主体。这是真分支执行的主组件。
-
在
Case语句和Default块之间点击+添加新用例。默认情况下,新用例命名为Case 2。在Case 2的Equals字段中,输入es。这是当语言代码为西班牙语时的操作。 -
在
Case 2操作中,点击操作。 -
像上一个练习那样配置操作,选择“机器人”作为发布值,选择“频道”作为发布值。你也可以从第一个用例中复制操作。
- 完成团队、频道和消息参数配置。在示例中,我们更新了原始文本以西班牙语显示:
-
滚动到默认(Default)用例。默认用例是在推文语言无法确定或不匹配任何配置值时将执行的操作集(在这种场景下不太可能,之前的条件组已经评估并过滤了推文语言)。
-
你可以添加操作,也可以复制粘贴原始用例操作。点击第一个用例中的“在聊天频道中发布消息”操作,在键盘上按
Ctrl+C,然后点击Default用例块中的+,如图 8.21 所示:
图 8.21 - 配置默认操作
- 点击“保存”(Save)完成流。
你可以通过发布符合你配置的逻辑条件的推文来测试该流。如果你发送英语推文,英语文本将发布到频道。如果你将 X 配置为使用西班牙语作为语言,推文将显示你输入的相应西班牙语文本。
总结
在本章中,你学习了如何使用高级条件。高级条件允许你使用多个动态内容标记和表达式,以限制流处理的数据实体。通过使用 AND(与)和 OR(或)运算符,你可以将多个条件组合成组,为流创建一个复杂的决策过程。
你还接触了切换条件(switch conditions)——一种控制操作类型,允许你的逻辑根据更广泛的评估结果采取不同的路径。
条件处理至关重要,因为它可以用于精炼和过滤数据输入,并确保在流执行之前符合业务标准或需求。条件处理还为你提供了创建满足复杂业务准则的流的机会。
在下一章章节中,我们将开始学习使用表达式和函数,你可以利用这些工具来创建非常强大的流。
9
理解表达式和函数
在过去的几个章节中,你已经开始使用动态值内容和条件控制来增加流的复杂度。这些都是强大的功能,允许你在数据流过流时对内容进行简单评估或使用基本值。
但你如何操作值呢?如果你需要将某些内容相加、拼接(或连接)值以构建更大的字符串,或者对日期或其他数字进行计算,该怎么办?
这就是本章大显用场的地方在本章中,你将通过以下章节,学习如何开始在 Power Automate 中处理更复杂的对象:
-
学习表达式和函数
-
处理字符串和文本
-
操作时间和日期
-
处理数组
如果你还没有对该平台的功能感到兴奋,那么这一章定会让你大开眼界。
学习表达式和函数
那么,什么是表达式和函数呢?
如前提到的,Power Automate 流是由对象和一种类似于 Excel 或 Visual Basic 宏的语言组成的。在这些语言中,工作流定义语言 (WDL)、表达式和函数指的是用于操作数据的内部过程和能力。
函数是一个基础的计算结构——是 Power Automate 提供的最底层处理逻辑。函数是允许你对传递给它的值执行预定义操作的操作。让我们来看 CONCAT 函数,它用于将字符串连接:
concat(text_1, text_2)
如果你使用过 Excel 函数,虽然函数是构建基石,但表达式是函数(包括其参数)、文本字符串和动态内容的应用,用于获取结果。
函数被分为 10 个不同的类别。
字符串
字符串或文本函数用于修改或格式化字符串、查找字符或其他其它方式操作文本。你已经见过 concat 字符串函数的示例。
集合
在编程语言中,集合是可以包含其他对象的类型。常见的集合类型包括数组和哈希表。集合函数可能用于检查数组是否为空、计算数组中对象的数量(或字符串中字符长度),或选择数组中的特定项目。
例如,你可以使用 length 函数返回字符串的长度。
length('The quick brown fox jumps over the lazy dog')
当在流中使用,此函数将返回 43(字符串中文本字符和空白字符的总和)。
逻辑
如果你用过其他编程语言,很可能你处理过类似 if/then 语句的结构。这类逻辑函数被用于执行基于逻辑的评估。
if(less(14,8),'Yes, it is less than','No, it is not less than')
当在流中使用时,如果第一个参数 (14) 小于第二个参数 (8),此函数将返回文本 Yes, it is less than;如果第一个参数大于第二个参数,则返回文本 No, it is not less than。
我们在上一章中提到了使用条件,而逻辑上的 if 函数可以执行与条件控制相同类型的评估。这取决于你选择哪种方式最适合你的场景。
转换
这些函数可以用于更改你正在处理的数据类型。你可能需要将存储为字符串的数值转换为实际整数,以便与数学函数一起使用。或者,你可能需要在 base64 和二进制编码之间移动文件。在这两种情况下,转换函数正是你所需要的。
例如,假设你有一个存储为文本的数字,并想将其转换为可以进行算术计算的数字。你可以通过这样的函数来实现:
int('14')
数学
你可以使用数学函数来执行算术计算,例如将两个数字相加。数学函数还包括查找数据集中最小或最大数字、生成随机数或返回除法余数的能力。
你可以使用以下表达式将两个数字相加:
add(14,8)
由于数学函数只接受两个参数,你需要将多个函数结合使用来执行额外的计算:
add(14,mul(4,8))
在此示例中,14 被加上了 4 和 8 乘积的结果。
日期和时间
如果不使用这类函数,处理日期和时间可能会非常痛苦。通过日期时间函数,你可以在时区之间转换、以多种方式格式化日期或计算范围。
例如,要返回流执行时的当前时间,可以使用:
utcNow()
引用
引用函数在触发器和操作期间使用。这些通常由 Power Automate 自动调用,尽管你可以自己编写它们。例如,如果你的流包含一个 GetPoint Item,你可以使用主体输出的 Title。
工作流
工作流函数用于引用有关你的流的信息。它们并不常用。
统一资源标识符 (URI) 解析
URI 函数用于处理 URI 字符串。你可能需要查找域或主机名、URI 路径,或编码解码 URL 字符串。
例如,encodeUriComponent 可以将字符串转换为 URL 编码格式:
encodeUriComponent('https://example.com') 将返回 https%3A%2F%2Fexample.com.
操作
这些函数通常用于处理 XML 对象或 JSON 节点。例如,你可能需要向 JSON 对象添加或设置特定属性。coalesce 是另一个你可能会使用的常用函数,用于在一组值查找第一个非空值。你可以这样使用它:
coalesce(null, 'Hello', 'world') 将返回字符串 Hello
你可以在此处了解更多可用函数:https://learn.microsoft.com/en-us/azure/logic-apps/expression-functions-reference
coalesce 函数在 Power Automate 中有时被视为逻辑函数,取决于你阅读的文档。
接下来,我们将查看使用表达式处理字符串和文本值。
处理字符串和文本
当你开始使用 Power Automate 函数和表达式时,可能会从处理字符串和文本开始。通过创建一个即时流并仅使用 Compose 操作,你可以了解函数的工作原理。
让我们处理一组字符串!
- 导航到 Power 制作门户 (https://make.powerautomate.com) 并创建一个新的即时云流。
图 9.1 – 创建新的即时云流
-
选择“手动触发流”并点击“创建”。
-
点击画布上的“手动触发流”触发器。
-
在“参数”选项卡上,添加任何输入类型。这并不重要,因为我们将使用
Compose操作来传递值进行实验。 -
添加操作。
图 9.2 – 添加输入
- 选择数据操作并进行组合。
图 9.3 – 扩展数据操作操作类型
-
在“输入”(Inputs)文本区域,添加一个表达式。
-
输入值
toLower()向表达式编辑器中添加toLower()函数。 -
在括号内,输入值
'HeLLO, wORLD'并点击添加(Add)。
图 9.4 – 手动添加表达式
完成后的表达式应显示为 toLower('HELLO, wORLD')。
-
添加一个操作并选择“组合”(Compose)操作。
-
在“输入”(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
substring('automate', 0, 3)并点击添加。 -
添加一个操作并选择“组合”(Compose)操作。
-
在“输入”(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
slice('automate', 0, 3)并点击添加。 -
添加一个操作并选择“组合”(Compose)操作。
-
在“输入”(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
replace('Brave Old World', 'Old', 'New')并点击添加。 -
添加一个操作并选择“组合”(Compose)操作。
-
在“输入”(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
indexOf('The quick brown fox jumps over the lazy dog', 'fox')并点击添加。此表达式应返回fox开始的字符整数索引。
第 9 章
-
添加操作(Add an action)并选择组合(Compose)操作。
-
在输入(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
nthIndexOf('I have an apple, a red apple, and a green apple.', 'apple', 2)并点击添加(Add)。此表达式应返回第二个单词 apple 开始的字符整数索引。 -
添加操作(Add an action)并选择组合(Compose)操作。
-
在输入(Inputs)区域,添加一个表达式。
-
在表达式编辑器中,输入
split('contoso: ENTERPRISEPACK:50:Unassigned', ':')并点击添加(Add)。此表达式根据冒号分隔符值分割字符串,创建一个包含四个项的数组(contoso、ENTERPRISEPACK、50和Unassigned)。 -
可选,根据你正在测试的函数对每个组合(Compose)操作步骤重命名。
-
点击保存(Save)然后点击测试(Test)。
-
选择手动(Manually)并匹配你为触发器选择的输入类型,点击运行流(Run flow)。
-
输入与你为触发器选择的输入类型匹配的值,点击运行流(Run flow)。
检查流中每个步骤的输入和输出。例如,检查 concat() 函数步骤,你将看到一段单一文本:This is a concatenated string,如图 9.5 所示:
图 9.5 - 检查 concat 函数输出
继续检查操作的输出。你可能想返回并修改表达式的参数,查看它们如何影响文本选择或处理。
接下来,让我们看看如何处理时间和日期值。
处理时间和日期
如之前提到的,日期和时间在传统上是非常棘手的处理对象。有多个可用函数可以帮助你在流中使用时间和日期。
计算星期几
假设你想使用 Power Automate 流来确定特定日期是星期几。你可以使用 dayOfWeek() 函数来解出这个问题:
-
导航到 Power Automate 门户网站( https://make.powerautomate.com/ )并创建一个新的即时流(instant flow)。
-
在画布上点击“手动触发流”(Manually trigger a flow)。
-
在“参数”(Parameters)选项卡上,点击“添加输入”(Add input)并选择“日期”(Date)输入类型。
-
添加操作。
-
过滤操作找到“组合”(Compose)数据操作并将其添加到画布上。
-
在“组合”操作的“参数”选项卡上,在“输入”(Inputs)字段中插入一个表达式。
- 添加
dayOfWeek函数。
图 9.8 - 添加 dayOfWeek 函数
- 在函数区域添加一个左括号,然后选择“手动触发流”下“日期内容”(Date content)令牌下的“动态内容令牌”(Dynamic content token)令牌。
图 9.9 - 添加日期内容值
-
点击保存。此“组合”操作将返回对应触发器的星期几的整数。
-
点击测试运行流。
-
在“测试”浮窗中,选择“手动”(Manually)按钮并点击“测试”。
-
在“运行流”浮窗中,输入一个日期(或从日期控件中选择),然后点击“运行流”。
- 在流运行后,选择“组合”操作,然后选择“显示原始输出”(Show raw outputs)以查看数值。
接下来,我们将更新流以显示实际日期。
-
点击“编辑”(Edit)返回编辑流。
-
在“组合”操作之后,添加另一个操作。
-
有多种方法解决此问题,例如使用复杂表达式或使用“切换”(Switch)条件。正如你之前看到复杂数学计算的那样,你可以嵌套多个函数来执行高级评估。在这个示例中,你可以复制并粘贴以下表达式来开始:
if(equals(dayOfWeek(), 0), 'Sunday',
if(equals(dayOfWeek(), 1), 'Monday',
if(equals(dayOfWeek(), 2), 'Tuesday',
if(equals(dayOfWeek(), 3), 'Wednesday',
if(equals(dayOfWeek(), 4), 'Thursday',
if(equals(dayOfWeek(), 5), 'Friday',
- 在
dayOfWeek()函数的括号内,选择“手动触发流”下“日期内容”令牌下的“动态内容令牌”下的动态内容。
-
点击保存然后点击测试。
-
在流运行后,选择“组合”操作,然后选择“显示原始输出”。如下图所示。
图 9.14 - 检查流的输出
如之前提到的,你可以使用表达式或“切换”(Switch)控件来计算此。由于 dayOfWeek() 为每个星期返回不同的整数,你需要创建 7 种情况(除非你使用默认情况)。点击 + 号创建情况。
图 9.15 - 使用切换控件修改流
计算工作日
在工作环境中,通常使用工作日而非日历日(因为许多企业在周末不进行交易)。为了解决这个问题,我们将使用一系列“组合”操作进行计算。
-
导航到 Power Automate 门户网站(
https://make.powerautomate.com/)并创建一个新的即时流。 -
在画布上点击“手动触发流”。
-
在“参数”选项卡上,点击“添加输入”并选择“日期”输入类型。
-
将其命名为“开始日期”。
-
点击“添加输入”并选择“日期”输入类型。
-
将其命名为“结束日期”。
图 9.16 - 配置触发器
-
添加操作。
-
选择“组合”操作。
-
添加一个表达式。
-
在表达式字段中,输入
div(sub(ticks(), ticks()), 86400000000)。此表达式使用了ticks()函数,对于初学者来说,在 Microsoft .NET 编程中一个 tick 代表 100 纳秒。然后,点击第一个ticks()的括号并选择“结束日期”动态内容值。 -
对第二个
ticks()函数重复此过程,选择“开始日期”动态内容值。见图 9.17。
图 9.17 - 添加天数计算
提示:如果在运行工作流时遇到超出范围(out of range)错误,请确保结束日期值位于第一个
ticks()函数中,而开始日期参数位于第二个ticks()函数中。
-
点击添加。
-
添加操作。
-
选择“编写数据”(Compose)操作。
-
输入以下表达式:
(range(0, add(), 1))。此表达式将用于构建一个由单个数字组成的数组,每个数字代表一天。此数字范围将用于递增开始日期,通过每个dayOfWeek()函数返回代表星期几的整数。 -
点击
add()函数括号内部。添加“编写数据”操作的“输出”(Outputs)动态内容值,这是你计算的两个日期之间的天数。见图 9.18。
-
添加操作。
-
选择“数据操作”(Data operations),然后选择“选择”(Select)操作。
-
在“参数”(Parameters)选项卡上,从“从”(From)字段添加上一个“编写数据”操作的“输出”动态内容值,该操作创建了日期范围。
-
在“映射”(Map)部分,在“键”(Key)字段添加如
my的值。然后,在“值”(Value)字段添加以下表达式:addDays(triggerBody()['date'], item())。此表达式利用addDays()函数为“创建日期范围”编写数据函数“输出”动态内容中的每个项为开始日期增加相应的天数。 -
添加操作。
-
选择“筛选数组”(Filter array)操作。
-
在“参数”(Parameters)选项卡上,在“从”(From)字段中,添加来自“选择”(Select)语句的“输出”(Output)动态内容值。可选,可以将操作重命名为具有描述性的名称。
-
在“筛选查询”(Filter query)字段中,输入
dayOfWeek(item())['mydate']。此表达式将评估上一个“选择”(Select)操作的数组项。item()函数用于获取当前数组项。 -
在“运算符”(Operator)下拉菜单中,选择“不等于”(is not equal to)。
-
在“值”(Value)字段中输入数字 6。如果你还记得计算星期几练习,每周的每一天都被分配了一个数字(在这种情况下,我们选择 6 代表星期六)。
输出将是一个数组,过滤掉所有 dayOfWeek() 评估为 6 的日期。
图 9.21 - 过滤掉星期六
接下来,我们将重复过滤过程,只是现在我们要过滤掉 dayOfWeek() 函数评估为 0 的项。
-
添加操作。
-
选择“筛选数组”(Filter array)操作。
-
可选,将操作重命名为具有描述性的名称,在“从”(From)字段中,添加来自“过滤星期六”数组的“输出”动态内容值。
-
在“参数”(Parameters)选项卡上,在“从”(From)字段中,添加“过滤星期六”数组操作的“输出”动态内容值。
图 9.22 - 选择输出动态内容
- 筛选查询的构建方式与“过滤星期六”数组的查询相同——只是这次,它应配置为不等于 0。见图 9.23。
图 9.23 - 构建筛选查询
此表达式的结果应该是所有过滤后的日期的列表(其中 dayOfWeek 评估为 6 或 0 的日期已被移除)。最后,我们将对它们进行计数!
-
添加操作。
-
选择“编写数据”(Compose)操作,在“输入”(Inputs)字段中添加一个表达式。
-
在“参数”(Parameters)选项卡上,添加
length()函数。 -
在括号中,添加“过滤星期日”(Filter out Sundays)操作下的“正文”(Body)动态内容标记。此表达式将计算数组中的项数(这应该是我们过滤掉星期六和星期日后的列表)。完成后的表达式应该类似于
length(body('Filter_out_Sundays'))。点击添加。
-
保存并测试工作流。
-
在查看运行历史时,“输出”(Outputs)区域应包含你的开始和结束日期之间的(非周末)日期。作为验证,你可以打开工作流并计算天数。
处理数组
数组,如前述提到的,是对象的集合。早些演示的 split() 函数根据分隔符将字符串拆分为数组。有许多数组函数可以用来处理数据。让我们来看其中几个。首先,让我们使用“编写数据”(Compose)操作创建数组。
-
添加操作。
-
选择“编写数据”(Compose)操作。
-
在“参数”(Parameters)选项卡上,在“输入”(Inputs)字段中添加以下表达式:
split('pepperoni,sausage,mushrooms,olives,tomatoes,cheese',',')。见图 9.26。
图 9.26 - 创建数组
接下来,我们将使用“选择”(Select)操作将数组中的每个元素添加到一个新数组中。
-
添加操作。
-
选择“选择”(Select)操作。
-
在“参数”(Parameters)选项卡上,从“从”(From)字段,添加上一个“编写数据”操作的“输出”动态内容值,该操作创建了数组。
-
在“映射”(Map)部分,在“键”(Key)字段添加如
my的值。然后,在“值”(Value)字段添加以下表达式:item()。此表达式将返回当前数组项。
接下来,我们将使用 contains() 函数检查特定值是否存在于数组中。
-
添加操作。
-
选择“编写数据”(Compose)操作。
-
在“参数”(Parameters)选项卡上,在“输入”(Inputs)字段中添加
contains()函数。此函数可检查特定值是否存在于数组中。结果是布尔值(真或假)。
接下来,我们将使用 empty() 函数检查数组是否为空。
-
添加操作。
-
选择“编写数据”(Compose)操作。
-
在“参数”(Parameters)选项卡上,在“输入”(Inputs)字段中添加
empty()函数。此表达式将根据数组是否为空返回一个布尔值(真或假)。由于此数组包含对象,我们预期输出为假。
接下来,我们将使用 intersection() 函数获取两个数组的共同值。
-
添加操作。
-
选择“编写数据”(Compose)操作。
-
在“参数”(Parameters)选项卡上,在“输入”(Inputs)字段中添加
intersection()函数。此表达式将返回一个包含两个数组共同值的新数组。完成后的表达式应类似于:intersection(outputs('Pizza_ingredients_1'),outputs('Pizza_ingredients_2'))
进一步探索
你可以使用“初始化变量”(Initialize variable)操作创建在本节中使用的数组。在“参数”(Parameters)选项卡上,设置“名称”(Name),将“类型”(Type)选择为“数组”(Array),然后在“值”(Value)字段中输入 ["pepperoni", "sausage", "onions", "mushrooms", "olives", "tomatoes", "cheese", "sauce"]。然后可以使用“操作”(Compose)函数的输出更新此变量。
图 9.30 - 初始化数组变量
本章有很多新概念,因此你可能想下载示例并开始亲自进行实验!
总结
掌握表达式是充分利用 Power Automate 功能的关键。本章介绍了几种你可以直接应用于 Power Automate 流的不同表达式和函数。
字符串和文本的函数与表达式代表了 Power Automate 生态中最简单的类型,而时间和日期处理起来要复杂得多。数组是对象的集合——无论是时间、日期、字符串、整数甚至是其他数组!
接下来,我们将转向在 Microsoft 365 平台上处理审批(Approvals)工作。
获取本书的 PDF 版本和独家额外资源
扫描二维码(或访问 packtub.com/unlock)。按名称搜索此书,确认版本,然后按照页面上的步骤操作。
注意: 请妥善保留发票。直接从 Packt 购买的不需要发票。
第 10 章:开始使用审批
你在前几章中使用的流在很大程度上是自动化的(例如检测新文件或电子邮件),或由用户操作触发的(例如发送模板电子邮件的按钮流)。在本章中,我们将开始探索需要额外的用户操作才能继续的流,例如审批流。
审批流需要一个特殊的服务,用于存储与流相关的状态信息。Dataverse(以前称为 Common Data Service)是更复杂流(如审批)的基础。
具体来说,本章将涵盖以下主题:
-
了解
Dataverse -
创建审批流
-
使用审批流
在本章结束时,你将拥有 Dataverse 的实用知识,并能够创建基本的审批流。
让我们开始吧!
了解 Dataverse
Microsoft Dataverse(以前称为 Common Data Service,或 CDS)可以被比作数据库。它由称为表格(tables,以前称为实体)的数据对象组成。就像电子表格一样,表格具有列(以前称为属性)的概念。
微软文档目前对存储在 Dataverse 中的对象类型有两种单独的描述。我们已经在第 1 章“Power Automate 简介”中涵盖了新的命名法。然而在某些情况下,取决于用户界面 (UI)、协议或使用的技术,Dataverse 的术语可能会发生变化。
术语最大的变化之一是将实体(entity)重命名为表格(table)。你将遇到许多 UI 组件仍以旧名称引用 Dataverse 元素。当我们在 UI 中遇到这些内容时,我们会指出它们。
Dataverse 拥有涵盖许多使用场景的标准表格。标准表格位于几个组或类别中,如下所示:
| 表格类型 | 描述 |
|---|---|
| 标准 | 也称为开箱即用的表格,这些表格包括账户(Account)、部门(Business Unit)、联系人(Contact)、任务(Task)和用户(User)。 |
| 活动 | 用于管理在日历上执行的操作。活动表格包括预约(Appointment)、电子邮件(Email)、信函(Letter)、电话(Phone Call)、重复预约(Recurring Appointment)和任务(Task)。 |
| 虚拟 | 将填充来自 Dataverse 外部源数据的表格。 |
| 弹性 | 将超过数行的表格。 |
表 10.1 – Dataverse 表格类型
除了这些标准表格,Dataverse 还允许创建自定义表格以支持特定的业务流程或目标。
有关表格及其可以执行的操作的完整列表,请参考此参考:https://learn.microsoft.com/en-us/power-apps/developer/data-platform/reference/about-entity-reference。
涉及审批流,Dataverse 用于在流的整个期间在表格中存储状态信息。没有这种数据存储能力,审批流将没有机制来跟踪状态或任何审批分支。
虽然审批流依赖 Dataverse 运行,但终端用户不需要直接与 Dataverse 交互来创建审批流。有关 Dataverse 事务的所有集成和读取操作都是通过流创建过程内部透明地处理的——用户无需处理它们。
接下来,我们将学习创建审批流的步骤。
创建审批流
审批流可以涵盖许多场景,例如请求休假、经理签署报销单,或业务所有者签署发布的产品营销材料。审批流通常分为两类:
-
自动: 例如当向
SharePoint文档库或列表添加新项目时。你可能使用自动流来启动报销单的审批过程,该过程在文档上传到站点时触发。 -
即时: 例如当用户从现有文档、列表或应用程序手动启动审批。
审批(Approvals)连接器具有流可以交互的操作和对象类型,尽管我们主要处理响应和结果。你可以在此处了解更多关于审批连接器的信息:https://learn.microsoft.com/en-us/connectors/approvals
在启动审批时,工作流会向审批者发送电子邮件并在审批者的队列中添加项目。审批可以通过电子邮件、Teams 审批应用或 Power Automate 门户中的审批部分进行响应。在示例中,我们将创建一个休假请求的示例审批。此流具有以下前提条件:
-
具有已填充经理(
Manager)属性的Entra用户标识 -
带有现代列表的
SharePoint现代团队站点,包括开始日期和结束日期的日期时间列
在接下来的章节中,我们将设置一个支持审批的环境,然后创建审批流。
配置前提条件
首先,我们将创建将用于流的 SharePoint 站点和列表。
创建 SharePoint 站点和列表
在此例中,请求将添加到 SharePoint 列表中。你可以按照以下步骤创建带有列表的站点:
-
导航到
Microsoft 365管理中心(https://admin.microsoft.com),使用管理员身份登录,并导航到SharePoint管理中心(管理中心 |SharePoint)。 -
选择站点(
Sites) | 活动站点(Active sites)并点击创建(Create)。
-
选择团队站点(
Team site)。 -
选择标准团队模板(
Standard team template)。 -
点击使用模板(
Use template)。
-
输入站点名称,例如
Vacation Requests。 -
填充站点描述、组电子邮件地址、站点地址、地址和组所有者的其他属性。点击下一步(
Next)。
图 10.3 – 配置站点属性
-
将隐私设置设置为公共(
Public),选择语言并设置时区。点击创建站点(Create site)。 -
在添加站点所有者和成员页面,添加任何其他成员并点击完成(
Finish)。 -
导航到新站点。
-
展开导航菜单并选择站点内容(
Site contents)。
图 10.4 – 访问导航菜单
- 点击“新建 (
New) | 列表 (List)”,如图 10.5 所示。
-
选择“空白”模板类型。
-
为列表输入名称(例如
Requests),并点击“创建 (Create)”。
接下来,我们将为列表配置额外的列。
配置列
在本节中,我们将配置存储和处理请求数据所需的列。接下来的步骤介绍如下:
- 点击“添加列 (
Add column)”。
图 10.6 - 查看列表
-
选择“日期和时间 (
Date and time)”作为类型并点击“下一步 (Next)”。 -
在“创建列 (
Create column)”浮窗中,为开始日期列输入名称,例如“从 (From)”。
图 10.7 - 创建“从 (From)”列
-
点击“保存 (
Save)”。 -
点击“添加列”,选择“选择 (
Choice)”作为类型,并将名称设置为“状态 (Status)”。点击选择选项并将它们重命名为“待处理 (Pending)”、“已批准 (Approved)”和“已拒绝 (Denied)”,如图 10.8 所示。将默认值设置为“待处理 (Pending)”,完成后点击“保存”。
图 10.8 - 配置选择列
- 根据下表添加额外的列(以及您需要的任何其他详细列):
| 名称 | 类型 | 可能的值 | 默认值 |
|---|---|---|---|
| 收件人 (To) | 日期和时间 | [NA] | [NA] |
| 详情 (Details) | 多行文本 | [NA] | [NA] |
表 10.2 – 列表列设置
您可以根据自己的逻辑自由地拖动这些列的顺序。
您的 SharePoint 站点和列表现在已准备好接收休假请求!接下来,我们将创建实际的审批流。
创建审批
创建 SharePoint 站点和列表后,我们需要创建一个实际的审批,以便在请求出现在列表中出现时对其进行处理。按照以下步骤创建审批流:
-
导航到
Power Automate网页门户(https://make.powerautomate.com)。 -
点击“创建 (
Create))。在“从空白开始 (Start from blank)”下,选择“自动化云流 (Automated cloud flow)”. -
输入流名称,例如“休假审批 (
Vacation Approval)”。搜索“SharePoint创建新项时 (When an item is created)” 触发器。选择它并点击“创建”。 -
点击“创建新项时 (
When an item is created)”触发器。 -
在“参数 (
Parameters)”选项卡中,在“站点地址 (Site Address)”下拉菜单中,选择您在上一步中创建的Vacation RequestsSharePoint站点。如果站点未显示,使用下拉菜单中的“自定义值 (Custom value)”选项手动指定地址。 -
在“列表名称 (
List Name)”下拉菜单中,选择您在先决条件中创建的列表。如果列表未显示,使用下拉菜单中的“自定义值 (Custom value)”选项手动指定列表。
-
添加操作 (
Add an action)。 -
添加“获取配置 (
Get profile (V2))”操作.
图 10.10 – 添加“获取配置 (Get profile (V2))”操作
-
添加操作。
-
在“获取经理 (
Get manager (V2))”操作中添加“获取经理”框。 -
在“获取经理 (
V2)”操作的“用户 (UPN)”值中,添加来自“获取配置 (V2)”操作的“用户主体名称 (User Principal Name)”动态值令牌:
图 10.11 – 添加“用户主体名称”动态内容值
-
添加操作。
-
选择“启动并等待审批 (
Start and wait for an approval)”操作,如图 10.12 所示。
图 10.12 – 添加审批操作
- 在“参数 (
Parameters)”选项卡中,展开“审批类型 (Approval type)”下拉菜单,并选择“自定义响应 - 等待单个响应 (Custom Responses - Wait for one response)”。
图 10.13 - 选择自定义响应审批类型
-
在“响应选项 (
Response options)”下,输入文本“批准 (Approve)”。 -
选择“新建项 (
Add new item)”并添加另一个文本为“拒绝 (Deny)”的选项。这些选项将在审批发送给审批者时显示:
图 10.14 - 配置响应选项
- 在标题 (
Title) 字段中,输入将向审批者显示的标题。可以使用来自“获取配置 (V2)”操作的“显示名称 (Display Name)”动态内容来填充它:
- 在“分配 (
Assigned)”框中,添加来自“获取经理 (V2)”操作的动态令牌:
图 10.15 - 配置标题和分配
-
在详情 (
Details)框中,输入您想要包含的任何额外信息。 -
在“链接 (
link)”框中,添加来自“创建新项时”的动态令牌。
图 10.16 - 配置审批操作
-
添加操作。
-
选择“控制 (
Control)”。 -
在框中,添加来自“启动并等待审批”的动态令牌。
开始审批
一旦创建了站点和列表,我们需要创建一个审批来处理列表中出现的请求。
-
在“操作符 (
Operator)”下拉菜单中,选择“等于 (equal to)”。 -
在“是 (
True)”分支下,添加操作。 -
选择“更新项 (
Update)”。 -
在“站点地址 (
Site Address)”下拉菜单中,选择您之前创建的Vacation RequestsSharePoint站点。 -
在“列表 (
List Name)”下拉菜单中,选择您在先决条件中创建的列表。 -
在“
ID”字段中,选择来自“创建新项时”的令牌。 -
在“标题 (
Title)”字段中,选择来自“创建新项时”的令牌。 -
在“状态值 (
Status Value)”下拉菜单中,选择“已批准 (Approved)”。
图 10.17 - 配置响应
- 右键点击“更新项”操作并“复制 (
Copy)”。
图 10.18 - 复制操作
- 在“否 (
False)”分支中,点击+图标,然后粘贴操作。
图 10.19 - 粘贴操作
-
在“状态值 (
Status Value)”下拉菜单中,选择“已拒绝 (Denied)”。 -
点击“保存 (
Save)”保存流。
添加日历事件和通知
通过在“是”分支中添加日历安排,可以增加此审批的实用性。根据需要在电子邮件中包含额外信息。使用以下可选步骤通过共享日历进行扩展:
-
在“休假审批”流中,导航到“是”分支的末端。
-
添加操作。
-
选择“
Office 365 Groups”连接器下的“创建组事件 (Create a group event (V2))”操作:
图 10.21 - 添加组事件
-
在“参数 (
Parameters)”选项卡中,在“组ID(Group Id)”下拉菜单中,选择与审批SharePoint站点对应的Microsoft 365组。只要连接账户具有权限,也可以选择其他组。 -
在“主题 (
Subject)”字段中,输入动态内容令牌和静态内容组成的任何值,例如来自“SharePoint创建新项时”的“创建者显示名称 (Created by Display Name)”令牌。 -
在“开始时间 (
Start Time)”字段中,添加来自“创建新项时”的开始时间动态令牌。 -
在“结束时间 (
End Time)”字段中,选择来自“创建新项时”操作的结束时间动态令牌。 -
展开“高级参数 (
Advanced parameters)”。选择“全天 (Is All Day)”和“显示为 (Show As)”进行显示。 -
将“全天”设置为“是 (
Yes)”并将“显示为”选项设置为“空闲 (Free)”。根据您的喜好编辑任何额外选项。
图 10.22 - 配置更新项操作
- 点击保存保存流。
Microsoft 365 组日历现在将更新并显示请求者已批准的休假日历项目。
进一步修改
除了在批准后在 Microsoft 365 组日历创建条目外,您还可以添加另一个操作来在请求者的日历上配置日历事件。另一个实用的修改可能是向请求者生成电子邮件以进行批准或拒绝。
接下来,我们将开始使用审批。
使用审批流
回想一下该流,它包含几个步骤:
-
添加到 SharePoint 列表的请求
-
触发的审批
-
审批响应
-
更新 SharePoint 列表项
让我们从请求者的角度来看审批。
开始审批
测试“创建”此流最简单的方法是启动一个休假请求。请按照以下步骤操作:
-
导航到作为本次练习一部分创建的 SharePoint 列表。
-
在列表中,点击“新建”以创建一个新的请求项。
-
填写表单。添加标题,选择开始和结束日期,并点击保存。
图 10.25 - 创建新的休假请求
- 点击保存。
此时,您已经创建了一个可以作为审批流触发器的 SharePoint 列表,以及“创建”了审批流本身。最后,您触发了该流。接下来,我们将看到在审批者端看起来是什么样。
响应审批请求
作为审批者,您将收到一封电子邮件通知,说明需要采取操作。审批也会出现在 Power Automate 网页门户和移动端应用程序的“审批”部分,以及 Microsoft Teams 中的“审批”应用中。可以从这些位置中的任何一个处理审批。
审批具有根据审批流中选择的各种响应选项项的按钮。在接后的截图中,您可以看到我们在创建审批流时配置的选项显示在电子邮件正文中。审批者可以选择“批准”或“拒绝”,输入任何可选信息,然后点击“提交”。
图 10.26 显示了审批邮件发送给审批者时的样子:
图 10.26 – 审批请求电子邮件
如果您的组织部署了审批 Teams,则该请求在那里可用,如图 10.27 所示:
图 10.27 – Microsoft Teams 中的审批应用
最后,审批者还可以登录 Power Automate 网页门户并导航到“审批”,以查看并处理挂起的审批请求:
如您所示,可以从任何环境访问并处理审批。由于审批显示在多个位置,审批者可能无需离开应用程序上下文,就可以以最少的中断继续工作。
选择选项后,项会在 SharePoint Online 列表中更新,如接下来的截图所示:
图 10.30 - 更新的列表项
如果您通过日历触发了流,您也将在应用中看到该项:
图 10.31 - 审批请求
选择选项后,项会在 SharePoint Online 列表中更新,如接下来的截图所示。
总结
在本章中,您学习了最流行且实用的功能之一:审批。您学习了如何创建审批、触发审批并响应。您还学习了如何从多个位置访问审批。在下一章中,我们将探索更复杂的审批场景。
第 11 章
使用审批
在第 10 章“审批入门”中,您学习了审批的机制。虽然顺序审批很常见,但在许多情况下,您需要并行审批或更复杂的审批流。在本章中,我们将涉及以下内容:
-
使用顺序审批
-
使用并行审批
-
使用高级场景
-
创建审批流
在本章结束时,您将理解如何使用这些技术。
使用顺序审批
顺序审批要求按顺序进行多个阶段的审批。图 11.1 显示了一个示例:
图 11.1 - 顺序审批
该图描绘了以下事件的顺序:
-
用户向 SharePoint 列表添加一个项。
-
Power Automate 使用该列表作为触发器,向第一个审批者发起审批。
-
第一个审批者对请求做出响应(“批准”或“拒绝”)。
-
Power Automate 处理审批。然而,与单一审批不同,它启动了下一个(最终)审批阶段。
-
第二个审批者对请求做出响应(“批准”或“拒绝”)。
审批过程可以有任何数量的阶段,而不限于两个。
使用并行审批
顺序审批按单线程处理,而并行审批是独立发生的。休假请求也可以以并行审批的形式出现:您可能需要两个人来批准休假(例如您的直属经理以及一名 HR 代表员,或者直接经理和项目经理),但这些个人可能处于不同的管理和汇报结构中,他们的审批过程是相互独立的。
并行审批过程允许不同的审批分支独立进行。流末尾的逻辑(如条件)用于评估整个审批是否成功。
使用高级场景
创建更复杂的审批工作流时,可以使用一些配置选项。这些选项通常用于大型组织,一个或多个个人或组可以与审批交互。我们将简要介绍两种此类选项:混合审批类型和所有人批准。
对于非常复杂的场景,审批可能包含多个级别的顺序审批、并行与顺序审批的混合,甚至是分支中的顺序审批。这些类型的审批被称为混合审批。在评估结果和响应时,您需要确保选择了正确的动态值标记。
所有人批准
在创建审批工作流时,如果满足两个条件之一,做出最终决策可能是理想的:
-
包含在内的所有人都批准了
-
任何单个审批者拒绝了审批请求
这些类型的审批被称为所有人批准。为了演示这些技术,我们将创建一个使用系列(或顺序)审批的审批。
创建基础顺序审批
在本节中,我们将创建一个涉及第一阶段和第二阶段审批的基础顺序审批。这类审批常见于以下场景:个人申请一定数量的休假,或需要进行达到特定阈值的支出。在本示例中,我们将创建一个根据价格阈值对请求的采购订单进行评估的审批。如果金额超过了用户直属经理 1,000 美元的审批限额,将触发另一个审批序列。
与本书中的其他一些工作流一样,我们将使用 SharePoint 列表作为起点。你也可以从其他方法获取输入,例如从文件中读取内容、从另一个系统的 REST API-webhook 获取,甚至请求用户输入(你将在第 16 节“接受用户输入”中学习相关内容)。
此流需要一个包含多个不同列和数据类型的列表。这些列将用于在流程处理过程中存储信息。整个流程如下:
-
配置前提条件
-
创建工作流
-
测试工作流
流的设计规定:第一级审批者是请求者的经理,而第二级审批者是一个名为“财务经理(Finance Manager)”的用户。请求需要获得这两位用户的批准才能被标记为“已批准”。
接下来我们将配置前提条件。
配置前提条件
首先,你需要配置一个 SharePoint 列表,用于存储采购订单请求的数据。
按照以下步骤配置列表:
- 导航到包含用于启动此工作流的列表的 SharePoint 站点。如果你没有合适的站点,可以创建一个。
图 11.2 – 创建新列表
-
从导航菜单中选择“站点内容”,然后点击“新建”并选择“列表”。
-
创建一个 SharePoint 列表。
-
在列表中,选择“所有项目”下拉菜单并选择“添加或删除字段”。
-
确保选择了
Title(标题)、Created(创建时间)、Created by(创建者)、Modified(修改)和Modified by(修改者)列,并点击“应用”。 -
使用“添加列”按钮,使用以下列和类型配置列表:
| 列名 | 列类型 |
| --- | --- |
| 采购金额 (Purchase Amount) | 货币 |
| 注释 (Comments) | 文本 |
| 需要预审批 (Pre-approval required) | 是/否(默认设置为否) |
| 已预审批 (Pre-approved) | 是/否(默认设置为否) |
| 已批准 (Approved) | 是/否(默认设置为否) |
| 创建者 (Created by) | 人或组(默认存在此列) |
| 修改者 (Modified by) | 人或组(默认存在此列) |
表 11.1 – 配置列表列
列创建完成后,就可以继续创建审批流了。请务必记住你正在使用的 SharePoint 站点 URL 和列表名称,因为你将在下一节中需要它们。
创建工作流
一旦创建了 SharePoint 列表,就可以开始处理流本身了。我们将分几个章节来创建此流:
-
创建触发器
-
创建第一阶段审批
创建触发器
让我们开始吧!
触发器将用于启动工作流。此流的触发器操作是用户在 SharePoint 列表中提交采购请求。
要创建此流,请按照以下步骤操作:
-
导航到 Power Automate 制作 Web门户 (https://make.powerautomate.com),登录并点击创建。
-
选择自动化云流。
-
为工作流输入一个名称(例如“采购订单请求两阶段审批”)。
-
从触发器列表中,选择 SharePoint 触发器 当项目创建时,然后点击创建。
通过连接你已使用的应用程序从重复性工作中解放出来——自动化警报、报告和其他任务。
示例:
-
在业务解决方案中自动收集并存储数据
-
通过对 SQL 数据库的自定义查询生成报告
-
点击触发器卡片以展开 当项目创建时。在站点地址字段中,选择存储列表的 SharePoint 站点的 URL。如果站点未出现在下拉菜单中,选择输入自定义值然后输入站点地址。
-
在列表名称字段中,选择你在配置前提条件节中创建的列表名称。
图 11.4 – 配置触发器
-
添加操作。
-
选择 Office 365 Users - 获取经理 (V2) 操作,在当项目创建时部分添加来自“创建者电子邮件 (Created By Email)”的动态内容标记。
-
在 获取经理 (V2) 操作的用户 (UPN)字段中,添加来自“当项目创建时”部分的“创建者电子邮件 (Created By Email)”的动态内容标记。
图 11.5 – 配置获取经理 (V2)
-
添加操作。
-
选择条件。
-
在条件的左侧,选择采购金额 (Purchase Amount)。
-
选择操作类型为大于。
-
在右侧输入 1000。
图 11.6 – 配置条件
- 点击“保存”。
现在触发器和条件已创建完成,是时候继续创建第一阶段审批了。审批流将走两条路径:如果价格超过 1,000 美元,将需要财务经理进行第二阶段审批。如果小于 1,000 美元,则将由直属经理批准。
要继续处理审批,请按照以下步骤操作:
-
在工作流中,展开否(False)分支。这是金额小于 1000 美元的分支。
-
对于审批类型,选择批准/拒绝 - 响应。
-
对于标题,包含来自“当项目创建时”部分的“标题”动态值标记,并带有其他描述性文本。
-
对于分配给,选择来自“获取经理 (V2)”部分的“电子邮件”动态值标记。
-
对于项目链接,选择来自“当项目创建时”部分的“链接”动态内容标记。
-
展开高级参数并选择请求者。
图 11.7 – 创建审批操作
-
在创建审批操作之后添加操作。
-
选择终止控件。
-
在终止控件的状态中,选择成功。这将停止后续步骤的执行。
图 11.8 – 配置终止操作
-
点击“保存”保存工作流进度。
-
展开是(True)分支。
-
添加操作并选择 SharePoint 更新项操作。
-
在站点地址字段中,选择包含此工作流所需列表的站点。如果站点未在下拉列表中显示,选择输入自定义值选项并粘贴 SharePoint 站点的 URL。
-
在列表名称字段中,选择用于此工作流的列表。
-
在ID字段中,选择来自“当项目创建时”部分的 ID 动态内容标记。
-
将标题字段设置为来自“当项目创建时”部分的标题动态内容标记。
-
将采购金额字段设置为来自“当项目创建时”部分的采购金额动态内容标记。
-
确保已预审批下拉菜单设置为否。
-
确保已批准下拉菜单设置为否。
-
将需要预审批下拉菜单设置为是。
图 11.9 – 配置创建审批
-
在更新项操作之后添加操作。
-
选择启动并等待审批操作。
-
对于审批类型,选择批准/拒绝 - 响应。
-
对于标题,包含来自“当项目创建时”部分的“标题”动态值标记,并带有其他描述性文本。
-
对于分配给,选择来自“获取经理 (V2)”部分的“电子邮件”动态值标记。
-
对于项目链接,选择来自“当项目创建时”部分的“链接”动态内容标记。
图 11.10 – 完成更新项操作
图 11.11 - 部分完成的条件控制配置
-
点击保存。
-
滚动到流程底部。
-
添加操作。
-
选择条件控制(Condition)。默认情况下,该操作将标记为
Condition 2。 -
将操作名称更新为具描述性的名称,例如评估阶段批准条件(Evaluate Stage Approval Condition)。
-
在条件控制中,选择左侧的选择值(Choose value)框,然后在“等待等待审批”(Start and wait for an approval)部分中选择结果(Outcome)动态内容令牌。
图 11.12 - 选择结果动态值内容令牌
-
确保操作符值设置为“等于”(equal to)。
-
在右侧的选择值框中,输入文本
Approve(批准)。 -
在“评估阶段 1 批准条件”的假(False)分支中,点击添加操作并选择“发送电子邮件 (V2)” Office 365 Outlook 操作。
-
在“项目创建时”(When item is created)部分下将创建者电子邮件(Created by Email)动态内容令牌添加到收件者(To)字段。
-
在主题(Subject)字段中添加拒绝消息。您可能想要包含
Title动态内容令牌。 -
在正文(Body)字段中添加拒绝消息。您可能还需要使用
TitleSharePoint 动态内容令牌,以及来自“获取经理 (V2)”操作的显示名称(Display Name)动态内容令牌:
图 11.13 – 正在处理阶段 1 批准条件
-
可选的是,您可能想扩展高级参数并添加发件人(发送为)[From (Send as)] 属性,并指定值如
noreply@domain.com(这样投诉就不会回到您的邮箱)。 -
在假(False)分支中,点击添加操作并选择终端控制(Terminal)。
-
状态(Status)选择“成功”(Succeeded)。
-
点击保存。
此时,审批流程的第一阶段已完成。对于金额在 1,000 美元或以下的采购订单,直接经理可以批准或拒绝请求。对于金额超过 1,000 美元的采购订单,SharePoint 项目将更新为“待审批”状态,并启动一个新的审批流程。
作为审批流程的一部分,流程会向请求者的经理发送通知。如果被拒绝,审批将结束;流程的最后一步是向请求者发送电子邮件,指示审批已被拒绝。然而,如果结果是批准的,工作流将启动一个新分支以开始第二阶段。
重命名步骤
默认情况下,步骤使用操作的名称标记。然而,在包含多个操作、条件或分支的长步骤或复杂步骤中,重命名特定步骤可能有助于记录您处于流程的什么位置。每个步骤都使用操作名称(默认值),并为每个实例附加一个数字(因为每个步骤必须有唯一的名称值)。
要重命名步骤,点击操作卡片,并在弹出的飞出窗口中编辑步骤名称。虽然您可以随时时候重命名步骤,但您可能需要返回并双重检查,以确保您的动态内容令牌引用了正确的值。建议在创建操作时对其进行重命名,而不是事后回来更新。
现在,让我们继续创建审批的下一个阶段。
创建第二阶段审批
在审批流程的此部分,请求将发送给第二级或第二阶段审批者。第二阶段审批者也将具有批准或拒绝请求的能力。
要完成此流程,请按照以下步骤操作:
-
在打开流程的情况下,选择第二个条件控制“评估阶段 1 批准”的真(True)分支,然后点击添加操作。
-
选择“更新项目”(Update item)操作
-
在站点地址(Site Address)字段中,选择包含此工作流 SharePoint 列表的站点。
-
在列表名称(List Name)字段中,选择用于此工作流的列表。
-
在
Id字段中,选择“项目创建时”部分下的ID动态内容令牌。 -
将标题(Title)字段设置为“项目创建时”部分下的
Title动态内容令牌。 -
将采购金额(Purchase Amount)字段设置为“项目创建时”部分中的
Purchase Amount动态内容令牌。 -
将预批准(Pre-approved)下拉菜单设置为“是”(Yes)。
9. 确保“已批准”(Approved)下拉菜单设置为“是”。见图 11.14。
10. 确保“需要预审”(Pre-approval required)下拉菜单设置为“是”。
11. 点击添加操作。
12. 选择“等待审批”(Start and wait for approval)操作。
13. 将步骤重命名为有意义的名称。
14. 对于类型(Type)字段,选择结果(Outcome)动态内容。
15. 对于主题(Subject)字段,选择“项目创建时”部分中的 Title 动态内容。
16. 对于分配给(Assigned)字段,选择经理的电子邮件地址。
第 11 章
201
图 11.15 - 快速检查流程
17. 点击保存。
您现在已完成第二阶段审批。接下来,我们将开始完成流程。
完成流程
在流程创建的最后部分,我们将遵循一个与实施预审时类似的流程:使用条件检查结果(Outcome)的值,然后更新 SharePoint 项目。
要完成此流程,请按照以下步骤操作:
-
在采购订单审批流程中,滚动到流程底部并点击新建步骤。
-
添加条件控制。可选的是,将新步骤重命名为“评估 2”(Evaluate 2)。
-
在条件控制左侧的选择值框中,选择“等待审批”部分的结果(Outcome)值。
-
选择“等于”作为条件的评估方法。
-
将条件控制右侧的选择值设置为“批准”(App)。
-
在假(False)分支中,点击添加操作。
-
选择“发送电子邮件 (V2)” Office 365 Outlook 操作。
-
在收件者(To)字段中,添加“项目创建时”部分下的创建者电子邮件(Created by Email)动态内容。
-
在主题(Subject)字段中,添加消息。可选的是,添加 Title 动态内容值。
-
在正文(Body)字段中添加消息。此外,添加 Title 动态内容值以及其他值(例如审批者名称)。
-
可选的是,您可能想扩展高级参数并添加发件人(发送为)属性,并指定值如
noreply@domain.com(这样投诉就不会回到您的邮箱)。 -
点击操作并选择“项目创建时”部分下的更新项目动态内容值。
-
使用“项目创建时”部分的动态内容令牌配置站点地址、列表名称、ID、标题和采购金额。
-
将预批准(Pre-approved)分支设置为“否”(No)。
-
将已批准(Approved)字段设置为“否”。
-
将需要预审(Pre-approval required)设置为“是”。
-
点击添加操作,然后选择终端控制(Terminal)。
-
检查假(False)分支确保其结构与图 11.16 类似:
-
选择最后的真(True)条件分支,然后添加操作。
-
选择 SharePoint “更新项目”操作。
-
使用“创建项时”部分中的动态内容标记,配置站点地址、列表名称、ID、标题和购买金额值。
-
将“预批准(Pre-approved)”字段设置为“是”。
-
将“批准(Approved)”字段设置为“是”。
-
将“预批准要求(Pre-approval requirement)”字段设置为“是”。
-
选择发送电子邮件 (V2) Office 365 Outlook 操作。
-
在“致(To)”字段中,添加“创建项时”部分下的“创建者电子邮件(Created by Email)”动态内容值。
-
在“主题(Subject)”字段中添加消息。可选添加“标题(Title)”动态内容值。
-
在“正文(Body)”字段中添加消息主体。可选添加“标题(Title)”动态内容以及任何其他值(如审批人姓名)。
-
点击“添加操作”并选择“终止(Terminate)”。
-
将状态设置为“如果是成功(If Yes succeeds)”,以确保其结构与图 11.17 类似:
图 11.17 – 查看“如果是”分支
- 点击“保存”。
审批已成功创建!由于这是一个非常长且复杂的流,你可能希望检查这些项并更新描述或名称,以便为其他可能查看该流的人(或者在你需要进行故障排除时为你自己)标记它们。
完成后,是时候测试了!
测试流
要测试此流,请导航到包含受监控的列表和值的 SharePoint 站点。为了验证它是否按设计运行工作,你可能需要运行多次测试,包括金额高于 $1,000 和低于 $1,000 的请求,然后在第一阶段或第二阶段批准或拒绝它们。
图 11.18 - 查看流的运行历史
如果任何步骤发生错误,请检查流步骤,以确保你使用的是适当的动态内容标记,并且评估语句是正确的。
当你对 Power Automate 概念变得熟悉且有信心时,你将发现自定义输出或步骤的新新方法,包括使用复杂表达式、额外的格式以及组合动态内容值以生成丰富的输出。
添加并行分支
对于运行时间较长或涉及多个用户或交互的审批过程,你可能希望向用户发送定期电子邮件提醒。实现此点的一种方法是在每个审批阶段填充变量,并使用并行审批分支检查它们是否已完成。你将通过五个组件完成此操作:
- 初始化变量(Initialize variable)操作将用于配置一个变量(例如
FirstApprovalDone),你将在整个审批过程中检查该变量。该变量将初始化为false,只有在审批人批准请求后才会被设置为true。
第 11 章
205
在某些编程语言中,你可以即时将操作或命令的结果保存到变量中。在 Power Automate 中,你必须在使用变量之前对其进行声明。
-
直直到(Do until) 控件将用于创建一个循环,定期检查变量(示例中的
FirstApprovalDone)是否已从false变为true。 -
延迟(Delay) 操作允许你定义通过某段时间来发送电子邮件(以便让审批人在收到通知之前有机会做出响应)。
-
发送电子邮件 (V2) 操作(你之前已使用过)将向审批人发送提醒性电子邮件。
-
设置变量(Set variable) 操作将用于更新变量(
FirstApprovalDone),以表示审批已完成。
你可以使用以下步骤添加提醒性电子邮件:
-
使用 Power Automate 制作器网页门户界面 (
https://make.powerautomate.com),编辑两阶段审批。 -
导航到 获取经理 (Get manager (V2)) 步骤,然后在它与第一个批准控制控件之间添加操作:
图 11.19 – 在步骤之间插入新操作
选择 初始变量(Initialize variable)操作:
- 选择 初始化变量操作:
-
将帮助你跟踪正在处理哪个审批的变量命名为
FirstApprovalDone。将类型设置为布尔(Boolean)并输入初始值false。 -
在这种情况下,你将使用此变量来跟踪第一个审批是否完成,将其命名为
FirstApprovalDone:
-
接下来,展开创建第一个审批的条件(它应该是第二个条件控制步骤,如果你重命名了它,它应该名为
Evaluate Stage 1 Approval)。 -
在“真(True)”分支中,右键点击“更新项(Update item)和“开始并等待审批”操作之间的
+号,然后选择添加并行分支:
- 在并行分支中,选择 延迟(Delay)操作,如图 11.23 所示:
- 为 计数(Count) 输入数字并选择 单位(Unit),这将用于发送电子邮件。在示例中,为 计数 输入
1并选择 天(Day) 意味着提醒电子邮件将在一天后后发送:
图 11.24 – 配置延迟
-
在延迟操作之后,添加一个操作:
-
在 直直到(Do until)左侧的“选择值”框中,选择 发送电子邮件 (V2) 操作,如图 11.25 所示:
图 11.25 – 添加操作
-
在 直直到(Do until)右侧的“选择值”框中,选择
FirstApprovalDone的动态内容。 -
在“选择值”框中,选择
true的表达式——注意使用浏览器功能可能会选择器隐藏:
-
选择 发送电子邮件 (V2) 操作。
-
使用 获取经理 (Get Manager (V2)) 的动态内容填充邮件。输入主题和邮件正文:
图 11.26 – 配置提醒电子邮件
- 在发送电子邮件 (V2) 操作之后,添加一个操作:
图 11.27 – 添加操作
-
添加 设置变量(Set variable) 操作。
-
从 名称(Name) 下拉列表中选择 FirstApprovalDone 变量,然后添加 true 表达式:
图 11.28 – 配置设置变量操作
- 点击 保存。
根据你想创建多少提醒分支,你可以在流中的每个审批重复此过程。
总结
在本章中,你学习了如何开始需要多个阶段或审批才能成功的审批流。顺序审批要求按顺序完成一系列审批,而并行审批可能涉及多个独立运行的审批分支。
这类复杂的审批请求流经常用于中大型企业,并反映了现实场景。熟悉这些类型的审批将帮助你在未来创建更准确地满足组织需求的流。
除了多阶段审批,你还处理了并行分支,并使用延迟、循环和变量创建一个定期发送提醒电子邮件的框架。
在下一章中,我们将查看将审批过程与 Microsoft Teams 集成。
12
向 Teams 发送审批
Microsoft 已将 Teams 定位于“协作枢纽”(https://learn.microsoft.com/en-us/microsoftteams/teams-overview;参见 协作)。考虑到此,我们将应用在第 10 节“开始使用审批”中获得的审批流技能,并用这些技能来为 Microsoft Teams 构建一个审批体验。你将能够使用这些技能,帮助为使用 Teams 作为平台的组织成员简化审批流程。
在本章中,我们将涵盖以下主题:
-
理解工作流
-
配置先决条件
-
配置一个使用 Teams 的审批流
-
测试工作流
在本章结束时,你将能够将 Power Automate 审批流与 Microsoft Teams 集成。
让我们开始吧!
理解工作流
在配置审批流程之前,你需要确保支持该流程的所有组件都已存在。在示例工作流中,我们将配置一个采购订单审批,该审批将在文档发布到 SharePoint 站点时开始。如果采购申请获得批准,该文档将移动到“已批准(Approved)”文件夹。如果被拒绝,它将移动到“已拒绝(Rejected)”文件夹。请求者将在结束时收到一封邮件告知其状态。
这个复杂的工作流将使用几个熟悉的组件,包括:
-
SharePoint 当文件夹中创建文件时 触发器
-
Office 365 Users 获取用户配置文件 (V2) 动作
-
Office 365 Users 获取经理 (V2) 动作
-
审批(Approvals) 创建审批 (V2) 动作
-
条件
在本章中,我们还引入了 Microsoft Teams 连接器。通过 Microsoft Teams 连接器,你将能够执行此类操作:
-
作为 Flow 机器人向用户发送你自己的自适应卡片:自适应卡片是直接在 Microsoft Teams 会话或体验中展示内容的新方法。自适应卡片可以包含图表、图像和格式化文本等组件。
-
作为 Flow 机器人向用户发送消息:这将允许 Power Automate 和 Flow 机器人与审批请求者进行通信。
这些新操作将允许 Power Automate 与 Microsoft Teams 平台交互。为了提高业务生产力,审批人员应该能够在 Microsoft Teams 应用程序内部响应审批。
现在你已经熟悉了我们将要使用的组件,让我们继续配置先决条件。
配置先决条件
此审批流将需要一些组件和先决条件。你已经熟悉其中许多项,但我们将回顾此工作流的准确要求。接下来的两个部分将描述这些要求。
SharePoint 站点
此审批流的一个输出是根据是否获得批准或拒绝,在 SharePoint 站点上移动文档。这需要一个包含“已提交(Submitted)”、“已批准(Approved)”和“已拒绝(Rejected)”文件夹的 SharePoint 站点,如下所示:
图 12.1 – 创建文件夹
在示例中,我们将使用名为“采购订单”的 SharePoint 站点(参见第 10 节“开始使用审批”),但你可以使用任何站点。
用于 Teams 的 Power Automate 应用
Power Automate(原名为 Flow)允许 Teams 与 Power Automate 之间进行双向交互。要安装该应用,请按照以下步骤操作:
-
启动 Microsoft Teams(桌面版或网页版
https://teams.microsoft.com)。 -
在左侧栏中点击三个点(...),搜索 Power Automate:
图 12.2 – 添加 Power Automate
- 在应用页面上,点击添加,并同意 Workflows 的隐私条款。
图 12.3 – 使用 Power Automate 应用
一旦安装了该应用,你就可以开始配置了。
使用 Teams 配置审批流
正如“理解工作流”部分所述,此流将由文件放入 SharePoint 站点触发,并向审批者和请求者发送审批通知。由于这是一个较长的流程,我们将分阶段完成:
-
获取请求者信息
-
创建审批
-
返回响应
让我们开始吧!
获取请求者信息
在第一部分中,我们将配置触发器以检测文件并获取请求者的信息。要配置工作流,请遵循以下步骤:
-
导航到 Automate 门户(
https://make.powerautomate.com),选择创建,然后从空白开始工作流。 -
搜索“当文件夹中创建文件时”。
-
在站点地址字段中,选择 SharePoint 站点。在文件夹字段中,选择“已提交(Submitted)”文件夹。
-
点击新步骤。
-
选择 SharePoint 获取文件属性。在站点地址字段中,选择 SharePoint 站点。在库名称字段中,选择文档库。在 ID 字段中,选择来自“当文件夹中创建文件时”的
ItemId令牌。
-
点击新步骤。
-
选择 Office 365 获取用户配置文件 (V2) 动作。在 UPN 字段中,选择来自“获取文件属性”的 Created By Email 动态令牌:
-
点击新步骤。
-
选择 Office 365 获取经理 (V2) 动作。在用户 (UPN) 字段中,选择来自“获取用户配置文件 (V2)”的用户主要名称令牌。
-
点击保存。
创建审批
此时,你已经创建了收集文件和请求者信息的部分。接下来,我们将配置审批请求。
在本节中,你将通过添加和配置审批动作继续创建上一节的审批。
-
在“获取经理 (V2)”动作之后添加一个动作。
-
选择审批 创建审批 动作。
-
在审批类型下,选择“批准/拒绝 - 响应响应者”。
配置审批工作流
- 在标题下,选择能够唯一标识此请求的文本。在示例中,你可以选择来自“获取文件属性”部分的
Title和Created ByDisplayName动态值令牌。
图 12.8 – 配置获取用户配置文件 (V2) 动作
在 Assigned(分配给)字段中,选择 Get manager(获取经理)部分下的 Mail 动态内容令牌值:
图 12.9 – 配置“创建审批”
在 Link(链接)项字段中,添加 Get file properties(获取文件属性)部分下的 Link to item(项目链接)动态值内容令牌。
添加操作。
选择 Microsoft Teams 操作中的 Post card in a chat or channel(在聊天或通道中发布卡片):
图 12.10 – 添加自适应卡片操作
在 Post as(发布者身份)字段中,选择 Flow bot。
- 在 Post in(发布位置)字段中,选择 Chat with Flow bot(与 Flow bot 聊天)。等待卡片上的操作动态更新,如图 12.11 所示:
-
在 Recipient(收件者)字段中,选择 Get manager 操作下的 Mail 动态内容令牌。
-
在 Adaptive Card(自适应卡片)字段中,选择 Create an approval(创建审批)部分下的 Teams Adaptive Card 动态内容令牌:
-
添加操作。
-
选择 Wait for an approval(等待审批)操作。
-
在 Approval ID 字段中,选择 Create an approval 下的 Approval ID 动态内容令牌:
图 12.13 – 配置“等待审批”操作
- 点击保存。
现在你已经配置好了一个审批工作流,它将启动、向 Teams 用户发送自适应卡片,并等待他们的响应。在下一节中,我们将评估响应并决定采取什么操作。
返回响应
在最后一个章节中,我们将根据审批者的响应来配置操作(通知请求者并移动已提交的文件)。由于步骤较多,我们将其分为较小的部分。
首先,我们将配置当审批者决定批准请求时会发生什么。
要完成流的这部分,请确保来自上一个节的流处于编辑状态,并按照以下步骤操作:
-
在 Wait for an approval 操作之后,添加操作。
-
选择 Condition(条件)控制。
-
在控制器左侧的 Choose a value(选择值)框中,选择 Outcome(结果)动态内容令牌:
图 12.14 – 配置条件控制器
-
为条件选择 is equal to(等于)评估方法。
-
在条件的右侧框中输入文本
Approve(批准),点击 Add action(添加操作)。 -
在条件的 True(真)分支中,点击 Add action。
-
选择 Post message in a chat or channel(在聊天或通道中发布消息)操作:
图 12.15 – 添加发布消息操作
-
在 Post as 中,选择 Flow bot。
-
在 Recipient 字段中,选择 Chat with the Flow bot。
-
在 Recipient 字段中,添加 Get user profile(获取用户配置文件)部分下的 Mail 动态内容令牌。这将响应发送给请求者。
-
在 Message 字段中,输入将发布在请求者消息正文中的文本。
-
在 True 分支中,添加操作。
-
选择 SharePoint Move file(移动文件)操作。
-
在 Current Site Address(当前站点地址)中,选择流中使用的 SharePoint 站点。
-
在 File to Move(要移动的文件)中,选择 When a file is created in a folder(文件夹中创建文件时)部分下的
headers/x-ms-file-id动态内容令牌。
图 12.16 - 添加 x-ms-file-id 动态内容令牌
-
在 Destination Site address(目标站点地址)中,选择你创建
Approved文件夹的 SharePoint 站点。 -
对于 Destination Folder(目标文件夹),选择如果目标文件夹中存在同名文件时要的操作。在 Another file is already there(已存在文件)下拉菜单中选择一个选项,例如 Move with a new name(重命名移动)操作。完成的分支应该类似于图 12.17。
图 12.17 - 配置 SharePoint 移动文件操作
- 点击保存。
现在,我们将配置当审批者拒绝或否定请求时会发生什么。步骤非常相似——事实上,它们是同一组操作,你可以编辑消息响应和文件目标。你可以重复步骤并进行更新,也可以使用 Copy action(复制操作)功能节省时间:
- 在 True 分支中,右键点击 Post message in a chat or channel 操作的卡片,并选择 Copy action:
图 12.18 - 复制操作
-
在 False 条件分支中,右键点击 Add action
+号并选择 Paste action(粘贴操作)。 -
在粘贴操作的浮窗中,更新操作标题以使其唯一且易读。
-
更新 Message 字段,替换现有的发布在请求者消息正文中的值。正如你配置原始操作时一样,你可以使用文本、表达式和动态内容的组合。
图 12.19 - 更新粘贴操作的属性
-
在 True 条件分支中,选择 Move file 操作的卡片,然后选择 Copy action。
-
在 False 条件分支中,右键点击 Add an action
+号并选择 Paste after action(在操作后粘贴)。 -
在粘贴操作的浮窗中,更新操作标题以使其唯一且易读。
-
对于 Destination Folder,选择默认文档库中的 Rejected 文件夹。
-
最后,选择如果目标文件夹中存在同名文件时要的操作。在 If another folder is already there 下拉菜单下选择一个选项,例如 Move with a new name 操作。完成的分支应该类似于图 12.20:
图 12.20 - 检查 If 分支的配置
- 点击保存。
你已经配置好了一个审批工作流,它将启动、向 Teams 用户发送自适应卡片,并等待他们的响应。在下一节中,我们将评估响应并决定采取什么操作。
测试流
为了测试此流,你需要满足以下条件:
-
至少两个开启了 Exchange Online 和 Microsoft Teams 的用户
-
用户启用了 Power Automate(以前称为 Flow)
-
其中一个用户应配置为另一个用户的经理
-
至少两个浏览器会话,分别以审批者请求者的身份登录
使用 Microsoft365 管理中心 (https://admin.microsoft.com) 配置经理。导航到 Users | Active users,选择一个用户进行编辑,并点击 manager 链接进行配置:
图 12.21 – 配置经理
如果你没有权限设置经理,你需要编辑流以使用特定的用户邮箱地址作为审批者,而不是 Get manager (V2) 操作的 Mail 令牌。
测试过程将涉及三个核心步骤:
-
请求审批
-
审批请求
-
检查响应
让我们开始测试吧!
请求审批
流程必须由请求者启动。请求者必须在 Entra 中填写经理字段。一旦满足此要求,请按照以下步骤操作:
-
从流中,点击 Test 并选择 Manually 单选按钮。点击 Test 启动测试过程。
-
使用一个浏览器会话,以请求者用户登录 Microsoft 365。
-
浏览到流监控的 SharePoint 站点。
-
向监控文件的 SharePoint 站点中的
Submitted文件夹上传文件。
此活动将触发流。
审批请求
对于此过程,你必须拥有以审批者身份登录的独立浏览器会话:
-
以审批者身份通过浏览器会话登录 Office 365 时,打开 Microsoft Teams (https://teams.microsoft.com/)。
-
选择左侧栏的 Chat 并选择来自 Workflows 应用的消息。
-
要批准或拒绝请求,点击自适应卡片上的 Approve(批准)或 Reject(拒绝)按钮:
- 可选,输入批准或拒绝意见。点击 Submit(提交)。
完成后,它将触发流的后续部分。
查看响应
在最后这一步骤中,请求者应该能够查看审批者的响应:
-
以请求者的身份通过浏览器会话登录 Office 365,启动 Teams (https://teams.microsoft.com)。
-
选择左侧边栏的“聊天”(Chat),并选择来自 Power Automate 应用的消息。
-
审核消息:
你也可以在 Teams 中通过选择左侧边栏的“审批”(Approvals) 应用,然后导航到“审批 | 已发送”(Approvals | Sent),作为请求者查看请求状态:
审批流程已完成。
你还可以使用额外的验证方法,例如查看流的运行历史并浏览 SharePoint 文档库以确认文件已移动:
图 12.25 – 文件已移动到“已批准”文件夹
自适应卡片和流消息是可以自定义的:
你可以使用 Microsoft 自适应卡片设计器 (https://www.adaptivecards.io/designer/) 学习如何开发自己的自定义自适应卡片,并查看自适应卡片设计中心 (https://adaptivecards.microsoft.com/?topic=design-best-practices)。
随着你对动态内容标记、格式和表达式变得越来越熟悉和自信,你可以基于这些示例进行构建,使卡片和消息更加个性化和详细。
总结
在本章中,你利用了迄为止通过书中中学的知识,在 Microsoft Teams 中构建了审批功能的集成。你使用了熟悉的组件,例如 SharePoint 文件创建触发器和条件,并扩展到使用自适应卡片和用于 Microsoft Teams 的 Flow 机器人。
使用这种类型的设计可以防止审批者为了完成审批而在 Microsoft Teams 之外进行任务切换或应用程序切换,这将帮助你的组织提高生产力。它还帮助你为使用你的流的用户开发更具定制化的体验。
最后,你能够测试该流并分别从请求者和审批者的角度查看它。
在下一章中,你将学习如何将数据库整合到流中。这将为与业务应用程序交互提供许多机会,允许你创建复杂的、业务驱动的自动化流程。
13
使用数据库
数据库是关键的基础组件,用于编译有关任务、个人、服务、产品或任何需要跟踪的实体的信息。常见的数据库驱动应用程序包括客户关系管理 (CRM)平台、产品目录、企业资源计划 (ERP) 应用、会计软件包、电子医疗记录 (EMR) 应用、商店和库存管理工具。
在 Power Automate 世界中,你可能会使用数据库来存储对调查或表单响应的信息,或者用于管理计划作业。你可能会将其用作其他应用程序和用户执行的操作的日志库。在本章中,我们将查看连接 SQL 数据库以及使用流添加数据条目的的一些基础知识。
更具体地说,我们将涵盖以下主题:
-
理解数据库连接器、触发器和操作
-
连接到数据库
-
创建数据库连接
-
向数据库添加内容
到本章结束,你将能够理解如何使用 Power Automate 连接并向数据库发送数据的基础知识。
我们开始吧!
理解数据库连接器、触发器和操作
如果你不熟悉数据库,没关系!虽然设计可扩展的数据库系统可能复杂,但数据库的基本概念其实非常简单。
数据库通常由表、列和行组成。你可以将简单的关系型数据库想象成电子表格的集合,其中电子表格本身是表,表格中的行和列代表数据库中的行和列。这些工作表可以通过键(每个电子表格共同拥有的属性)链接在一起。主键确保每行都是唯一的,而外键则通过引用另一个表(或示例中的电子表格)中的主键来建立关系。
数据库通常不是孤立存在的——大多数人或系统通常通过应用程序与数据库交互。在从数据库读取或写入时,你通常需要提供一些详细信息来连接应用程序:
-
服务器名称或地址
-
数据库名称
-
身份验证凭据
这些信息存储在某种配置对象中(有时是纯文本文件、连接字符串、变量或其他管理系统),并告诉应用程序如何找到数据库。稍后在对数据库执行查询、插入或更新等操作时,你将指定额外的详细信息(如表名和过滤器),以记录应用程序将数据发送到何。
Power Automate 可以连接到许多数据库,例如 Microsoft SQL Server、Azure SQL Data Warehouse(现在称为 Azure Synapse Analytics)、PostgreSQL、MySQL、Db2、Oracle 和 Azure blob,以及我们在第 10 章中讨论过的 Dataverse。大多数数据库技术共享相似的机制,尽管过程可能不同。我们将重点关注可用的 SQL Server。该连接器同时拥有触发器和操作。
触发器
Microsoft SQL Server 连接器支持两个触发器:
-
当创建项时 (v2) -
当项被修改时 (v2)
在处理这两个触发器工作时,你需要提供服务器名称、数据库名称和表名,以及可选的筛选查询。
操作
在操作数据库时,有许多可以执行的操作。你最常使用的操作列在下面的列表中:
-
获取表 (Get tables)- 列出数据库中的表 -
获取行 (Get row(s))- 从表中检索一行或多行 -
插入行 (Insert row)- 向表中添加新行 -
更新行 (Update row)- 修改现有行 -
删除行 (Delete row)- 从表中删除某行 -
执行 SQL 查询 (Execute SQL query)- 运行 SQL 查询 -
执行存储过程 (Execute stored procedure)- 运行存储过程(预先准备的 SQL 语句或命令集合)
你最经常使用 Power Automate 内置操作来处理行和表。然而,如果你需要执行更复杂的事务或函数,可以使用执行 SQL 查询和执行存储过程。
现在你已经知道了可用哪些触发器和操作,让我们连接到数据库吧。
连接到数据库
在本节中,我们将查看如何创建一个向数据库添加数据行的简单流。要实现此,你需要一个数据库和一个表。在接下来的示例中,我们将创建一个 SQL 实例和数据库,用于我们的 Power Automate 配置。
创建服务器
虽然你可以使用 Power Automate 支持的任何数据库技术,我们将重点关注 SQL Server。如果你已经有了现有的 SQL 服务器,可以跳过此步骤。否则,可以在 Azure 中配置必要的组件以开始工作。
如果你没有服务器基础设施的访问权限,可以在 https://azure.microsoft.com/en-us/offers/ms-az-004p/ 注册免费体验,或通过导航到 https://portal.azure.com ,使用你试用 Microsoft 365 租户的全局管理员凭据登录,然后完成 Azure 试用注册过程。
在 Azure 中创建 SQL 服务器,请遵循以下步骤:
-
导航到 https://portal.azure.com 并使用具有管理权限的账户登录。
-
在搜索栏中输入 SQL 并选择 SQL Server。
-
在创建中创建:
图 13.1 - 创建新的 SQL 服务器
- 选择订阅和资源组。资源组仅仅是与项目、服务、应用程序或其他管理单元相关的组件的逻辑容器。如果你没有资源组,可以创建一个,如图 13.2 所示:
第 13 章
237
- 输入唯一的服务器名称,在“位置”(Location)中选择您附近的数据中心,并输入管理凭据。为了示例起见,请使用 SQL 身份验证。
-
选择一个服务器管理员登录 ID 并输入密码。
-
完成后,点击“下一步”。
-
在“网络”(Networking)选项卡中,将切换器设置为“是”,以配置防火墙允许访问 Azure 服务。
-
点击“查看并创建”(Review + create)来创建您的服务器。
图 13.2 – 创建资源组
图 13.3 – 配置数据库服务器属性
- 检查最终设置,然后点击“创建”。
等待 Azure 部署完成。
创建数据库
现在您已经配置好了一个 SQL Server 实例,需要一个数据库。如果您已经有一个可以使用的数据库,可以跳过此步骤。否则,您可以使用以下过程在上一节中配置的实例上创建一个新数据库:
- 从 Azure 门户,点击搜索栏并开始输入 Azure。选择 Azure SQL 选项:
-
在 Azure SQL 数据库下,选择“SQL 数据库”(SQL databases)。
-
点击“创建”来创建一个新数据库。
-
在“项目详情”(Project details)下,选择订阅和资源组。为了简单起见,请使用与您之前创建的服务器相同的订阅和资源组。
-
在“数据库详情”(Database details)下,为新数据库名称输入值,然后选择服务器。如果您在上一节中创建了服务器,请在此处选择该服务器。您可以让其他设置保持默认配置。点击查看并创建(Review + create)继续。
请务记下数据库的名称,因为您在配置 Power Automate 连接对象时会需要它。
- 点击创建。
向导将完成过程并创建数据库。
创建数据库表
为了让您有地方添加内容,数据库需要一个数据库表。您可以使用查询编辑器(Query editor)并按照以下步骤创建数据库表:
-
从 Azure 门户,点击搜索栏并开始输入 SQL databases。选择SQL Server 数据库(SQL Server databases)选项。
-
选择您在上一个小节中创建的数据库以打开其属性页。
-
选择查询编辑器(预览)(Query editor (preview))。输入您的登录凭据以访问数据库,然后点击确定:
图 13.6 – 登录数据库
如果出现提示,您可能需要启用防火墙以允许您的本地计算机与服务器通信。点击错误消息中的“允许白列表 IP”(Allowlist IP)链接(如图 13.7 所示),以自动配置防火墙:
图 13.7 – 创建防火墙规则的提示
-
防火墙规则更新后,登录。
-
接下来,我们将创建一个名为 Customers 的数据库表并向其中插入单行数据。将以下代码复制并粘贴到查询编辑器中:
CREATE TABLE Customers
CustomerID BIGINT IDENTITY,
CompanyName VARCHAR(100),
FirstName VARCHAR(100),
LastName VARCHAR(100),
JobTitle VARCHAR(50),
Mail VARCHAR(75),
TelephoneNumber VARCHAR(10)
GO
INSERT INTO Customers VALUES('Contoso', 'John', 'Doe', 'Purchasing Manager', 'jdoe@contoso.com', '2485551234');
GO
- 点击“运行”(Run),如图 13.8 所示:
图 13.8 – 准备提交查询
- 检查“消息”(Messages)以确保数据库表已创建。
到此时,您已经有了一个服务器、一个数据库和一个包含某些内容的表。此数据库表有七列(CustomerID、CompanyName、FirstName、LastName、JobTitle、Mail 和 Telephone)以及一行填充了这些列或字段的数据。
首先,您可以通过展开“表”(Tables)并查看 dbo.Customers 表来验证表和列。
要验证表是否包含数据,展开“表”,选择 dbo.Customers,并点击“选择前 100 行”(Select Top 100 Rows)操作,然后检查“结果”(Results)窗格中的数据,如图 13.9 所示。
图 13.9 – 检查表数据
如果一切顺利,您将拥有一个配置好的示例数据库,并准备好作为 Power Automate 流的目标。
接下来,我们将在 Power Automate 中建立到数据库的连接。
创建数据库连接
正如您在在本章节早期学到的那样,在处理数据库时,您需要告诉应用程序如何连接到数据库。该数据存储在通常称为连接字符串的配置对象中。在 Power Automate 中,连接字符串被称为连接(connection)。
连接详情取决于您要连接的数据库类型。要在 Power Automate 中连接数据库,请按照以下步骤操作:
-
导航到 Azure 门户 (https://make.azure.com)。选择“更多”(More)并点击“连接”(Connections)。
-
选择SQL Server。
- 点击新建连接(New connection)。
-
在“项目详情”下,选择订阅和资源组。为了简单起见,请使用与您之前创建的服务器相同的订阅和资源组。
-
在“数据库详情”下,为新数据库名称输入值,然后选择服务器。如果您在上一节中创建了服务器,请在此处选择该服务器。您可以让其他设置保持默认配置。点击查看并创建(Review + create)继续。
请务记下数据库的名称,因为您在配置 Power Automate 连接对象时会需要它。
- 点击创建。
现在连接已经建立,您就可以创建一个简单的流了。
创建流
正如您在本章节早期学到的那样,在处理数据库时,您需要告诉应用程序如何连接到数据库……
要检查内容是否写入了流,请遵循以下步骤:
-
从 Power Automate 门户 (https://make.powerautomate.com),点击“创建”。
-
选择即时云流(Instant cloud flow)。
-
为流命名,并选择手动触发流(Manually trigger flow)作为触发器。
-
点击“创建”。
-
添加操作。
-
在搜索框中输入 insert,选择插入行 (V2)(Insert row (V2))操作:
- 选择您在数据库表节中创建的服务器名称、数据库名称和表名。
- 一旦您选择了连接项,操作将更新“高级参数”(Advanced parameters)部分下的可用列。选择所有参数。
- 在选择列名后,添加一些测试数据,如图 13.16 所示:
- 点击“保存”。
执行流
使用您在第 5 章“创建按钮流”中学习的方法来执行该流。作为回顾,您可以遵循以下步骤:
-
在生成器画布页面上,点击“测试”。
-
选择“手动”单选按钮并点击“测试”。
-
在“运行流”飞出面板中,点击“继续”。
-
点击“运行流”。
-
点击“完成”。
至此,流已成功执行。
验证流
您可以通过检查流的运行历史或在 SQL 中查询数据库表来检查内容是否已写入流。
检查运行历史
验证流是否执行成功最简单、最快的方法是检查其运行历史。流的运行历史将显示在流执行期间执行的步骤。我们可以通过以下流程查看流的运行历史:
-
展开流旁边的省略号,然后选择“运行历史”(Run history)。
-
选择运行日期和时间以显示历史。
-
展开 SQL 操作以查看数据:
图 13.17 - 查看 SQL 插入行 (V2) 操作数据
展开的操作将显示已插入到表中的数据。
检查 SQL 数据
你也可以使用之前在“创建数据库表”节中使用的流程来验证数据。使用 SQL 查询编辑器,你还可以查看新添加的数据。要直接查看 SQL 数据,请遵循以下步骤:
-
从 Azure 门户 (https://portal.azure.com),导航到 Azure SQL | SQL 数据库,并选择该数据库。
-
选择“查询编辑器(预览版)”(Query editor (preview))。如有必要,输入登录凭据访问数据库,然后点击确定。
-
在“查询编辑器(预览版)”面板中,展开“表”(Tables),选择 dbo.Customers,然后点击该表的省略号。点击“选择前 1000 行”。
-
将结果窗格中的数据与你在“创建”节中输入的值进行比较。
图 13.18 - 导航到 dbo.Customers 数据库表
无论你选择何种方式来验证流执行成功,都应该看到相同的数据。
总结
在本章中,你学习了 Power Automate 的一些数据库交互功能。通过遵循本章的步骤,你成功创建了 Azure SQL Server 实例、一个数据库和一个用于存储内容的数据库表。你能够连接到数据库、创建一个流,并插入了一行新数据。最后,你检查了流的运行历史,并学习了如何直接查询数据库。
下一章将在此知识的基础上,向你展示如何获取 Microsoft Forms 数据并使用 Power Automate 将其插入数据库中。
获取本书的 PDF 版本和独家额外奖励
扫描二维码(或访问 packpub.com/unlock)。按名称搜索此书,确认版本,然后按照页面上的步骤操作。
注意:请妥善保存发票。直接从 Packt 购买的不需要发票。
使用 Microsoft Forms
收集和处理用户或客户的反馈是业务运营的重要部分。Microsoft Forms 是一种调查工具,可用于捕获此类信息,支持固定问题和自由格式文本输入选项。
在本章中,我们将基于之前学过的关于条件(第 8 章,使用条件)和向数据库中添加内容(第 13 章,使用数据库)的概念,创建基于 Microsoft Forms 输入的流,并将它们保存到数据库中。具体而言,我们将关注以下主题:
-
理解 Forms 触发器和操作
-
创建基本表单
-
使用 Power Automate 处理表单
-
测试流
-
验证结果
完成本章后,你将理解如何将 Forms 与 Power Automate 连接。让我们开始吧!
理解 Forms 触发器和操作
在开始编写涉及 Microsoft Forms 的流之前,了解 Forms 连接器提供哪些类型的触发器和操作是重要的。提醒一下,触发器(triggers)是能够启动流的活动,而操作(actions)是流可以执行的活动。如果你需要复习术语,可以回查到第 1 章“介绍 Power Automate”。
触发器
如引言所述,Microsoft Forms 是一种调查和信息收集工具。最终用户与 Forms 的交互在他们完成并提交表单时结束。因此,Forms 连接器目前有一个触发器:提交回复时(When a response is submitted)。当用户向服务提交表单时,该触发器会被激活。
操作
对于此流,我们将关注 Forms 的获取详细信息(Get details)操作。使用此操作,Power Automate 可以检索流中的数据。在我们用 Power Automate 处理表单之前,我们需要一个表单进行操作。在接下来的节中,我们将创建一个收集基本信息的表单。
创建基本表单
Forms 应用的使用非常直观。在本节中,我们将创建一个基本表单来收集用户信息。请按照以下步骤创建该表单:
-
导航到
https://forms.office.com并登录以启动 Forms 应用。 -
如果你是首次登录 Forms,请点击启动页上的“新表单”(
New Form)按钮。如果你之前登录过 Forms,可以点击仪表板上的“新表单”按钮,如图 14.1 所示。
- 点击标题区域(未标题的表单)文本框,并为表单输入名称,例如“客户数据采集”(
Customer Data Intake),如图 14.2 所示:
-
点击
+添加新项目。 -
选择“文本”(
Text)选项:
- 输入
CompanyName的值。如果需要,你可以输入更具描述性的内容,但为了本章示例,请确保它很容易识别为公司名称值。如果需要,可以将字段属性切换为“必填”(Required),并启用字段限制:
图 14.4 – 配置 CompanyName 数据字段
- 重复步骤 4–6,为
FirstName(名)、LastName(姓)、JobTitle(职位)、Mail(邮箱)和TelephoneNumber(电话)添加字段。你会注意到这些字段映射到你在上一章中创建的列名。
图 14.5 – 配置其余数据字段
-
点击“收集回复”(
Collect responses),然后点击“复制链接”按钮以复制表单的 URL。将其粘贴到临时位置(如记事本窗口)。 -
选择并复制
id=之后的值。该值看起来应该是一段长随机文本字符串,如下:
fHnoJLB9UauRqGcukAKHtjp4N5BXJJKk4cz0rMVSXuUqjGV1QzUTJQwhJUUVZKNZA3Q03MFFINS4u
图 14.6 - 复制表单 ID
完成后,你应该拥有一个字段与第 13 章“使用数据库”中创建的数据库列名相似的表单以及复制的 ID 值。
接下来,我们将使用 Power Automate 将这些表单回复保存到数据库以便分析。
使用 Power Automate 处理表单
在练习中,我们将配置一个流来处理回复并保存到第 13 章“使用数据库”中创建的数据库中。该流将利用上一节保存的表单 ID、当提交新回复时(When a new response is submitted)触发器以及 Forms 连接器的获取回复详细(Get response details)操作。
遵循以下步骤配置流:
-
登录 Power Automate 网页门户(
https://make.powerautomate.com)并点击“创建”。 -
在“从空白开始”部分,选择“自动化云流”。
-
为流输入名称(例如“客户数据采集”),并选择“当提交新回复时”Forms 触发器。
-
点击“创建”。
通过连接已使用的应用程序从重复性工作中解放——自动化报警、报告和其他任务。
示例:
-
在业务流中自动收集并存储数据
-
通过 SQL 数据库自定义查询生成报告
图 14.7 - 使用触发器创建新的自动化云流

浙公网安备 33010602011771号