iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用Python完成SAP客户端的打开和系统登陆功能
  • 442
分享到

如何使用Python完成SAP客户端的打开和系统登陆功能

2023-06-30 17:06:45 442人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“如何使用python完成SAP客户端的打开和系统登陆功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,SAP原生

本篇内容介绍了“如何使用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.clientimport 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客户端的打开和系统登陆功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用Python完成SAP客户端的打开和系统登陆功能

本文链接: https://www.lsjlt.com/news/330535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Python完成SAP客户端的打开和系统登陆功能
    最近小爬一直思忖着如何将以前写的一些半自动化程序转为全自动化,这其中就涉及到SAP的打开和登录过程。我们都知道,SAP原生的“脚本录制和回放”功能是在用户进入...
    99+
    2022-11-11
  • 如何使用Python完成SAP客户端的打开和系统登陆功能
    本篇内容介绍了“如何使用Python完成SAP客户端的打开和系统登陆功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,SAP原生...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作