Sap Script & VBA – Capturando informações de instancias logada
Nessa postagem quero apresentar uma função que já utilizo a bastante tempo e faz parte de praticamente todas as automações que utilizo em SAP Scripting com Excel VBA.
É uma função que retorna uma matriz de dados com informações das instancias ativas no momento da execução do código, essa matriz pode ter uma ou mais dimensões, a quantidade de dimensões será definida pela quantidade de instancias logadas no momento da execução.
Por exemplo se você estiver logado no SAP Produção e também no SAP Qualidade (Teste), a matriz terá duas dimensões, com informação de cada dimensão em sua coleção de dados.
Para cada dimensão criada, deixei comentado a numeração que identifica cada campo capturado.
(1) Numero de janela, aqui eu retorno a quantidade de janelas abertas para essa instancia;
(2) Sistema logado, aqui eu retorno o nome da instancia que pode variar de acordo com a empresa;
(3) Nome do usuario, aqui eu retorno o nome do usuario ativo para aquela instancia;
(4) Janela Standard, aqui eu retorno True (verdadeiro) ou False (falso), caso existe janelas abertas em tela inicial ou seja em transações abertas.
Abaixo código comentado:
'(1)Numero de janelas
'(2)Sistema logado
'(3)Nome do usuario
'(4)Janela Standard "SESSION_MANAGER" - True|False
Public Function GetSapUserOpen() As Variant
'Variaveis diversas
Dim vSapInfo() As Variant
Dim vColunas(1 To 6) As Variant
Dim strID As String
Dim strUser As String
Dim strTransacao As String
Dim i, l As Integer
Dim fCheck As Boolean
'Variaveis de objeto SAP
Dim objSAP As Object
Dim objSapApp As Object
Dim objConnect As Object
Dim objSession As Object
'Inicializando a matriz
ReDim vSapInfo(1 To 1)
'Verificando se existe uma instacia do SAP aberta, não necessariamente logada
While i < 10 And objSAP Is Nothing
i = i + 1
On Error Resume Next
Set objSAP = GetObject("SAPGUI")
On Error GoTo 0
Wend
'Zerando variavel i para ser utilizada agora em nova rotina
i = 0
'Verificando se a variavel SAP foi carregada corretamente
If objSAP Is Nothing Then
GoTo Fim
End If
'Carregando variavel que representa a janela do SAP o applicativo
On Error Resume Next
Set objSapApp = objSAP.GetScriptingEngine
On Error GoTo 0
'Caso não tenha sido carregada vá para o fim do código
If objSapApp Is Nothing Then
GoTo Fim
End If
'Percorrendo todas as janelas abertas do SAP e capturando informações
For Each objConnect In objSapApp.Children
'Se a conexão caiu não executar o teste para a janela dessa rodada
If Not objConnect.DisabledByServer Then
For Each objSession In objConnect.Children
'Verificando se a sessão está em execução
If objSession.Busy = False Then
'Verificando se está logado atravez da transação S000 que é a tela de log
If objSession.Info.Transaction <> "S000" Then
'ID do sistema
strID = objSession.Info.SystemName
'Nome do usuario
strUser = objSession.Info.user
'Transação da janela
strTransacao = objSession.Info.Transaction
'Verificando se existe janelas disponiveis na tela inicial do SAP logado
If strTransacao = "SESSION_MANAGER" Then
fCheck = True
End If
'Capturando dados
If i = 0 Then
i = i + 1
l = l + 1
ReDim Preserve vSapInfo(1 To i)
vColunas(1) = l
vColunas(2) = strID
vColunas(3) = strUser
vColunas(4) = fCheck
Set vColunas(5) = objConnect
Set vColunas(6) = objSession
vSapInfo(i) = vColunas
Else
If strID <> vColunas(2) Then
i = i + 1
l = l + 1
ReDim Preserve vSapInfo(1 To i)
vColunas(1) = l
vColunas(2) = strID
vColunas(3) = strUser
vColunas(4) = fCheck
Set vColunas(5) = objConnect
Set vColunas(6) = objSession
vSapInfo(i) = vColunas
Else
vSapInfo(i)(1) = vSapInfo(i)(1) + 1
If fCheck = True Then
vSapInfo(i)(4) = fCheck
End If
End If
End If
End If
End If
Next
End If
l = 0
fCheck = False
Next
Fim:
'Retornando valores para função
If i = 0 Then
GetSapUserOpen = Empty
Else
GetSapUserOpen = vSapInfo
End If
'Descarregando as variaveis de objeto
Set objSAP = Nothing
Set objSapApp = Nothing
Set objConnect = Nothing
Set objSession = Nothing
End Function
Clique aqui para baixar o exemplo

8959betlogin – I used it the other day. Not bad for a quick betting session when on the go. Easy access and simple UI. Overall, decent! Just use this link: 8959betlogin
vin777vegas reminds me of a digital Vegas! The site’s got a cool design, and the promotions are pretty enticing. I’m a sucker for a good Vegas vibe. Check out the feels at vin777vegas
Betcom88 is the place where big wins happen! I tried playing here and I have never regretted it. If you love winning, betcom88 is for you!