系列文章目录
综述: https://blog.csdn.net/m0_54284125/article/details/132774505
AS400: https://blog.csdn.net/m0_54284125/article/details/132778839
SAP: https://blog.csdn.net/m0_54284125/article/details/132778954
Lotus Notes: https://blog.csdn.net/m0_54284125/article/details/132779011
网页: https://blog.csdn.net/m0_54284125/article/details/132779052
Dynamics365: https://blog.csdn.net/m0_54284125/article/details/132779089
通用桌面应用: https://blog.csdn.net/m0_54284125/article/details/132779109
(说明:文章撰写中,以上清单只是先book网址)
前言
工作中,总有一些同事的某些工作非常无趣,比如说要在ERP系统里开几十上百张生产工单, 或是根据客诉记录在系统里生成赔付订单等等。基本上这些工作就是很机械地将信息从一个地方搬到另一个地方,枯燥且。这时RPA就可以大显身手了 。
此系列记录总结一下以前做过的RPA工具备忘。涵盖AS400绿屏仿真器(PC5250)、SAP GUI、Lotus Notes、BPCS(一款古早的ERP)、网页等。
主要编程语言主要是VBA,少数VBA不支持的,用的是C#和Python.
一、RPA是什么?
RPA是英文Robotic Process Automation的简称。国内多数文章直译为"机器人流程自动化", 这个译名很容易让人困扰。因为说到机器人
, 人们的第一反应可能是想到实体的机器人。而实际上,RPA只是电脑程序相关,它统指将一些无需太多判断只需机械执行的工作由电脑程序自动化来处理。
RPA基本上可以分为两大类:
- 应用程序RPA
这是传统意义上的RPA概念。指的是开发一个程序(称为Robot)做为工具, 由这个工具代替人来操作另一个程序,涉及的只是整个业务流程中的一个特定环节。比如说,开发一个工具帮助计划员来自动开生产工单。 - 业务流程RPA
业务流程RPA其实就是工作流(workflow)自动化。说到工作流自动化, IBM的Lotus Notes曾经(估计仍然)是大哥。在Lotus Notes里,通过eForm, 实现业务流程审批逻辑,甚至可以自动根据审批条件或结果操纵其它数据源,功能强大。那个时候没人说这是RPA。近些年, 一些公司推出了一些新的工作流产品, 比如Microsoft的flow (现在叫Power Automate), 以及Nintex等, 不知为何也都冠上了RPA的名号。
本文只关注应用程序RPA,如果将来有兴趣,可以继续补充workflow部分。
二、RPA工具开发基础
1.RPA的基本工作原理
如前所述,这里只关注应用程序RPA,就是开发一个程序(A)做为工具去控制另外一个程序(B)。那是如何做到的呢?
首先,做为一个用户,通过电脑程序做的事情其实是非常有限的:电脑程序通过屏幕显示一些信息给你,你通过鼠标选择并点击屏幕上的元素,通过键盘输入命令或者信息。基本上,所谓的人机交互也就是这些了。
直觉上,如果RPA工具能够完全模仿人的动作,记下来用户在哪个位置点的鼠标,哪个位置输入的信息,应该就可以代替人了。事实上确实如此,有款叫“按键精灵”的软件,就是这么干的。你打开要被控制的应用程序,用按键精灵记录下你的点击和输入位置,它就可以依葫芦画瓢操作。做为最直白最朴素的思路,这个办法在其它办法行不通时,还是可以做为救命稻草的。很多商业化的工具中也都保留有这个方法.
显然,上面这种记录屏幕坐标的方法有很大的局限性。电脑屏幕尺寸有大小区别不说,总不能都要求应用程序放到最大化吧?万一不小心碰到鼠标了、聊天框弹出一个消息什么的都会导致应用程序失去焦点,这时RPA操作的就是错误的程序了。所以实际上,RPA是通过控件对象来操纵应用程序的。
以典型的Windows程序为例, 用户界面(UI)上都是各种对象(object), 显示的文字是文本对象(text),点击的是按钮对象(button),用于输入的是编辑框对象(EditBox), 等等,这些都在一个窗口对象内(Window)。这些对象,都可以通过接口暴露出来,供其它程序操纵。这个接口就象是传达室的老大爷,只要你知道一些基本信息(姓名什么的), 他都能帮你传个话递个东西。这种方法的好处显而易见,RPA工具操纵应用程序时,应用程序并不需要一定在屏幕前方,而且可以准确无误地操纵想要操纵的目标。
2. 应用程序的自动化接口
对于Windows应用程序, 通常都会有UIAutomation接口,这是编译程序时,自动加进去的。但是对于一些特殊的应用程序,比如说用Java写的, UIAutomation接口并不好使,因为UIAutomation接口只能提供一些表层的对象,比如窗口、菜单什么的,再细节的对象就拿不到了。
RPA的需求是如此强烈,以至于大型的商业软件公司不能不考虑。所以很多软件自己提供了专用的Automation拉口。以下是本人曾经使用过的:
SAP: 提供SAP GUI Script API
LotusNotes: 提供了一系列类(比如NotesUIWorkspace class)来操纵Notes
IBM 绿屏仿真器:提供了EHLLAPI、HACL、PCSAPI等几个API
网页:现在浏览器都有提供API, 供Selenium调用
Dynamics365: 本质上是网页,但是也提供有专用的API,供脚本使用
3. RPA工具开发方法
-
使用低代码开发工具
市面上已经有很多RPA开发工具,多数是低代码的,只需要拖拖拽拽就行了。典型的有:
Blue Prism: 比较贵,适合用大型公司使用
UiPath: 有社区版,功能也比较强
PowerAutomate Desktop: 原来叫WinAutomation, 被Microsoft收购后改造。免费。 -
自己写代码
IBM有一款古早的产品叫Rational Robot, 使用的编程语言是SQABasic. 本人RPA入门就是从它开始的
各种不同的API,对编程语言的要求也不太一样,在各自的篇章里详述。
虽然本系列讲的都是自己怎么写代码来做RPA,但是如果应用场景不是特别复杂的话,推荐用低代码开发工具,可以省很多时间。
三、RPA应用场合探讨
如果条件允许,直接导入数据到后台数据库的效率要高得多得多。所以RPA应该是最后无奈的选择,只在以下情况下才考虑:
- 应用程序后台数据库不可达
比如说,应用程序是外部提供的(税务、海关、客户等),不可能直接导入数据。 - 虽然可以操作后台数据库,但是业务逻辑太复杂或有限制
常见的情况是业务过程复杂,会触发相当多的表数据变动,对直接导入数据没有信心或是研究后台逻辑太困难。
RPA前几年火过一阵,这两年似乎又沉寂下来了,这完全可以理解,不能理解的是当初它为什么会火。
对于小企业,没那么多的工作量需要运用RPA。对于中大型企业,RPA真正的受益者是基层的操作人员,他(她)们有迫切的需求,但是恰恰他(她)们的话语权也是最低。当然出于降低成本的动机,上层也可能会有兴趣来推动。但这会陷入企业固有的困境:
- 基层的主管对减少人员兴趣不大,或者说有抵触。对一个基层领导来说,管的人越多越好嘛。
- 中大型企业都倾向于集中管理RPA,这就是为什么大型企业RPA工具基本都是用Blue Prism的原因。因为集中管控,Robot是从中央管理器推到用户端来执行的。但是除了银行等少数特殊行业的特殊场景外,企业里的基层员工需要的是能根据自己节奏使用的工具。
所以我个人对应用程序RPA工具的前景持深度怀疑态度。
结语
做为一名伪程序猿,这些年零零碎碎也学过不少东西。也并不指望学的这些能带来什么收益,只是做为乐趣罢了。
可惜随着年岁渐长,记忆力开始衰退。当初花很多力气研究得比较深入的东西,隔段时间已经完全没有印象了。还是记下来比较好, 这算是一个开端吧。