Python驱动SAP GUI完成自动化(五)
小爬前几篇SAP GUI自动化相关的博文提到过,我们可以借助tracker工具,在手工利用SAP GUI完成一系列操作(查询、导表、创建凭证等)后,可以快速得到python脚本,我们再结合python的语法特性稍加修改,把逻辑分支、循环分支、条件分支等加入其中,就可以做成一段自动化的脚本。
现实的办公世界里,我们在SAP GUI中输入的外部参数很多都会触发SAP的报警弹窗、消息(报警、错误、信息、成功等多种状态),我们可以利用SAP原生的一些API来捕获我们的报警弹窗、SAP左下角消息状态、消息文本等,利用这些来提高脚本工具的鲁棒性;
比如我们可以拿到SAP左下角的消息,利用RE正则表达式或者其他字符串解析方法-解析得到自动创建的内部订单号,可以根据消息的状态(报警还是正常消息、还是错误消息)来决定程序是否要继续,捕获某个SAP Session下的窗口个数(不为1,说明程序弹出了子窗口),来决定是否要处理子窗口,这些都是实际业务中会遇到的太正常不过的需求。甭着急,小爬都有招数一一应对。
下面这段代码演示了如何利用python和win32com连接SAP,同时捕获当前会话下的窗口数量(是否有子窗口),以及如何关闭弹窗:
import win32com.client,win32con '''连接SAP,需要提前安装pywin32库''' SapGuiAuto = win32com.client.GetObject("SAPGUI") application = SapGuiAuto.GetScriptingEngine connectionCnt = application.Children.count if connectionCnt==0: session = None connection = None application = None SapGuiAuto = None connection = application.Children(0) session=connection.Children(0) #得到第一个session sapText=session.findById("wnd[0]").text #得到GUI主窗口的窗口标题 '''获取当前session下的窗口数量''' cnt=len(session.children) # 如果有报警信息,则会显示两个弹窗,需要关闭SAP报警弹窗 if cnt==2: session.findById("wnd[1]/tbar[0]/btn[0]").press() # 关闭子窗口,消除弹窗报警
接下来这段脚本则演示了,如何获取SAP左下角的消息状态、消息文本,并进行后续处理:
import win32com.client,win32con import tkinter import tkinter.messagebox '''连接SAP,需要提前安装pywin32库''' SapGuiAuto = win32com.client.GetObject("SAPGUI") application = SapGuiAuto.GetScriptingEngine connectionCnt = application.Children.count if connectionCnt==0: session = None connection = None application = None SapGuiAuto = None connection = application.Children(0) session=connection.Children(0) #得到第一个session '''比如创建内部订单最后一个环节,点击保存后,捕获内部订单号''' orderMessageText=session.findById("wnd[0]/sbar/pane[0]").text #得到SAP左下角消息,即SAP创建好的内部订单号,进行存储 if session.findById("wnd[0]/sbar").messageType !="S": #消息类型不等于S,意味着没有成功创建内部订单号,或者存在报警信息 root = tkinter.Tk() root.withdraw() tkinter.messagebox.showwarning('*_*',orderMessageText) # 利用tkinter生成GUI弹窗,讲SAP消息反应在我们自制的弹窗上 os._exit(0) internalOrderNo=orderMessageText.split(" ")[1] #解析消息文本,提取内部订单号
我们可以利用SAP GUI脚本帮助,查询到SAP状态栏对象的消息类型属性,如下:
这个例子也再次验证了,脚本录制得到的代码只是基础,它远不够灵活,熟悉SAP scripting API(对象、属性、方法),并灵活运用到我们的自动化脚本中,对代码的灵活性、鲁棒性的提升是肉眼可见的。感兴趣的童鞋,赶紧试试吧!
快来扫码关注我的公众号 获取更多爬虫、数据分析的知识!