Histórico da Página
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: |
| ||||||||||||||||||||||||||||||
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: |
|
Exemplo:
#INCLUDE "TOTVS.CH"
#INCLUDE "FWADAPTEREAI.CH"
#INCLUDE "XMLXFUN.CH"
#INCLUDE "NGMUCH.CH"
#Include "FILEIO.CH"
User Function NGMUPE01()
Local cXML := ParamIXB[1] //(Caracter) XML que será alterado no ponto de entrada.
Local lRet := ParamIXB[2] //(Lógico) Retorno que será enviado pelo adapter de mensagem única.
Local cMsg := ParamIXB[3] //(Caracter) Indica a função que o P.E. está sendo chamado.
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 nTip := ParamIXB[5] //(Numérico) Indica o tipo de transação.
Local cMen := ParamIXB[6] //(Caracter) Indica o tipo de mensagem.
Local cError := ' ', cWarning := ' '
Local lAglutina, lAglutinou
Local cInternalId := ' '
Private oXml
If Upper(cMsg) == "NGMUCANREQ"
//Gera o Objeto XML
oXml := XmlParser( "<raiz>"+cXml+"</raiz>", "_", @cError, @cWarning )
If Type("oXml:_raiz:_BusinessContent:_RequestInternalId") == "O"
oRequest := oXml:_raiz:_BusinessContent:_RequestInternalId
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 + '</Observation>' //Adiciona o Nome do Bem na Observação
cXML := StrTran(cXml, cOldStr, cNewStr)
EndIf
EndIf
EndIf
EndIf
Return cXML