• 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(对象、属性、方法),并灵活运用到我们的自动化脚本中,对代码的灵活性、鲁棒性的提升是肉眼可见的。感兴趣的童鞋,赶紧试试吧!

  • 相关阅读:
    做开发的童鞋应该都了解这几款软件
    给文件对比工具自定义快捷键的方法
    C/C++ 编程有哪些值得推荐的辅助工具
    如何用Beyond Compare修改对比文件颜色
    据说这些工具可以提高程序员的工作效率
    遇到Beyond Compare禁止编辑该怎么办
    BZOJ
    周三
    大总结
    周二上午
  • 原文地址:https://www.cnblogs.com/new-june/p/14419173.html
Copyright © 2020-2023  润新知