Árvore de páginas

ATFI012 - Mensagem única de cadastro de ativo fixo

Características do Requisito

Linha de Produto:

Protheus

Segmento:

Controladoria

Módulo:

SIGAATF - Ativo Fixo

Rotina:

Rotina

Nome técnico

ATFI012

Cadastro de ativo fixo (Assets)

Requisito / Story / Issue:

DSERCTR1-19405

Ponto de Entrada

Descrição:

Ponto de entrada AF012POS, localizado no final da ATFI012 permitindo que o retorno da rotina seja manipulado.

Eventos:

O ponto de entrada será executado ao final do recebimento da mensagem única de cadastro de ativo fixo (Assets).

Programa Fonte:

ATFI012.PRW

Função:

ATFI012 - adapter EAI para cadastro de ativo fixo (Assets) utilizando o conceito de mensagem única.

Parâmetros:

ParamIXB[1] - Indica o resultado da execução da função padrão.
ParamIXB[2] - Variável com conteúdo XML para envio/recebimento.
ParamIXB[3] - Tipo de transação (Envio / Recebimento).
ParamIXB[4] - Tipo de mensagem (Business Type, WhoIs, etc).
ParamIXB[5] - Versão da mensagem.
ParamIXB[6] - Nome da transação.
ParamIXB[7] - Objeto JSON (lógico).

Retorno:

Será retornado um array com duas posições conforme tabela:

Nome

Tipo

Descrição

Obrigatório

lRet

Lógico

Indica se o processamento foi bem sucedido.

Sim

cXML

Caractere

Texto de retorno da mensagem EAI.

Sim


Chamada do ponto de entrada no fonte ATFI012


If lAF012POS  //variavel que indica que existe o ponto de entrada AF012POS
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
Endif



Modelo de Fonte 


#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWADAPTEREAI.CH"

/*/{Protheus.doc} AF012POS
Ponto de entrada no final do adapter MATI070 (Bank) 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 Rogerio Onishi Candisani
@version P12
@since 13/03/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 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