Greed Island

纪念我喜欢的动画片Hunter X Hunter。

星期四, 二月 06, 2020
Posted by 박용진

概述

Automation Anywhere(以下简称AA)对SAP自动化专项菜单项包括BAPI和Run Remote Call。
通常意义上的Object Clone方式捕获窗体对象时因为窗体设计的独特性(内嵌于GuiContainerShell),只能定位有限的项目。
个人猜测,SAP可能对第三方的Screen Scraping有顾虑?
AA的官方对SAP Automation有如下建议:
  1. 通过键盘事件
    在不能使用选项3的前提下的方案。基本上参考按键精灵的思路就可以。SAP尤其是财务报表的生成超级花时间,很容易失败。
  2. BAPI
    严重依赖对SAP/BAPI的熟悉程度,光靠门外汉花几个月摸索比较困难。(仅限于我这种水平,或许其他人表示毫无压力)
  3. 官方提供的Metabot
    具体开发语言不明,或许是.net写的。中心思想是基于GuiScripting进行了必要的封装。通过调用dll的形式完成基本的录入或点击动作。因为对第一步connect部分的不了解,没有直接采用该方案。

    image.png
  4. Gui Automation(11.3.3+)
    比之前的Metabot更直观。

    image.png
另外两家RPA厂商,BP和UiPath不约而同选择了启用Gui Scripting。使用UiPath时碰到过执行不稳定的问题。希望只是个例或者其他原因。bp没怎么试过,易用性比UiPath弱一些。

GUI Scripting简介

SAP GUI Scripting是一种自动化接口,可增强SAP GUI for Windows和Java的功能。 使用此接口,最终用户可以通过记录和运行类似宏的脚本来自动执行重复性任务。 另一方面,管理员和开发人员可以构建用于服务器端应用程序测试或客户端应用程序集成的工具。
顶级管理对象

脚本组件的对象模型中定义的所有对象在运行时都可以作为分层树的成员使用,其根对象是GuiApplication。

顶级用户界面对象
一个会话通常有一个GuiMainWindow作为它的子。 此窗口是用户与会话交互的起点。

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
Msgbox session.Children.Count
详细介绍点击这里 ,还有这里

实现方案

下图是SAP自动化处理机制示意。

示意图
  • Taskbot专注于业务逻辑自动化的实现,基于metabot的返回值判断是否记录业务异常或系统异常信息。
  • Metabot基于dll或者Script指令完成界面操作并处理异常。除了基本的系统操作,还要分担taskbot分化出的通用逻辑实现。
  • DLL/Script专注每一个操作的实现。尽量避免一个操作掺杂多个操作的方式。