Páginas filhas
  • ER_FRWJOI01_87_exposicao_servicos_logix_whois

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin

Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.

Informações Gerais

Especificação

Produto

Logix

Módulo

Foundation

Segmento Executor

Tecnologia

Projeto

FRWJOI01

Requisito

FRWJOI01-87

Sub tarefa

FRWJOI01-113

País

(X) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro ______________.

Objetivo

Atualizar a transação WhoIs, que disponibiliza a consulta das transações disponíveis no aplicativo hospedeiro do EAI, possibilitando consultar também os serviços expostos pelo Logix para utilização via Mensageria TOTVS (objetos de negócio).

 

Definição da Regra de Negócio

A transação WhoIs encontra-se atualmente na versão 1.000 permitindo que o mesmo retorne apenas as informações das transações que fazem parte da implementação de Mensagem Única. Para possibilitar que o mesmo retorna também as transações da implementação de Mensageria TOTVS, será necessário atualizá-lo criando assim a versão 1.001.

A versão 1.001 da transação WhoIs requer uma nova informação no corpo da mensagem, será incluído o elemento <RequestType> com o atributo BusinessObjectOnly, de tipo booleano, dentro do <BusinessContent> da mensagem. O novo ADAPTER poderá ser gerado pela da ferramenta EAI0032 através do XSD exemplificado abaixo:

Bloco de código
languagexml
titleWhoIs versão 1.001
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="../totvsmsg.xsd"/>
    <xs:complexType name="BusinessContentType">
        <xs:sequence>
            <xs:element name="RequestType" minOccurs="0">
                <xs:complexType>
                    <xs:attribute name="BusinessObjectOnly" default="false">
                        <xs:simpleType>
                            <xs:restriction base="xs:boolean"/>
                        </xs:simpleType>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ReturnContentType">
        <xs:sequence>
            <xs:element name="EnabledTransactions" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Transaction" minOccurs="1" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:all>
                                    <xs:element name="Name" minOccurs="1" type="xs:string"/>
                                    <xs:element name="BusinessObject" type="xs:string" minOccurs="0"/>
                                    <xs:element name="Version" type="xs:string" minOccurs="0"/>
                                    <xs:element name="Mode" minOccurs="0">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                                <xs:enumeration value="SEND_ENABLED"/>
                                                <xs:enumeration value="RECEIVE_ENABLED"/>
                                                <xs:enumeration value="BOTH_ENABLED"/>
                                                <xs:enumeration value="send_enabled"/>
                                                <xs:enumeration value="receive_enabled"/>
                                                <xs:enumeration value="both_enabled"/>
                                            </xs:restriction>
                                        </xs:simpleType>
                                    </xs:element>
                                </xs:all>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="BusinessContent" type="BusinessContentType" substitutionGroup="AbstractBusinessContent"/>
    <xs:element name="ReturnContent" type="ReturnContentType" substitutionGroup="AbstractReturnContent"/>
</xs:schema>

 

 

 

 

A ferramenta de publicação será responsável por ler o conteúdo do código fonte da API e gerar a estrutura de todos os métodos públicos encontrados e seus respectivos parâmetros de entrada e saída. Após gerada a estrutura no formato JSON, a ferramenta deve disponibilizar um meio do desenvolvedor copiá-la para o código fonte informado, a API ficará disponível publicamente para execução apenas após a compilação do código fonte no RPO com a estrutura copiada.

O serviço GetSchema será responsável por retornar a estrutura das APIs públicas, este fará parte da nova arquitetura de integração EAI, a qual está sendo denominada Mensageria TOTVS e que visa, entre outras coisas, definir os responsáveis de uma integração e reduzir o custo total de suporte em situações de inconsistências. O GetSchema será desenvolvido utilizando uma transação do tipo Mensagem Única TOTVS utilizando o a estrutura do XSD disponível neste link.

O fluxo abaixo demonstra como o serviço GetSchema será utilizado no contexto das integrações:

