Erro: Ao Executar uma RFC, não retorna as Devidas Tabelas WCF-SAP

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>
Alterei o mapeamento para que a tag Dependente aparecesse explicitamente no request. Coloquei um dado qualquer, o valor 1 no campo WERKS.

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

BizTalk 360

Visitas

Arquivo do blog