Definições da Regra de NegócioDefinições Gerais
Estamos propondo a criação de um Identificador Global de Recursos para as entidades trafegadas entre os ERP's da TOTVS afim de substituir o uso de De-Para entre as marcas para identificar recursos"Internal ID" em todas as integrações SOAP e REST.
Pré-requisitos
As marcas deverão atender os seguintes pré-requisitos:
- Devem respeitar a sintaxe de URI descrita na RFC-3986;
- Devem respeitar a sintaxe de URN descrita na RFC-8141;
- Devem respeitar a definição de UUID descrita na RFC-4122;
Termos e Nomenclaturas
- Devem respeitar a definição de JSON descrita na RFC-8259;
Termos e Nomenclaturas
Os termos Os termos "DEVE", "NÃO DEVE", "REQUERIDO", "PODE", "NÃO PODE", "DEVERIA", "NÃO DEVERIA", "RECOMENDADO", "NÃO RECOMENDADO" e "OPCIONAL" devem ser interpretados como descritos na BCP-14, RFC-2119 e RFC-8174.
Definições Gerais
Nossa proposta inicial é de se utilizar UUID's (Universally Unique Identifier), também conhecidos por GUID's (Globally Unique IDentifier), como URN (Uniform Resource Name) de recursos sendo trafegados entre as marcas. Um UUID é composto por 128 bits de informação e não requer um processo de geração centralizado.
Informações |
---|
Recursos podem ser compreendidos como as Entidades que são trafegadas através das mensagens padronizadas a partir do EAI dos ERP's da TOTVS. |
Definições da Regra de Negócio
Em termos gerais, o ERP de onde se origina a entidade a ser trafegada através do EAI (RM, Datasul, Protheus, Logix) irá realizar a geração do UUID v4, que identificará este recurso através de todas as linhas de produtos que compartilhem esta integração.
Iremos adotar o padrão de compatibilidade total com as mensagens atualmente em uso, sendo assim, mesmo que uma mensagem não utilize a estrutura proposta, os EAIs irão processar estas mensagens através do funcionamento legado utilizando o de-para na entidade "InternalId" para identificar o recurso.
Nossa proposta inicial é de se utilizar UUID's (Universally Unique Identifier), também conhecidos por GUID's (Globally Unique IDentifier), como URN (Uniform Resource Name) de entidades sendo trafegadas entre os ERP's da TOTVS.
Informações |
---|
Um UUID é composto por 128 bits de informação e não requer um processo de geração centralizado. |
Uma das principais razões pela escolha do UUID é que, além de sua geração poder ser Uma das principais razões pela escolha do UUID é que, além de sua geração poder ser descentralizada e automatizada, o algoritmo de geração do UUID suporta geração concorrente de até 10 milhões de registros por segundo por máquina, permitindo seu uso até como identificador de transações.
Informações |
---|
Exemplo de uma representação em texto de um UUID como URN: urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 |
Foi escolhida a versão 4 (UUID v4) por se tratar de um algoritmo que utiliza geração de valores randômicos e que não se baseia no MAC Address da máquina que realiza a geração do identificador (UUID v1).
O sistema de onde se origina a informação a ser trafegada através da integração EAI 2.0 (RM, Datasul, Protheus, Logix) irá realizar a geração do UUID v4, que identificará este recurso através de todas as linhas de produtos que compartilhem esta integração.
Funcionamento
Todas as linhas irão adequar seus adapters para enviar o Identificador Global de Recursos através da entidade "InternalId" no conteúdo de uma mensagem padronizada.
Todos os adapters deverão estar preparados para receber o Identificador Global de Recursos e retornar este mesmo identificador nas tags "Origin" e "Destination" do elemento "InternalId" de forma que a migração possa ocorrer de forma gradativa.
Image Added
Estrutura
A especificação atual das mensagens será alterada para discriminar o tipo de identificador de recursos sendo utilizado na mensagem disparada.
Cabeçalho SOAP/XML
/SOAPIremos incluir um atributo "IdentificationTypeglobalType" no elemento nos elementos "MessageInformationInternalId"
Bloco de código |
---|
|
<xs:attribute name="IdentificationType" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="UUID"></xs:enumeration>
<xs:enumeration value="INTERNALID"></xs:enumeration>
<xs:enumeration value="internalid"></xs:enumeration>
<xs:enumeration value="uuid"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute> |
Bloco de código |
---|
|
<xs:element name="MessageInformation" type="MessageInformationType" /> |
Bloco de código |
---|
|
<xs:complexType name="MessageInformationType">
<xs:annotation>
<xs:documentation>
Bloco com informações sobre a origem da mensagem.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="UUID" type="UUIDType" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Define um identificador universal para esta
mensagem. Duas mensagens não podem ter o mesmo
UUID e este valor permanece sempre o mesmo, seja
no aplicativo que gera a mensagem, seja no que
recebe.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Type" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica o tipo de mensagem: a. Business
Message: Mensagem “real”, sobre um evento
ocorrido (quando for de saída) ou de atualização
do produto (quando entrada). Pode ser de dois
subtipos (ver atributos da tag BusinessMessage):
i. Transaction: Mensagem utilizada para fins de
replicação de dados que contém um evento
ocorrido no sistema (upsert ou delete). Se
recebido, resulta na execução da operação sobre
na base de dados. Se Enviado, significa que o
sistema de origem está notificando esta
operação. Transactions refletem a atividade de
uma aplicação (CrUD) tendem a ser utilizadas de
forma assíncrona. ii. Request: Mensagem
utilizada para solicitar a execução de um
procedimento. Este procedimento pode ser uma
consulta (getOrders, countCustomers), cálculo
(calculateTaxes) ou atualização do banco de
dados (updateAverageCost). Requests promovem o
compartilhamento de serviços e tendem a ser
utilizados de forma síncrona. b. Receipt: Quando
a mensagem for recebida de forma assíncrona, o
produto devolve um recibo com status de
recebimento e com o UUID de rastreabilidade da
mensagem dentro do produto que recebeu c.
Response: Mensagem retornada pelo processamento
da Business Message. Pode trazer apenas o status
(OK ou não), a lista de erros (se houver) ou
informações relevantes (como número de pedido
gerado, por exemplo). Pode ser devolvida na
chamada de uma business message (quando
síncrono) ou enviada de forma assíncrona.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="BusinessMessage"></xs:enumeration>
<xs:enumeration value="Response"></xs:enumeration>
<xs:enumeration value="Receipt"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Transaction" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica o nome da transação que esta mensagem
contém. Exemplo: Branch.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"></xs:whiteSpace>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ContextName" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Campo opcional que identifica o(s) contexto(s) associado(s)
a transação. O contexto pode ser o módulo que gerou a
mensagem, pode identificar a integração entre aplicativos,
enfim, pode ser qualquer informação que permita delimitar
a mensagem, de modo a orientar o roteamento da mensagem
ou o recebimento.
Exemplos: Financeiro, Datasul CRM, Manufatura, APS-Logix, etc.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StandardVersion" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d+.\d+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SourceApplication" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica, dentre os aplicativos integrados,
qual instância gerou a mensagem.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"></xs:whiteSpace>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CompanyId" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Representa o id da empresa do usuário que enviou a mensagem.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="BranchId" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa o id do estabelecimento do usuário que enviou a mensagem.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="UserId" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa o id do usuário que enviou a mensagem. </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Enterprise" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa, para o Protheus, o valor da empresa no sistema </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="BusinessUnit" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa, para o Protheus, o valor da unidade de negócios </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="CompanySharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Empresa. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="BusinessUnitySharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Unidade de Negócio. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="BranchSharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Filial. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Product" maxOccurs="1" minOccurs="1">
<xs:annotation>
<xs:documentation>
Define qual o produto que originou esta
mensagem. Não confundir o produto com a
instância (atributo de TOTVSMessage).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
Nome do Produto.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="version" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>
Versão do Produto
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="GeneratedOn" type="xs:dateTime" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Registra a data e hora em que a mensagem foi
gerada. Observe que este campo é do tipo
datetime e que é sugerido que se acrescente a
identificação do fuso horário. Caso a informação
de fuso não esteja presente, os sistemas
entenderão o horário como GMT-0.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="DeliveryType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Forma de entrega da mensagem que foi gerada. Será definida por quem entrega a mensagem.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Sync"></xs:enumeration>
<xs:enumeration value="Async"></xs:enumeration>
<xs:enumeration value="sync"></xs:enumeration>
<xs:enumeration value="async"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="version" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d+.\d+.\d+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType> |
Proposta de alteração para o Identificador Global de Recursos
do conteúdo da mensagem padronizada
Bloco de código |
---|
|
<xs:attribute name="globalType" type="xs:string" use="optional">
<xs:restriction base="xs:string">
<xs:enumeration value="UUID"></xs:enumeration> |
Bloco de código |
---|
|
<xs:complexType name="MessageInformationType">
<xs:annotation>
<xs:documentation>
Bloco com informações sobre a origem da mensagem.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="UUID" type="UUIDType" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Define um identificador universal para esta
mensagem. Duas mensagens não podem ter o mesmo
UUID e este valor permanece sempre o mesmo, seja
no aplicativo que gera a mensagem, seja no que
recebe.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Type" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica o tipo de mensagem: a. Business
Message: Mensagem “real”, sobre um evento
ocorrido (quando for de saída) ou de atualização
do produto (quando entrada). Pode ser de dois
subtipos (ver atributos da tag BusinessMessage):
i. Transaction: Mensagem utilizada para fins de
replicação de dados que contém um evento
ocorrido no sistema (upsert ou delete). Se
recebido, resulta na execução da operação sobre
na base de dados. Se Enviado, significa que o
sistema de origem está notificando esta
operação. Transactions refletem a atividade de
uma aplicação (CrUD) tendem a ser utilizadas de
forma assíncrona. ii. Request: Mensagem
utilizada para solicitar a execução de um
procedimento. Este procedimento pode ser uma
consulta (getOrders, countCustomers), cálculo
(calculateTaxes) ou atualização do banco de
dados (updateAverageCost). Requests promovem o
compartilhamento de serviços e tendem a ser
utilizados de forma síncrona. b. Receipt: Quando
a mensagem for recebida de forma assíncrona, o
produto devolve um recibo com status de
recebimento e com o UUID de rastreabilidade da
mensagem dentro do produto que recebeu c.
Response: Mensagem retornada pelo processamento
da Business Message. Pode trazer apenas o status
(OK ou não), a lista de erros (se houver) ou
informações relevantes (como número de pedido
gerado, por exemplo). Pode ser devolvida na
chamada de uma business message (quando
síncrono) ou enviada de forma assíncrona.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="BusinessMessage"></xs:enumeration>
<xs:enumeration value="Response"></xs:enumeration>
<xs:enumeration value="Receipt"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Transaction" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica o nome da transação que esta mensagem
contém. Exemplo: Branch.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"></xs:whiteSpace>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ContextName" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Campo opcional que identifica o(s) contexto(s) associado(s)
a transação. O contexto pode ser o módulo que gerou a
mensagem, pode identificar a integração entre aplicativos,
enfim, pode ser qualquer informação que permita delimitar
a mensagem, de modo a orientar o roteamento da mensagem
ou o recebimento.
Exemplos: Financeiro, Datasul CRM, Manufatura, APS-Logix, etc.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StandardVersion" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d+.\d+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SourceApplication" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Identifica, dentre os aplicativos integrados,
qual instância gerou a mensagem.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"></xs:whiteSpace>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CompanyId" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Representa o id da empresa do usuário que enviou a mensagem.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="BranchId" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa o id do estabelecimento do usuário que enviou a mensagem.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="UserId" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa o id do usuário que enviou a mensagem. </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Enterprise" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa, para o Protheus, o valor da empresa no sistema </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="BusinessUnit" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Representa, para o Protheus, o valor da unidade de negócios </xs:documentation>
</xs:annotation></xs:element>
<xs:element name="CompanySharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Empresa. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="BusinessUnitySharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Unidade de Negócio. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="BranchSharingMode" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Indica o modo de compartilhamento no nível da Filial. C para Compartilhada e E para Exclusiva.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"></xs:enumeration>
<xs:enumeration value="E"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Product" maxOccurs="1" minOccurs="1">
<xs:annotation>
<xs:documentation>
Define qual o produto que originou esta
mensagem. Não confundir o produto com a
instância (atributo de TOTVSMessage).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
Nome do Produto.
<xs:enumeration value="uuid"></xs:enumeration>
</xs:restriction>
</xs:attribute> |
Especificação do elemento "InternalId"
Bloco de código |
---|
|
<xs:element name="InternalId" type="xs:string" minOccurs="0" maxOccurs="1">
</xs:documentation><xs:complexType>
<xs:attribute name="globalType" type="xs:string" use="optional">
</<xs:restriction base="xs:annotation>string">
<<xs:enumeration value="UUID"></xs:attribute>enumeration>
<xs:attribute name="version" type="xs:string" use="optional">enumeration value="uuid"></xs:enumeration>
</xs:restriction>
</xs:attribute>
<xs</xs:complexType>
</xs:element> |
Especificação do elemento "ListOfInternalId"
Bloco de código |
---|
|
annotation>
<xs:complexType name="ListOfInternalIdType">
<xs:sequence>
<xs:documentation>
element name="InternalId" type="InternalIdType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="InternalIdType">
<xs:attribute name="globalType" Versão do Produto
type="xs:string" use="optional">
<xs:restriction base="xs:string">
<<xs:enumeration value="UUID"></xs:documentation>enumeration>
<<xs:enumeration value="uuid"></xs:annotation>
enumeration>
</xs:attribute>
restriction>
</xs:complexType>attribute>
</xs:element>
<xs:sequence>
<xs:element name="GeneratedOnName" type="xs:dateTimestring" minOccurs="10" maxOccurs="1">
<xs:annotation>
<xs:documentation>
RegistraNome ada dataInternalId, eeste horanome emserá quepadronizado acomo mensagem foi
gerada. Observe que este campo é do tipoo nome
datetime e que é sugerido que se acrescente a
identificação do fuso horário. Caso a informação
esta internalId teria como chave extrangeira de uma mensagem.
de fuso não esteja presente, os sistemas
Exemplo:
entenderão o horário como GMT-0.
Para entidade Item: ItemInternalId
</xs:documentation>
</xs:annotation>
</xs:element>
City: CityInternalId
<xs:element name="DeliveryType" minOccurs="0" maxOccurs="1">
<xs:annotation>
CustomerVendor: CustomerVendorInternalId
<xs:documentation>Forma de entrega da mensagem que foi gerada. Será definida por quem entrega a mensagem.</xs:documentation>
</xs:annotation>
<xs:simpleType></xs:element>
<xs:restriction baseelement name="Origin" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:enumeration value="Sync"></xs:enumeration><xs:annotation>
<xs:enumeration value="Async"><documentation>InternalId da origem</xs:enumeration>
documentation>
<xs:enumeration value="sync"><</xs:enumeration>annotation>
</xs:element>
<xs:enumerationelement valuename="Destination"async type="></xs:enumeration> string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>InternalId do <destino</xs:restriction>documentation>
</xs:simpleType>annotation>
</xs:element>
</xs:sequence>
</xs:complexType> |
Exemplos
Utilização da entidade "InternalId" em mensagens padronizadas para identificar recursos globais
Bloco de código |
---|
|
<xs:attribute name="version" use="required">
<xs:simpleType><BusinessContent>
<xs:restriction base="xs:string"><InternalId globalType="uuid">f81d4fae-7dec-11d0-a765-00a0c91e6bf6</InternalId>
<OrderPurpose>1</OrderPurpose>
<xs:pattern value="\d+.\d+.\d+"></xs:pattern>
<CompanyId>4</CompanyId>
</xs:restriction><CompanyInternalId globalType="uuid">19dfb9b3-901c-48ce-9954-2cb147ec4fe8</CompanyInternalId>
</xs:simpleType>
</xs:attribute>
<BranchId>1</BranchId>
<CustomerOrderId>4|</CustomerOrderId>
<xs:attribute name="IdentificationType" use="required"> <RegisterDate></RegisterDate>
<xs:simpleType><PaymentTermCode>4|001</PaymentTermCode>
<OrderId>5652</OrderId>
<xs:restriction base="xs:string">
<UserInternalId>mestre</UserInternalId>
<xs:enumeration value="UUID"></xs:enumeration>
<PaymenTermCode></PaymenTermCode>
<CurrencyCode></CurrencyCode>
<xs:enumeration value="INTERNALID"></xs:enumeration>
<CurrencyId></CurrencyId>
<Observation></Observation>
<xs:enumeration value="internalid"></xs:enumeration>
<ListOfCreditDocument></ListOfCreditDocument>
<DeliveryAddress>
<xs:enumeration value="uuid"></xs:enumeration> <City></City>
</xs:restriction><State>
</xs:simpleType>
<<StateCode></xs:attribute>StateCode>
</xs:complexType> |
Cabeçalho JSON/REST
Iremos incluir um atributo "IdentificationType" no 'Header' da mensagem
Bloco de código |
---|
|
{ "IdentificationType" : "string" } |
Bloco de código |
---|
|
{ <StateInternalId></StateInternalId>
"Header" : {
"UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
</State>
"Type" : "BusinessMessage",
</DeliveryAddress>
"SubType" : "event",<Discounts>
"Transaction" : "CostCenter", <Discount>0</Discount>
"Version" : "2.000", </Discounts>
"SourceApplication": "P1299",
<SalesOrderItens>
"ProductName" : "PROTHEUS",
"ProductVersion" : "12.1.17", <Item>
"CompanyId" : "99",
"BranchId" : "01", <OrderItem>1</OrderItem>
"GeneratedOn" : "2017-11-14T11:47:00-03:00",
"DeliveryType" : "async"
}
} |
Proposta de alteração para o Identificador Global de Recursos
Bloco de código |
---|
|
{
<CompanyId>4</CompanyId>
"Header" : {
"UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b", <BranchId></BranchId>
"Type" : "BusinessMessage",
"SubType" : "event", <OrderId>5652</OrderId>
"Transaction" : "CostCenter",
"Version" : "2.000",
<itemunitofmeasure></itemunitofmeasure>
"SourceApplication": "P1299",
"ProductName" :<InternalId globalType="PROTHEUS",uuid">95a81989-e487-4012-b8e2-b5ae97d3e078</InternalId>
"ProductVersion" : "12.1.17",
"CompanyId" : "99", <ItemCode></ItemCode>
"BranchId" : "01",
"GeneratedOn" :<ItemInternalId "2017-11-14T11:47:00-03:00",globalType="uuid">7371ec73-3062-476d-93cf-251560d130da</ItemInternalId>
"DeliveryType" : "async",
"IdentificationType" : "uuid" <CostCenter>4|</CostCenter>
}
} |
Compatibilização com versões legadas
Bloco de código |
---|
|
{
"Header" : {
"UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b", <UnityPrice></UnityPrice>
"Type" : "BusinessMessage",
"SubType" : "event", <TotalPrice></TotalPrice>
"Transaction" : "CostCenter",
"Version" : "2.000", <Quantity></Quantity>
"SourceApplication": "P1299",
"ProductName" : "PROTHEUS",
<Observation></Observation>
"ProductVersion" : "12.1.17",
"CompanyId" :<UnitOfMeasureInternalId globalType="99",uuid">5eeba464-3748-41a6-a5f7-1cff2ca69aeb</UnitOfMeasureInternalId>
"BranchId" : "01",
"GeneratedOn" :<WarehouseInternalId "2017-11-14T11:47:00-03:00",globalType="uuid">c3507b85-a799-42b0-8e71-07cf886ec781</WarehouseInternalId>
"DeliveryType" : "async",
"IdentificationType" : "internalid"
}
} |
Proposta 1
Todas as linhas irão adequar seus adapters para enviar o identificador global de recurso através da entidade "InternalId".
Conteúdo XML/SOAP
Especificação da entidade "InternalId"
Bloco de código |
---|
|
<xs:element name="InternalId" type="xs:string" maxOccurs="1" minOccurs="0">
<xs:annotation>
<FreightValue></FreightValue>
<xs:documentation>InternalId da entidade<<ListOfApportionOrderItem></xs:documentation>
ListOfApportionOrderItem>
</xs:annotation>
</xs:element> |
Proposta de alteração para o Identificador Global de Recursos
Bloco de código |
---|
|
<xs:element name="InternalId" type="UUIDType" minOccurs="1" maxOccurs="1">
<xs:annotation>
<ItemDiscounts>
<ItemDiscount></ItemDiscount>
</ItemDiscounts>
<xs:documentation>
</Item>
Define um identificador universal para este</SalesOrderItens>
</BusinessContent> |
Utilização da entidade "ListOfInternalId" em mensagens padronizadas para identificar recursos globais
Bloco de código |
---|
|
<TOTVSMessage>
<MessageInformation version="1.000">
recurso. Todas as mensagens que enviem um mesmo <UUID>6403aa6a-700d-a535-c567-8ea0be5c9142</UUID>
<Type>Response</Type>
<Transaction>CONTRACT</Transaction>
<StandardVersion>1.000</StandardVersion>
recurso terão o mesmo UUID e este valor permanece<SourceApplication>PADRAO_EAI2</SourceApplication>
<CompanyId>01</CompanyId>
<BranchId>1U</BranchId>
<Product name="PROTHEUS" version="12"></Product>
<GeneratedOn>2018-01-08T16:53:45</GeneratedOn>
sempre o mesmo, seja no aplicativo que gera a <DeliveryType>Sync</DeliveryType>
</MessageInformation>
<ResponseMessage>
<ReceivedMessage>
<SentBy>RM</SentBy>
mensagem, seja no que recebe. <UUID>bf920a68-8263-4e1a-8076-2084a55e69d2</UUID>
<Event>Upsert</Event>
</xs:documentation>
</xs:annotation>
</xs:element> |
Especificação do tipo 'UUIDType'
Bloco de código |
---|
|
<xs:simpleType name="UUIDType"><MessageContent><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<TOTVSMessage>
<xs:restriction<MessageInformation baseversion="xs:string1.000">
<xs:pattern value="\w{8}-\w{4}-\w{4}-\w{4}-\w{12}"></xs:pattern>
<UUID>bf920a68-8263-4e1a-8076-2084a55e69d2</UUID>
</xs:restriction>
</xs:simpleType> |
Conteúdo JSON/REST
Especificação da entidade "InternalId"
Bloco de código |
---|
|
{ "InternalId" : "string" } |
Utilização da entidade "InternalId" em mensagens
Bloco de código |
---|
|
{
"Content" : {
<Type>BusinessMessage</Type>
<Transaction>CONTRACT</Transaction>
<StandardVersion>1.000</StandardVersion>
"CompanyId" : "99",
<SourceApplication>RM</SourceApplication>
"BranchId" : "01",
<CompanyId>1</CompanyId>
"CompanyInternalId" : "99", <BranchId>1</BranchId>
<Product name="CodeRM" : "ABC001",version="12.1.17.0" />
"InternalId" : "99|ABC001",
<GeneratedOn>2018-01-08T18:53:40</GeneratedOn>
<DeliveryType>Sync</DeliveryType>
"RegisterSituation" : "Active",
</MessageInformation>
<BusinessMessage>
"Name" : "Centro de<BusinessEvent>
Custo ABC001",
"ShortCode" : "ABC001", <Entity>CONTRACT</Entity>
"SPED" : true,
<Event>Upsert</Event>
</BusinessEvent>
"Class" : 2
}
} |
Proposta de alteração para o Identificador Global de Recursos
Bloco de código |
---|
|
{
<BusinessContent>
"Content" : {
<RMENTITYNAME>MCNT</RMENTITYNAME>
"CompanyId" : "99",
<InternalId globalType="BranchId" : "01",uuid">f555297a-951f-415d-8672-4a08f2251d40</InternalId>
"CompanyInternalId" : "99",
<CompanyId>1</CompanyId>
"Code" : "ABC001",
<ProjectInternalId "InternalId" : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6",globalType="uuid">a82462a7-481b-4839-b525-272184f86cb6</ProjectInternalId>
"RegisterSituation" : "Active", <ContractNumber>333333</ContractNumber>
"Name" : "Centro de Custo ABC001",
</BusinessContent>
</BusinessMessage>
</TOTVSMessage>
]]></MessageContent>
</ReceivedMessage>
<ProcessingInformation>
"ShortCode" : "ABC001", <ProcessedOn>2018-01-08T16:53:45</ProcessedOn>
<Status>ok</Status>
"SPED" : true,</ProcessingInformation>
<ReturnContent>
"Class" : 2<ListOfInternalId>
}
} |
Proposta 2
Todas as linhas irão adequar seus adapters para enviar o identificador global de recurso através da entidade "UUID".
Conteúdo XML/SOAP
Especificação da entidade "UUID"
Bloco de código |
---|
|
<xs:element name="UUID" type="UUIDType" minOccurs="1" maxOccurs="1 <InternalId globalType="uuid">
<xs:annotation> <Name>Contract</Name>
<xs:documentation>
<Origin>f555297a-951f-415d-8672-4a08f2251d40</Origin>
<Destination>f555297a-951f-415d-8672-4a08f2251d40</Destination>
Define um identificador universal para este</InternalId>
</ListOfInternalId>
recurso. Todas as mensagens que enviem um mesmo</ReturnContent>
</ResponseMessage>
</TOTVSMessage> |
REST/JSON
Iremos incluir a propriedade "uuid" no elemento "InternalId" da mensagem padronizada para representar uma mensagem trafegando um identificador global
Bloco de código |
---|
|
{
"uuid": {
"type": "string"
}
} |
Especificação do elemento "InternalId"
Bloco de código |
---|
|
{
"InternalId": {recurso terão o mesmo UUID e este valor permanece
"type": ["object", "string"]
sempre o mesmo, seja no aplicativo que gera a
"properties": {
mensagem, seja no que recebe.
"uuid": {
</xs:documentation>
</xs:annotation>
</xs:element> |
Especificação do tipo 'UUIDType'
Bloco de código |
---|
|
<xs:simpleType name="UUIDType">"type": "string"
<xs:restriction base="xs:string">
}
<xs:pattern value="\w{8}-\w{4}-\w{4}-\w{4}-\w{12}"></xs:pattern> }
</xs:restriction>
</xs:simpleType> |
Conteúdo JSON/REST
Especificação Exemplos
Utilização da entidade "
UUID" Bloco de código |
---|
|
{ "UUID" : "string" } |
Proposta de alteração para o Identificador Global de RecursosInternalId" em mensagens padronizadas para identificar recursos globais
Bloco de código |
---|
|
{
"Content" : {
"UUID" : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
"CompanyId" : "99",
"BranchId" : "01",
"CompanyInternalId" : "99",
"Code" : "ABC001",
"InternalId" : {"uuid": "99|ABC001"f81d4fae-7dec-11d0-a765-00a0c91e6bf6"},
"RegisterSituation" : "Active",
"Name" : "Centro de Custo ABC001",
"ShortCode" : "ABC001",
"SPED" : true,
"Class" : 2
}
} |