无法通过 id 找到控件。 SAP GUI 错误?

问题描述 投票:0回答:2

我正在尝试使用脚本自动化 SAP 数据提取。我面临的问题是 SAP 中记录的脚本在我运行时不起作用,当我使用

findById("id")
方法时它出现无法找到,但是选项卡在那里。

想法是在选项卡之间移动(使用

session.findById("id").Select
)以提取该面板中的信息。使用采购订单 (PO) 列表,进行循环并提取信息,这很简单。

但是,这些选项卡不是随机找到的。有时有效,有时找不到。所有采购订单(如果我手动操作)都有包含数据的选项卡,但在脚本中它不起作用。

例如:

红色框是我要选择的选项卡

录制脚本的输出(只是在选项卡之间移动):

    If Not IsObject(application) Then
       Set SapGuiAuto  = GetObject("SAPGUI")
       Set application = SapGuiAuto.GetScriptingEngine
    End If
    If Not IsObject(connection) Then
       Set connection = application.Children(0)
    End If
    If Not IsObject(session) Then
       Set session    = connection.Children(0)
    End If
    If IsObject(WScript) Then
       WScript.ConnectObject session,     "on"
       WScript.ConnectObject application, "on"
    End If
    session.findById("wnd[0]").resizeWorkingPane 183,24,false
   
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT13").select
' Extract info
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15").select
' Extract info
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT18").select
' Extract info

错误:

按id找不到控件

我在用:

我的理论,选项卡是隐藏的并且找不到它,我必须使用箭头移动,但是当我在制作脚本录制时使用箭头时,它根本不会将它们添加到代码。

对不起我的英语,提前感谢您的时间。

automation vbscript sap-gui
2个回答
3
投票

我只能针对这种现象提供解决方法。

例如:

...
for i = 1 to 99
    on error resume next
    session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:00" & right("0" & cstr(i),2) & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT13").select
    if err.number = 0 then exit for
    on error goto 0
    next
    on error goto 0
' Extract info
for i = 1 to 99
    on error resume next
    session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:00" & right("0" & cstr(i),2) & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT15").select
    if err.number = 0 then exit for
    on error goto 0
    next
    on error goto 0
' Extract info
for i = 1 to 99
    on error resume next
    session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:00" & right("0" & cstr(i),2) & "/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT18").select
    if err.number = 0 then exit for
    on error goto 0
    next
    on error goto 0
' Extract info

问候, 脚本人


2
投票

啊是的,我最喜欢的 SAP 屏幕:ME23N。谁知道 SAPLMEGUI:00XX 会是什么!但是,如果你通过它的名字找到元素你永远不会遇到这个问题。此外,这解决了您不希望出现的选项卡的问题;因为,根据 PO 的行项目,谁知道哪些选项卡可用。

这就是我每次都克服这个问题的方法,没有失败.

在您的子程序中使用以下功能。如果选项卡在那里,它将选择它并返回 true,您可以继续提取数据。您需要 tab texttab strip 的名称。

您可以轻松找到标签条的名称。看看记录了什么。它有“制表符”前缀。

session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT13 “)

Public Sub Main()

    If IsTabThere("ITEM_DETAIL", "Account Assignment") = True Then
        ' Extract info
    End If

    If IsTabThere("ITEM_DETAIL", "Purchase Order History") = True Then
        ' Extract info
    End If

End Sub

Public Function IsTabThere(ByVal tabStripName As String, ByVal tabText As String) As Boolean

    Dim userArea As Object
    Dim tabStrip As Object
    Dim tabToSelect As Object

    Set userArea = session.FindById("wnd[0]/usr")
    Set tabStrip = userArea.FindByName(tabStripName, "GuiTabStrip").Children

    For Each tabToSelect In tabStrip
        If tabToSelect.Text = tabText Then
            tabToSelect.Select
            IsTabThere = True

            ' Will exit here if the tab was selected and return true
            Exit Function
        End If
    Next

    IsTabThere = False
End Function

希望这让你开心。祝你好运!

如果您有兴趣让您的脚本更加动态,请查看我在这篇文章中的回答。我将解释如何开始使用 SAP GUI 脚本 API。

如何从 excel 宏运行 sap-gui 脚本

© www.soinside.com 2019 - 2024. All rights reserved.