Win32com和SAP-GUI

7

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

就像这个截图一样:

sap-gui-config--scripting-enabled

在这篇《SAP GUI脚本入门》的“第二步:设置您的SAP系统”中,需要调用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

我很想了解更多关于这个的信息。 - DeerSpotter
3个回答

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

0

据我所知,sapgui/user_scripting是一个系统级别/应用程序级别的设置,而不是用户级别的。因此,如果您没有权限运行RZ11事务码,则没有机会或权限读取应用程序服务器设置,当然也没有权限更改它。您需要与基础管理员联系,与他验证此应用程序设置。

您知道,SAP由于可能存在漏洞而限制了脚本编写能力,这就是为什么必须在客户端和应用程序服务器端都启用脚本支持的原因。


0
如果您可以访问注册表,您可以编写一个自定义函数来检查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 的注释,以更好地适应你与最终用户的交互方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接