sexta-feira, 1 de agosto de 2014

SAP .Net Connector 3.0 - Net Framework 4.0 - Executando uma RFC e lendo os dados de uma tabela - Parte 2

PARTE 2


A segunda parte do tutorial trata da conexão com SAP utilizando as bibliotecas que incorporamos em nosso projeto.

De forma bem direta iremos iniciar criando em nossa solução um arquivo de configuração contendo as informações necessárias para nós realizarmos um conexão bem sucedida com SAP, ok?

Esse arquivo de configuração é o app.config, se fosse um projeto web poderia ser o web.config, ok?

Dentro das tags vamos guardar nossas informações de configuração.


Agora vamos criar as funções necessárias para se conectar com o SAP


Na realidade iremos precisar apenas de criar um classe e implementar os métodos de uma interface do sapncon de nome IDestinationConfiguration. Os métodos exigidos pela classe que iremos implementar são responsáveis pelo controle da conexão com o SAP.

São eles:
GetParameters(), IDestinationConfiguration_ChangeEventsSupported(), ChangeEventsSupported(), ConfigurationChanged()

Iremos trabalhar apenas no GetParameters, veja a implementação da classe logo abaixo:
Imports System.Configuration
Imports SAP.Middleware.Connector

Public Class SAPConnect
Implements IDestinationConfiguration

''' ''' Monta a estrutura de conexão com o SAP de acordo com o "DestinationName" que pode ser tratado com servidor,
''' em nosso caso temos um servidor de Homologação de dados e um de Produção.
'''
''' Nome da Instancia ou Servidor
''' Destino da conexão
''' Besaleel 2014-08-01
Public Function GetParameters(ByVal destinationName As String) As RfcConfigParameters Implements IDestinationConfiguration.GetParameters
Try
Dim conf As RfcConfigParameters = New RfcConfigParameters()
If destinationName.Equals("homologacao") Then
Dim hostH = ConfigurationManager.AppSettings.Get("ServidorSap")
Dim numbH = ConfigurationManager.AppSettings.Get("NumeroSap")
Dim sysH = ConfigurationManager.AppSettings.Get("SistemaSap")
Dim userH = ConfigurationManager.AppSettings.Get("UsuarioSAP")
Dim passH = ConfigurationManager.AppSettings.Get("PassWordSAP")
Dim clieH = ConfigurationManager.AppSettings.Get("ClienteSAP")
Dim langH = ConfigurationManager.AppSettings.Get("IdiomaSAP")


With conf
.Add(RfcConfigParameters.AppServerHost, hostH)
.Add(RfcConfigParameters.SystemNumber, numbH)
.Add(RfcConfigParameters.SystemIDs, sysH)
.Add(RfcConfigParameters.User, userH)
.Add(RfcConfigParameters.Password, passH)
.Add(RfcConfigParameters.Client, clieH)
.Add(RfcConfigParameters.Language, langH)
End With
Return conf
End If
'PRODUÇÃO
Dim host = ConfigurationManager.AppSettings.Get("ServidorSap")
Dim numb = ConfigurationManager.AppSettings.Get("NumeroSap")
Dim sys = ConfigurationManager.AppSettings.Get("SistemaSap")
Dim user = ConfigurationManager.AppSettings.Get("UsuarioSAP")
Dim pass = ConfigurationManager.AppSettings.Get("PassWordSAP")
Dim clie = ConfigurationManager.AppSettings.Get("ClienteSAP")
Dim lang = ConfigurationManager.AppSettings.Get("IdiomaSAP")


With conf
.Add(RfcConfigParameters.AppServerHost, host)
.Add(RfcConfigParameters.SystemNumber, numb)
.Add(RfcConfigParameters.SystemIDs, sys)
.Add(RfcConfigParameters.User, user)
.Add(RfcConfigParameters.Password, pass)
.Add(RfcConfigParameters.Client, clie)
.Add(RfcConfigParameters.Language, lang)
End With
Return conf
Catch ex As Exception
Throw New Exception("Falha ao abrir conexão:" & vbCrLf & ex.Message)
End Try
End Function

Public Function IDestinationConfiguration_ChangeEventsSupported() As Boolean Implements IDestinationConfiguration.ChangeEventsSupported
Return True
End Function

Public Function ChangeEventsSupported() As Boolean
Return True
End Function

Public Event ConfigurationChanged As RfcDestinationManager.ConfigurationChangeHandler Implements IDestinationConfiguration.ConfigurationChanged
End Class

Alguns comentários sobre a classe
vejam que o método GetParameters recebe uma variável "destinationName", que é responsável por dizer qual é o servidor SAP que iremos nos conectar. Em nosso exemplo apesar de recuperarmos os dados para acesso de um único lugar, eu simulei o acesso a um servidor de Homologação (Testes) e a um servidor de produção. Com isso através da variável "destinationName" você poderá ter N instancias para N servidores SAP, ok?


Conexão com SAP

'NÃO ESQUEÇA DE IMPORTAR A BIBLIOTECA SAP
Imports SAP.Middleware.Connector

Public Class RfcTableReader
    Public Sub LerDadosRFC()
        Try

            '1º - MONTAR OS PARAMETROS PARA CONEXÃO SAP
            Dim con As New SAPConnect()
            'A FUNÇÃO REGISTER ABRE A CONEXÃO COM SAP
            RfcDestinationManager.RegisterDestinationConfiguration(con)
            'MONTA OS PARAMETROS DO SERVIDOR SAP QUE IREMOS CONECTAR
            Dim dest As RfcDestination = RfcDestinationManager.GetDestination("homologacao")
            Dim repositorio As RfcRepository = dest.Repository
            Try
                'AQUI SEGUE O CÓDIGO FONTE PARA EXECUTAR A RFC
                'LER TABLES
                'GRAVAR TABLES
                'PASSAR PARAMETROS
                '...

            Catch exSap As RfcAbapRuntimeException
                Throw New Exception("ABAP error run Time: " & exSap.Message)
            Catch exSap As RfcAbapBaseException
                Throw New Exception("ABAP base error" & exSap.Message)
            Catch ex As Exception
                Throw
            Finally
                'FECHA A CONEXÃO COM SAP
                RfcDestinationManager.UnregisterDestinationConfiguration(con)
            End Try

        Catch exSap As RfcCommunicationException
            Throw New Exception("Falha na comenicação com SAP: " & exSap.Message)
        Catch exSap As RfcLogonException
            Throw New Exception("Falha no Login: " & exSap.Message)
        Catch ex As Exception
            Throw New Exception("Erro: " & vbCrLf & ex.Message)
        End Try
    End Sub

End Class

Foi utilizado try catch para controlar a conexão, para não deixarmos conexões abertas

No fim deste tutorial eu irei disponibilizar o código fonte para download.

Parte 3

Nenhum comentário: