01. DADOS GERAIS
Linha de Produto: | Protheus |
---|
Segmento: | Serviços |
---|
Módulo: | Financeiro SIGAFIN |
---|
Função: | FINI040 |
---|
02. SITUAÇÃO/REQUISITO
Ponto de entrada ao final do processamento da mensagem AccountReceivableDocument.
03. SOLUÇÃO
Disponibilizado o ponto de entrada FI040POS que será executado ao final do processamento da mensagem AccountReceivableDocument.
Ponto de entrada FI040POS, localizado no final da FINI040 permitindo que o retorno da rotina seja manipulado.
- Passados por parâmetros o Array PARAMIXB contendo os seguintes dados:
Elemento | Tipo | Descrição |
---|
Elemento | Tipo | Descrição |
---|
PARAMIXB[1] | Lógico | Indica o resultado da execução da função padrão. |
PARAMIXB[2] | Caracter | Conteúdo XML para envio/recebimento. |
PARAMIXB[3] | Caracter | Tipo de transação (Envio / Recebimento). |
PARAMIXB[4] | Caracter | Tipo de mensagem (Business Type, WhoIs, etc). |
PARAMIXB[5] | Caracter | Versão da mensagem. |
PARAMIXB[6] | Caracter | Nome da transação. |
- Retorno: Será retornado um array com duas posições conforme tabela:
Nome | Tipo | Descrição |
---|
lRet | Lógico | Indica se o processamento foi bem sucedido. |
cXML | Caracter | Texto de retorno da mensagem EAI. |
#INCLUDE "PROTHEUS.CH" #INCLUDE "FWADAPTEREAI.CH" /*/{Protheus.doc} FI040POS Ponto de entrada no final do adapter FINA040 (AccountReceivableDocument) para tratamento do XML.
@param ParamIXB[1] Indica o resultado da execução da função padrão. @param ParamIXB[2] Variável com conteúdo XML para envio/recebimento. @param ParamIXB[3] Tipo de transação (Envio / Recebimento). @param ParamIXB[4] Tipo de mensagem (Business Type, WhoIs, etc). @param ParamIXB[5] Versão da mensagem. @param ParamIXB[6] Nome da transação.
@author Felipe Raposo @version P12 @since 15/03/2019 @return aRet - (array) Contém o resultado da execução e a mensagem XML de retorno. aRet[1] - (boolean) Indica o resultado da execução da função. aRet[2] - (caracter) Mensagem XML para envio. /*/ User Function FI040POS()
Local aRet := {} Local lRet := ParamIXB[1] Local cXml := ParamIXB[2] Local cTypeTrans := ParamIXB[3] Local cErro := "" Local oXml as object
// Tratar o XML somente se a rotina retornou true. If lRet If cTypeTrans == TRANS_SEND // Trata o XML. oXml := tXmlManager():New() oXml:Parse("<FI040POS>" + cXml + "</FI040POS>")
If Empty(cErro := oXml:Error()) oXml:XPathAddNode("/FI040POS/BusinessContent", "TestTag", SE1->E1_XCAMPO) Endif
// Se deu erro no processamento. If empty(cErro) lRet := .T. cXml := LimpaXML(oXml:Save2String()) Else lRet := .F. cXml := "<![CDATA[" + _NoTags(cErro) + "]]>" Endif oXml := nil Endif Endif
aRet := {lRet, cXml} Return aRet
/*/{Protheus.doc} LimpaXML Função auxiliar para remover o prólogo do XML gerado.
@param cXml Texto XML a ser limpo.
@author Felipe Raposo @version P12 @since 21/02/2019 @return cXml - (caracter) Texto XML sem o prólogo. /*/ Static Function LimpaXML(cXml)
Local cXmlRet := AllTrim(cXml) Local nChar
// Retira o prólogo da mensagem. If cXmlRet = "<?" cXmlRet := SubStr(cXmlRet, At("?>", cXmlRet) + 2) Endif
// Retira o recuo de linha (CR e LF) e espaços do começo da string. Do While (nChar := asc(left(cXmlRet, 1)), nChar = 10 .or. nChar = 13 .or. nChar = 32) cXmlRet := SubStr(cXmlRet, 2) EndDo
// Retira o recuo de linha (CR e LF) e espaços do fim da string. Do While (nChar := asc(right(cXmlRet, 1)), nChar = 10 .or. nChar = 13 .or. nChar = 32) cXmlRet := SubStr(cXmlRet, 1, len(cXmlRet) - 1) EndDo
// Retira o <FI040POS> e </FI040POS>. If cXmlRet = "<FI040POS>" .and. right(cXmlRet, 11) == "</FI040POS>" cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21) Endif
Return cXmlRet |
---|
05. ASSUNTOS RELACIONADOS
Não há.