小爬前幾篇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(對象、屬性、方法),并靈活運用到我們的自動化腳本中,對代碼的靈活性、魯棒性的提升是肉眼可見的。感興趣的童鞋,趕緊試試吧!
快來掃碼關注我的公衆号 擷取更多爬蟲、資料分析的知識!