Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
ArthurYang
Product and Topic Expert
Product and Topic Expert
3,105

本文档内容是基于我个人对SPA的理解产生的,目的是帮助您进一步了解SAP流程自动化 (SAP Build Process Automation 简称SPA) 的开发方式,阅读时间约为1小时。

 

本文档面向的人群是拥有1年及以上代码开发经验的开发者。

 

本文档主要分享RPA部分功能的工作原理概念及基本操作方面的内容

 

优化方式介绍更多关注在实战中如何让流程稳定持久的运行


 

通过此文档,您可以学习到SPA的中级用法,包括页面元素识别标准优化,基础逻辑组成,基础脚本编写等内容

 

本文档包含以下部分:

0.开发前的准备工作

1.创建自动化项目

2.创建应用程序

3.页面元素识别

4.创建自动化动作流程

 

 

如果您对BTP感兴趣,BTP个人精选内容目录 | SAP Blogs 可能有更多你需要的内容

 

0.开发前的准备工作


要运行SPA程序,需要在Win10以上系统内安装一个本地代理,并将代理链接上中控台,

 

操作:详细过程请参考SAP Build Process Automation (SPA) 中控台概览 | SAP Blogs 中的“3.SPA使用前准备工作“”


要开发SPA程序前,最好还可以(运行SPA程序时不需要)

    1. 将正在运行的360,鲁大师等软件暂时关闭
    1. 将界面分辨率调整至100%

 

1.创建自动化项目


首先创建一个自动化项目

 

操作:如下图


自动化项目创建完成后会自动跳转到项目内,你也可以从SPA主页的前厅进入该项目,

操作:第一次打开时会自动提示配置代理版本,这里选择我们当前电脑本地安装的代理版本


当然,我们也可以手动自己创建自动化

  


上图为SPA中常用到的所有模块,(新版UI中需要点开左上角的文件夹图标才可以看到+号图标)

RPA功能开发一般只需要用到:

应用程序:教会机器人认识不同的UI页面,一个应用程序即包含对一套系统的识别

自动化:能识别UI页面之后,将各种操作组合成固定的一个个自动化

数据类型:对于固定格式的excel,通过创建数据类型来快速读取该Excel,直接生成Json格式的object

项目启动器:定义该项目内哪些流程可以被启动等信息

 

 

2.创建应用程序


我们已经创建好了一个自动化项目,接下来我们教机器人认识一个网页:国家外汇管理局门户网站http://www.safe.gov.cn/

 

操作

首先在浏览器用新窗口打开该网址
然后在开发窗口内创建应用程序(一个应用程序代表一套系统,一套系统可以有多个页面screen,用于教机器人认识页面)

创建-应用程序-填入名称(标识符自动生成)-创建


 


然后会自动跳转到 添加屏幕 的界面

 

操作:

选择我们要抓取的页面,点击下一步

 

(如果不显示外汇管理局页面这个选项,可能是因为外汇管理局页面和SPA开发界面在同一个window,可以尝试把外汇管理局页面单独移出来成为一个新的window,然后切换到SPA开发界面[切换而非最小化外汇管理局页面]),


操作:左侧选择手动捕获,右下角点击 捕获(技术代表了该系统前端所用的技术类型,一般都会自动选择),捕获成功后点击 转到应用程序

 

(录制器方式将会在其他教程内学习),



 

(如果报错拓展程序问题,则是因为本地代理连不上本地浏览器,可以在确保浏览器右上角的拓展-SPA拓展 已经打开的情况下重启浏览器,再重启本地代理)

(如果报错获取页面问题,则是因为windows API调用失败,有时是因为360,安全卫士等软件的权限控制,此时需要关闭对应软件后重试;有时是因为刚安装代理,此时需要尝试重启电脑;如果还是不行,可以尝试检测屏幕之外的另一种方式"捕获工具",使用方法为打开目标页面,按住Ctrl,在将鼠标悬浮至目标页面后你会看到一个红框,再松开Ctrl即会捕获红框内的页面)

 

3.页面元素识别


3.1树状结构分析

一个页面内会有大量元素,虽然同类元素可能占比不高(例如UL,LI),但是为了让机器人可以精确的唯一的操作该元素,我们需要为元素添加识别条件来将我们需要的元素从整个页面中区分出来,这些标准可以是针对该元素本身,例如[该元素的text标签包含“人民币”字符串],也可以是针对该元素在整个页面中的位置,例如[该元素是[text标签包含“人民币”的UL]的直接子节点],将不同标准组合,就能从整个页面中精准的切割出我们要的元素

