Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS OMS

Linha de Produto:

Linha Protheus

Segmento:

Logística

Módulo:SIGAOMS - Gestão de Distribuição
Função:OMSXCPLA - Recebimento de Viagem
País:Todos Países
Ticket:-
Requisito/Story/Issue (informe o requisito relacionado) :-


02. DESCRIÇÃO

Este Ponto de Entrada permite a manipulação das tabelas responsáveis por armazenar a viagem recebida pelo TOTVS Otimização Logística, possibilitando assim a gravação de outras informações presentes no XML.

Exemplo

Acessar a informação de data de início da viagem no XML, tag startServiceTime e gravar em um campo customizado na tabela da Viagem CPL (DK0).

IMPORTANTE!

  • Os códigos armazenados nos campos DK0_VEIC2 e DK0_VEIC3 devem ser previamente cadastrados na tabela DA3 (Veículos).
  • O código armazenado no campo DK0_MOTORI deve ser previamente cadastrado na tabela DA4 (Motoristas).
  • Os códigos armazenados nos campos DK0_AJUDA1, DK0_AJUDA2 e DK0_AJUDA3 devem ser previamente cadastrados na tabela DAU (Ajudantes).
  • Portanto, a partir do dado recebido (placa para veículos, CPF para Motoristas ou Ajudantes) será efetuada a busca do código relacionado na respectiva tabela.
  • Caso algum dos códigos mencionados acima não esteja cadastrado conforme indicado, ao gerar a carga o código em questão será descartado e não será replicado para a Carga (tabela DAK).

03. LOCALIZAÇÃO

Localizado na função ProcViagem da rotina OMSXCPLA, logo após a gravação das tabelas de Viagem (DK0  e DK1).

04. PARÂMETROS

Nome

Tipo

Descrição

oViagem

Objeto

Objeto contendo todos os atributos do XML referentes ao cabeçalho da viagem TOL.

aStops

 Array de Objetos

 Array de objetos contendo todos os atributos do XML referentes às paradas da viagem TOL, mais especificamente os atributos da tag stops.

aSubStopsArray de ObjetosArray de objetos contendo todos os atributos do XML referentes as subparadas da viagem TOL, mais especificamente os atributos da tag subStop.
cConteudoStringString contendo todo o conteúdo do XML recebido, permitindo assim acessar qualquer tag da Viagem recebida.
cNameSpaceStringString contendo a namespace existente no XML recebido.

05. RETORNO

Não se aplica.

06. VERSÕES

Protheus 12.1.17 ou superiores.

07. OBSERVAÇÃO

Todos os parâmetros são recebidos na User Function via PARAMIXB, conforme consta em Execblock / Customização.

Caso encontre o elemento do XML desejado na tabela abaixo, o Exemplo 1 pode ser utilizado. Caso contrário, é necessário realizar o parser do XML conforme o Exemplo 2.

ElementoTipoTamanhoDecimal
oViagem:carrierIdC30
oViagem:freightValueN154
oViagem:identifierC50
oViagem:regionSourceIdC70
oViagem:vehicleDescriptionC140
oViagem:vehicleId C60
oViagem:loads[1]:distanceC90
oViagem:loads[1]:freightC30
oViagem:loads[1]:loadModeC10
oViagem:loads[1]:modalC10
oViagem:loads[1]:serviceDescriptionTypeC150
oViagem:loads[1]:serviceTypeIdC10
oViagem:loads[1]:stops[1][1]:identifierC40
oViagem:loads[1]:stops[1][1]:localitySourceIdC90
oViagem:loads[1]:stops[1][1]:sequenceOnLoadC10
oViagem:loads[1]:stops[1][1]:transportZoneDescriptionC190
oViagem:loads[1]:stops[1][1]:transportZoneIdC190
oViagem:loads[1]:stops[1][1]:SUBstops[1]:arrivalTimeC290
oViagem:loads[1]:stops[1][1]:SUBstops[1]:departureTimeC290
oViagem:loads[1]:stops[1][1]:SUBstops[1]:endServiceTimeC290
oViagem:loads[1]:stops[1][1]:SUBstops[1]:identifierC40
oViagem:loads[1]:stops[1][1]:SUBstops[1]:startServiceTimeC290

08. EXEMPLO 1

#INCLUDE "PROTHEUS.CH"

