Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!

API Rest para enviar PDF por e-mail

Bom dia, pessoal.

Fiz uma API Rest que chama uma rotina que dispara e-mail com o PDF e o XML da nota para um e-mail informado nos parâmetros, não retorna nada na chamada além de uma frase html se teve sucesso ao enviar o e-mail ou não. Estou com o seguinte problema: se eu chamo essa rotina na mão, ela dispara o e-mail com os 2 anexos (pdf e xml), se eu chamo pelo SOAPUI pra testar a API, o e-mail é enviado somente com o anexo do XML, o PDF não vai. Se eu ajusto a rotina pra enviar só o PDF, manual envia, pelo SOAPUI chamando a API Rest, dá erro ao enviar o e-mail.

É como se houvesse uma limitação para anexar o PDF no e-mail. Alguém já passou por algo parecido com isso?

Abaixo, o código da API:

#INCLUDE "TOTVS.CH"
#include 'parmtype.ch'
#Include "RESTFUL.CH"

//-------------------------------------------------------------------
/*/{Protheus.doc} danfepdf
Classe usada para gerar o pdf de uma nota e enviar para o e-mail
especificado nos parâmetros
@author  João Leão
@since   18/01/2022
@version 12.1.25
/*/
//-------------------------------------------------------------------
WSRESTFUL danfepdf DESCRIPTION "DANFE por e-mail"

WSDATA cFilDoc        AS STRING
WSDATA cCodCli        AS STRING
WSDATA cLojaCli        AS STRING
WSDATA cNumDoc        AS STRING
WSDATA cSerDoc        AS STRING
WSDATA cEmail        AS STRING

WSMETHOD GET DESCRIPTION "DANFE por e-mail"

END WSRESTFUL

//-------------------------------------------------------------------
/*/{Protheus.doc} GET
Método GET da classe
@author  João Leão
@since   18/01/2022
@version 12.1.25
/*/
//-------------------------------------------------------------------

WSMETHOD GET WSRECEIVE cFilDoc,cCodCli,cLojaCli,cNumDoc,cSerDoc,cEmail WSSERVICE danfepdf

Local nI        := 0
Local lURLParms    := Len(::aURLParms) > 0

// define o tipo de retorno do método
::SetContentType("text/html")

// verifica se recebeu parametro pela URL
/**To do validar parâmetros vindos por URL */

If !Empty(::cFilDoc) .And. !Empty(::cCodCli) .And. !Empty(::cLojaCli) .And. !Empty(::cNumDoc);
.And. !Empty(::cSerDoc) .And. !Empty(::cEmail)
    If U_PROMA750(::cFilDoc, ::cCodCli, ::cLojaCli, ::cNumDoc, ::cSerDoc, ::cEmail)
        ::SetResponse('{"<p>Danfe enviada por e-mail.</p>"}')
        ::SetStatus(200)
    Else
        ::SetResponse('{"<p>Nota Fiscal não localizada.</p>"}')
        ::SetStatus(422)
    EndIf
Else
    ::SetResponse('{"<p>Obrigatório informar os parâmetros: cFilDoc,cCodCli,cLojaCli,cNumDoc,cSerDoc,cEmail.</p>"}')
    ::SetStatus(400)
EndIf

Return .T.
compartilhar
  • João, o PDF é gerado ou é gerado erro apenas no momento de anexá-lo? Para gerar PDF em serviços, é necessário que o binário da printer esteja presente na pasta do appserver, caso contrário o PDF não será gerado.

    Daniel Mendes   20 de Jan de 2022
  • Consegui resolver, Daniel, era o atributo lServer do FWMSPrinter(), tem que estar como .T. pra gerar o PDF.

    João Almeida Leão   27 de Jan de 2022
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags restapi ou faça a sua própria pergunta.