Business - Sistema de Gestão

Lendo as tabelas do SAP com o .NET SAP Connector 2.0 através de RFC

Com esse artigo, concluímos com uma análise simples e prática de uma das soluções para ler as tabelas do SAP através de RFC.

por Diego Nogare



Muitas empresas atualmente controlam todas suas atividades utilizando um dos ERPs mais famosos do mundo, o SAP. Este ERP alemão possui muitos recursos já prontos para controlar as atividades da empresa, estes recursos são chamados Standard, e são separados em módulos de atividades (SD [Sales and Distribution], FI [Financial], HR [Human Resources], etc) e é possível integrar todos dados destes módulos para uma comunicação ou tomada de decisão mais precisa. As áreas de atuação do SAP são muito bem desenhadas e definidas, onde o pessoal da área funcional (cujo trabalho é configurar o standard do SAP) não tem acesso às configurações dos servidores, usuários, acessos, permissões, e etc cuja a área responsável é BASIS (que são os “caras de infra”) e não desenvolvem nada na solução.

Por sua vez existem customizações realizadas em transações “Z” ou “Y” (que não são as standards) são criadas para um processo bem específico de uma determinada regra de negócios do cliente, cujo processo não pode ser implementado por uma configuração do standard. Elas podem estar dentro de uma “exit” do standard (a grosso modo, no meio do código do standard), ou ser 100%  Z ou Y, ou seja, um programa inteiro criado sem nenhuma referencia ao código standard, podendo ou não utilizar tabelas standard no desenvolvimento. Estas transações (Z ou Y) são criadas pelos desenvolvedores, que são conhecidos como ABAP. Nosso trabalho, enquanto desenvolvedor .Net, será em parceria com os ABAPs e os BASIS. Os ABAPs são os que farão as RFCs (Remote Function Call – Chamada de função externa) que serão acessadas através do SAP .Net Connector 2.0 (que é homologado pela SAP para trabalhar com o .Net 1.1 – Não existem atualizações do SAP .Net Connector para outras versões do .Net framework), e a equipe de BASIS são os que nos passarão os dados para a montagem da string de conexão com o SAP.

