Páginas filhas
  • ER_PCREQ-8447_Exportação_configurações_EAI

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

EAI

Segmento Executor

Tecnologia

Projeto1

PDR_LD_FRW001

IRM1

PCREQ-8293

Requisito1

PCREQ-8447

Subtarefa1

PDR_LD_FRW001-177

Release de Entrega Planejada

12.1.9

Réplica

Não se aplica.

País

( X ) Brasil  (  ) Argentina  (  ) México  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colômbia   (  ) Outro _____________.

Outros

http://tdn.totvs.com/display/public/lg/EAI

http://tdn.totvs.com/display/public/lg/EAI2

EAI – Guia do Administrador

 Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 


Objetivo

 

Permitir a exportação de configurações relativas ao EAI no Logix, para fins de backup ou para facilitar a configuração de um novo ambiente Logix que vá utilizar o EAI baseado em configurações já realizadas anteriormente.

 

Definição da Regra de Negócio


A exportação das configurações de EAI se dará a partir do programa EAI10000. Neste programa, na opção Parametrização -> Gerais, será incluído um botão ao lado do botão Modificar. Este novo botão, chamado Exportar, mostrará uma janela do tipo Diálogo que permitirá ao usuário informar a pasta e o nome do arquivo que receberá as configurações exportadas.

O arquivo contendo as configurações será gerado no formato XML. Um exemplo de arquivo é o que segue abaixo:

Exemplo de arquivo de configuração
<?xml version="1.0" encoding="UTF-8" ?>
<EaiConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xsi:noNamespaceSchemaLocation="EaiConfiguration.xsd"
                  instance="LGX11-EAI2">    <!-- instance aponta para o aplicativo hospedeiro ou interno -->
    <Applications>
        <Application name="LGX11-EAI2" productName="LOGIX" productVersion="11.00"> <!-- productName pode ser LOGIX, DATASUL, RM, PROTHEUS... -->
            <AppProgram>EAIHostApplication</AppProgram>
            <ChannelProgram>EAIChannelHost</ChannelProgram>
            <QueueProgram>EAIMessageQueueLogix</QueueProgram>
            <Transactions>
                <Transaction>
                    <Name>whois</Name>
                    <Version>1.000</Version>
                    <SupportedMode>both_enabled</SupportedMode>
                    <EnabledMode>both_enabled</EnabledMode>
                    <Adapter>ADP0001</Adapter> <!-- opcional para aplicativo externo -->
                    <Anonymous>true</Anonymous> <!-- opcional para aplicativo externo -->
                    <IncludeOriginalMsg>false</IncludeOriginalMsg> <!-- opcional para aplicativo externo -->
                    <Contexts> <!-- Opcional para aplicativo externo -->
                        <Context>*</Context>
                        <Context>datasulcrm</Context>
                        <Context>...</Context>
                    </Contexts>
                    <Routes> <!-- opcional para aplicativo externo -->
                        <Route>
                            <Destination>ExternalApp</Destination>
                            <Context>*</Context>
                        </Route>
                        <Route>
                            <Destination></Destination>
                            <Context></Context>
                        </Route>                        
                    </Routes>
                </Transaction>
                <Transaction>
                    <Name></Name>
                    <Version></Version>
                    <SupportedMode>send_enabled</SupportedMode>
                    <EnabledMode>send_enabled</EnabledMode>
                    <Adapter></Adapter>                    
                </Transaction>
            </Transactions>
        </Application>
        <Application name="dts11cordas8080" productName="DATASUL" productVersion="12.1.7">
            <AppProgram>EAIDefaultApplication</AppProgram>
            <ChannelProgram>EAIChannelDatasul</ChannelProgram>
            <QueueProgram>EAIMessageQueue</QueueProgram>
            <Properties> <!-- opcional para aplicativo hospedeiro ou interno -->
                <Property category="Channel" name="url" >http://cordas:8080/eai2-ws/EAIService?wsdl</Property>
                <Property category="Channel" name="port">EAIServicePort</Property> <!-- opcional para Logix -->
                <Property category="Channel" name="user">eai</Property>
                <Property category="Channel" name="password">eai@123</Property>
                <Property category="Channel" name="textformat">1</Property> <!-- apenas Logix -->
            </Properties>
            <Transactions>
                <Transaction>
                    <Name>AccountantAccount</Name>
                    <Version>1.000</Version>
                    <SupportedMode>both_enabled</SupportedMode>
                    <EnabledMode>send_enabled</EnabledMode>
                </Transaction>
            </Transactions>
        </Application>
    </Applications>    
    <InternalIDs>
        <InternalID id="AccountantAccount"> <!-- identificador do internal ID -->
            <Table>tabela_logix</Table> <!-- tabela do produto que será referenciada -->
            <KeyFields>campo1|campo2|campo2</KeyFields> <!-- estrutura do internal ID -->
            <ValueMappings>
                <ValueMapping app="ExternalApp1"> <!-- aplicativo externo ao qual o valor de internal ID se refere -->
                    <ExternalValue>01|02</ExternalValue> <!-- valor no aplicativo externo -->
                    <InternalValue>01|02|03</InternalValue> <!-- valor no aplicativo hospedeiro -->
                </ValueMapping>
                <ValueMapping app="ExternalApp2">
                    <ExternalValue></ExternalValue>
                    <InternalValue></InternalValue>
                </ValueMapping>
            </ValueMappings>
        </InternalID>
    </InternalIDs>
