Pular para o conteúdo principal

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

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" // ---------------

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ã

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