Histórico da Página
...
Este Ponto de Entrada permite a manipulação das tabelas responsáveis por armazenar a viagem recebida pelo Cockpit Logístico, possibilitando 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 CPLTOL. |
aStops | Array de Objetos | Array de objetos contendo todos os atributos do XML referentes às paradas da viagem CPLTOL, 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 CPLTOL, 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.
08. EXEMPLO
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 | |
---|---|
Bloco de código | |
language | cpp |
title | Exemplo |
linenumbers | true | collapse | true
#INCLUDE "PROTHEUS.CH" User Function OMSCPLAV() Local oSubStop := Nil 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 cDateStartcDesVei := Padr(oViagem:vehicleDescription,TamSx3("DK0_DESVEI")[1]) //primeiro subStop oSubStop Local nKmVei := 0 Local cError := aSubStops[1]"" cDateStartLocal cWarning := SubStr(oSubStop:startServiceTime,9,2)+'/'+; SubStr(oSubStop:startServiceTime,6,2)+'/'+; SubStr(oSubStop:startServiceTime,1,4) "" 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()) + DK0->DK0_XCPO"-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 := cDateStartPARAMIXB[1] //Campo customizado Objeto com todos os atributos da viagem Local aStops := PARAMIXB[2] DK0->(MsUnlock()) EndIf //A função TmsLogMsg exibe mensagens no corpo do arquivo console.log If Empty(cConteudo) TmsLogMsg("WARN","[" + cValToChar(ThreadId()) + "-OMSCPLAV] Variável 'cConteudo' está vazia.") else TmsLogMsg("WARN","[" + cValToChar(ThreadId()) + "-OMSCPLAV] Variável 'cConteudo' está preenchida com " + cValToChar(Len(cConteudo)) + " bytes.") oXml := XmlParser(cConteudo, "NS1", @cError, @cWarning ) cViagem := oXml//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:_NS2" + cNameSpace + "_PUBLISHRELEASEDTRIP:_TRIPRELEASEREQUESTS:_TRIPRELEASEREQUEST:_IDENTIFIER:TEXT TmsLogMsg("WARN","[" + cValToChar(ThreadId()) + "-OMSCPLAV] Viagem " + cViagem + " recebida com sucesso.") Endif Return[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> |