</EaiConfiguration>

Os arquivos de configuração gerados podem ser validados posteriormente através de XML Schema (XSD). Para tal, deve-se utilizar o XSD a seguir:

Definição do XML Schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    
    <xs:complexType name="TransactionType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"></xs:element>
            <xs:element name="Version" type="xs:string"></xs:element>
            <xs:element name="SupportedMode">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="not_enabled"></xs:enumeration>
                        <xs:enumeration value="send_enabled"></xs:enumeration>
                        <xs:enumeration value="receive_enabled"></xs:enumeration>
                        <xs:enumeration value="both_enabled"></xs:enumeration>
                        <xs:enumeration value="NOT_ENABLED"></xs:enumeration>
                        <xs:enumeration value="SEND_ENABLED"></xs:enumeration>
                        <xs:enumeration value="RECEIVE_ENABLED"></xs:enumeration>
                        <xs:enumeration value="BOTH_ENABLED"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="EnabledMode">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="not_enabled"></xs:enumeration>
                        <xs:enumeration value="send_enabled"></xs:enumeration>
                        <xs:enumeration value="receive_enabled"></xs:enumeration>
                        <xs:enumeration value="both_enabled"></xs:enumeration>
                        <xs:enumeration value="NOT_ENABLED"></xs:enumeration>
                        <xs:enumeration value="SEND_ENABLED"></xs:enumeration>
                        <xs:enumeration value="RECEIVE_ENABLED"></xs:enumeration>
                        <xs:enumeration value="BOTH_ENABLED"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Adapter" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativos externos</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Anonymous" type="xs:boolean" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativos externos</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="IncludeOriginalMsg" type="xs:boolean" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativos externos</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Contexts" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativos externos</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Context" type="xs:string" maxOccurs="unbounded"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Routes" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativos externos</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Route" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                     <xs:element name="Destination" type="xs:string"></xs:element>
                                     <xs:element name="Context" type="xs:string"></xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="ApplicationType">
        <xs:sequence>
            <xs:element name="AppProgram" type="xs:string"></xs:element>
            <xs:element name="ChannelProgram" type="xs:string"></xs:element>
            <xs:element name="QueueProgram" type="xs:string"></xs:element>
            <xs:element name="Properties" minOccurs="0" >
                <xs:annotation>
                    <xs:documentation>Esta tag é opcional para aplicativo interno</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Property"  maxOccurs="unbounded">                                                    
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:attribute name="category">
                                            <xs:annotation>
                                                <xs:documentation>Categoria à qual a propriedade se refere.
- Channel: propriedade relativa ao canal de comunicação com o aplicativo ao qual ela pertence.
- Application: propriedade relativa ao aplicativo.
- Input-Queue: propriedade relativa à fila de saída das mensagens.</xs:documentation>
                                            </xs:annotation>
                                            <xs:simpleType>
                                                <xs:restriction
                                                    base="xs:string">
                                                    <xs:enumeration
                                                        value="Channel">
                                                    </xs:enumeration>
                                                    <xs:enumeration
                                                        value="Application">
                                                    </xs:enumeration>
                                                    <xs:enumeration
                                                        value="Input-Queue">
                                                    </xs:enumeration>
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="name" type="xs:string"></xs:attribute>
                                    </xs:extension>
                                </xs:simpleContent>                                
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Transactions">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Transaction" type="TransactionType" maxOccurs="unbounded"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"></xs:attribute>
        <xs:attribute name="productName">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="logix"></xs:enumeration>
                    <xs:enumeration value="datasul"></xs:enumeration>
                    <xs:enumeration value="protheus"></xs:enumeration>
                    <xs:enumeration value="rm"></xs:enumeration>
                    <xs:enumeration value="LOGIX"></xs:enumeration>
                    <xs:enumeration value="DATASUL"></xs:enumeration>
                    <xs:enumeration value="PROTHEUS"></xs:enumeration>
                    <xs:enumeration value="RM"></xs:enumeration>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="productVersion" type="xs:string"></xs:attribute>
    </xs:complexType>
    
    <xs:complexType name="InternalIDType">
        <xs:sequence>
            <xs:element name="Table" type="xs:string"></xs:element>
            <xs:element name="KeyFields" type="xs:string"></xs:element>
            <xs:element name="ValueMappings">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ValueMapping" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ExternalValue" type="xs:string"></xs:element>
                                    <xs:element name="InternalValue" type="xs:string"></xs:element>                                    
                                </xs:sequence>
                                <xs:attribute name="app" type="xs:string" use="required"></xs:attribute>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:string" use="required"></xs:attribute>
    </xs:complexType>
    
    <xs:complexType name="EaiConfigurationType">
        <xs:sequence>
            <xs:element name="Applications">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Application" type="ApplicationType" maxOccurs="unbounded"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="InternalIDs" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="InternalID" type="InternalIDType" maxOccurs="unbounded"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="instance" type="xs:string"></xs:attribute>
    </xs:complexType>
    <xs:element name="EaiConfiguration" type="EaiConfigurationType"></xs:element>                    
