Páginas filhas
  • ER_FRWJOI01_131_exposicao_servicos_logix_execucao

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-131

Sub tarefa

FRWJOI01-132

País

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

(  ) USA  (  ) Colombia   (  ) Outro ______________.

Objetivo

Permitir a execução dos objetos de negócio públicos do Logix, através de mensagens baseadas no padrão de Mensagem Única preparadas para portar os parâmetros de entrada necessários e os dados de retorno gerados após a execução do referido objeto.

 

Definição da Regra de Negócio

Para que seja possível que aplicativos externos consumam os objetos de negócio através da Mensageria TOTVS é necessário que as mensagens sejam informadas com o modelo de dados do aplicativo que, naquela integração, possuir o papel de ERP. A definição dos papéis na integração ficará a cargo do segmento que estiver demandando a mesma.

Considerando um cenário onde o Logix atue como ERP na integração, teremos todas as mensagens trafegadas com o formato de dados do Logix. Tomando por exemplo uma integração de cadastro de empresa entre Protheus e Logix, o fluxo será o seguinte:

  • Protheus efetua o cadastro de uma empresa;
  • O objeto de negócio aciona o adapter de integração;
  • O adapter de integração converte o modelo de dados Protheus para o modelo de dados Logix, baseando-se no XML Schema obtido através do serviço GetSchema;
  • O adapter de integração envia a mensagem para o engine de EAI do Protheus;
  • O engine de EAI envia a mensagem para o WebService de recebimento do Logix;
  • O WebService de recebimento encaminha a mensagem para o engine de EAI do Logix;
  • O engine de EAI identifica o objeto de negócio solicitado na mensagem;
  • O engine extrai os dados de entrada da mensagem e aciona o objeto de negócio, passando os dados extraídos como parâmetro;
  • O engine recebe os dados de retorno do objeto de negócio;
  • A mensagem de retorno é gerada pelo engine de EAI com os dados de saída do objeto de negócio;
  • A mensagem de retorno é enviada ao WebService de recebimento do Protheus;
  • O WebService de recebimento encaminha a mensagem de retorno para o engine de EAI Protheus;
  • O engine de EAI extrai os dados e encaminha para o objeto de negócio Protheus;
  • O objeto de negócio recebe os dados, converte para do modelo Logix para o modelo Protheus e processa o retorno.

Assumindo o fluxo acima, a responsabilidade pela conversão dos dados e pela montagem da mensagem de um modelo para outro fica sob responsabilidade do papel da vertical, ou seja, o Protheus.

Seguindo as especificações da Mensageria TOTVS, o conteúdo do elemento <BusinessContent> de uma mensagem terá o formato descrito no XML Schema do objeto de negócio presente em <Transaction>. Neste elemento, o objeto será sempre precedido pelo nome do ERP e, para o caso do Logix, com o nome do objeto seguindo do nome da API, ex.: Logix/logr2.logr2_pub_create_companies.

Abaixo segue uma mensagem, do tipo BusinessMessage, de exemplo de execução da API fictícia logr2_pub_create_companies para a criação de empresas no Logix que receberá a estrutura com as informações da empresa e irá retornar apenas a situação da execução e uma mensagem:

Bloco de código
languagexml
titleLogix/logr2.logr2_pub_create_companies
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="../../../xmlschema/general/totvsmsg.xsd">
    <MessageInformation version="12.1.X"> 
        <UUID>${=java.util.UUID.randomUUID()}</UUID>   
        <Type>BusinessMessage</Type>
        <Transaction>Logix/logr2.logr2_pub_create_companies</Transaction>
        <StandardVersion>12.1.X</StandardVersion>
        <SourceApplication>SoapUI</SourceApplication>
        <Product name="SoapUI" version="5.1.2"/>
        <GeneratedOn>${=javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.getInstance())}</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
    </MessageInformation>
    <BusinessMessage>
        <BusinessRequest>
            <Operation>Logix/logr2.logr2_pub_create_companies</Operation>
        </BusinessRequest>
        <BusinessContent>
            <logr2_pub_create_companies api="logr2">
                <input>
                    <lr_empresa>
                        <cod_empresa>01</cod_empresa>
                        <den_empresa>Empresa de Testes 01</den_empresa>
                        <den_reduz>EMP 01</den_reduz>
                        <end_empresa>Rua Dos Bobos, 01</end_empresa>
                        <den_bairro>Los Angeles</den_bairro>
                        <den_munic>Joinville</den_munic>
                        <uni_feder>SC</uni_feder>
                        <ins_estadual>000000000</ins_estadual>
                        <num_cgc>00.000.000/0000-00</num_cgc>
                        <num_caixa_postal/>
                        <cod_cep>00000-00</cod_cep>
                        <num_telefone>0000000000</num_telefone>
                        <num_telex/>
                        <num_fax/>
                        <end_telegraf/>
                        <num_reg_junta/>
                        <dat_inclu_junta>${=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date())}</dat_inclu_junta>
                        <ies_filial/>
                        <dat_fundacao>${=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date())}</dat_fundacao>
                        <cod_cliente/>
                    </lr_empresa>
                </input>
            </logr2_pub_create_companies>
        </BusinessContent>
    </BusinessMessage>
</TOTVSMessage>

A mensagem de retorno da execução acima conterá, conforme mencionado, apenas um elemento com o status da execução e uma mensagem, conforme demonstra o XML do tipo ResponseMessage:

Bloco de código
 

 

 

 

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:

