Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O ponto de entrada FI050POS, localizado no final da FINI050 permitindo rotina FINI050 (Integração EAI de títulos a pagar), permite a manipulação do retorno da rotina, ou seja alterando o XML de envio/retorno da mensagem unica.

...

Bloco de código
languagejava
themeMidnight
titleFI050POS
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWADAPTEREAI.CH"

/*/{Protheus.doc} FI050POS
Ponto de entrada no final do adapter FINA050 (AccountPayableDocument) 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.
@param ParamIXB[7] Objeto JSON (lógico).

@author TOTVS
@version P12

@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 FI050POS()

Local aRet := {}
Local lRet := ParamIXB[1]
Local cXml := ParamIXB[2]
Local cTypeTrans := ParamIXB[3]
Local cTypeMsg := ParamIXB[4]
Local lObjJSON := ParamIXB[7]

Local cErro := ""
Local oXml as object

// Tratar o XML somente se a rotina retornou true.
If lRet .and. !lObjJSON
	If cTypeTrans == TRANS_SEND // Envio de XML
		If (cTypeMsg == EAI_MESSAGE_BUSINESS) // Envio de Business Content
			// Trata o XML.
			oXml := tXmlManager():New()
			// Adicionando nó principal <FI050POS> para não dar erro de Parse
			oXml:Parse("<FI050POS>" + cXml + "</FI050POS>")

			// Se não deu erro no processamento.
			If Empty(cErro := oXml:Error())
				If (oXml:XPathAddNode("/FI050POS/BusinessContent", "TesteTag", "Teste Mensagem"))
					lRet := .T.
					cXml := LimpaXML(oXml:Save2String())
				EndIf
			Else
				lRet := .F.
				cXml := "<![CDATA[" + _NoTags(cErro) + "]]>"
			Endif

			oXml := nil
		ElseIf (cTypeMsg == EAI_MESSAGE_RESPONSE) // Envio de Response
			/* Tratar aqui o XML */
		EndIf
	ElseIf cTypeTrans == TRANS_RECEIVE //Envio de XML
		If (cTypeMsg == EAI_MESSAGE_BUSINESS) // Recebimento de Business Content
			/* Tratar aqui o XML */
		ElseIf (cTypeMsg == EAI_MESSAGE_RESPONSE) // Recebimento de Response
			/* Tratar aqui o XML */
		EndIf
	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 TOTVS
@version P12
@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 <FI050POS> e </FI050POS>.
If cXmlRet = "<FI050POS>" .and. right(cXmlRet, 11) == "</FI050POS>"
	cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21)
Endif

Return cXmlRet


04. DEMAIS INFORMAÇÕES

Não há

...