01. DATOS GENERALES

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

02. DESCRIPCIÓN

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.

03. OTRAS INFORMACIONES


Manejo de PE en el sistema
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
Ejemplo de PE
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

  • Se observa que la utilización del PE y los impactos de este en el sistema son de responsabilidad del cliente.
  • Los ejemplos utilizados en esta documentación solamente son para fines de demostración, cada cliente debe verificar qué comportamiento desea realizar de acuerdo con el alcance del punto de entrada.

04. ASUNTOS RELACIONADOS

  • No se aplica.