No lado Logix, que no fluxo acima é representado como ERP, será desenvolvido um adapter seguindo os padrões de Mensagem Única TOTVS, o qual utilizará a classe Helper gerada a partir do XSD da transação GetSchema versão 1.000. O adapter, de nome EAIAdapterGetSchema, receberá o XML com o nome do objeto de negócio e a resposta será um XML com o XSD da estrutura contendo os parâmetros de entrada e saída do objeto solicitado.

Informações
titleHelpers e Adapters

A geração do XSD se dará a partir da conversão da execução da função responsável por retornar a estrutura em JSON gerada através da ferramenta de publicação de API (item 2.Funcionamento deste documento).

 

3.1 Mensagem de Envio

Segue abaixo um exemplo do XML que deverá ser enviado pelo aplicativo que deseja obter o XSD de determinado objeto de negócio, seguindo o padrão definido para uma mensagem do tipo BusinessMessage.

Bloco de código
languagexml
titleGetSchemaIn
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:noNamespaceSchemaLocation="../../../xmlschema/general/requests/getSchema_1_000.xsd">
    <MessageInformation version="1.000">    
        <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
        <Type>BusinessMessage</Type>
        <Transaction>GetSchema</Transaction>
        <StandardVersion>1.000</StandardVersion>
        <SourceApplication>SoapUI</SourceApplication>
        <Product name="SoapUI" version="5.2.1"/>
        <GeneratedOn>2016-01-01T00:00:00.000-00:00</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
    </MessageInformation>
    <BusinessMessage>
        <BusinessRequest>
            <Operation>GetSchema</Operation>
        </BusinessRequest>
        <BusinessContent>
            <Adapter>Logix/logr2.logr2_pub_create_companies</Adapter>
        </BusinessContent>
    </BusinessMessage>
</TOTVSMessage>

Observe na mensagem acima que no elemento <Adapter> o nome do objeto de negócio deve vir precedido do nome do produto (Logix) e do nome da API (logr2) sempre que for realizada a requisição do XSD.

 

3.2 Mensagem de Reposta

Segue abaixo um exemplo do XML de retorno, o qual segue o padrão definido para uma mensagem do tipo ResponseMessage.

RotinaTipo de OperaçãoOpção de Menu
EAI10002Modificação

Administração Logix > Controle Geral > Cadastros > EAI > Console EAI

EAI10002 Transações

As transações retornadas pelo WhoIs devem ser previamente cadastradas a partir do programa EAI10000 na opção "TOTVS > Configuração > Aplicativo Hospedeiro". Portanto será necessário alterar este programa para que, além de buscar no repositório de objetos do Logix (RPO) as transações de mensagem única, busquem também as transações da mensageria TOTVS.

O programa deverá fazer distinção em tela das transações pertencentes a mensageria TOTVS, sendo que o nome das transações será o nome da API combinado com "." (ponto) mais o nome da função do objeto de negócio. Por exemplo para a API logr2, onde existem as funções logr2_pub_create_companies e logr2_pub_delete_companies, as duas novas transações serao criadas conforme a tabela abaixo:

APIFunçãoTransação
logr2logr2_pub_create_companieslogr2.logr2_pub_create_companies
logr2logr2_pub_delete_companieslogr2.logr2_pub_delete_companies

Além da diferença acima, a tela deve exibir de forma mais clara para o usuário quais são as transações de mensagens únicas e quais são as da mensageria TOTVS através de um indicador visível em tela, conforme mostra o protótipo de tela #1.

Transação WhoIs

A transação WhoIs encontra-se atualmente na versão 1.000 permitindo que o mesmo retorne apenas as informações das transações que fazem parte da implementação de Mensagem Única. Para possibilitar que o mesmo retorne também as transações da implementação de Mensageria TOTVS, será necessário atualizá-lo criando assim a versão 1.001.

A versão 1.001 da transação WhoIs requer uma nova informação no corpo da mensagem, será incluído o elemento <RequestType> com o atributo BusinessObjectOnly, de tipo booleano, dentro do <BusinessContent> da mensagem. O novo adapter poderá ser gerado pela ferramenta EAI0032 através do XSD exemplificado abaixo:

