Solucionando Problemas: Ao Executar uma RFC, não retorna as Devidas Tabelas WCF-SAP (pt-BR)
Descrição do Problema
Essa semana me deparei com um problema estranho: ao fazer uma chamada do SAP, na RFC Z_RFC_TESTE, os dados não eram retornados.
Porém, executando a mesma RFC (Remote Function Calls) com os mesmos parametros no SAP GUI, os dados apareciam corretamente.
Pesquisando um pouco vi que com o novo adaptador WCF-SAP (aliás, o qual está me dando uma surra, 10x0 pro adaptador, rs) as coisas acontecem de modo diferente.
No antigo, ao fazer uma request recebíamos tudo o que estava disponível na RFC, agora, para evitar tráfego desnecessário de tags, o adaptador só retorna as tabelas que estão explícitas na execução. Isso quer dizer que as tabelas que estão nulas no request, o adaptador entende que eu não tenho interesse nelas e não me retorna.
Isso é um erro? Não! Apenas é a forma como o novo adaptador trabalha. O que na minha opinião é muito interessante, pois em uma RFC Padrão (aquela genérica que já vem pronta no SAP), geralmente tem milhões de tags, o que pode ser um problema, se cada uma dessas tags contiver dados, e assim gera um tráfego desnecessário de informação, podendo impactar diretamente em performance no servidor.
Explicação prática do problema
RFC que não contem as tabelas nulas e não retorna dados corretamente:
<ns0:Z_RFC_TESTE xmlns:ns0="**http://Microsoft.LobServices.Sap/2007/03/Rfc/**"
xmlns:ns3="**http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/**"\>
<ns0:DATA_DE>20110705</ns0:DATA_DE>
<ns0:EMPRESA_ATE></ns0:EMPRESA_ATE>
<ns0:EMPRESA_DE></ns0:EMPRESA_DE>
<ns0:ID_ATE></ns0:ID_ATE>
<ns0:ID_DE></ns0:ID_DE>
<ns0:REPROCESSAMENTO>X</ns0:REPROCESSAMENTO>
</ns0:Z_RFC_TESTE>
Agora a mesma RFC com a tabela que interessa no meu processo:
<ns0:Z_RFC_TESTE xmlns:ns0="**http://Microsoft.LobServices.Sap/2007/03/Rfc/**"
xmlns:ns3="**http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/**"\>
<ns0:DATA_DE>20110705</ns0:DATA_DE>
<ns0:EMPRESA_ATE></ns0:EMPRESA_ATE>
<ns0:EMPRESA_DE></ns0:EMPRESA_DE>
<ns0:ID_ATE></ns0:ID_ATE>
<ns0:ID_DE></ns0:ID_DE>
<ns0:REPROCESSAMENTO>X</ns0:REPROCESSAMENTO>
<ns0:T_DEPENDENTE>
<ns3:ZSTHR_DEPENDENTE>
<ns3:WERKS>1</ns3:WERKS>
</ns3:ZSTHR_DEPENDENTE>
</ns0:T_DEPENDENTE>
</ns0:Z_RFC_TESTE>
Notem que no primeiro exemplo, não tem a tag T_DEPENDENTE.
Essa RFC de exemplo tem 13 tabelas, e só é retornada aquela que foi especificada no request.
Segue o retorno com os dados corretos:
<Z_RFC_TESTEResponse xmlns="**http://Microsoft.LobServices.Sap/2007/03/Rfc/**"\>
<T_DEPENDENTE>
<ZSTHR_DEPENDENTE xmlns="**http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/**"\>
<WERKS>11111</WERKS>
<PNALT>333333</PNALT>
<OBJPS>1</OBJPS>
<CHAR80>XXXXX</CHAR80>
<GESCH>F</GESCH>
</ZSTHR_DEPENDENTE>
</T_DEPENDENTE>
</Z_RFC_TESTEResponse>
Conclusão
Com o novo adaptador WCF-SAP, podemos ganhar em agilidade, e só requisitar os dados que realmente interessam, aqueles que serão realmente utilizados.
Espero que esse post possa ajudar alguém.
Referências
Até mais.
Autor
Ruth Resende
MVP BizTalk Server