Histórico da Página
...
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).
Informações | ||
---|---|---|
| ||
|
03. LOCALIZAÇÃO
Localizado na função ProcViagem da rotina OMSXCPLA, logo após a gravação das tabelas de Viagem (DK0 e DK1).
...
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
Este Ponto de Entrada não possui retornoNã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
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 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]) |
...
//primeiro subStop
oSubStop := aSubStops[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 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 |
...
oXml := XmlParser(cConteudo, "NS1", @cError, @cWarning )
cViagem :=
...
:_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 |
Templatedocumentos |
---|
HTML |
---|
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } .aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { background: #FF9900; !important } .menu-item.active-tab { border-bottom: none !important; } </style> |