91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python完成SAP客戶端的打開和系統登陸功能

發布時間:2022-05-31 13:43:53 來源:億速云 閱讀:291 作者:iii 欄目:開發技術

本篇內容介紹了“如何使用Python完成SAP客戶端的打開和系統登陸功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

我們都知道,SAP原生的“腳本錄制和回放”功能是在用戶進入到某一個SAP”用戶指定系統“后才可以啟用:

如何使用Python完成SAP客戶端的打開和系統登陸功能

也就是說,從這里開始,您可以通過腳本錄制,生成用戶名、密碼的輸入和SAP登錄過程的完整代碼;

那么我們的重點就轉到了,如何通過Python完成SAP應用程序的打開并進入特定的”用戶指定系統“,比如下圖中紅圈所示系統:

如何使用Python完成SAP客戶端的打開和系統登陸功能

如何使用Python完成SAP客戶端的打開和系統登陸功能

如何使用Python完成SAP客戶端的打開和系統登陸功能

  PS:由于SAP啟動后選擇不同的視圖,界面會略有不同,下面演示的方法是在”瀏覽器視圖“、”工作區視圖“以及“樹視圖”下演示的,其他啟動視圖下無效,所以如果您希望下面提到的方法在您電腦上生效,請務必確保您登陸后視圖屬于上面提到的視圖中的一種。慶幸的是,SAP客戶端會記錄您的用戶習慣,一旦您完成默認瀏覽視圖的設定,下次程序啟動時,程序會默認使用此視圖。

如何使用Python完成SAP客戶端的打開和系統登陸功能

程序需要首先完成SAP 應用程序的自動啟動,python中的方法有很多種,我用到的方法如下:

 sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe" #您的saplogon程序本地完整路徑
    subprocess.Popen(sap_app)

然后是用python完成激活SAP“指定用戶系統”,這里需要您的python安裝win32com等組件,附上官方下載地址:pywin32 224

如何使用Python完成SAP客戶端的打開和系統登陸功能

有了它,我們可以輕易通過python來連接本地的win32程序并通過捕獲相應句柄來控制對應的窗口。當然,我們還要借助MicrosoftSpy++來捕獲各個窗口的句柄、ID、類、文本等關鍵信息,用以簡化我們的編程過程。

如何使用Python完成SAP客戶端的打開和系統登陸功能

大體思考過程如下:

如何使用Python完成SAP客戶端的打開和系統登陸功能

比如我現在要進入“R3生產系統”,SAP程序打開后,會默認高亮基于排名規則的第一位的系統,而我們的目標系統“位于第二位,(您可以通過修改排序手段、配合”名稱字段“的修改,讓您希望的系統默認排在第一位,不過小爬沒有這樣做),小爬嘗試去捕獲”R3生產系統“這個元素的句柄,然后完成雙擊操作,可惜通過win32gui.FindWindow、win32gui.FindWindowEx等都未能定位到它,如果您這樣做成功了,也歡迎您留言告知。

我們不妨試試一個更簡單直接的方法,對照上圖,先捕獲到③過濾器的句柄,使用sendmessage方法輸入過濾條件(要登陸的系統名稱),激活該條件,此時我們的目標系統②就會自然處于第一位且被”高亮“,然后我們捕獲左上角①(登陸)的句柄,單擊它進入到系統登陸界面,后續的登陸代碼通過原生的SAP腳本錄制方法得到,您也可以使用”Tracker“工具來快速錄制出python下可用的SAP自動化代碼(小爬之前的文章中簡要介紹過該工具);

如何使用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)\SAP\FrontEnd\SAPgui\saplogon.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客戶端的打開和系統登陸功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郯城县| 康保县| 岚皋县| 太康县| 甘泉县| 云浮市| 昔阳县| 香格里拉县| 长乐市| 临沭县| 高阳县| 忻城县| 武陟县| 万荣县| 浦北县| 广宗县| 昆明市| 平阴县| 毕节市| 页游| 富裕县| 铜川市| 南开区| 松原市| 烟台市| 舞钢市| 平乐县| 新昌县| 牡丹江市| 涟水县| 巴林右旗| 博客| 当雄县| 夏邑县| 特克斯县| 巍山| 武汉市| 邢台县| 济源市| 尼木县| 兴安盟|