01. DADOS GERAIS

Produto:

Linha de Produto:

Segmento:

Módulo:

Função:ATFI012
País:Brasil
Ticket:Interno
Requisito/Story/IssueDSERCTR1-46829

02. DESCRIÇÃO

O ponto de entrada AF012POS é executado ao final da rotina ATFI012, permitindo que o retorno do processamento seja manipulado conforme necessidades específicas. Este ponto de entrada é acionado após o recebimento da mensagem única de cadastro de ativo fixo (Assets), possibilitando a customização de ações ou validações finais antes de encerrar a rotina.

03. DEMAIS INFORMAÇÕES


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 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


  • Observa-se que a utilização do PE e os impactos dele no sistema são de responsabilidade do cliente.
  • Os exemplos utilizados nessa documentação são apenas para fins de demonstração, cada cliente deve verificar qual comportamento deseja realizar de acordo com o escopo do ponto de entrada.

04. ASSUNTOS RELACIONADOS