#INCLUDE "PROTHEUS.CH" #INCLUDE "FWADAPTEREAI.CH"
/*/{Protheus.doc} MI255POS Ponto de entrada no final do adapter MATI225 (StockLevel) 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 21/02/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 MI255POS()
Local aRet := {} Local lRet := ParamIXB[1] Local cXml := ParamIXB[2] Local cTypeTrans := ParamIXB[3] Local lObjJSON := ParamIXB[7]
Local cErro := "" Local cXMLPath := "" Local oXml as object
Local aReturn := {} Local cFilDest := "" Local cSubFil := "" Local nX
// Tratar o XML somente se a rotina retornou true. If lRet .and. !lObjJSON .and. cTypeTrans == TRANS_RECEIVE
// Trata o XML. oXml := tXmlManager():New() oXml:Parse(cXml)
If Empty(cErro := oXml:Error()) aReturn := oXml:XPathGetChildArray('/ListOfReturnItem') For nX := 1 to len(aReturn) cXMLPath := aReturn[nX, 2] cFilDest := PadR(oXml:xPathGetNodeValue(cXMLPath + '/BranchId'), len(cFilAnt)) DB5->(dbSetOrder(2)) // DB5_FILIAL, DB5_FILABA. If DB5->(dbSeek(xFilial() + cFilDest, .F.)) cSubFil := DB5->DB5_SUBFIL Else cSubFil := "" Endif oXml:XPathAddNode(cXMLPath, "SubBranch", cSubFil) Next nX 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
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 |