VBA for SAP登录使用" SID"而不是" Name"

2020-08-30 02:50发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我是新手,我正在尝试打开一个SAP部分,并使用Excel VBA启动事务。

假设:

在SAP中,我具有以下系统列表:

此刻,我正在使用对我有用的这段代码:

 Dim SapGui
 昏暗的应用
 暗淡的连接
 昏暗的会议
 昏暗的WSHShell

 外壳程序" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe",vbNormalFocus
 设置WSHShell = CreateObject(" WScript.Shell")
 直到WSHShell.AppActivate(" SAP Logon")执行
     Application.Wait Now + TimeValue(" 0:00:01")
 循环
 设置WSHShell = Nothing
 Set SapGui = GetObject(" SAPGUI")'获取SAP GUI脚本对象
 Set Applic = SapGui.GetScriptingEngine'获取当前正在运行的SAP GUI
 设置连接= Applic.OpenConnection(" 01。TEST1",True)
 设置会话= connection.Children(0)

 session.findById(" wnd [0]")。maximize
 session.findById(" wnd [0]/usr/txtRSYST-MANDT")。Text =" 100"
 session.findById(" wnd [0]/usr/txtRSYST-BNAME")。Text =" myusername"
 session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。Text =" mypassword"
 session.findById(" wnd [0]/usr/txtRSYST-LANGU")。Text =" EN"
 session.findById(" wnd [0]")。sendVKey 0
 session.SendCommand("/img/nSLG1")'启动SLG1事务
 session.findById(" wnd [0]/usr/ctxtBALHDR-OBJECT")。Text =" YESMAN"'填充"对象"字段
 session.findById(" wnd [0]")。sendVKey 8'发送F8命令

 MsgBox"当您完成使用SAP时,请在下面单击"确定"。
 设置会话=无
 connection.CloseSession(" ses [0]")
 设置连接=无
 设置SAP = Nothing 

不幸的是,此代码不适用于我的同事,因为他在系统列表中的名字是" 1。 TEST1",而不是我的" 01。 TEST1"。

是否可以修改代码字符串" 设置连接= Applic.OpenConnection(" 01。TEST1",True)",以便使用相关的SID设置连接(在这种情况下) " ST1 ")对所有用户都一样?

在此先感谢大家的贡献!

最大

(10.8 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我是新手,我正在尝试打开一个SAP部分,并使用Excel VBA启动事务。

假设:

在SAP中,我具有以下系统列表:

此刻,我正在使用对我有用的这段代码:

 Dim SapGui
 昏暗的应用
 暗淡的连接
 昏暗的会议
 昏暗的WSHShell

 外壳程序" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe",vbNormalFocus
 设置WSHShell = CreateObject(" WScript.Shell")
 直到WSHShell.AppActivate(" SAP Logon")执行
     Application.Wait Now + TimeValue(" 0:00:01")
 循环
 设置WSHShell = Nothing
 Set SapGui = GetObject(" SAPGUI")'获取SAP GUI脚本对象
 Set Applic = SapGui.GetScriptingEngine'获取当前正在运行的SAP GUI
 设置连接= Applic.OpenConnection(" 01。TEST1",True)
 设置会话= connection.Children(0)

 session.findById(" wnd [0]")。maximize
 session.findById(" wnd [0]/usr/txtRSYST-MANDT")。Text =" 100"
 session.findById(" wnd [0]/usr/txtRSYST-BNAME")。Text =" myusername"
 session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。Text =" mypassword"
 session.findById(" wnd [0]/usr/txtRSYST-LANGU")。Text =" EN"
 session.findById(" wnd [0]")。sendVKey 0
 session.SendCommand("/img/nSLG1")'启动SLG1事务
 session.findById(" wnd [0]/usr/ctxtBALHDR-OBJECT")。Text =" YESMAN"'填充"对象"字段
 session.findById(" wnd [0]")。sendVKey 8'发送F8命令

 MsgBox"当您完成使用SAP时,请在下面单击"确定"。
 设置会话=无
 connection.CloseSession(" ses [0]")
 设置连接=无
 设置SAP = Nothing 

不幸的是,此代码不适用于我的同事,因为他在系统列表中的名字是" 1。 TEST1",而不是我的" 01。 TEST1"。

是否可以修改代码字符串" 设置连接= Applic.OpenConnection(" 01。TEST1",True)",以便使用相关的SID设置连接(在这种情况下) " ST1 ")对所有用户都一样?

在此先感谢大家的贡献!

最大

(10.8 kB)
付费偷看设置
发送
1条回答
My梦
1楼-- · 2020-08-30 03:07

我在excel模板中所做的工作是根据可用内容读取saplandscape.xml文件或saplogon.ini文件。

然后提供连接列表,这些列表将呈现给特定于最终用户的环境。

那时,我测试

它们是否已经连接到该环境,以及是否未生成连接字符串并实例化一个新连接。

它的代码多于注释,但是主要的问题是可用的方法是:

将SAPApp设置为SAPFEWSELib.GuiApplication
 '按Desc打开连接:
 SAPApp.OpenConnection
 '按字符串打开连接
 SAPApp.OpenConnectionByConnectionString
 
 OpenConnection 

参数"描述"应包含SAP Logon中显示的描述之一,例如" XYZ [PUBLIC]"。 如果要创建新的SAP GUI实例并将其放置在应用程序中,则可以添加后缀"/img/INPLACE"。

如果管理员或用户禁用了脚本支持,则此函数将引发异常E_ACCESSDENIED。

备注:手动打开连接时,SAP GUI异步执行请求,因此,在请求新连接后,SAP登录对话框将保持响应状态。 这也是SAP GUI脚本的默认行为。 在脚本上下文中,这意味着对openConnection的调用可能会在新连接打开之前返回。 这样做的副作用是,当打开连接失败时,SAP GUI会显示无法从脚本处理的错误弹出窗口。 可以通过将sync参数设置为True来解决此问题。 然后,直到建立连接或检测到错误,对openConnection的调用才会返回。 如果将sync设置为True并发生错误,则除非参数raise设置为False,否则会引发异常。

 OpenConnectionByConnectionString 

具有应用程序服务器的主机名的示例( iwdf8997.wdf.sap-ag.de )和端口号(3200):

/H/ iwdf8997.wdf.sap-ag.de/ S/3200

有关SAP GUI脚本API的大量帮助文本>对象> GuiApplication对象>方法OpenConnectionByConnectionString

但是TL; DR-不,没有通过SID的访问。

一周热门 更多>