Introdução

A modelagem de transações procura abarcar os atributos que são mais comuns e que tem aplicação mais abrangente possível. Entretanto, há situações onde é necessário a utilização de um atributo de domínio restrito, que se aplica somente a situações ou clientes em particular.

Nestes casos, com a devida aprovação por parte do comitê de integrações e dos gerentes de desenvolvimento dos produtos envolvidos, é possível customizar uma transação para incluir atributos particulares a uma situação bem definida.

CustomInformation

Os atributos customizados de uma transação são inseridos dentro da tag CustomInformation que, devido sua natureza, é uma tag opcional no XML Schema que define a TOTVSMessage.

Para mensagens em formato JSON, com as devidas adaptações, segue-se a mesma definição.

Localização no XML

Esta tag pode estar inserida na tag BusinessMessage, vindo abaixo da tag BusinessContent, conforme diagrama abaixo:

A tag pode estar presente também dentro da tag ResponseMessage, vindo logo após a tag ReturnContent, conforme diagrama a seguir:

Estrutura da tag

A tag está estruturada segundo o conceito de tabela de um banco de dados. Entretanto, os dados dentro da tag não precisam refletir, necessariamente, uma estrutura de dados existente nos produtos que estão sendo integrados.

Em seu conjunto temos os seguintes elementos:

  • Table: correspondente a uma tabela de banco de dados e é o nível mais superior da estrutura. Deve ocorrer 1 ou mais vezes dentro da tag CustomInformation. Funciona como um agrupador de elementos do tipo Record.
  • Record: correspondente a um registro de uma tabela e pode ocorrer 0 ou mais vezes dentro da tag Table. Atua como um agrupador dos elementos Field.
  • Field: corresponde a um campo de registro e pode ocorrer 1 ou mais vezes dentro da tag Record.

A figura abaixo mostra como os elementos estão inter-relacionados:

Este é o trecho correspondente a definição da tag no arquivo totvsmsg.xsd.

<xs:complexType name="CustomInformationType">
  <xs:sequence>
   	<xs:element name="Table" minOccurs="1" maxOccurs="unbounded">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Record" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Field" minOccurs="1" maxOccurs="unbounded">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
	  </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

Diferenças de representação entre os formatos

Em relação ao formato JSON, há algumas diferenças em relação ao formato XML. Uma delas é a localização do elemento no conjunto total, sendo que no JSON, o atributo CustomInformation, quando informado, deve vir em seguida ao atributo Content.

{
	"Header: {...},
	"Content": {...},
	"CustomInformation": {...}
}

Na tabela abaixo, descreve-se as diferenças de representação:

Elemento no formato XMLEquivalente em JSON
Tag <Table>

Objeto dentro do array CustomInformation. As múltiplas ocorrências de <Table> são mantidas dentro do array CustomInformation.

Atributo name da tag <Table>Atributo Name no objeto correspondente a tag <Table>.
Tag <Record>Objeto dentro do array Records.
Tag <Field>

Objeto dentro do array Fields.

Atributo name da tag <Field>Atributo Name no objeto correspondente a tag <Field>.
Valor da tag <Field>Atributo Value no objeto correspondente a tag <Field>.

Comparando o trecho de CustomInformation no XML com o equivalente em JSON tem-se uma ideia mais clara.

Trecho em XMLTrecho em JSON
<CustomInformation>
      <Table name="labInfo">
        <Record>
          <Field name="quanticMass">120</Field>
          <Field name="fusionMethod">Nuclear</Field>
        </Record>
      </Table>
    </CustomInformation>
"CustomInformation": [{
      "Name": "labInfo",
      "Records": [{
          "Fields": [{
              "Name": "quanticMass",
              "Value": 120
            }, {
              "Name": "fusionMethod",
              "Value": "Nuclear"
            }
          ]
        }]
    }]

Exemplo de utilização

Os exemplos abaixo mostram possibilidades de uso da tag CustomInformation:

Formato XML

Business Message
<?xml version="1.0" encoding="UTF-8"?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="xmlschema/material/events/unitofmeasure_11_1_0.xsd">
  <MessageInformation version="11.1.0">
    <UUID>UnitOfMe-asur-eUps-ertE-vent00000000</UUID>
    <Type>BusinessMessage</Type>
    <Transaction>UnitOfMeasure</Transaction>
    <StandardVersion>1.0</StandardVersion>
    <SourceApplication>TestApplication</SourceApplication>
    <Product name="ExternalApp" version="1.0"/>
    <GeneratedOn>2001-12-31T12:00:00.000-03:00</GeneratedOn>
    <DeliveryType>Sync</DeliveryType>
  </MessageInformation>
  <BusinessMessage>
    <BusinessEvent>
      <Entity>UnitOfMeasure</Entity>
      <Event>upsert</Event>
      <Identification>
        <key name="code">UN</key>
      </Identification>
    </BusinessEvent>
    <BusinessContent>
      <Code>UN</Code>
      <Description>Unidade</Description>
    </BusinessContent>
    <CustomInformation>
      <Table name="labInfo">
        <Record>
          <Field name="quanticMass">120</Field>
          <Field name="fusionMethod">Nuclear</Field>
        </Record>
      </Table>
    </CustomInformation>
  </BusinessMessage>
</TOTVSMessage>

Formato JSON

Business Message
{
  "Header": {
    "UUID": "UnitOfMe-asur-eUps-ertE-vent00000000",
    "Type": "BusinessMessage",
    "SubType": "event",
    "Transaction": "UnitOfMeasure",
    "Version": "11.1.0",
    "ProductName": "ExternalApp"
    "ProductVersion": "1.0",
    "GeneratedOn": "2001-12-31T12:00:00.000-03:00",
    "DeliveryType": "sync"
  },
  "Content": {
    "Code": "UN",
    "Description": "Unidade"
  },
  "CustomInformation": [{
      "Name": "labInfo",
      "Records": [{
          "Fields": [{
              "Name": "quanticMass",
              "Value": 120
            }, {
              "Name": "fusionMethod",
              "Value": "Nuclear"
            }
          ]
        }, {
          "Fields": [{
              "Name": "quanticMass",
              "Value": 150
            }, {
              "Name": "fusionMethod",
              "Value": "Nuclear"
            }]
        }]
    }]
}



Índice

  • Sem rótulos