Sap Script & VBA – Conexão utilizando SAP GUI Scripting API
Eu já disponibilizei em postagens anteriores arquivo com rotina para conexão com o SAP utilizando o Excel VBA (Arquivo de Conexão), também já detalhei como gravar o arquivo .vbs no próprio SAP (Introdução Parte I e Introdução Parte II).
Agora nessa postagem vou dar um exemplo de conexão utilizando uma API fornecida pela própria SAP nas instalações do SAP GUI a Sap Gui Scripting API (sapfewse.ocx).
A grande vantagem em utilizar essa funcionalidade é ter acesso a todas as propriedades e métodos de cada objeto declarado assim como utilizar o intellisense da OCX que é aquela funcionalidade de auto preenchimento após inserir o ponto e ter acessos aos métodos e propriedades.
Clicando aqui você pode baixar a documentação em PDF dessa API, que você também pode encontrar no Help da sua instalação SAP GUI (dependendo da versão da sua instalação isso pode variar).
Para utilizar essa API é necessário flegar a opção de referencia dentro do VBA e para isso você deve entrar no editor do VBA, clicar em Ferramentas > Referências… procure por SAP GUI Scripting API conforme a imagem abaixo. Essa API geralmente é carregada durante a instalação o SAP GUI, caso você não à encontre automaticamente você tem a opção de procurar pela OCX sapfewse.ocx clicando em procurar nessa mesma tela “Referencias – VBAProject”, se ainda assim não encontrar reveja sua instalação SAP GUI.

Agora vamos criar um modulo no VBAProject conforme imagem abaixo, esse modulo ira conter os códigos de conexão e execução da rotina.

Após a inclusão do modulo, de um duplo clique no modulo para incluir os códigos.

Incluir o código abaixo no módulo criado.
Option Explicit
'Declaração de variaveis
Public objGui As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
'Função de conexão
Function Get_Session() As Boolean
'Carregando variaveis de objeto
Set objGui = GetObject("SAPGUI").GetScriptingEngine
Set objConn = objGui.Children(0)
Set objSess = objConn.Children(0)
'Testando se a conexão foi bem sucedida
If objSess Is Nothing Then
Get_Session = False
Exit Function
End If
'Retorno verdadeiro para função
Get_Session = True
End Function
Public Sub FS10N()
Dim fCheck As Boolean
'Executando a rotina de conexão
fCheck = Get_Session()
If fCheck = True Then
'Inicianco codigo
objSess.FindById("wnd[0]").Maximize
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = "FS10N"
objSess.FindById("wnd[0]").sendVKey 0
objSess.FindById("wnd[0]/usr/ctxtRACCT-LOW").Text = Cells(13, 3).Value
objSess.FindById("wnd[0]/usr/ctxtRBUKRS-LOW").Text = Cells(14, 3).Value
objSess.FindById("wnd[0]/usr/txtRYEAR").Text = Cells(15, 3).Value
objSess.FindById("wnd[0]/tbar[1]/btn[8]").press
End If
'Descarregando variaveis
Set objGui = Nothing
Set objConn = Nothing
Set objSess = Nothing
End Sub
Para esse exemplo vou utilizar a transação FS10N, que ira apenas acessar a transação e passar parâmetros, algo bem simples. Veja imagem abaixo de como irá ficar essa a planilha, crie também uma chamada ao código no botão Executar.

Finalizando você pode executar o código e verificar sua funcionalidade. É importante que o SAP esteja logado para que o código funcione, este é um exemplo bem resumido o qual não fez nenhuma leitura das informações de log, como nome do sistema, usuários, janelas. Não foi feito nenhum check de consistência etc… Algo bem simples pra mostrar a funcionalidade da API.
Clique aqui para baixar o exemplo em Excel utilizado nessa postagem