Resumindo...

    Figura 1. Adicionando o proxy ao Projeto.

    Após a adição, o item aparecerá no Solution Explorer (neste exemplo, foi adicionado na própria raiz do projeto, mas ele pode ser adicionado dentro de alguma outra pasta para melhorar a organização), como mostra a Figura 2.

    Figura 2. Proxy na Solution Explorer.

    Dê dois cliques no Proxy adicionado, e uma tela sem nenhum controle será aberta no painel principal do Visual Studio 2003. Esta tela que se abriu, servirá de container para as RFCs gerarem automaticamente os códigos das classes de acesso. Este processo será explicado com mais detalhes adiante.

    Agora, para conseguir utilizar as RFCs (que foram criadas pelos ABAPs, lembra?!), é necessário adicionar os dados do servidor do SAP (que serão fornecidos pelo pessoal de BASIS, isso você também lembra, né?!) no Server Explorer, para se poder visualizar as RFCs que estão liberadas pra acesso. Vá até o Server Explorer, procure o item do SAP (que foi inserido após a instalação do SAP .Net Connector 2.0), expanda a arvore do SAP e clique com o botão direito no item “Application Servers”, então adicione os dados AppServerHost / Client / Password / SystemNumber e UserName. Acompanhe este passo na Figura 3.

    Figura 3: Inserindo os dados no Server Explorer.

    Após este passo, será possível expandir o “Application Servers” e visualizar o servidor que você adicionou (terá o nome fornecido ao campo AppServerHost). Ao expandir este item, será necessário configurar o filtro das Functions para aparecer as RFCs (crie um novo filtro e coloque os dados para filtrar (* retorna todas)) que poderão ser utilizadas na aplicação. Acompanhe as RFCs fornecidas na Figura 4.

    Figura 4: RFCs que poderão ser utilizadas.

    Agora que as RFCs já estão listadas, é só arrastar a RFC que será acessada para dentro do Proxy, na tela que já deve estar aberta no painel principal do Visual Studio. Caso isso ainda não esteja feito, dê dois cliques no item do proxy na Solution Explorer. Quando arrastar a RFC para cima do proxy, os dados da classe desta RFC serão criados automaticamente, permitindo o acesso à seus campos através de suas propertys. Acompanhe na Figura 5, o proxy com uma RFC já arrastada.

    Figura 5: RFC arrastada para o proxy.

    Agora que a RFC foi arrastada para o proxy, as classes para acessar os dados do SAP foram criados automaticamente dentro do proxy, se for até a Solution Explorer e exibir os itens ocultos (Show All Files), expandindo o proxy é possível ver as classes criadas (classes exibidas na Figura 6).

    Figura 6: As classes criadas automaticamente pelo proxy.

    Está faltando pouco agora, o mais complicado já passou. Vamos ao código do método acessarSAP( ) criado, e chamado pelo método LOAD do formulário. Acompanhe a Listagem 1, onde os códigos deste método foram inseridos.

    private void acessarSAP()

    {

          try

          {

                lendoSAP proxy = new lendoSAP("_STRING DE CONEXÃO_”);                   BAY2_N2RV_RPCAMTable tabelaSAP = new BAY2_N2RV_RPCAMTable();

                proxy.Bay2_N2rv_Rfc_Pxp_Camph(ref tabelaSAP);

                DataTable dt = new DataTable();

                dt.Columns.Add("codigo");

                dt.Columns.Add("nome");

                foreach (BAY2_N2RV_RPCAM linha in tabelaSAP)

                {

                      DataRow dr = dt.NewRow();

                      dr["codigo"] = linha.Codca;

                      dr["nome"] = linha.Descc;

                      dt.Rows.Add(dr);

                }

                gridSAP.DataSource = dt;

          }

          catch (Exception ex)

          {

                MessageBox.Show(ex.Message);

          }

    }

    Listagem 1: Código para utilizar o proxy e as classes criadas.

    A aplicação utilizará o proxy criado, que foi chamado de lendoSAP para criar uma conexão com outro servidor SAP (não precisa ser necessariamente o mesmo utilizado no Server Explorer). Os itens que precisam ser inseridos na String de Conexão, podem ser encontrados abaixo, na Listagem 2. Substitua estes itens em vermelho pelos dados fornecidos pelo pessoal de BASIS, como foi feito no Server Explorer.

    "ASHOST=AppServerHost SYSNR=SystemNumber CLIENT=Client USER=UserName PASSWD=Password"

    Listagem 2: Dados da String de Conexão.

    Após a informação de conexão do proxy, será criada uma variável do tipo “Tabela da RFC” (BAY2_N2RV_RPCAMTable tabelaSAP = new BAY2_N2RV_RPCAMTable();). Esta variável criada será passada por parâmetro de referência, para o método com o nome da RFC (proxy.Bay2_N2rv_Rfc_Pxp_Camph(ref tabelaSAP);) que está dentro do proxy. Como o parâmetro foi por referência, a variável criada passará a ter os dados lidos no SAP através da RFC.

    Após estes pequenos passos, vamos percorrer todos os itens da tabela que foi populada por referência, utilizando um foreach. Para ver os dados que foram lidos do SAP, criamos um DataGrid no formulário, e preenchemos a propriedade DataSource deste DataGrid com o DataTable que recebeu os dados do SAP. Vejam na Figura 7, o DataGrid preenchido.

    Figura 7: Resultado do DataGrid preenchido.

    Com isso, concluímos com uma análise simples e prática de uma das soluções para ler as tabelas do SAP através de RFC. Outros dois artigos serão publicados em breve, o primeiro explicando como escrever nas tabelas do SAP através de RFCs e o segundo como montar um workaround para utilizar o Visual Studio 2005/2008 para ler as RFCs.

Diego Nogare

Diego Nogare - Graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student Partners [MSP] de São Paulo e Microsoft Most Valuable Professional [MVP] em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.