????作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
????个人主页:会敲键盘的肘子
????系列专栏:UiPath
????专栏简介:UiPath在传统的RPA(Robotic process automation)的基础上,增加了See(AI通过计算机视觉阅读用户的计算机屏幕)和Think(通过机器学习来发现平台能够为用户构建什么自动化流程)从而不断帮助用户自动化构建流程,而不仅仅是用户自主发现,自主构建。并且在构建的过程当中,做到了Low-code甚至是No-code的程度,让每一位员工都可以自主使用。
????座右铭:总有一天你所坚持的会反过来拥抱你。
????写在前面:
本博文主要介绍 UiPath 机器人企业框架 (REFramework)。我们将讨论事务处理、调度程序和执行程序的概念,还会简要介绍 REFramework 可以完成的任务。
????本文关键字:RPA、UiPath、Low-code、No-code、机器人企业框架、REFramework、.Net
文章目录
1️⃣ 背景
♈ 什么是RPA
RPA(Robotic process automation) 代表机器人过程自动化。
它是一种软件程序,可在与计算机应用程序交互时模仿人类行为并实现重复的、基于规则的流程的自动化。
♉ 什么是UiPath
UiPath 是一种机器人流程自动化工具,用于自动化枯燥和重复的任务。它由罗马尼亚企业家 Daniel Dines 和 Marius Trica 于 2005 年创立。它还消除了自动化无聊任务的人工干预,并为所有活动提供了拖放功能,它是最简单的 RPA 工具。
♊ 为什么使用UiPath
UiPath在传统的RPA的基础上,增加了See(AI通过计算机视觉阅读用户的计算机屏幕)和Think(通过机器学习来发现平台能够为用户构建什么自动化流程)从而不断帮助用户自动化构建流程,而不仅仅是用户自主发现,自主构建。并且在构建的过程当中,做到了Low-code甚至是No-code的程度,让每一位员工都可以自主使用。
♋ 环境
-
UiPath Studio Community 2022.4.3
-
Windows 10
-
.Net
2️⃣ 事务处理
♈ 定义
事务是指对数据进行处理所需要的最小(原子)数据量以及必要的步骤,其目的是为了完成业务流程的一个部分。从邮箱中读取一封电子邮件,然后从电子邮件中提取数据的流程就是一个典型事务示例。
我们把事务数据称为原子数据是因为一旦完成数据处理,即可假设在继续处理业务流程时不再需要这些数据。
考虑到业务流程的步骤及其重复执行方式,我们可以将业务流程分为以下三个类别:
⭐ 线性
流程中的步骤仅执行一次,如果需要处理不同的数据,则需要再次执行自动化。例如,回到在本章简介部分介绍的电子邮件示例,当收到新电子邮件时,系统需要再次执行自动化才能进行处理。
线性流程通常很简单,而且很容易实施,但不太适合需要使用不同数据重复执行步骤的情况。
⭐ 迭代
流程中的步骤可以执行多次,但每次使用不同的数据项目。例如,自动化可以检索多封电子邮件并迭代执行相同的步骤,而不是每执行一次仅读取一封电子邮件。
这种流程可以通过简单的循环实现,但缺点是,如果在处理一个项目时出现问题,整个流程就会中断,因此,其他项目将无法得到处理。
⭐ 事务性
与迭代流程相似,事务性流程的步骤也会使用不同的数据项目来重复执行多次。但是,自动化的设计使每个可重复部分得到独立处理。
这些可重复的部分称为事务。事务相互保持独立,因为它们不会共享任何数据,也没有特定的处理顺序。
您可以将这三类流程看作自动化项目逐步走向成熟的各个阶段,从简单的线性任务开始,经过反复改进,最后演变为事务性方法。
不过,凡事没有绝对规则,我们要根据流程的特征(例如,要处理的数据以及重复的频率)和其他相关要求(例如,易用性和稳定性)来选择合适的类别。
♉ 适合使用事务流程的业务场景
- 某个文件夹中有多张发票,您需要从发票中读取数据,并将数据输入另一个系统。在本例中,我们可以将每张发票视为一个事务,因为它们都需要按照重复的流程进行处理(即提取数据并输入其他位置)。
- 某个电子表格中包含人员及其电子邮件地址的列表,您需要向其中每位人员发送一封电子邮件以及一条个性化消息。对于每位人员来说,此流程中的步骤(即从电子表格获取数据,创建个性化消息和发送电子邮件)都是相同的,因此,我们可以将此电子表格中的每一行视为一个事务。
- 在寻找新公寓时,我们可以设立一些条件,然后使用机器人进行搜索。对于每个搜索结果,机器人会提取有关公寓的信息,并将数据插入电子表格中。在本例中,每间公寓的详细信息页面就构成了一个事务。
3️⃣ REFramework
♈ 定义
一般来说,框架就是帮助您设计(自动化)流程的模板。作为框架,至少要提供一种存储、读取和便于修改项目配置数据的方法,还要提供强大的异常处理方案,以及关于所有异常和相关事务信息的事件记录。
REFramework 作为状态机
实现,这是一种工作流,具有两个非常有用的功能:
- 其一是状态,它可以根据指定的输入,定义要执行的操作。
- 其二是转移,它可以根据状态本身的结果,在状态之间切换执行。
您可以参考
项目组织
博文中的状态机。其中介绍了一个典型的例子,即空调:
- 当空调处于关闭状态时,只需按下开/关按钮,它就会切换到空闲状态;
- 在空闲状态下,如果用户输入的温度低于当前温度,它就会切换到加热状态;如果高于当前温度,它就会切换到致冷状态。一旦达到需要的温度,它又会回到空闲状态;
- 在空闲状态下,如果按下开/关按钮,它可以切换到关闭状态;
- 触发这些状态转换的所有条件都属于转移。
基于类似的想法,REFramework 包括 4 种主要状态。
⭐ 初始状态
这是流程启动时的状态。我们可以将其视为一种操作。在此操作中,流程会初始化设置并执行应用程序检查,从而确保满足启动流程的所有先决条件。
⭐ 获取事务状态
获取下一个事务项目。它可能是队列项目,也可能是集合中的任何项目。
默认情况下,事务项目是队列项目,但为了满足特定的需求,您可以轻松更改其类型。对于这种状态,开发者需要设置没有项目需要处理时的退出条件。
⭐ 流程事务状态
通过上一个步骤获取事务项目后,在各个应用程序中执行操作/应用逻辑。完成事务项目处理后,流程将继续处理下一个可用的事务项目。
⭐ 结束流程状态
流程结束(在自动化期间打开的应用程序应正常关闭)。
为了便于理解如何使用 REFramework,下面我们来介绍一个场景:
某个电子表格中包含人员及其电子邮件地址的列表,您需要基于模板向其中每位人员发送一封电子邮件以及一条个性化消息。
4️⃣ REFramework 的功能
♈ 设置
在很多流程中,通常都会使用在初始化阶段读取的某些设置和配置值。设置的示例包括用于访问 Web 应用程序的 URL、Orchestrator 队列名称和默认记录消息。
REFramework 先从配置文件 (Config.xlsx) 读取这些数据,然后将其存储在可在不同状态之间共享的字典对象 (Config) 中,从而实现数据跟踪。它提供了一种简单方法,通过更改配置文件中的值(而不是直接修改工作流)即可维护项目。
♉ 日志记录
REFramework 的另一个强大功能是内置记录机制。组成框架的大多数工作流都使用日志消息活动。这些活动会输出在基于每个执行步骤发生情况的详细信息上。
这种机制不仅可用于查找问题,帮助您完成调试流程,还可用于创建有关流程执行(例如,每天处理了多少张发票,发生了多少次故障和引发故障的主要原因)以及流程本身(例如,一个月内处理的所有报告的汇总值)的可视化内容和报告。
♊ 业务异常和应用程序异常
在执行过程中,大多数流程都可能出现与正常执行流程相悖的异常情况,您必须解决问题才能实现更可靠的自动化。
例如,假设某个流程使用了几个 Web 应用程序,但 Web 浏览器在某个点会停止响应。如果某个活动(比如说点击)尝试与停止响应的应用程序交互,则可能会失败并返回异常。经过设计,REFramework 会尝试再次处理事务(即重试)或跳过该事务,从而实现从异常中恢复。
如果重新启动应用程序可以解决问题,框架会自动完成操作,并且会再次尝试处理同一事务。这些异常称为应用程序异常。
如果问题与数据本身或业务的基本要求相关(例如,不处理价值超过特定金额的发票),则框架会跳过该事务,并继续处理下一个事务。这些异常称为业务规则异常。
5️⃣ 调度程序和执行程序
虽然企业框架可以使用不同类型的数据源,但是企业框架结合了一种特殊的数据源:Orchestrator Queue,也就是队列结构。当使用队列时,可以定义项目的优先级和截止期来追踪重试或失败的项目。使用队列也启用了名为“调度程序和执行程序”的执行模式。该模式将流程分为两个主要阶段:调度要处理的项目并将其添加到队列中,然后从队列中检索项目并使用该项目执行流程。流程的第二部分通常使用 REFramework 构建。
♈ 调度程序
调度程序是用于将事务项目推送到 Orchestrator 队列的流程。它从一个或多个来源提取数据,并使用这些数据来创建将由执行程序机器人处理的队列项目。
系统将信息推送到一个或多个队列,从而让调度程序为队列项目中存储的所有数据使用通用格式。
使用调度程序模式的主要优点是,您可以在多个机器人之间拆分项目的处理。
♉ 执行程序
执行程序是用于从 Orchestrator 队列中拉取事务项目,并根据公司需求处理这些项目的流程。它每次处理一个队列项目。
每个处理的项目都有错误处理和重试机制。
执行程序的主要优点是可扩展性(多个执行程序可以与单个队列一起使用)。
我们仍使用前述同一场景,某个电子表格中包含人员及其电子邮件地址的列表。您需要基于模板向其中每位人员发送一封电子邮件以及一条个性化消息。
我们可以通过以下方式使用“调度程序和执行程序”模式:
- 调度程序从输入电子表格读取行,并将数据(即姓名和电子邮件)添加到队列中;每个队列项目都将包含来自电子表格某一行的姓名和电子邮件地址。
- 执行程序检索来自同一队列的项目,并使用该数据执行必要的操作,比如说替换模板值和发送电子邮件。
调度程序和执行程序模型
的优点:
- 流程分离更明确(调度程序和执行程序之间)
- 架构层与流程层的分离和区分更明确
- 更完善的错误处理和重试机制
- 可跨多台计算机运行流程(可用性)
- 在项目创建的组件内提供更好的可重用性
- 改进了内置的配置和 Orchestrator 集成
- 轻松调整和部署以前未使用 REFramework 创建的工作流,从而使用 REFramework 和调度程序/执行程序模型
6️⃣ 调度程序和 REFramework 执行程序演示
♈ 创建REFramework项目
首先,我们用Templates中的REFramework创建一个项目,如下图所示。
Main.xaml 已打开,其中显示有一个序列。
在Main文件中我们可以看到上述提到的4个状态。
♉ Initialization
打开Initialization状态机,我们可以看到读取了Config文件中的Settings和Constants页的数据,通过字典类型缓存起来。
在 InitAllSettings 工作流中,您要加载与应用程序或流相关的所有设置和数据。在此状态下使用的文件之一是 Config 文件,它位于项目的“数据”文件夹中。
其中包含有关设置、常量和资产的各种信息。根据需要,这些信息可用于处理数据和配置 REFramework,在“REFramework 深入探索”课程中可以了解有关 Config 文件的详细信息。
♊ Get Transaction Data
♋ Process Transaction
♌ End Process
♍ 方法
1. 调度程序:-从 Excel 文件获取条目,并在 Orchestrator 中将其添加为队列项目。
首先,我们创建了一个序列项目,然后添加了“Try Catch 异常处理”活动。在“尝试”块中:
- 我们使用“读取范围”读取 Excel 文件中的前 10 行(A1:C11),并将其存储在新建的 DataTable 变量中;
- 我们使用“遍历每一行”来循环遍历的 DataTable 变量中行,并使用“添加队列项目”活动将其添加到队列中。
- 我们使用“日志消息”活动来记录已成功执行调度流程的消息。
2. 执行程序- 从队列中获取并处理项目(事务)
a. 在初始状态下:
- 调用 InitAllSettings 工作流,以初始化使用的应用程序和流程的所有设置和数据。在这个部分,系统将读取“数据”文件夹中 Config.xlsx 文件的设置、常量和资产;
- 调用 InitAllApps 工作流,以打开应用并检查其状态、凭据等;
- 调用 KillAllProcesses 工作流,以保留使用的应用程序的单个实例。
任何系统错误都会让流程进入结束流程状态。
b. 在获取事务数据状态下:
- 在序列中,使用 “should stop” 活动来验证 Orchestrator 是否发送了停止信号。
- 如果没有, 则调用获取事务数据工作流,该工作流使用获取队列项目活动来从 Orchestrator 获取事务信息。
如果没有要读取的数据,它会进入结束流程状态。
c. 在流程事务状态下:
-
流程是一个使用“尝试捕获”活动集来捕获系统异常和业务异常的序列。
-
在“尝试”块中,调用“处理事务”工作流,它具有一个简单的流程,用于:
- 附加到 UiDemo 应用程序
- 3 个“输入信息”活动用于填写“兑现”、“银行内求偿支票”和“非银行内求偿支票”字段;
- 'Click“接受”按钮。
d. 在结束流程状态下,使用“关闭应用程序”。
7️⃣ 参考资料
⭐写在结尾:
文章中出现的任何错误请大家批评指出,一定及时修改。
希望写在这里的小伙伴能给个三连支持!