languagexml
titleResponse logr2.logr2_pub_create_companies
linenumberstrue
 <TOTVSMessage>
    <MessageInformation version="12.1.X">
        <UUID>ca857731-ee0e-a60a-293d-2a7e84449dd0</UUID>
        <Type>Response</Type>
        <Transaction>logr2.logr2_pub_create_companies</Transaction>
        <StandardVersion>1.0</StandardVersion>
        <SourceApplication>SoapUI</SourceApplication>
        <Product name="SoapUI" version="5.1.2"/>
        <GeneratedOn>2016-04-28T18:52:08</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
    </MessageInformation>
    <ResponseMessage>
        <ReceivedMessage>
            <SentBy>SoapUI</SentBy>
            <UUID>0f88a786-0cbe-4cbd-b475-ffc54115d5a7</UUID>
            <MessageContent>
                <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
                <TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                              xsi:noNamespaceSchemaLocation="../../../xmlschema/general/totvsmsg.xsd">
                    <MessageInformation version="12.1.X"> 
                        <UUID>0f88a786-0cbe-4cbd-b475-ffc54115d5a7</UUID>   
                        <Type>BusinessMessage</Type>
                        <Transaction>Logix/logr2.logr2_pub_create_companies</Transaction>
                        <StandardVersion>12.1.X</StandardVersion>
                        <SourceApplication>EAI-LOGIX</SourceApplication>
                        <Product name="EAI-LOGIX" version="12.1.X"/>
                        <GeneratedOn>2016-04-28T18:52:07.915-03:00</GeneratedOn>
                        <DeliveryType>sync</DeliveryType>
                    </MessageInformation>
                    <BusinessMessage>
                        <BusinessRequest>
                            <Operation>Logix/logr2.logr2_pub_create_companies</Operation>
                        </BusinessRequest>
                        <BusinessContent>
                            <logr2_pub_create_companies>
                                <input>
                                    <lr_empresa>
                              
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>
          <cod_empresa>01</cod_empresa>
  <xs:element name="RequestType" minOccurs="0">
                  <xs:complexType>
                    <xs:attribute name="BusinessObjectOnly" default="false"><den_empresa>Empresa de Testes 01</den_empresa>
                        <xs:simpleType>
                <den_reduz>EMP 01</den_reduz>
           <xs:restriction base="xs:boolean"/>
                        </xs:simpleType>
    <end_empresa>Rua Dos Bobos, 01</end_empresa>
             </xs:attribute>
                </xs:complexType>
           <den_bairro>Los </xs:element>
  Angeles</den_bairro>
      </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ReturnContentType">
        <xs:sequence>
            <xs:element name="EnabledTransactions" minOccurs="0" maxOccurs="1">
   <den_munic>Joinville</den_munic>
              <xs:complexType>
                    <xs:sequence>
      <uni_feder>SC</uni_feder>
                  <xs:element name="Transaction" minOccurs="1" maxOccurs="unbounded">
                   <ins_estadual>000000000</ins_estadual>
         <xs:complexType>
                                <xs:all>
<num_cgc>00.000.000/0000-00</num_cgc>
                                     <xs:element name="Name" minOccurs="1" type="xs:string" <num_caixa_postal/>
                                    <xs:element name="BusinessObject" type="xs:string" minOccurs="0"/>
    <cod_cep>00000-00</cod_cep>
                                     <xs:element name="Version" type="xs:string" minOccurs="0"/> <num_telefone>0000000000</num_telefone>
                                    <xs:element name="Mode" minOccurs="0">
         <num_telex/>
                                   <xs:simpleType>
     <num_fax/>
                                       <xs:restriction base="xs:string">
 <end_telegraf/>
                                        <num_reg_junta/>
           <xs:enumeration value="SEND_ENABLED"/>
                            <dat_inclu_junta>2016-04-28</dat_inclu_junta>
                    <xs:enumeration value="RECEIVE_ENABLED"/>
                   <ies_filial/>
                             <xs:enumeration value="BOTH_ENABLED"/>
           <dat_fundacao>2016-04-28</dat_fundacao>
                                       <xs:enumeration value="send_enabled" <cod_cliente/>
                                       </lr_empresa>
         <xs:enumeration value="receive_enabled"/>
                       </input>
                           <xs:enumeration value="both_enabled"/> </logr2_pub_create_companies>
                        </BusinessContent>
                    </xs:restriction>BusinessMessage>
                </TOTVSMessage>]]>
            </MessageContent>
        </ReceivedMessage>
     </xs:simpleType>
   <ProcessingInformation>
            <ProcessedOn>2016-04-28T18:52:08</ProcessedOn>
            <Status>ok</Status>
         </xs:element>ProcessingInformation>
        <ReturnContent>
            <XMLContent>
            </xs:all>
    <![CDATA[<logr2_pub_create_companies>
                    <output>
    </xs:complexType>
                    <retmsg>Inclusão efetuada com  sucesso.</xs:element>
retmsg>
                        <<status>1</xs:sequence>status>
                    </xs:complexType>output>
                </xs:element>logr2_pub_create_companies>]]>
        </xs:sequence>
    </xs:complexType>XMLContent>
    <xs:element name="BusinessContent" 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

ÂncoraEAI10002_1EAI10002_1Imagem 1: indicador do tipo da transação.
    </ReturnContent>
    </ResponseMessage>
</TOTVSMessage>

A identificação se a mensagem é mensagem única ou da mensageria TOTVS é realizada através do elemento <Transaction>. Se o mesmo possuir o formato Logix/api.nome_metodo é identificado que se trata de uma execução da mensageria TOTVS e, portanto, ao invés do engine EAI do Logix executar o adapter via função EAI_invokeAdapterReceiveReturn deverá ser criada uma outra especificamente para a execução das APIs, por exemplo EAI_invokeAPI.

Image Removed

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