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. |
aSubStops | Array de Objetos | Array de objetos contendo todos os atributos do XML referentes as subparadas da viagem TOL, mais especificamente os atributos da tag subStop. |
cConteudo | String | String contendo todo o conteúdo do XML recebido, permitindo assim acessar qualquer tag da Viagem recebida. |
cNameSpace | String | String 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.
Elemento | Tipo | Tamanho | Decimal |
---|---|---|---|
oViagem:carrierId | C | 3 | 0 |
oViagem:freightValue | N | 15 | 4 |
oViagem:identifier | C | 5 | 0 |
oViagem:regionSourceId | C | 7 | 0 |
oViagem:vehicleDescription | C | 14 | 0 |
oViagem:vehicleId | C | 6 | 0 |
oViagem:loads[1]:distance | C | 9 | 0 |
oViagem:loads[1]:freight | C | 3 | 0 |
oViagem:loads[1]:loadMode | C | 1 | 0 |
oViagem:loads[1]:modal | C | 1 | 0 |
oViagem:loads[1]:serviceDescriptionType | C | 15 | 0 |
oViagem:loads[1]:serviceTypeId | C | 1 | 0 |
oViagem:loads[1]:stops[1][1]:identifier | C | 4 | 0 |
oViagem:loads[1]:stops[1][1]:localitySourceId | C | 9 | 0 |
oViagem:loads[1]:stops[1][1]:sequenceOnLoad | C | 1 | 0 |
oViagem:loads[1]:stops[1][1]:transportZoneDescription | C | 19 | 0 |
oViagem:loads[1]:stops[1][1]:transportZoneId | C | 19 | 0 |
oViagem:loads[1]:stops[1][1]:SUBstops[1]:arrivalTime | C | 29 | 0 |
oViagem:loads[1]:stops[1][1]:SUBstops[1]:departureTime | C | 29 | 0 |
oViagem:loads[1]:stops[1][1]:SUBstops[1]:endServiceTime | C | 29 | 0 |
oViagem:loads[1]:stops[1][1]:SUBstops[1]:identifier | C | 4 | 0 |
oViagem:loads[1]:stops[1][1]:SUBstops[1]:startServiceTime | C | 29 | 0 |
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