Árvore de páginas


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.

04. DEMAIS INFORMAÇÕES

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ógicoIndica o resultado da execução da função padrão.
PARAMIXB[2]CaracterConteúdo XML para envio/recebimento.
PARAMIXB[3]CaracterTipo de transação (Envio / Recebimento).
PARAMIXB[4]CaracterTipo de mensagem (Business Type, WhoIs, etc).
PARAMIXB[5]Caracter

Versão da mensagem.

PARAMIXB[6]CaracterNome da transação.
  • Retorno: Será retornado um array com duas posições conforme tabela:

Nome

Tipo

Descrição

lRetLógico

Indica se o processamento foi bem sucedido.

cXMLCaracterTexto de retorno da mensagem EAI.
  • Exemplo:

#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, 1len(cXmlRet) - 1)
EndDo

// Retira o <FI040POS> e </FI040POS>.
If cXmlRet = "<FI040POS>" .and. right(cXmlRet, 11) == "</FI040POS>"
    cXmlRet := SubStr(cXmlRet, 11len(cXmlRet) - 21)
Endif

Return cXmlRet


05. ASSUNTOS RELACIONADOS

Não há.