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.
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 2022Consegui 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