Árvore de páginas

Versões comparadas

Chave

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

...

Informações
titleIMPORTANTE!
  • Os códigos armazenados nos campos DK0_VEIC2 e DK0_VEIC3 deverão estar previamente  devem ser previamente cadastrados na tabela DA3 (Veículos).
  • O código armazenado no campo DK0_MOTORI deverá estar deve ser previamente cadastrado na tabela DA4 (Motoristas).
  • Os códigos armazenados nos campos DK0_AJUDA1, DK0_AJUDA2 e DK0_AJUDA3 deverão estar devem ser previamente cadastrados na tabela DAU (Ajudantes).
  • Portanto, a partir do dado recebido (placa para veículos, CPF para Motoristas ou Ajudantes) deverá ser será efetuada a busca do código relacionado na respectiva tabela mencionada.
  • 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).

...

Caso encontre o elemento do xml XML desejado na tabela abaixo, o exemplo 01 Exemplo 1 pode ser utilizado. Caso contrário será , é necessário realizar o parser do xml XML conforme exemplo 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

Bloco de código
#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 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

Bloco de código
#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 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:_NS2_PUBLISHRELEASEDTRIP:_TRIPRELEASEREQUESTS:_TRIPRELEASEREQUEST[1]:_LOADS:_LOAD:_STOPS:_STOP[1]:_SUBSTOPS:_SUBSTOP:_LOADEDSHIPMENTUNITS:_SHIPMENTUNIT:_DELIVERYUNITLIST:_DELIVERYUNIT,"_ATTRIBUTES")) <> "U" 
			cTrsNme := OXML:_SOAP_ENVELOPE:_SOAP_BODY:_NS2_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:_NS2_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

...