User Function AF012POS()
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("<AF012POS>" + cXml + "</AF012POS>")
If Empty(cErro := oXml:Error())
oXml:XPathAddNode("/AF012POS/BusinessContent", "N1_NUFINAM", IntCliExt(,, SN1->N1_NUFINAM, MsgUVer('ATFA012', 'ASSETS'))[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
ElseIf cTypeTrans == TRANS_RECEIVE
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
@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 <AF012POS> e </AF012POS>.
If cXmlRet = "<AF012POS>" .and. right(cXmlRet, 11) == "</AF012POS>"
cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21)
Endif
Return cXmlRet
/*/{Protheus.doc} MsgUVer
Função que verifica a versão de uma mensagem única cadastrada no adapter EAI.
Essa função deverá ser EXCLUÍDA e substituída pela função FwAdapterVersion()
após sua publicação na Lib de 2019.
@param cRotina Rotina que possui a IntegDef da Mensagem Unica
@param cMensagem Nome da Mensagem única a ser pesquisada
@author Felipe Raposo
@since 23/11/2018
@return xVersion - versão da mensagem única cadastrada. Se não encontrar, retorna nulo.
/*/
Static Function MsgUVer(cRotina, cMensagem)
Local aArea := GetArea()
Local aAreaXX4 := XX4->(GetArea())
Local xVersion
If FindFunction("FwAdapterVersion")
xVersion := FwAdapterVersion(cRotina, cMensagem)
ElseIf XX4->(FieldPos('XX4_SNDVER')) > 0
cMensagem := Padr(cMensagem, Len(XX4->XX4_MODEL))
cRotina := Padr(cRotina, Len(XX4->XX4_ROTINA))
XX4->(dbSetOrder(1))
If XX4->(msSeek(xFilial() + cRotina + cMensagem, .F.) .and. !empty(XX4_SNDVER))
xVersion := AllTrim(XX4->XX4_SNDVER)
Endif
Endif
RestArea(aAreaXX4)
RestArea(aArea)
Return xVersion |