Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Social :: Rifa Festival da Arte Capoeira Projeto Eu Sou Ninja

Angariar fundos para cobrir os custos logísticos do "Festival da Arte Capoeira" e apoiar o projeto Eu Sou Ninja em sua missão de promover a integração social e cultural na comunidade de Jacaraípe. Com a criação da rifa, buscamos envolver a comunidade de forma ativa no financiamento do evento, permitindo que todos contribuam para o sucesso do festival e para a continuidade das atividades do projeto. Prêmio: Copia da minha biblioteca pessoal de AdvPL/TLpp ..etc Participe da Rifa Eu já contribui. Só falta você! ```cmd Pasta de C:\GitHub\naldodj-tlpp 13/04/2024 19:17 . 19/03/2024 13:49 .. 05/01/2024 12:22 2.742 .gitattributes 14/11/2023 16:02 83 .gitignore 02/12/2023 20:08 .vscode 05/01/2024 12:05 bin 13/04/2024 19:18 4.121 ChangeLog.txt 27/12/2023 02:05 include 14/11/2023 16:02 27.030 LICENSE.txt 14/11/2023 16:02 0 makepatch.lst 14/11/2

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)

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
  8. Boa noite a todos do grupo!!

    Alguém saberia me dizer se há alguma maneira de acessar os arquivos DTC do ctree sem ser pelo Protheus??

    Existe algum utilitário free ou pago que consiga ler estas tabelas ??

    Se alguém souber de alguma linguagem ou utilitário, por favor, me diga.

    Obrigado.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã