Versões comparadas

Chave

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

...

Atualmente cada produto (ex.: Logix, Datasul, Protheus e RM) tem seu próprio ferramental de de/para, ou seja conjunto de tabelas e funções que permitem gravar valores de de/para referente a um determinado produto.


Bloco de código
titleExemplo Logix
collapsetrue
Tabela VDP_DPARA_GERAL

...




   TABELA_

...

DPARA    CHAR(18)

...




   CAMPO_

...

DPARA     CHAR(150)

...




   CARACTER_

...

LOGIX  CHAR(150)

...




   SISTEMA_

...

INTEGR  CHAR(20)

...




   CARACTER_INTEGR CHAR(150)


Este ferramental de de/para que cada produto possui, armazena as informações relativas a si mesmo, ou seja código 50 do sistema externo corresponde ao código 23 da tabela empresa, campo cod_empresa.

...

Por isso, ficou definido que deverá existir para cada campo que possua um InternalId, um nome único entre todos os produtos. Este nome será sempre “Nome da Mensagem”.

Bloco de código
titleExemplo

...

- InternalId para a mensagem City: City.

...




- InternalId para a mensagem CustomerVendor: CustomerVendor.



Informações
titleImportante

Este padrão é válido para o retorno do de/para por parte do aplicativo destino. Nos casos em que é necessário trafegar na mensagem um InternalId que representa uma chave estrangeira, o padrão adotado deve ser Nome da Mensagem + "InternalId", conforme descrito mais adiante.

...

Para permitir que o ferramental do EAI reconheça que estes dois campos pertencem a uma mesma chave estrangeira City, é necessário incluir uma tag de documentação <InternalIdName>, conforme o exemplo abaixo:

Bloco de código
titleExemplo
collapsetrue
<xs:element name="OriginCityInternalId" type="xs:string" minOccurs="0" maxOccurs="1">

...




   <xs:annotation>

...




      <xs:appinfo>

...




         <InternalIdName>CityInternalId</InternalIdName>

...




      </xs:appinfo>

...




     <xs:documentation>InternalId do OriginCityCode</xs:documentation>

...




   </xs:annotation>

...




</xs:element>

...








<xs:element name="DestinationCityInternalId" type="xs:string" minOccurs="0" maxOccurs="1">

...




   <xs:annotation>

...




      <xs:appinfo>

...




         <InternalIdName>CityInternalId</InternalIdName>

...




      </xs:appinfo>

...




      <xs:documentation>InternalId do DestinationCityCode</xs:documentation>

...




   </xs:annotation>

...




</xs:element>


Esta mesma regra vale para quando o campo da chave estrangeira, por qualquer motivo, não tem um nome idêntico ao padrão “Mensagem”+InternalId, não necessariamente precisa existir dois campos com a mesma fonte de informação na mesma mensagem.


Bloco de código
titleExemplo

...

Mensagem Order

...

Mensagem Order


Campos VendorCode e VendorInternalId


Este campo receberá apenas códigos de fornecedor (Vendor), apesar de que a mensagem de origem da chave seja CustomerVendor.

...

Desta forma, o campo VendorInternalId na mensagem deve ter declarado o InternalIdName para o valor CustomerVendorInternalId.


Bloco de código
titleExemplo

...

collapsetrue
<xs:element name="VendorInternalId" type="xs:string" minOccurs="0" maxOccurs="1">

...




   <xs:annotation>

...

      <xs:appinfo>

         <InternalIdName>CustomerVendorInternalId</InternalIdName>

...




      <xs:appinfo>


         <InternalIdName>CustomerVendorInternalId</InternalIdName>


      </xs:appinfo>

...




      <xs:documentation>InternalId do VendorCode</xs:documentation>

...




   </xs:annotation>

...




</xs:element>


O uso do <InternalIdName> somente será necessário nos casos em que o nome do campo da InternalId não respeita exatamente o padrão “Mensagem” + InternalId. Ou seja, se o nome do campo na mensagem for CityInternalId, não é necessário informar o <InternalIdName>.

...

Esta tag deverá estar localizada logo abaixo dos campos da mensagem, que fazem parte da sua composição.


Exemplo:

Bloco de código
titleExemplo



Em XML

...

Bloco de código
titleExemplo
<Code>123</Code>

...




<InternalId>23|123</InternalId>

     

Toda mensagem de evento (quando for UpSert) deverá conter em seu conteúdo de retorno <ReturnContent> campos de InternalId para armazenar a chave interna do gerador do evento e a chave interna gerada no recebedor do evento. A necessidade disso é para que o recebedor da mensagem de evento e o gerador da mensagem de evento tenham conhecimento da chave interna gerada em cada produto. O fluxo abaixo exemplifica este funcionamento, para o cenário de inclusão de um novo Cliente.

...

Desta forma, na tag <ReturnContent> da mensagem as seguintes tags deverão ser criadas:

Bloco de código
titleExemplo

Image Modified



ListOfInternalIdType está definido em um arquivo a parte ../types/ListOfInternalId_1_000.xsd e está estruturado conforme o exemplo abaixo.


Em XML

Bloco de código
titleExemplo



Como este retorno representa a resposta de uma mensagem enviada, deve-se entender a tag <Origin> como a InternalId do produto que enviou a mensagem (a origem), e <Destination> como a InternalId do produto que foi o destino da mensagem.

...

A utilização da InternalId se aplica também para chaves estrangeiras. Porém, neste caso a regra é que para cada Tag que representar uma chave estrangeira também exista uma Tag InternalId correspondente.


Bloco de código
titleExemplo

...

Mensagem Warehouse

Code

Description

Mensagem Item

Code

InternalId

Description

Status

RegisterDate

WarehouseCode

Mensagem Warehouse


Code


Description






Mensagem Item


Code


InternalId


Description


Status


RegisterDate


WarehouseCode


WarehouseInternalId


Assim a InternalId de chave estrangeira terá o mesmo nome da tag normal – Warehouse para WarehouseCode – mas usando o termo InternalId em vez de Code.

...

Em qualquer posição que ocorra (sendo chave primária ou estrangeira), a tag InternalId sempre será uma tag type=”xs:string” sem tamanho definido.


Bloco de código
titleExemplo

...

collapsetrue
<xs:element name="WarehouseInternalId" type="xs:string">

...




   <xs:annotation>

...




      <xs:documentation>InternalId do WarehouseCode</xs:documentation>

...




   </xs:annotation>

...




</xs:element>



Para a chave estrangeira o adapter também deverá dar prioridade em resolver o relacionamento pela InternalId. Ou seja, ao receber uma mensagem de Item (seguindo o exemplo), este deve primeiro consultar no seu ferramental de de/para se existe registro correspondente para o WarehouseInternaId recebido, pois este valor já irá fornecer a chave completa correspondente no produto.

...

Exemplo em pseudocódigo (consulte o manual de cada produto para conhecer as funções reais):

Bloco de código
titleExemplo
Adapter da

...

 mensagem Item



AdapterItem.Get_InternalId(cod_empresa, cod_filial, item)

...




Retorna Empresa + “|” + Filial + “|” + Código

...




Uso: AdapterItem.Get_InternalId(50,10,123456) =

...

  “50|10|123456”

...






AdapterItem.Get_InternalId_Value(InternalId, Campo)

...




Retorna <retorna o valor correspondente a posição de “Campo”>

...




Uso: AdapterItem.Get_InternalId_Value(“50|10|123456”,”cod_empresa”) == “123456”