【问题标题】:win32com and SAP-GUIwin32com 和 SAP-GUI
【发布时间】:2019-04-15 00:58:03
【问题描述】:

我的 SAP-GUI 已安装脚本并启用了脚本。

就像这个截图:

在“第 2 步:设置 SAP 系统”的 Introduction to SAP GUI Scripting 中,您需要调用 RZ11。

我没有调用 RZ11 的权限。

有没有办法通过脚本检测这个(sapgui/user_scripting 开启或关闭)?

目前我使用以下代码,但连接列表始终为空:

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
sapgui = win32com.client.GetObject("SAPGUI")
system = query.get('system')
client = query.get('mandant')
session = False
application = sapgui.GetScriptingEngine
seen = []
for i_conn in range(0, application.Connections.Count):
    seen.append('i_conn=%s session_count=%s' % (i_conn, application.Connections.Item(i_conn).Sessions.Count))
    for i_sess in range(0, application.Connections.Item(i_conn).Sessions.Count):
        session_info = application.Connections.Item(i_conn).Sessions.Item(i_sess).Info
        system_of_session = session_info.SystemName
        client_of_session = session_info.Client
        if system_of_session == system and client_of_session == client:
            connection = application.Connections.Item(i_conn).Children(i_sess)
            session = connection.Children(i_sess)
            break
        seen.append('system=%s client=%s' % (system_of_session, client_of_session))
    if session:
        break

else:
    info_popup('You are not logged into system %s in Client %s! Seen:\n%s' % (
        system, client, '\n'.join(seen)))
    return

【问题讨论】:

  • 我很想了解更多。

标签: win32com sap-gui


【解决方案1】:

如果您有权查询注册表,您可以编写一个自定义函数来检查 SAPGUI 是否已安装和标记,例如:

Public Sub CheckKey()

    Const cRegKey As String = "HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Security\UserScripting"
    If CheckSAPGUI(cRegKey) Then
        MsgBox "User has SAPGUI installed and initialized", vbOKOnly Or vbInformation, Application.Name
    Else
        MsgBox "User does not have SAPGUI installed", vbOKOnly Or vbCritical, Application.Name
    End If

End Sub


Public Function CheckSAPGUI(RegKey As String) As Boolean

    Dim rtn As Variant

    On Error Resume Next
    rtn = vbNullString

    With CreateObject("wscript.shell")
        rtn = .RegRead(RegKey)
    End With

    If Len(rtn) = 0 Then
        CheckSAPGUI = False
    ElseIf Val(rtn) <> 1 Then
        CheckSAPGUI = False
    Else
        CheckSAPGUI = True
    End If

    On Error GoTo 0
End Function

您应该能够修改 MsgBox cmets 以更好地适应您希望与最终用户交互的方式

【讨论】:

    【解决方案2】:

    当您在 sap 中没有足够的权限时,您无法连接的事实很好地表明用户没有启用脚本(假设用户正在运行一个活动的 sap 会话),否则您可以只用 'session.findById("wnd[0]/usr/tblSAPLCMDITCTRL_3500").getAbsoluteRow(3).selected = true' 测试并检查错误。 另外,如果“SAPGUI”失败,我建议您在 sapgui = win32com.client.GetObject("SAPGUI") 连接中考虑“SAPGUISERVER”。

    【讨论】:

      【解决方案3】:

      据我所知,sapgui/user_scripting 是系统级 = 应用程序级设置,但不是用户级设置。因此,如果您没有运行 RZ11 tcode 的权限,那么您就没有机会或权限来读取应用程序服务器设置,当然也没有更改它的权限。您必须联系您的基础管理员与他验证此应用程序设置。 您会看到,由于可能存在漏洞,SAP 限制了脚本功能,这就是为什么应该在客户端和应用服务器端都打开脚本支持的原因。

      【讨论】:

        猜你喜欢
        • 2022-10-20
        • 2016-01-16
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多