Á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 "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 lRet := ParamIXB[1]
Local cXml := ParamIXB[2]
Local cTypeTrans := ParamIXB[3]
Local lObjJSON := ParamIXB[7]

Local cErro := ""
Local cXMLPath := ""
Local oXml as object

Local aReturn := {}
Local cFilDest := ""
Local cSubFil := ""
Local nX

// Tratar o XML somente se a rotina retornou true.
If lRet .and. !lObjJSON .and. cTypeTrans == TRANS_RECEIVE

    // Trata o XML.
    oXml := tXmlManager():New()
    oXml:Parse(cXml)

    If Empty(cErro := oXml:Error())
        aReturn := oXml:XPathGetChildArray('/ListOfReturnItem')
        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->(dbSeek(xFilial() + cFilDest, .F.))
                cSubFil := DB5->DB5_SUBFIL
            Else
                cSubFil := ""
            Endif
            oXml:XPathAddNode(cXMLPath, "SubBranch", cSubFil)
        Next nX
    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
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 Felipe Raposo
@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 <FI040POS> e </FI040POS>.
If cXmlRet = "<FI040POS>" .and. right(cXmlRet, 11) == "</FI040POS>"
    cXmlRet := SubStr(cXmlRet, 11, len(cXmlRet) - 21)
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}
    Local jJsonObj   := Nil

    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>