Producto: | TOTVS Backoffice |
|---|---|
Línea de producto: | Línea Protheus |
Segmento: | Servicios |
Módulo: | TOTVS Backoffice (Línea Protheus) - Activo fijo (SIGAATF) |
Función: | ATFI012 |
País: | Brasil |
Ticket: | Interno |
Requisito/Story/Issue | DSERCTR1-46829 |
El punto de entrada AF012POS se ejecuta al final de la rutina ATFI012, permitiendo que la devolución del procesamiento se maneje de acuerdo con las necesidades específicas. Este punto de entrada se activa después de la recepción del mensaje único de registro de activo fijo (Assets), permitiendo la personalización de acciones o validaciones finales antes de finalizar la rutina.
aRet := ExecBlock("AF012POS", .F., .F., {lRet, cXmlRet, cTypeTrans, cTypeMsg, cVersion, cTransac, lEAIObj})
If ValType(aRet) = "A" .and. len(aRet) > 1
lRet := aRet[1]
cXmlRet := aRet[2]
Endif
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 el XML solamente si la rutina devolvió 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
// Si hubo error en el procesamiento.
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
Función auxiliar para retirar el prólogo del XML generado.
@param cXml Texto XML que se limpiará.
@author
@version P12
@since 21/02/2019
@return cXml - (caracter) Texto XML sin el prólogo.
/*/
Static Function LimpaXML(cXml)
Local cXmlRet := AllTrim(cXml)
Local nChar
// Retira el prólogo del mensaje.
If cXmlRet = "<?"
cXmlRet := SubStr(cXmlRet, At("?>", cXmlRet) + 2)
Endif
// Retira la sangría de la línea (CR y LF) y espacios del inicio de la string.
Do While (nChar := asc(left(cXmlRet, 1)), nChar = 10 .or. nChar = 13 .or. nChar = 32)
cXmlRet := SubStr(cXmlRet, 2)
EndDo
// Retira la sangría de la línea (CR y LF) y espacios del final de la 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 <AF012POS> y </AF012POS>.
If cXmlRet = "<AF012POS>" .and. right(cXmlRet, 11) == "</AF012POS>"
cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21)
Endif
Return cXmlRet
/*/{Protheus.doc} MsgUVer
Función que verifica la versión de un mensaje único registrado en el adapter EAI.
Esta función debe BORRARSE y sustituirse por la función FwAdapterVersion()
después de su publicación en la Lib de 2019.
@param cRotina Rutina que tiene la IntegDef del Mensaje único
@param cMensagem Nombre del Mensaje único que se buscará
@author Felipe Raposo
@since 23/11/2018
@return xVersion - versión del mensaje único registrado. Si no encontrara, devuelve 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
Importante