在该应用程序内,我们可以看到之前抓取下来的整个页面组件 和其背后的树结构 (屏幕-两者-树

操作:点选屏幕内的汇率价格控件(即系统截图中绿框所示部分,相当于选中了一个”UL”),

而右侧已经自动尝试了识别,发现我们可以在这个页面里以 “id等于 rmb_query ” 的条件 在整个页面的树状结构大量UL中中唯一标识该UL组件

 


 

我们需要的汇率信息正是这个UL下的每一个LI,但是这些LI都无法自动唯一识别,也没有id,甚至汇率数据每天都会变化所以text标签内容也会变化,所以我们很难单独识别这些LI

但这些LI的共同点就是他们都在这个UL下,所以我们可以使用 [父亲 等于 [id等于 rmb_query 的UL]] 作为这一批LI额外的识别条件,而不是仅仅以LI自带的属性作为条件

 

操作:

点击其中一个LI,(点击其就会以其为识别目标),再右键单击其父组件UL, 左键点击“添加到条件”,意为将该父组件作为LI的识别条件

 


但是我们需要的是所有的LI,



操作:先删除掉LI自动带入的识别条件(在屏幕右下角),

此时会显示已识别30+元素,

点击LI 右侧的三个点,点击点击LI右侧的“叠放的三个三角形”选项来将其设置为集合

 

 

操作:

声明元素(意即保存对符合条件元素的识别,以供后续自动化流程来操作这些元素)

再点击左侧的已声明元素,去右侧修改它的名称和标识符(标识符一旦声明无法修改)

 


要声明的对象是Li,右下角这些标准都是为了更好的唯一识别Li

 

接下来让我们尝试抓取一个“时政要闻”按钮并在之后进行点击

操作:

在左侧屏幕端点击"时政要闻"按钮,(右边自动挑选了 “Text 等于 时政要闻 的A标签” 作为标识条件,并显示已唯一标识)

点击 声明元素 即可,再点击右上角的保存

 


 

4.创建自动化动作流程

 

操作:

保存好"应用程序"后,切换到或者新建一个自动化流程
去右侧搜索 start,(流程的第一步应该是打开这个网页)

 

操作:
将start application控件拖到主流程中,并单击它(意即在右侧打开该步骤的配置信息)

 

操作:
将右侧配置信息“目标”选为我们之前创建好的应用程序 “外汇管理局system”、(本质上机器人会去打开该应用程序详细信息-数据和条件右侧的高级-应用程序路径)

 


接下来第二步是读取汇率数据,首先

 

操作:

把右侧的 屏幕 中我们之前抓取的屏幕拉进主流程,意即即将对这个“外汇管理局system”系统的“国家外汇管理局门户网站”屏幕进行操作

 


由于我们要循环读取很多行,所以我们需要加入一点逻辑,

 

操作:

右侧搜索for each,拖到应用程序内(此处将针对之前定义好的LI集合进行循环,对元素集合中的每一个元素都执行同样的操作)


 

操作:点击for each这个控件,在右侧其属性里"设置循环列表"右侧的三个点-打开目标编辑器-点开直到选中元素集合,在右侧将for each的目标编辑为我们先前声明的元素集合


 

操作:搜索get element,将其拖入For each的子流程内, 将get element的目标设置为之前声明的集合(如果搜索不到控件,可能是因为系统自动为您添加了控件的过滤条件,请将控件搜索框下方的过滤条件 漏斗和小叉图标 去除掉) (此处即将对之前网页内找到的所有符合条件的LI进行操作,get element即为获取对应元素的text信息)

由于get element这个操作的目标为单个元素,所以在将目标设置为集合后,还需要填写目标元素在集合中的序号,但是这里每次循环中操作的序号都不一样,所以还需要将元素的索引设置为index(此参数即为for each遍历时的index,从0开始)


 

接下来我们可以运行一下,

 

操作:保存内容后,在自动化内点击左上角的 测试,再在弹出框中点击测试,即可

 
之前只是抓取到了数据,并没有保存到一个地方,所以我们接下来试一试保存到Excel(前提是电脑已经安装了Excel或者WPS)

 

操作:(请严格按照下列名字选择控件,请注意有不同控件名字类似)

右侧搜索 open excel instance, 将该控件拖到Start application之前

再搜索Add Workbook,拖到open excel instance之后, Start application之前

再搜索push value,将该控件拖到for each内的get element控件之后,点击push value,右侧将其使用的value设置为前一步get element的结果,我这里是5Text

将save as workbook控件放在流程结尾前,右侧的filePath设置为C:\Users\Public\test.xlsx,

最后在save as workbook后放入一个close excel instance控件,该控件无需配置参数

(还可以再在后面添加一个close application来关闭汇率网页)

保存整个流程,点击测试

 

(有部分控件之间的名字十分类似,请注意辨别,截图都是控件原名)


 


 

一切顺利的话,流程图应该如上图所示,全过程包括了:

打开一个新的excel,再打开外汇管理局网址

抓取汇率列表,并遍历所有汇率的LI控件,先获取text,再将text推入当前的excel内

最后保存excel

(之前我们还抓取了”时政要闻”按钮,您可以自行尝试一下在流程的结尾点击一下该按钮)

 

 

流程的框架搭建完毕,但是离真正的实战,甚至是长久的稳定运行还有一段距离,后续的优化经验将在下篇分享,请移步链接


 

关于本文内容有任何问题或见解,欢迎在评论区留下你的想法,如果时间紧迫,也可以直接联系到我 arthuryang1996@foxmail.com,感谢你的时间

 

2 Comments