Sap Script

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 

3 comentários sobre “Sap Script & VBA – Capturando informações de instancias logada

  • 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

    Resposta
  • 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

    Resposta
  • 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!

    Resposta

Deixe uma resposta