Bloco de código
languagexml
titleWhoIs (1.001)
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="../totvsmsg.xsd"/>
    <xs:complexType name="BusinessContentType">
        <xs:sequence>
Bloco de código
languagexml
titleGetSchemaOut
linenumberstrue
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TOTVSMessage>
    <MessageInformation version="1.000">
        <UUID>66567771-f4b2-77f7-94f6-9dd1c22c3dbf</UUID>
        <Type>Response</Type>
        <Transaction>GetSchema</Transaction>
        <StandardVersion>1.000</StandardVersion>
        <SourceApplication>SoapUI</SourceApplication>
        <BranchId/>
        <Product name="SoapUI" version="5.1.2"/>
        <GeneratedOn>2016-00-00T00:00:00</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
    </MessageInformation>
    <ResponseMessage>
        <ReceivedMessage>
            <SentBy>SoapUI</SentBy>
            <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
            <MessageContent>
                <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
                <TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                              xsi:noNamespaceSchemaLocation="../../../xmlschema/general/requests/getSchema_1_000.xsd">
                    <MessageInformation version="1.000">    
                        <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
                        <Type>BusinessMessage</Type>
                        <Transaction>GetSchema</Transaction>
                        <StandardVersion>1.000</StandardVersion>
                        <SourceApplication>SoapUI</SourceApplication>
                        <Product name="SoapUI" version="5.1.2"/>
                        <GeneratedOn>2016-00-00T00:00:00</GeneratedOn>
                        <DeliveryType>sync</DeliveryType>
                    </MessageInformation>
                    <BusinessMessage>
                        <BusinessRequest>
                            <Operation>GetSchema</Operation>
                        </BusinessRequest>
                        <BusinessContent>
                            <Adapter>Logix/logr2.logr2_pub_create_companies</Adapter>
                        </BusinessContent>
                    </BusinessMessage>
                </TOTVSMessage>]]>
            </MessageContent>
        </ReceivedMessage>
        <ProcessingInformation>
            <ProcessedOn>2016-00-00T00:00:00</ProcessedOn>
            <Status>ok</Status>
        </ProcessingInformation>
        <ReturnContent>
            <XSD>
                <Adapter>logr2_pub_create_companies</Adapter>
                <Schema>
                    <![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
                        <xs:element name="logr2_pub_create_companies">
                            <xs:complexType>
                                <xs:choice>
                                    <xs:element name="input" minOccurs="1" maxOccurs="1">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name="lr_empresa" type="lr_empresa" minOccurs="1" maxOccurs="1" />
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                    <xs:element name="output" minOccurs="1" maxOccurs="1">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name="lr_return" type="lr_return"/>
                                            </xs:sequence>
                                        </xs:complexType>
                         <xs:element           </xs:element>
  name="RequestType" minOccurs="0">
                <xs:complexType>
              </xs:choice>
      <xs:attribute name="BusinessObjectOnly" default="false">
                        <xs:attribute name="api" type="xs:string" fixed="logr2"/>
simpleType>
                              </xs:complexType><xs:restriction base="xs:boolean"/>
                        </xs:element>
simpleType>
                    </xs:attribute>
       <xs:complexType name="lr_empresa">
        </xs:complexType>
            </xs:element>
        <xs</xs:sequence>
    </xs:complexType>
    <xs:complexType name="ReturnContentType">
        <xs:sequence>
               <xs:element name="cod_empresaEnabledTransactions" minOccurs="0" typemaxOccurs="xs:string1"/>
                <xs:complexType>
                  <xs:element name="den_empresa" type="xs:string"/>
  <xs:sequence>
                               <xs:element name="den_reduzTransaction" minOccurs="1" typemaxOccurs="xs:stringunbounded"/>
                                <xs:element name="end_empresa" type="xs:string"/> <xs:complexType>
                                <xs:element name="den_bairro" type="xs:string"/>
all>
                                    <xs:element name="den_municName" minOccurs="1" type="xs:string"/>
                                    <xs:element name="uni_federBusinessObject" type="xs:string"/>
 minOccurs="0"/>
                                    <xs:element name="ins_estadualVersion" type="xs:string" minOccurs="0"/>
                                    <xs:element name="num_cgcMode" typeminOccurs="xs:string0"/>
                                        <xs:element name="num_caixa_postal" type="xs:string"/>
simpleType>
                                            <xs:elementrestriction namebase="cod_cep" type="xs:string"/>
                                <xs:element name="num_telefone" type="xs:string"/>
                    <xs:enumeration value="SEND_ENABLED"/>
            <xs:element name="num_telex" type="xs:string"/>
                                   <xs:elementenumeration namevalue="num_fax" type="xs:string"RECEIVE_ENABLED"/>
                                <xs:element name="end_telegraf" type="xs:string"/>
                   <xs:enumeration value="BOTH_ENABLED"/>
            <xs:element name="num_reg_junta" type="xs:string"/>
                                    <xs:elementenumeration namevalue="datsend_inclu_junta" type="xs:date"enabled"/>
                                                <xs:elementenumeration namevalue="iesreceive_filial" type="xs:string"/>
  enabled"/>
                              <xs:element name="dat_fundacao" type="xs:date"/>
                <xs:enumeration value="both_enabled"/>
               <xs:element name="cod_cliente" type="xs:string"/>
                            </xs:sequence>restriction>
                        </xs:complexType>
                </xs:simpleType>
        <xs:complexType name="lr_return">
                            <xs:sequence></xs:element>
                                <xs:element name="status" type="xs:integer"/></xs:all>
                                <xs:element name="retmsg" type="xs:string"/>
    </xs:complexType>
                        </xs:sequence>element>
                        </xs:complexType>sequence>
                    </xs:schema>]]>complexType>
                </Schema>xs:element>
        </xs:sequence>
    </XSD>xs:complexType>
    <xs:element name="BusinessContent"   </ReturnContent>
    </ResponseMessage>
</TOTVSMessage>

No elemento <ReturnContent> encontra-se o elemento <XSD> e logo abaixo encontram-se os elementos <Adapter> e <Schema>, no qual se encontra o conteúdo do XSD correspondente com a estrutura do objeto de negócio e seus respectivos parâmetros de entrada e saída. O XSD gerado terá dois grupos de parâmetros, sendo um para os de entrada (representado pelo elemento <input>) e outro para os de saída (representado pelo elemento <output>).

4. Considerações Finais

A transação GetSchema, assim como a transação WhoIs, deve ser considerada padrão do EAI e, portanto, não necessita ser habilitada e deve ser aceita por outros EAI de forma anônima, ou seja, sem que o aplicativo de origem esteja cadastrado no destino.

 

Protótipo de Tela

Imagem 1: tela para informação do código fonte da API.

Image Removed

 

Imagem 2: estrutura gerada e exibida em tela para cópia.

Image Removed

 

Imagem 3: lista das APIs já publicadas anteriormente pela ferramenta.

Image Removed

 

type="BusinessContentType" substitutionGroup="AbstractBusinessContent"/>
    <xs:element name="ReturnContent" type="ReturnContentType" substitutionGroup="AbstractReturnContent"/>
</xs:schema>

O conteúdo retornado será determinado pelo atributo BusinessObjectOnly, conforme tabela abaixo:

RequestTypeBusinessObjectOnlyRetorno
AusenteN/ATransações de mensagem única  e mensageria TOTVS.
PresentefalseTransações de mensagem única e mensageria TOTVS.
PresentetrueTransações de mensageria TOTVS.
Nota

A transação WhoIs, na versão 1.000, manterá seu comportamento atual retornando somente transações de mensagem única.

Protótipo de Tela

Âncora
EAI10002_1
EAI10002_1
Imagem 1: indicador do tipo da transação.

Image Added

Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.