User Function OMSCPLAV()
	Local oViagem := PARAMIXB[1] //Objeto com todos os atributos da viagem
	Local aStops := PARAMIXB[2] //Array com os objetos de todas as paradas, tag "stop"
	Local aSubStops := PARAMIXB[3] //Array com os objetos de todas as sub-paradas, tag "subStop"
	Local cConteudo := PARAMIXB[4] //String com todo o conteúdo do XML
	Local cNameSpace := PARAMIXB[5] //String com a namespace do arquivo XML

	Local cRegional := Padr(oViagem:regionSourceId,TamSx3("DK0_REGID")[1])
	Local cViagem := Padr(oViagem:identifier,TamSx3("DK0_VIAGID")[1])

	Local cDesVei := Padr(oViagem:vehicleDescription,TamSx3("DK0_DESVEI")[1])
	Local nKmVei := 0

	Local cError := ""
	Local cWarning := ""

	If !Empty(oViagem:loads[1]:distance)
		nKmVei := Val(oViagem:loads[1]:distance)
	EndIf

	DK0->(DbSetOrder(1))
	If DK0->(DbSeek(xFilial('DK0')+cRegional+cViagem))
		RecLock('DK0',.F.)
		DK0->DK0_DESVEI := cDesVei
		DK0->DK0_KMVEI := nKmVei
		DK0->(MsUnlock())
	EndIf

	TmsLogMsg("INFO","[" + cValToChar(ThreadId()) + "-OMSCPLAV] PE OMSCPLAV Executado.")

Return

09. EXEMPLO 2

#include "protheus.ch"
#include "parmtype.ch"
#INCLUDE "TOTVS.CH"

User Function OMSCPLAV()
	Local oViagem   := PARAMIXB[1] //Objeto com todos os atributos da viagem
	Local aStops    := PARAMIXB[2] //Array com os objetos de todas as paradas, tag "stop"
	Local aSubStops := PARAMIXB[3] //Array com os objetos de todas as sub-paradas, tag "subStop"
	Local cConteudo := PARAMIXB[4] //String com todo o conteúdo do XML
	Local cNameSpace := PARAMIXB[5] //String com a namespace do arquivo XML
	Local cRegional := AvKey(oViagem:regionSourceId, "DK0_REGID")
    Local cViagem   := AvKey(oViagem:identifier, "DK0_VIAGID")
	Local nVlrFret  := 0
	Local cTrsHub   := ""
	Local cTrsNme   := ""
	Local cTrnPrim  := ""
	Local cTpVcPrm  := ""
	Local oSubStop
	Local cError    := ""
	Local cWarning  := ""
	Local oXml      := NIL

	nVlrFret :=	oViagem:freightValue
	cTrnPrim := oViagem:carrierId
	cTpVcPrm := oViagem:vehicleId

	oXml := XmlParser( cConteudo, "_", @cError, @cWarning )
	If (oXml != NIL )
		IF ValType(XmlChildEx(&("OXML:_SOAP_ENVELOPE:_SOAP_BODY:_" + cNameSpace + "_PUBLISHRELEASEDTRIP:_TRIPRELEASEREQUESTS:_TRIPRELEASEREQUEST[1]:_LOADS:_LOAD:_STOPS:_STOP[1]:_SUBSTOPS:_SUBSTOP:_LOADEDSHIPMENTUNITS:_SHIPMENTUNIT:_DELIVERYUNITLIST:_DELIVERYUNIT","_ATTRIBUTES"))) <> "U" 
			cTrsNme := &("OXML:_SOAP_ENVELOPE:_SOAP_BODY:_" + cNameSpace + "_PUBLISHRELEASEDTRIP:_TRIPRELEASEREQUESTS:_TRIPRELEASEREQUEST[1]:_LOADS:_LOAD:_STOPS:_STOP[1]:_SUBSTOPS:_SUBSTOP:_LOADEDSHIPMENTUNITS:_SHIPMENTUNIT:_DELIVERYUNITLIST:_DELIVERYUNIT:_ATTRIBUTES:_ATTRIBUTE:_NAME:TEXT")
			cTrsHub := &("OXML:_SOAP_ENVELOPE:_SOAP_BODY:_" + cNameSpace + "_PUBLISHRELEASEDTRIP:_TRIPRELEASEREQUESTS:_TRIPRELEASEREQUEST[1]:_LOADS:_LOAD:_STOPS:_STOP[1]:_SUBSTOPS:_SUBSTOP:_LOADEDSHIPMENTUNITS:_SHIPMENTUNIT:_DELIVERYUNITLIST:_DELIVERYUNIT:_ATTRIBUTES:_ATTRIBUTE:_VALUE:TEXT")
		EndIF	
	else
		OsLogCpl("PE OMSCPLAV -> Falha ao gerar Objeto XML : "+cError+" / "+cWarning,"INFO")
	EndIF

	DK0->(DbSetOrder(1))
	If DK0->(DbSeek(FwXFilial("DK0") + cRegional + cViagem))
		RecLock("DK0", .F.)
		DK0->DK0_XFRETE	:= nVlrFret
		DK0->DK0_XTRHB	:= cTrsHub
		DK0->(MsUnlock())
	EndIf

Return Nil