Business - Sistema de Gestão

Escrevendo nas tabelas do SAP com o .NET SAP Connector 2.0 através de RFC

Neste artigo, faremos o inverso do que foi feito anteriormente. Desta vez, ao invés de ler informação do SAP, iremos escrever informação no SAP.

por Diego Nogare



No artigo anterior sobre SAP (lendo as tabelas do SAP com .NET SAP Connector 2.0 através de RFC, que pode ser acessado neste link http://www.linhadecodigo.com.br/Artigo.aspx?id=2343, foi explicado sucintamente o que é o SAP, e quais são as atividades/recursos envolvidos para conseguir utilizar RFCs para se trabalhar com o SAP. Se sentir necessidade, pode consultar o artigo anterior, para esclarecer e alinhar as idéias.

Neste artigo, faremos o inverso do que foi feito anteriormente. Desta vez, ao invés de ler informação do SAP, iremos escrever informação no SAP. Para isso, será desenvolvida uma aplicação Windows Forms em C# que fará a escrita em uma RFC do SAP, com base em um DataTable (mas a origem da informação fica a seu critério!).

Vou partir diretamente para a aplicação, entendendo que já esteja tudo configurado, como explicado no artigo sobre ler tabelas do SAP.

Após a instalação do conector, um novo ícone será adicionado nos templates que podem fazer parte do projeto (Figura 1), este novo item é o “SAP Connector Proxy”. Este Proxy receberá todos os itens das RFCs que serão conectadas através do .Net e montará automaticamente as classes de acessos com suas respectivas propertys (métodos Get e Set), entre outras coisas. Para utilizar este proxy, será necessário adicionar um novo item ao projeto, então vá até a Solution Explorer, clique com o botão direito do mouse e aponte para Add New Item, acompanhe este passo na Figura 1. A tela de Template dos itens a serem inseridos, pode ser acompanhado na Figura 2.

Figura 1. Adicionando novo item ao projeto

Figura 2. 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 3.

Figura 3. 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 4.

Figura 4: Inserindo os dados de acesso 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 5.

Figura 5: 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 6, o proxy com uma RFC já arrastada.

Figura 6: 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 7).

Figura 7: 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()

{

      escrevendoSAP proxy = null;

      try

      {

            proxy = new escrevendoSAP(“String de Conexão”);

            proxy.Connection.Open();

            ZCPRHEADRTable tabelaSAP = new ZCPRHEADRTable();

            ZCPRHEADR linha = new ZCPRHEADR();

            DataTable dt = new DataTable();

            montarColunas(ref dt);

            foreach (DataRow dr in dt.Rows)

            {

                  linha.Codca = dr["codigo"].ToString();

                  linha.Locen = dr["nome"].ToString();

                  linha.Numrg = dr["telefone"].ToString();

                  tabelaSAP.Add(linha);

                  proxy.Bay2_N2rfi_Rfc_Upda_Zcprheadr(ref tabelaSAP);

            }

            proxy.CommitWork();

      }

      catch (Exception ex)

      {

            MessageBox.Show(ex.Message);

      }

      finally

      {

            proxy.Connection.Close();

            proxy = null;

      }

}

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

private void montarColunas(ref DataTable dt)

{

      dt.Columns.Add("codigo");

      dt.Columns.Add("nome");

      dt.Columns.Add("telefone");

      DataRow dr = dt.NewRow();

      dr["codigo"] = "1";

      dr["nome"] = "Diego";

      dr["telefone"] = "12345678";               

      dt.Rows.Add(dr);

}

Listagem 2: Código para criar um DataTable e popular com dados ficticios.

A aplicação utilizará o proxy criado, que foi chamado de escrevendoSAP para criar uma conexão com outro servidor SAP (não precisa ser necessariamente o mesmo utilizado no Server Explorer, mas pode ser, sem problema). Os itens que precisam ser inseridos na String de Conexão, podem ser encontrados abaixo, na Listagem 3. 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 3: 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” (ZCPRHEADRTable tabelaSAP = new ZCPRHEADRTable();). Esta variável criada será passada por parâmetro de referência, para o método com o nome da RFC (proxy.Bay2_N2rfi_Rfc_Upda_Zcprheadr(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 DataTable e que serão escritos no SAP através da RFC.

Este foreach é criado para percorrer todos os itens do DataTable utilizado como exemplo, e preencher a tabela do SAP, veja que em todas as iterações do foreach a variável linha do SAP possui seus campos populados e a RFC de escrita no SAP é chamada.

A Figura 8 é do SAP, após receber o valor que inserimos dentro do DataTable no método montarColunas. Repare que os campos com marcação em vermelho apontam para os campos que foram preenchidos dentro do foreach no código da Listagem 1.

Figura 8: Resultado da informação inserida no SAP.

Após esta análise simples e direta, é possível fazer uma escrita em tabelas do SAP através do Visual Studio 2003. Um próximo artigo explicará como trabalhar com um workaround para se trabalhar com Visual Studio 2005 e Visual Studio 2008.

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.