Erro: Ao Executar uma RFC, não retorna as Devidas Tabelas WCF-SAP
quarta-feira, 6 de julho de 2011
|
|
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 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 opniã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.
Bem, vamos exemplificar na prática:
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 ao 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ência: http://blogs.msdn.com/b/adapters/archive/2008/01/10/when-i-execute-bapis-i-don-t-get-back-any-data-help.aspx
Até mais.
Seja o primeiro a comentar ;)
Postar um comentário