#INCLUDE "PROTHEUS.CH" #INCLUDE "FWADAPTEREAI.CH" /*/{Protheus.doc} MI070POS Ponto de entrada no final do adapter MATI070 (Bank) 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 Felipe Raposo @version P12 @since 08/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 MI070POS()
Local aRet := {} Local lRet := ParamIXB[1] Local cXml := ParamIXB[2] Local cTypeTrans := ParamIXB[3] 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 // Trata o XML. oXml := tXmlManager():New() oXml:Parse("<MI070POS>" + cXml + "</MI070POS>")
If Empty(cErro := oXml:Error()) oXml:XPathAddNode("/MI070POS/BusinessContent", "CustomerInternalId", IntCliExt(,, SA6->A6_CODCLI, SA6->A6_LOJCLI)[2]) oXml:XPathAddNode("/MI070POS/BusinessContent", "VendorInternalId", IntForExt(,, SA6->A6_CODFOR, SA6->A6_LOJFOR)[2]) 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 <MI070POS> e </MI070POS>. If cXmlRet = "<MI070POS>" .and. right(cXmlRet, 11) == "</MI070POS>" cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21) Endif
Return cXmlRet |