<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近小爬一直思忖著如何將以前寫的一些半自動化程式轉為全自動化,這其中就涉及到SAP的開啟和登入過程。我們都知道,SAP原生的“指令碼錄製和回放”功能是在使用者進入到某一個SAP”使用者指定系統“後才可以啟用:
也就是說,從這裡開始,您可以通過指令碼錄製,生成使用者名稱、密碼的輸入和SAP登入過程的完整程式碼;
那麼我們的重點就轉到了,如何通過Python完成SAP應用程式的開啟並進入特定的”使用者指定系統“,比如下圖中紅圈所示系統:
PS:由於SAP啟動後選擇不同的檢視,介面會略有不同,下面演示的方法是在”瀏覽器檢視“、”工作區檢視“以及“樹檢視”下演示的,其他啟動檢視下無效,所以如果您希望下面提到的方法在您電腦上生效,請務必確保您登陸後檢視屬於上面提到的檢視中的一種。慶幸的是,SAP使用者端會記錄您的使用者習慣,一旦您完成預設瀏覽檢視的設定,下次程式啟動時,程式會預設使用此檢視。
程式需要首先完成SAP 應用程式的自動啟動,python中的方法有很多種,我用到的方法如下:
sap_app = r"C:Program Files (x86)SAPFrontEndSAPguisaplogon.exe" #您的saplogon程式本地完整路徑 subprocess.Popen(sap_app)
然後是用python完成啟用SAP“指定使用者系統”,這裡需要您的python安裝win32com等元件,附上官方下載地址:pywin32 224
有了它,我們可以輕易通過python來連線原生的win32程式並通過捕獲相應控制程式碼來控制對應的視窗。當然,我們還要藉助MicrosoftSpy++來捕獲各個視窗的控制程式碼、ID、類、文字等關鍵資訊,用以簡化我們的程式設計過程。
大體思考過程如下:
比如我現在要進入“R3生產系統”,SAP程式開啟後,會預設高亮基於排名規則的第一位的系統,而我們的目標系統“位於第二位,(您可以通過修改排序手段、配合”名稱欄位“的修改,讓您希望的系統預設排在第一位,不過小爬沒有這樣做),小爬嘗試去捕獲”R3生產系統“這個元素的控制程式碼,然後完成雙擊操作,可惜通過win32gui.FindWindow、win32gui.FindWindowEx等都未能定位到它,如果您這樣做成功了,也歡迎您留言告知。
我們不妨試試一個更簡單直接的方法,對照上圖,先捕獲到③過濾器的控制程式碼,使用sendmessage方法輸入過濾條件(要登陸的系統名稱),啟用該條件,此時我們的目標系統②就會自然處於第一位且被”高亮“,然後我們捕獲左上角①(登陸)的控制程式碼,單擊它進入到系統登陸介面,後續的登陸程式碼通過原生的SAP指令碼錄製方法得到,您也可以使用”Tracker“工具來快速錄製出python下可用的SAP自動化程式碼(小爬之前的文章中簡要介紹過該工具);
PS:
程式中要考慮SAP的啟動、系統雙擊開啟等都需要一定的時間消耗,所以要新增延遲來解決,而延遲時間的長短可以通過while True的迴圈配合Try except方法來靈活調整,整個過程用python實現是這樣的:
#-Begin----------------------------------------------------------------- #-Includes-------------------------------------------------------------- import sys, win32com.client import win32api,win32gui,win32con,win32ui,time,os,subprocess #-Sub Main-------------------------------------------------------------- def Main(): sap_app = r"C:Program Files (x86)SAPFrontEndSAPguisaplogon.exe" #您的saplogon程式本地完整路徑 subprocess.Popen(sap_app) time.sleep(1) flt=0 while flt==0: try: hwnd = win32gui.FindWindow(None,"SAP Logon 740") flt=win32gui.FindWindowEx(hwnd,None,"Edit", None) #capture handle of filter except: time.sleep(0.5) win32gui.SendMessage(flt,win32con.WM_SETTEXT,None,"R3生產系統") win32gui.SendMessage(flt,win32con.WM_KEYDOWN,win32con.VK_RIGHT,0) win32gui.SendMessage(flt,win32con.WM_KEYUP,win32con.VK_RIGHT,0) time.sleep(0.1) dlg = win32gui.FindWindowEx(hwnd,None,"Button", None) #登陸(0) win32gui.SendMessage(dlg,win32con.WM_LBUTTONDOWN,0) win32gui.SendMessage(dlg,win32con.WM_LBUTTONUP,0) SapGuiAuto = win32com.client.GetObject("SAPGUI") if not type(SapGuiAuto) == win32com.client.CDispatch: return application = SapGuiAuto.GetScriptingEngine if not type(application) == win32com.client.CDispatch: SapGuiAuto = None return connection = application.Children(0) if not type(connection) == win32com.client.CDispatch: application = None SapGuiAuto = None return time.sleep(2) flag=0 while flag==0: try: session = connection.Children(0) flag=1 except: time.sleep(0.5) if not type(session) == win32com.client.CDispatch: connection = None application = None SapGuiAuto = None return session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "username" #此次放入您的SAP登陸使用者名稱 session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "password" #此次放入您的SAP登陸密碼 session.findById("wnd[0]").sendVKey(0) """下面演示了使用mm03檢視物料1000000000000的狀態後再退回sap首頁的過程""" session.findById("wnd[0]/tbar[0]/okcd").text = "mm03" session.findById("wnd[0]").sendVKey(0) session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = "1000000000000" session.findById("wnd[0]").sendVKey(0) session.findById("wnd[1]").sendVKey(0) session.findById("wnd[0]/tbar[0]/okcd").text = "/n" session.findById("wnd[0]").sendVKey(0) #>Insert your SAP GUI Scripting code here< #-Main------------------------------------------------------------------ if __name__ == "__main__": Main() #-End-------------------------------------------------------------------
到此這篇關於使用Python完成SAP使用者端的開啟和系統登陸的文章就介紹到這了,更多相關Python SAP登陸內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45