VBA SAP gui сценариев выбрать конкретный c сеанс - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь запустить код Excel VBA, который использует сценарии SAP GUI. У меня есть несколько открытых сессий в Sap, и я использую две системы "F6P" и "FVP" одновременно.

Как запустить одну из сессий "FVP"? Ниже показано, что открыты два сеанса. Один - это блок F6P SAP, а другой - блок FVP SAP.

enter image description here

    Option Explicit
    Public SapGui, App, Connection, Session, SapGuiAuto, WScript

    Sub Overconfirmation()
        Call SAP
        Call tcode
        End
        Sub SAP()
        If Not IsObject(App) Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set App = SapGuiAuto.GetScriptingEngine
        End If
        If Not IsObject(Connection) Then
           Set Connection = App.Children(0)
        End If
        If Not IsObject(Session) Then
           Set Session = Connection.Children(0)
        End If
        If IsObject(WScript) Then
           WScript.ConnectObject Session, "on"
           WScript.ConnectObject App, "on"
           Set Session = Application.ActiveSession
        End If
    End Sub

    Sub tcode()
        Session.findById("wnd[0]").maximize
        Session.findById("wnd[0]/tbar[0]/okcd").Text = "/n/sapapo/bopin"
        Session.findById("wnd[0]").sendVKey 0
    end sub  

Спасибо.

1 Ответ

1 голос
/ 21 января 2020

Идентификатор системы SAP определяется в свойстве SystemName объекта GuiSessionInfo, которое само является свойством Info объекта GuiSession , Вы можете получить доступ ко всем существующим сеансам с помощью этого кода:

For connNr = 0 To Application.Children.Length - 1
  Set conn = Application.Children.ElementAt(connNr)
  For sessNr = 0 to conn.Children.Length - 1
    Set sess = conn.Children.ElementAt(sessNr)
    If sess.Busy = False Then
      ' Test Busy because property Info is blocked when the session runs something
      If sess.Info.SystemName = "FVP" Then
        ' Do whatever you want with session sess
      End If
    End If
  Next
Next
...