【问题标题】:Run SAP GUI script in the background (not visible)在后台运行 SAP GUI 脚本(不可见)
【发布时间】:2015-03-26 00:45:55
【问题描述】:

我正在使用 SAP GUI Scripting API 编写代码来自动化 SAP GUI for Windows 中的一些任务,但我需要隐藏屏幕。

是否有visible = false 选项之类的东西?

如果没有,我该怎么办?

上下文:SAP GUI Scripting API 是从 Microsoft Outlook 中的 VBA 调用的,但适用于通过 SAP GUI Scripting API 自动化 SAP GUI 的任何语言。

【问题讨论】:

  • 不清楚,你想从 SAP 中得到什么,只是通过 RFC 从中读取数据,或者尝试插入/更新一些 SAP 数据?
  • 插入数据,填写字段
  • 你尝试过使用 WScript.Shell 吗?
  • 我没有,有可能吗?

标签: sap-gui


【解决方案1】:

谢谢大家。

我想通了,只是需要添加

.findById("wnd[0]").iconify

再次感谢

【讨论】:

  • 有谁知道如何将这个命令 "findById("wnd[0]").iconify" 应用于弹出窗口?我尝试将 wnd[0] 更改为 wnd[1] 但没有成功
  • 对迟到的评论表示歉意,如果您没有弄清楚,我想您可能不得不使用来自 VBA 的Application.SendKeys("{ENTER}")。这将单击“Enter”键。但是,这只有在弹出窗口被激活时才有效。
【解决方案2】:

您可以从任何应用程序自动化 Outlook,而无需显示 Outlook UI。请参阅How to automate Outlook from another program 了解更多信息。

您也可能会发现Using Automation to Send a Microsoft Outlook Message 文章很有帮助。

【讨论】:

  • 不完全符合我的预期...这是我不想展示的 SAP。前景很好
  • @levys 你的问题不是特别清楚,这个答案存在这一事实更加明显。也许您可以编辑您的问题以使其更清楚?
  • 我想我不够清楚。我在 Outlook VBA 中有一个代码,它工作得很好。它使 SAP 流程自动化。问题是:我希望在流程结束时更新 SAP 屏幕,而不是在流程运行时更新。这将类似于 VBA 中的 Application.ScreenUpdate = False
【解决方案3】:

根据我的经验,我知道运行SAP脚本的两种选择,第一种是使用WScript.Shell,我知道这种方法的信息太多,尝试搜索一下

Sub test()
    Dim Wsh
    Set Wsh = CreateObject("WScript.Shell").Run("C:\Users\USERNAME\Desktop\Script1.vbs")
End Sub

此方法允许在您的 PC 中启动应用程序,例如:

Sub test2()
    Dim Wsh As Object
    Set Wsh = CreateObject("WScript.Shell").Exec("calc.exe")
End Sub

第二个运行脚本,是在没有 *.vbs 文件的情况下从 MS office 中的脚本启动代码,如下例所示

Option Explicit

Public SapGuiAuto As Object
Public ApplicationSAP As Object
Public Connection As Object
Public Session As Object

Sub start()
Set SapGuiAuto = GetObject("SAPGUI")
Set ApplicationSAP = SapGuiAuto.GetScriptingEngine
Set Connection = ApplicationSAP.Children(0)
Set Session = Connection.Children(0)

Session.findById("wnd[0]").maximize             ' max main SAP window
Session.findById("wnd[0]/tbar[0]/okcd").Text = "/n" & "IW33"    'Transaction code
Session.findById("wnd[0]").sendVKey 0               'start transaction

End Sub

希望对您进一步搜索所需信息有所帮助

【讨论】:

  • 我想我不够清楚。我在 Outlook VBA 中有一个代码,它工作得很好。它使 SAP 流程自动化。问题是:我希望在流程结束时更新 SAP 屏幕,而不是在流程运行时更新。这将类似于 VBA 中的 Application.ScreenUpdate = False
  • @levys 也许我错了,但是当您使用脚本时,您将几乎无法关闭 SAP 窗口的屏幕更新。但是您可以使用其他方法来更新 SAP 数据。不使用 SAP 窗口,例如使用 RFC BAPI 调用连接到 SAP,但在这种情况下,您需要知道事务代码后面的功能模块。第二种可能对您有所帮助的方法是使用 GuiXT。
【解决方案4】:

您可以尝试以下方法:session.TestToolMode = 1

问候, 脚本人

【讨论】:

    【解决方案5】:

    您可以通过OpenConnectionOpenConnectionByConnectionString 在连接字符串末尾使用/INPLACE 连接到您的服务器。

    正在恢复...不要使用 conn = scripting_engine.Children( 0 ) 之类的东西,而是尝试使用类似的东西:

    conn = scripting_engine.OpenConnection( 'MYSAPCONNECTION /INPLACE' )
    session = conn.Children( 0 )
    

    顺便说一句...在this链接查看更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 2017-12-24
      • 2016-01-16
      • 2022-01-17
      • 2012-05-03
      • 2023-03-10
      相关资源
      最近更新 更多