Definição da Regra de Negócio
O programa de configurações do EAI Logix (EAI10000) será alterado para incluir um botão, com label "Importar", que permita abrir a tela de seleção de arquivos, onde o usuário informará o caminho e nome do arquivo contendo as configurações de EAI que deseja importar.
Para acionar o botão "Importar", o usuário terá de escolher, no lado esquerdo da tela do EAI10000 as seguintes opções: Parametrização -> Gerais.
O arquivo importado, que deve estar no formato XML, será validado em relação à sintaxe XML e ao esquema XML definido na especificação ER_PCREQ-8447_Exportação_configurações_EAI.
Além destas validações, será verificado no arquivo importado o seguinte:
- O atributo instance, da tag EaiConfiguration, deve existir como um aplicativo dentro do arquivo importado (tag Aplication, atributo name).
- O valor da tag Adapter deve corresponder a um programa existente no RPO do Logix.
- Se a tag Anonymous não existir no arquivo, assumir true como valor padrão se a transação for Whois; senão, assumir false.
- Se a tag IncludeOriginalMsg não existir no arquivo, assumir false como valor padrão.
- Se a tag Contexts não existir no arquivo, assumir o contexto padrão.
- O valor da tag Destination deve existir como um aplicativo dentro do arquivo importado e deve ser diferente do aplicativo interno (ou hospedeiro).
- O valor do atributo app, da tag ValueMapping, deve existir como um aplicativo dentro do arquivo importado.
O conteúdo importado do arquivo de configurações será exibido no console do AppServer caso a opção de debug esteja ativada no logixprofile.pro (propriedade eai.debug = 1).
Os eventuais erros de validação do arquivo importado serão mostrados para o usuário e listados no console do AppServer, e a importação será finalizada.
Os dados importados serão mantidos em uma estrutura de dados temporária, a qual será utilizada para a etapa de gravação das configurações, que será assunto de outra especificação.
Rotina para importação de XML
Para efetuar a importação do XML de configurações, deve-se utilizar a classe LTransDataXML. Esta classe carrega um arquivo no formato XML, valida sua estrutura e armazena os elementos e atributos em tabelas temporárias no banco de dados.
Há uma tabela temporária para os elementos (ou tags) e para os atributos. As estruturas de ambas estão descritas abaixo:
- Tabela de elementos:
- Nome do elemento;
- Valor do elemento;
- Sequência em relação a outros elementos com mesmo nome;
- Sequência geral dentro do arquivo.
- Tabela de atributos:
- Nome do elemento;
- Sequencia geral dentro do arquivo;
- Nome do atributo;
- Valor do atributo;
- Sequência em relação a outros atributos com mesmo nome.
Para importar um arquivo XML a partir de um fonte 4GL, basta usar a seguinte sintaxe:
LOG_import_xml_to_4gl( cXMLPath )
Onde cXMLPath corresponde ao caminho completo do arquivo XML, por exemplo, c:\temp\arquivo.xml.
O uso a partir de um fonte AdvPl deve usar a seguinte sintaxe:
import_xml_to_4gl( cXMLPath )
Onde cXMLPath é o caminho completo do arquivo XML.
Após a importação, os dados poderão ser recuperados percorrendo as tabelas w_xml_data (tabela de elementos) e w_xml_data_attrib (tabela de atributos).
Validação de XML utilizando XSD
O XML do arquivo de configuração será validado utilizando o XSD EaiConfiguration.xsd, o qual deve estar situado no diretório apontado pela propriedade eai.xsdpath do arquivo logixprofile.pro. Se não for localizado neste diretório ou a propriedade não existir, deve ser procurado no caminho apontado pela propriedade STARTPATH do arquivo TotvsAppServer.ini.
Caso o arquivo XSD não seja encontrado em nenhum dos diretórios informados, ele será gerado pelo programa de importação e gravado num dos diretórios abaixos, obedecendo esta ordem de precedencia:
- Diretório apontado pela propriedade eai.xsdpath, caso a mesma exista no arquivo logixprofile.pro;
- Diretório apontado pela propriedade STARTPATH do arquivo TotvsAppServer.ini.
Para a geração automática do arquivo XSD, será necessário incluí-lo no RPO como um recurso. Para isso, o arquivo será incorporado ao RPO com a extensão .aph (EaiConfigurationXSD.aph) e a recuperação, quando necessária, será feita através da função AdvPl H_EAICONFIGURATIONXSD().