BlackTDN Search

segunda-feira, 1 de dezembro de 2008

Protheus :: Estudo de Caso II (Log SXP)

O Estudo de caso de hoje tem a intenção de demonstrar como exportar os dados do Arquivo de Log gerado no SXP em tabelas ISAM (dbf, Btrieve ou ctree) para uma base em SQL (Oracle, MsSql, MySql, PostGreSql, dentre outras suportadas pelo TopConnect) e de como deixar esse processo automático fazendo uso das funções genéricas dos módulos do Protheus.

Esse estudo de caso surgiu em virtude da seguinte necessidade: Após termos configurado o Log para gravação das Inclusões, Alterações e Exclusões no SXP, através da rotina "Configuração de Log" programa CFGX052, verificamos que o arquivo ISAM, utilizado para armazenar o Log, em principio dbf e, posteriormente, ctree gerava uma séria problemática. Uma era o tamanho do tabela crescer muito forçando-nos a renomeá-la sempre que esta atingisse um certo tamanho, a outra era que, em função desse crescimento, a abertura dos módulos do Protheus tornava-se insuportavelmente lenta e, quando a tabela era ctree, gerava várias inconsistências no sistema.

A solução foi exportar os dados que estavam gravados na Tabela SXP ISAM para uma Tabela SXP em uma base SQL, e, para facilitar a consulta (pois mesmo em um Banco SQL os dados da tabela eram muitos), essa Tabela teria que ser criada automaticamente pelo sistema a cada virada de mês. Ou seja, teriamos uma Tabela de Log para cada mês do ano.

Os Logs, após a exportação do SXP ISAM para SXP SQL, deveríam ser gravados automaticamente nesse último.

Esse processo poderia ser habilitado ou desabilitado através de uma chave no .ini do Protheus Server.

Para que isso fosse possível, todos os módulos do sistema deveriam estar configurados de forma trabalhar nesse novo esquema. Usamos então o que é conhecido como "Ponto de Entrada Genérico dos Módulos". O Ponto de Entrada genérico de um módulo do Protheus tem as seguintes características:

  1. Faz-se necessário criar uma User Function com o nome do Módulo;
  2. Sempre será executado durante a rotina de "Abertura" do sistema;
  3. Sempre será executado assim que a rotina, chamada à partir do Menu Principal do Módulo, voltar para esse Menu.
O programa u_Modulos.prg contém a declaração de todas as User Function relacionadas aos Módulos do Protheus e em conjunto com o programa u_EspSxp.prg irá fazer com que o Protheus passe a gravar os Logs configurados para o SXP em Tabelas mensais criadas na base SQL para essa finalidade.

Recomendo que o teste seja efetuado em um ambiente novo, sem nenhuma User Function, para que não ocorra conflitos entre as User Functions declaradas nos programas disponíveis para Download e as User Function em Produção.

Primeiro Passo:

Incluir a seguinte configuração no .ini do Protheus Server

[SXPTOP]
; (habilita ou desabilita o uso: 1 Enable 0 Disable)
EnableSXPTop=1
; (ip ou nome do servidor Top para acesso as tabelas SXP)
SxpTopServer=localhot
; (porta do servidor Top para acesso as tabelas SXP)
SxpTopPort=7890
;(nome do BataBase onde as Tabelas SXP estao armazenadas: Oracle, Postgres, MsSql, etc.)
SxpTopDatabase=postgres
; (Alias do Banco onde as Tabelas SXP estão armazenadas)
SxpTopAlias=msiga

Segundo Passo: Baixar e Compilar os programas u_Modulos.prg e u_EspSxp.prg

Agora, ao entrar em qualquer módulo do Protheus, quando a chave EnableSXPTop estiver com o conteúdo igual a 1(Habilitada), será verificada a existência da tabela SXPEECAAAAMM, onde:

EE Corresponde ao código da Empresa;
C Constante 0 (zero);
AAAA Corresponde ao Ano de Criação da Tabela; e
MM Corresponde ao Mês da Criação da Tabela.

Se o arquivo SXP ISAM tiver conteúdo esse será, automaticamente, exportado para a Tabela criada anteriormente e todos os novos dados passarão a ser gravados nessa nova tabela. A operação de exportação é feita apenas uma vez por dia (quando o primeiro usuário logar no sistema e se houver informações a serem exportadas.

Se desejar que a primeira exportação seja manual, execute os seguintes passos:

Execute o "Client" do Protheus e no Programa inicial digite u_ExpSxp, conforme figura abaixo


Selecione a Empresa da qual deseja Exporta o arquivo de Log SXP


Selecione a Conexão TopConnect para a qual o Log SXP será exportado
Por padrão será disponibilizada a configuração disponível em: [SXPTOP]


Exemplo de uma tabela SXP criada no banco PostGreSql
(clique na Imagem para ampliá-la)

9 comentários:

  1. Essa solução foi excelente. Implementada pelo Naldo DJ na empresa que trabalhávamos. Está funcionando até hoje e houve um ganho de performance excelente.
    Muito bom!!!

    ResponderExcluir
  2. Naldo, bom dia! Estou pensando em implementar essa solução, mas estou com uma dúvida.
    Ao consultar esse log pelo configurador, como aparecerá? Virá da tabela do mês corrente, ou virá tudo?
    Caso seja do mês corrente, e eu precise consultar um registro anterior, como faz?

    ResponderExcluir
  3. Bom dia os arquivos nao existem mais para download no servidor. Por favor disponibilisem.

    ResponderExcluir
  4. SXO
    Cadastro de Logs por Campo.

    ResponderExcluir
  5. Bom dia Naldo. Como faço para baixar os dois programas??? Não estou conseguindo.

    ResponderExcluir
  6. Bom dia. Não estamos conseguindo baixar os dois arquivos. Tem como passar via e-mail????

    ResponderExcluir
  7. Não estamos conseguindo baixar os dois arquivos. Há como enviá0-los por e-mail?

    ResponderExcluir