</xs:schema>

 

Abaixo segue a descrição das tags utilizados no arquivo de configuração:

 

Tag

Descrição

Obrigatória

EaiConfiguration

Tag que abrange as configurações de EAI.

Atributos:

  • Instance: nome do aplicativo hospedeiro.

Sim

Applications

Agrupa os vários aplicativos da configuração.

Sim

Application

Descreve um aplicativo, que pode ser interno (hospedeiro) ou externo. O aplicativo hospedeiro será aquele cujo nome conste no atributo instance da tag EaiConfiguration.

Atributos:

  • name: nome do aplicativo (obrigatório).
  • productName: nome do produto do aplicativo. Pode ser: LOGIX, PROTHEUS, DATASUL, RM (obrigatório).
  • productVersion: versão do produto do aplicativo (obrigatório).

Sim

AppProgram

Nome do programa ou classe que executa as funções de processamento das transações.

Sim

ChannelProgram

Nome do programa ou classe que faz o envio das mensagens de forma síncrona.

Sim

QueueProgram

Nome do programa ou classe que envia as mensagens para a fila, em caso de envio assíncrono.

Sim

Properties

Agrupa as propriedades de um aplicativo

Sim (aplicativo externo)

Property

Descreve uma propriedade do aplicativo

Atributos:

  • Category: categoria da propriedade. Pode ser: Channel, Application, Input-Queue
  • Name: nome da propriedade

Sim (aplicativo externo)

Transactions

Agrupa as transações relacionadas ao aplicativo.

Sim

Transaction

Descreve uma transação relacionada a um aplicativo.

Sim

Name

Nome da transação

Sim

Version

Versão da transação

Sim

SupportedMode

Modo de operação suportado pela transação. Pode ser: not_enabled, send_enabled, receive_enabled e both_enabled.

Sim

EnabledMode

Modo de operação habilitado para a transação. Pode ser: not_enabled, send_enabled, receive_enabled e both_enabled. O valor desta tag deve estar de acordo com a tag supportedMode conforme segue:

 

SupportedMode

EnabledMode

Both_enabled

both_enabled

send_enabled

receive_enabled

not_enabled

Send_enabled

send_enabled

not_enabled

Receive_enabled

receive_enabled

not_enabled

Not_enabled

not_enabled

Sim

Adapter

Nome do programa ou classe que processa a mensagem recebida para a transação.

Sim (aplicativo hospedeiro)

Anonymous

Indica se a transação pode ser recebida de um aplicativo não conhecido.

Sim (aplicativo hospedeiro)

IncludeOriginalMsg

Indica se a mensagem original será incluída no corpo da mensagem de resposta para aquela transação.

Sim (aplicativo hospedeiro)

Contexts

Agrupa os contextos relacionadas com a transação.

Sim (aplicativo hospedeiro)

Context (em Contexts)

Descreve o contexto associado à transação.

Sim, se houver Contexts

Routes

Agrupa as rotas relacionadas com a transação.

Sim (aplicativo hospedeiro)

Route

Descreve a rota da transação.

Sim, se houver Routes

Destination

Aplicativo externo para o qual a mensagem da transação será enviada.

Sim, se houver Route

Context (em Route)

Indica o contexto que deve estar na mensagem para que esta seja enviada ao aplicativo externo.

Sim, se houver Route

InternalIDs

Agrupa os registros de de-para.

Não

InternalID

Descreve um registro de de-para.

Atributos:

  • Id: Identificador (nome) do de-para.

Sim, se houver InternalIDs

Table

Tabela do ERP contendo o registro referenciado pela parte "interna" do de-para.

Sim, se houver InternalID

KeyFields

Campos chaves da tabela que são usados na composição da parte "interna" do de-para.

Sim, se houver InternalID

ValueMappings

Agrupa os valores de um de-para.

Não

ValueMapping

Valores de de-para para um aplicativo externo.

Atributo:

  • App: Identificador do aplicativo externo ao qual se refere o de-para.

Sim, se houver ValueMappings

ExternalValue

Valor no aplicativo externo.

Sim

InternalValue

Valor no aplicativo hospedeiro (interno).

Sim

 

 Para mais informações sobre de-para (internal ID), consulte a documentação em http://tdn.totvs.com/display/public/lg/1.+Conceitos.



Protótipo de Tela


 

Posição do botão Exportar na tela do EAI10000.

 

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