Árvore de páginas

Versões comparadas

Chave

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

PONTO DE ENTRADA PARA MANIPULAÇÃO DO XML DA MENSAGEM ÚNICA.

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Manufatura

Módulo:

SIGAMNT - Manutenção de Ativos e Gestão de Frotas

Rotina:

Rotina

Nome Técnico

NGMUORDER

Pedido de Compra (Mensagem Única)

Rotina(s) envolvida(s)

Nome Técnico

NGMUORDER

Pedido de Compra (Mensagem Única)

NGMUAMPPATBaixa de Estoque (Mensagem Única)
NGMUAPRCSTApropriação de Custo (Mensagem Única)
NGMUCANMNOCancelamento de OS (Mensagem Única)
NGMUCANREQCancelamento de Requisição (Mensagem Única)
NGMUGETSITSituação do Funcionário (Mensagem Única)
NGMUINFPARTítulos a Pagar (Mensagem Única)
NGMUMNTORDOrdem de Serviço (Mensagem Única)
NGMUMNTREQSolicitação de Serviço (Mensagem Única)
NGMUREQUESCancelamento de Requisição (Mensagem Única)
NGMUSTOLVLConsulta de Saldo (Mensagem Única)
NGMUSTOTUOBaixa de Estoque (Mensagem Única)

Chamados Relacionados

12.1.15: XXXXXX

País(es):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos

Ponto de Entrada

Descrição:

Ponto de Entrada para manipulação do XML da mensagem única.

Localização:

SIGAMNT: Atualizações/Controle de Oficina/Cadastros Básicos/Funcionários

SIGAMNT: Atualizações/Controle de Oficina/Ordem de Serviço/Corretiva

SIGAMNT: Atualizações/Controle de Oficina/Retorno de O.S./Retorno Mod.2

SIGAMNT: Atualizações/Controle de Oficina/Solicitação de Serviço/Solicitação

SIGAMNT: Atualizações/Controle de Riscos/Multas/Multa

Eventos:

Cadastro de Funcionário (MNTA020)

Cadastro de Ordem de Serviço Corretiva (MNTA420)

Retorno de O.S. Mod. 2 (MNTA435)

Cadastro de Solicitação de Serviço (MNTA280)

Registro de Multas (MNTA765)

Programa Fonte:

NGMUAMPPAT.PRX

NGMUAPRCST.PRX

NGMUCANMNO.PRX

NGMUCANREQ.PRX

NGMUGETSIT.PRX

NGMUINFPAR.PRX

NGMUMNTORD.PRX

NGMUMNTREQ.PRX

NGMUORDER.PRX

NGMUREQUES.PRX

NGMUSTOLVL.PRX

NGMUSTOTUO.PRX

Função:

NGMUPE01()

Retorno:

NomeTipoDescriçãoObrigatório
cXMLCaracterRetorna o XML customizado.Sim

 

Exemplo:

#INCLUDE "TOTVS.CH"

#Include'PROTHEUS.ch'

#Include'#INCLUDE "FWADAPTEREAI.CH"'#INCLUDE "

#Include'XMLXFUN.CH"

#INCLUDE "FILEIO.CH"

ch'

#Include'FILEIO.ch' 

User Function  NGMUPE01NGMUPE01()

 

Local

 cXML

cXML:=ParamIXB[1]

 

//(Caracter) XML que será alterado no ponto de entrada.

Local 

Local lRet

 

:=ParamIXB[2]//(Lógico) Retorno que será enviado pelo adapter de mensagem única.

Local 

Local cMsg:=ParamIXB[3]

 

//(Caracter) Indica a função que o P.E. está sendo chamado.

Local 

Local nLoc

 

:=ParamIXB[4]

 

//(Numérico) Indica o ponto no adapter em que é chamado a mensagem única: 1 - Final do adapter, com o XML gerado.

Local 

Local nTip

 

:=ParamIXB[5]

 

//(Numérico) Indica o tipo de transação.

Local 

Local cMen:=ParamIXB[6]

 

//(Caracter) Indica o tipo de mensagem.

Local

 cError

cError:=' ',cWarning:=' '

Local

 lAglutina

lAglutina,lAglutinou

Local

 cInternalId

cInternalId:=' '

Private

 oXml

oXml

 

      If Upper(cMsg)=="NGMUREQUES"

            //Gera o Objeto XML

            oXml:=XmlParser("<raiz>"+cXml+"</raiz>","_",@cError,@cWarning)

            If Type("oXml:_raiz:_BusinessContent:_

RequestInternalId

Observation")=="O"

                  oRequest:=oXml:_raiz:_BusinessContent:_

RequestInternalId

Observation

                  oType:=oXml:_raiz:_BusinessContent:_Type

If oType:text == "001" //SCP

aSCP := StrTokArr(oRequest:text,'|')

cIteSCP := ' '

cLocSCP := ' '

//verifica a mensagem gerada se foi com ou sem aglutinacao

If Len(aSCP) >= 5 //internalId quando aglutina SA

cEmpSCP := aSCP[1]

cFilSCP := aSCP[2]

cNumSCP := aSCP[3]

cIteSCP := aSCP[4]

cLocSCP := aSCP[5]

lAglutina := .T.

Else //internalId quando nao aglutina SA

cEmpSCP := aSCP[1]

cFilSCP := aSCP[2]

cNumSCP := aSCP[3]

lAglutina := .F.

EndIf

dbSelectArea("SCP")

dbSetOrder(01)

If dbSeek(cFilSCP + cNumSCP + cIteSCP)

cRefer := "RM"

cAlias := "SCP"

cField := "CP_NUM"

//Atribui o Código do Bem na observação do XML

If !Empty(CP_OBS)

cMen := SCP->CP_OBS

EndIf

//tenta achar a chave no de-para da forma aglutinada (pq a forma nao aglutinada sempre existe, o cabeçalho)

cValInt := cEmpSCP+"|"+cFilSCP+'|'+cNumSCP+"|"+SCP->CP_ITEM+"|"+SCP->CP_LOCAL

cValExt := RTrim(CFGA070Ext( cRefer, cAlias, cField, cValInt ))

//se nao encontrou, inverte a indicacao de aglutinacao

lAglutinou := !Empty(cValExt)

If lAglutinou

cInternalId := cEmpSCP+"|"+cFilSCP+'|' + SCP->CP_NUM + '|' + SCP->CP_ITEM + '|' + SCP->CP_LOCAL

Else

cInternalId := cEmpSCP+"|"+cFilSCP+'|' + SCP->CP_NUM +'|'+'SA'

EndIf

cOldStr := '<RequestInternalId>' + oRequest:text + '</RequestInternalId>'

cNewStr := '<RequestInternalId>' + cInternalId + '</RequestInternalId>'

cXML += '<Observation>' + cMen +

                 

                  nPosIni  :=RAT('<Observation>',cXml)

                  nPosCont:=(RAT('<ListOfApportionRequestItem>',cXml)-RAT('<Observation>',cXml))

                 

                  cSubstit:=SubStr(cXml,nPosIni,nPosCont)

                  cObser:='<Observation>'+'Teste de inclusao de Observacao'+'</Observation>'//Adiciona o

Código

Nome do Bem na

Observação

Observação   

                 

                  cXML:=StrTran(cXml,

cOldStr

cSubstit,

cNewStr

cObser)   

EndIf

                 

EndIf

                 

            EndIf

      EndIf

Return cXML