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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
'(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