Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Produto:

Solucoes_totvs
Solucao

Solucoes_totvs_cross
SolucaoCrossTOTVS Backoffice

Solucoes_totvs_parceiros
SolucaoParceiros

Solucoes_totvs_parceirosexptotvs
SolucaoParcsExpsTOTVS

Linha de Produto:

Linhas_totvs
SegmentoDistribuição
RegionConstrução Projetos
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoBackoffice

Módulo:SIGAEST - Estoque/Custos
Função:MATI225 Adapter de consulta de nível de estoque (StockLevel)
Ticket:

Interno

 
Issue:DMANMAT01-17771
Descrição:

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

Eventos:

O ponto de entrada será executado ao final do recebimento da mensagem única de nível de estoque (StockLevel).

Programa Fonte:

MATI225.PRW

Função:MATI225 - adapter EAI para consulta de nível de estoque (StockLevel) utilizando o conceito de mensagem única.
Parâmetros:

Parâmetro

Tipo

Descrição

PARAMIXB[1]Array Indica o resultado da execução da função padrão.
PARAMIXB[2]ArrayVariável com conteúdo XML para envio/recebimento.
PARAMIXB[3]ArrayTipo de transação (Envio / Recebimento).
PARAMIXB[4]ArrayTipo de mensagem (Business Type, WhoIs, etc).
PARAMIXB[5]Array

Versão da mensagem.

PARAMIXB[6]ArrayNome da transação.
PARAMIXB[7]ArrayObjeto JSON (lógico).
Retorno:

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


Nome

Tipo

Descrição

Obrigatório
lRetLógico

Indica se o processamento foi bem sucedido.

Sim
cXMLCaractereTexto de retorno da mensagem EAI.Sim
Exemplo XML:
Bloco de código
languagejs
themeMidnight
titleMI255POS
linenumberstrue
collapsetrue
#INCLUDE 
#INCLUDE 
"PROTHEUS.CH"


#INCLUDE
 
 "FWADAPTEREAI.CH"


/*/{Protheus.doc} MI255POS


Ponto de entrada no final do adapter MATI225 (StockLevel) 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 Felipe Raposo


@version P12


@since 21/02/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
 
 MI255POS()

Local aRet


Local aRet := {}


Local
 lRet
 lRet := ParamIXB[1]


Local
 cXml
 cXml := ParamIXB[2]


Local
 cTypeTrans
 cTypeTrans := ParamIXB[3]


Local
 lObjJSON
 lObjJSON := ParamIXB[7]

Local cErro


Local cErro :=
 
 ""


Local
 cXMLPath
 cXMLPath :=
 
 ""


Local
 oXml 
 oXml as
 
 object

Local aReturn


Local aReturn := {}


Local
 cFilDest
 cFilDest :=
 
 ""


Local
 cSubFil
 cSubFil :=
 
 ""

Local nX

Local nX

// Tratar o XML somente se a rotina retornou true.


If
 lRet 
 lRet .and.
 
 !
lObjJSON 
lObjJSON .and.
 cTypeTrans
 cTypeTrans == TRANS_RECEIVE



    // Trata o XML.


    oXml :=
 
 tXmlManager():New()

    oXml

    oXml:Parse(cXml)

    If 


    If Empty(cErro :=
 
 oXml:Error())


        aReturn :=
 
 oXml:XPathGetChildArray('/ListOfReturnItem')

        For nX

        For nX :=
 
 1
 
 to
 
 len(aReturn)


            cXMLPath := aReturn[nX,
 
 2]


            cFilDest :=
 
 PadR(oXml:xPathGetNodeValue(cXMLPath +
 
 '/BranchId'),
 
 len(cFilAnt))


            DB5->(dbSetOrder(2))
 
 // DB5_FILIAL, DB5_FILABA.

            If DB5

            If DB5->(dbSeek(xFilial() + cFilDest,
 
 .F.))


                cSubFil := DB5->DB5_SUBFIL

            Else
                cSubFil

            Else
                cSubFil :=
 
 ""

            Endif
            oXml

            Endif
            oXml:XPathAddNode(cXMLPath,
 
 "SubBranch", cSubFil)

        Next nX
    Endif
    // Se deu erro no processamento.
    If 

        Next nX
    Endif

    // Se deu erro no processamento.
    If empty(cErro)


        lRet :=
 
 .T.


        cXml :=
 
 LimpaXML(oXml:Save2String())

    Else
        lRet

    Else
        lRet :=
 
 .F.


        cXml :=
 
 "<![CDATA["
 
 +
 
 _NoTags(cErro) +
 
 "]]>"

    Endif
    oXml

    Endif

    oXml :=
 
 nil


Endif



aRet := {lRet, cXml}

Return aRet

Return aRet

/*/{Protheus.doc} LimpaXML


Função auxiliar para remover o prólogo do XML gerado.



@param cXml Texto XML a ser limpo.



@author Felipe Raposo


@version P12


@since 21/02/2019


@return cXml - (caracter) Texto XML sem o prólogo.


/*/


Static
 
 Function
 
 LimpaXML(cXml)

Local cXmlRet


Local cXmlRet :=
 
 AllTrim(cXml)

Local nChar

Local nChar

// Retira o prólogo da mensagem.


If
 cXmlRet
 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
 nChar =
 
 13
 
 .or.
 nChar
 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
 nChar =
 
 13
 
 .or.
 nChar
 nChar =
 
 32)


    cXmlRet :=
 
 SubStr(cXmlRet,
 
 1,
 
 len(cXmlRet) -
 
 1)


EndDo



// Retira o <FI040POS> e </FI040POS>.


If
 cXmlRet
 cXmlRet =
 
 "<FI040POS>"
 
 .and.
 
 right(cXmlRet,
 
 11) ==
 
 "</FI040POS>"


    cXmlRet :=
 
 SubStr(cXmlRet,
 
 11,
 
 len(cXmlRet) -
 
 21)

Endif
Return cXmlRet

Endif

Return cXmlRet
Exemplo JSON:
Bloco de código
languagejs
themeMidnight
titleMI255POS
linenumberstrue
collapsetrue
#INCLUDE 'Totvs.ch'
#INCLUDE "FWADAPTEREAI.CH"

/*/{Protheus.doc} User Function MI255POS
    Permite manipular o arquivo JSON/XML da mensagem única STOCKLEVEL
    @type  Function
    @author TOTVS
    /*/
User Function MI255POS()
    Local lRet       := ParamIXB[1]
    Local cXmlRet    := ParamIXB[2] 
    Local cTypeTrans := ParamIXB[3] 
    Local cTypeMsg   := ParamIXB[4] 
    Local cVersion   := ParamIXB[5] 
    Local cTransac   := ParamIXB[6] 
    Local lEAIOb     := ParamIXB[7]
    Local aRet       := {lRet, cXmlRet}

    If !lRet
        Return aRet
    EndIf

    If lEAIOb .And. cTypeTrans == TRANS_SEND //Envio de Json
        //Altera a tag CurrentStockAmount
        cXmlRet:Get('ListOfReturnItem')[1]:SetProp("CurrentStockAmount", '150')

        aRet := {lRet, cXmlRet}
    EndIf

Return aRet

02. ASSUNTOS RELACIONADOS

Templatedocumentos


HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>