Dicas ABAP

Published on March 20th, 2017 | by Leo Schmidt

2

SAP Gateway – GET_STREAM marotão que cospe uma DANFE

FALA, BANDO DE MORTO VIVO! Todo mundo morto aí? Ou vivo? Quem sabe, faz tanto tempo que eu não escrevo aqui…

Eis um postzinho de dica pra dar uma movimentada no blog, que, com exceção dos podcasts (que estão demorando pra sair também, diga-se de passagem), ficou pelas plantinhas secas rodando no deserto…

Sim, são plantas secas e não feno. Tumbleweeds. Porém, divirjo. Vamos ao tema.

Depois de ter passado por alguns projetos de UI5/Gateway aqui em nossa pátria amada, é bem possível que você, assim como eu, já tenha encarado o tema de terror que mais abala o mundo dos consultores SAP: NF-e. E quando falamos de NF-e, normalmente o usuário não quer nem saber de chegar perto do XML, e sim de ver a sua representação gráfica, a infame DANFE. Como faremos, então, para o nosso serviço Gateway cuspir aquele PDF bonito, bem diagramado, minimalista, com todas as informações corretas, em um tempo aceitável para o usuário?

A única coisa que você precisa no serviço pra iniciar a impressão, neste caso, é o número da nota no SAP ( J_1BNFDOC-DOCNUM). Há diversas maneiras de chegar nele, então veja você mesmo(a) como buscá-lo, dependendo do ambiente.

Uma vez tendo o  DOCNUM, a ideia é submeter um job do relatório RSNAST00, que realiza a impressão do DANFE. O caso normal, nesse tipo de aplicação, é gerar a DANFE em modo de reimpressão; não tenho certeza se funciona quando a DANFE ainda não foi impressa pela primeira vez, mas isso é algo a ser testado. O spool gerado é a própria DANFE. Uma vez tendo o número do spool, podemos gerar um PDF usando a função  CONVERT_OTFSPOOLJOB_2_PDF.

A pegadinha aqui é que o spool não é gerado imediatamente quando submetemos o job; logo, temos que ficar procurando o id do spool na tabela  TBTCP. Mas essa busca não pode durar para sempre, porque estamos falando de um serviço Gateway. O serviço pode dar timeout e o usuário pode ficar na mão se a geração do spool der algum problema, ou mesmo se demorar um pouco mais que seja do que o parâmetro de timeout do servidor. Então, marcamos o tempo do início da busca e vamos comparando com o tempo atual. Se passar do tempo de timeout definido, retornamos um erro.

Na hora de voltar o PDF pelo método  /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM, basta colocar no header da resposta o parâmetro  content-disposition com o valor  outline; filename="{ nome_do_arquivo }.pdf" pra fazer o arquivo abrir como download numa aba nova.

E só lembrando, é claro, que pra usar o  GET_STREAM a entidade precisa estar marcada com o flag Media lá na SEGW.

É hora do código:

Agora, é só virar pro seu(ua) amiguinho(a) desenvolvedor(a) UI5 e dizer “pronto, jamanta, pode chamar essa URL bonita aqui que o teu PDF da DANFE vai vir”. Aí é só fazer um  sap.m.URLHelper.redirect e pronto.

PLOT TWIST:  sap.m.URLHelper.redirect não funciona no Safari. A criança chora e a mãe não vê.

Abraços e até a próxima!

PS.: Obrigado ao grande Custódio, onipresente nos posts, pelo peer review.

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page


About the Author

ABAP profissional desde dez/2008. Meu negócio é desenvolver ABAP, mas sem pensar só em ABAP: gosto de fazer o SAP conversar com outras linguagens e sistemas, sempre de olho no Basis.



2 Responses to SAP Gateway – GET_STREAM marotão que cospe uma DANFE

  1. Custodio says:

    Boa Leo, tava com saudades dos posts de voces, achei ate que tinham esquecido como se escreve.

    2 coisinhas rapidas:

    1 – faltou o F na tabela j_1bnFdoc

    2 – Evite usar parametros obsoletos no Gateway, como iv_entity_set_name e it_key_tab. Veja essa post https://blogs.sap.com/2017/02/01/avoid-using-deprecated-sap-gateway-apis-in-your-odata-service-implementation/

    Ia tb dar uma cornetada no codigo, mas depois da minha barrigada sobre o anagrama fiquei meio timido, rs

    Abraco!

    Custodio

    PS: aguardando pacientemente o zombiecast mensal 🙁

    • Leo Schmidt says:

      Olha o Custódio aí!

      Bom, só posso falar por mim… as coisas estavam bem corridas ultimamente, só agora consegui um tempo pra escrever de novo aqui. Mas realmente, já tá juntando teia de aranha.

      1 – Bem observado, corrigi.
      2 – Olha aí, nem sabia dos obsoletos. Duly noted.

      E tua solução do problema dos anagramas, no final, foi mais clara do que a minha…

      Agora, com relação ao cast, o jeito é lotar o @mauriciooocruz de DM mesmo, pq agora ele é o diferentão do fuso horário.

      []s

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top ↑