【问题标题】:How can I clear all the SAP GUI fields when I open a T-Code?打开 T 代码时如何清除所有 SAP GUI 字段?
【发布时间】:2019-05-17 15:53:53
【问题描述】:

当我从 SAP GUI 打开 T-Code 时,一些字段是从过去的查询中预先填充的。是否可以输入 T-Code 并将下一个窗口中的所有字段强制空白?

我为 SAP GUI 开发脚本,如果字段已经包含先前查询的内容,我会遇到问题。

【问题讨论】:

  • 你说的是什么tcode,什么字段?检查您的user parameters,这些值可以从那里预先填充
  • 谢谢,我去看看。我知道当我打开 T 代码时出现的一些字段值来自当天运行的先前查询。我研究过类似的情况,压倒性的反应是清除历史记录,但似乎不可能从脚本中做到这一点,当我这样做时,我在登录屏幕上的 ID 也会被清除。
  • SAP 历史只是文件C:\Users\<user>\AppData\Roaming\SAP\SAP GUI\History,删除这个文件就可以了
  • 我同意这可行,但我试图从 Excel VBA 中运行。我也不想使用我永远无法记住的字母汤 SAP id。此外,我的 Excel 应用程序的其他用户可能不希望删除他们的 SAP 历史记录。我只是希望有一个 SAP 脚本命令来清除 T-Code 表单中的所有字段。

标签: sap-gui


【解决方案1】:

历史记录不能被用户禁用。时期。

要么全部,要么没有。

如果您想禁用历史记录,请转到 SAPgui 选项进入 本地数据 设置

Windows 中的历史记录是一个简单的 Access MDB 文件,但它受密码保护,因此您可以尝试破解它并仅删除您的用户行,但这是一堆工作。

不过,我猜让你发疯的历史不是我上面描述的,而是SPA/GPA parameters。先检查一下

【讨论】:

    【解决方案2】:

    你可以清空一些字段:

    ""

    session.findById("wnd[1]/usr/ctxtRMMG1_REF-BWTAR").Text = ""
    

    但不是一直有效...

    【讨论】:

    • 这就是我现在要做的,但我的愿望清单是有一个可以清除 T-Code 数据输入屏幕上所有字段的命令
    【解决方案3】:

    我的方法是遍历所有字段(并在所有子元素上递归)并将它们的文本值设置为空字符串。

    在只读字段上它会引发错误,这就是为什么需要“On Error Resume Next”。

    Sub Start_Clearing()
    
    'setup SAP
        If Not IsObject(SAPApplication) Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set SAPApplication = SapGuiAuto.GetScriptingEngine
        End If
        If Not IsObject(Connection) Then
           Set Connection = SAPApplication.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 SAPApplication, "on"
        End If
    
        Dim UserArea As Object
        Set UserArea = Session.findByID("wnd[0]/usr")
    
        Clear_Fields UserArea
    
    End Sub
    '_______________________________
    
    Sub Clear_Fields(Area As Object)
            
        Set SAPApplication = GetObject("SAPGUI").GetScriptingEngine
            
        Dim Obj As Object
        Dim NextArea As Object
        
        On Error Resume Next
        For i = 0 To Area.Children.Count - 1
            
            Set Obj = Area.Children(CInt(i))
            
            If Obj.ContainerType = True Then
                If Obj.Children.Count > 0 Then
                    Set NextArea = SAPApplication.findByID(Obj.ID)
                    Clear_Fields NextArea
                End If
            End If
            
            Obj.Text = ""
        Next i
        
    End Sub
    

    【讨论】:

    • 我迫不及待想试试这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多