Compartilhar via


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