如何通过VBS使用SSO登录SAP?

时间:2018-04-26 18:22:42

标签: vbscript sap

我正在尝试编写一个打开SAP会话的VBScript,具有单点登录功能。

我已经在这里和其他网站上找到了有关此主题或类似主题的一些信息,但它们都不符合我的要求。

这是我目前所做的,取自a SAP Discussion Forum

但SAP GUI中发生错误;

  

Hostame'PRD'未知

     

线:896
  方法:NiPGetHostByName:'找不到'PRD'

enter image description here

有人能帮助我吗?

Option Explicit
Dim WSHShell, SAPGUIPath, SID, InstanceNo, WinTitle
Set WSHShell = WScript.CreateObject("WScript.Shell")
If IsObject(WSHShell) Then
    SAPGUIPath = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\"
    SID = "PRD"
    InstanceNo = "00"
    WSHShell.Exec SAPGUIPath & "sapgui.exe " & SID & " " & _
      InstanceNo
    WinTitle = "SAP"
    While Not WSHShell.AppActivate(WinTitle)
      WScript.Sleep 250
    Wend
    Set WSHShell = Nothing
End If

1 个答案:

答案 0 :(得分:0)

完全披露,我不使用SAP所以我所说的任何纯粹是受过教育的猜测工作。

在看了一会儿问题之后,我可能会有一个建议。

错误直接来自SAP GUI并且非常详细,这使我们能够做出一些假设;

  1. 错误来自SAP GUI,因此VBScript正在执行而没有问题。
  2. 问题可能在于将信息传递给SAP GUI。
  3. 让我们尝试分解错误。由于这个特殊的错误,我们有丰富的信息(将挑选一些关键的信息);

    • 模块:我们被告知此错误源自哪个文件。
    • 行:发生错误的行。
    • 方法:出现错误的错误发生的方法。
    • 返回代码:我们可以使用它来查找特定的SAP GUI返回代码。但是,只有当文档足够详细以包含它时。也可以进行互联网搜索以查找产品特定的错误代码。

    有了所有这些信息,有两件事情变得明显;

    1. 该方法名为NiPGetHostByName,表示SAP GUI希望使用名称找到主机。
    2. 根据问题中的代码和SAP中连接列表的附带屏幕截图判断PRD值似乎是SID列而不是名称。
    3. 那么,你是否应该传递Name而不是SID,因为它看起来SAP GUI没有在SID中工作,并错误地认为PRD是名称,因此找不到它?

      我建议尝试类似的事情;

      Option Explicit
      Dim WSHShell, SAPGUIPath, SID, InstanceNo, WinTitle, Name
      Set WSHShell = WScript.CreateObject("WScript.Shell")
      If IsObject(WSHShell) Then
          SAPGUIPath = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\"
          Name = """1. SAP ECC Production (PRD)"""
          SID = "PRD"
          InstanceNo = "00"
          WSHShell.Exec SAPGUIPath & "sapgui.exe " & Name & " " & _
            InstanceNo
          WinTitle = "SAP"
          While Not WSHShell.AppActivate(WinTitle)
            WScript.Sleep 250
          Wend
          Set WSHShell = Nothing
      End If