Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

Protheus :: Advpl :: SetOnExit :: Definindo a função a ser Executada na saída do sistema

Respondendo ao questionamento de João:

“boa tarde, existe algum ponto de entrada na saída do modulo, como tem o PE sigafat, tem algum na saída dele e dos outros módulos?

att
João”

Podemos usar SetOnExit para definir a função a ser executada no encerramento do Protheus. A NDJLIB004 que define os Pontos de Entrada Genéricos dos Módulos do sistema  e define, também, a função de saída. Um fragmento seria:

image

Irá definir a função a ser executada quando da saída do sistema.

image

image

SetOnExist, infelizmente, só funciona na Interface SDI. Mas, se observar o código fizemos um tratamento específico para verificar a finalização do sistema para MDI também e para a Saída do sistema por um “Erro Abrupto”. MySetOnExit faz isso.

image

Trata a finalização do sistema quando MDI e;

image

Trata a finalização do sistema por um “Erro Abrupto”.

Qual a idéia? Considerando que a NDJLIB004 define os Pontos de Entrada Genérico de “Todos” os Módulos do Sistema, uso-a, em conjunto com a função “InitSystem” para padronizar as “Entradas” e a “Saídas” customizadas. Todos os Módulos, em seu “Ponto de Entrada Genérico” irão passar pela InitSystem. Observe o fragmento de código abaixo:

image

Ele define o Ponto de Entrada para o Módulo SIGACOM. A única coisa que ele irá fazer é:

  1. Executar a InitSystem e;
  2. Verificar se existe um programa de nome U_SIGACOM e executar a função Static SIGACOM. Como se fosse o Ponto de Entrada do Ponto de Entrada

Dessa forma, tenho uma padronização para Toda Entrada/Saída do sistema, mantenho o controle de Todos os Pontos de Entrada Genéricos e padronizo a execução dos mesmos.

Voltando a SetOnExit. No nosso exemplo, ela define a função de Usuário U_Final como função “Customizada” para tratamento da Finalização do Sistema. Para obter os “Parâmetros Formais” da SetOnExit utilize a função GetFuncPrm(“SetOnExit”). GetFuncPrm irá retornar um Array com os Parâmetros formais da função. Use-a para obter os “Parâmetros Formais” de qualquer função em Advpl.

Usando “Watchs” no devStudio…

image

ou… TVarInfo

image

image

A Função “Customizada” para tratamento da “Finalização do Sistema” Definida na SetOnExit ou no Tratamento para MDI.

image

[]s

иαldσ dj

Comentários

  1. boa tarde! abrindo o protheus chamando diretamente o modulo (SIGAFAT) por exemplo a função User Function SIGAFAT() funciona perfeitamente, no teu exemplo vc mostra executando algo quando sair do sistema utilizando MDI, mas na inicialização como chamar alguma rotina, tipo: preciso que quando o usuario entrar no modulo SIGAMDI, verificar se o programa escolhido é o SIGAFAT por exemplo e rodar uma rotina, tem como fazer isso?

    ResponderExcluir
  2. Naldo, boa tarde!

    Me de uma ajuda, estou precisando executar uma função quando logo no sistema. Existe o ponto de entrada AfterLogin, que só funciona com sigaadv. Conhece alguma forma de assim que logar e entrar em algum modulo exiba uma aviso?


    Atenciosamente,
    Henry

    ResponderExcluir
    Respostas
    1. Utilize os Pontos de Entrada Genérico dos Módulos.
      Veja a Definição em: http://www.blacktdn.com.br/2008/12/protheus-estudo-de-caso-ii-log-sxp.html
      Veja exemplo em: https://github.com/NaldoDj/BlackTDN/blob/master/templates/NDJLib/ndjlib004.prg
      Outro Exemplo: http://www.blacktdn.com.br/2011/11/respondendo-ao-questionamento-de-joao.html

      Excluir
  3. Naldo tudo bem?

    Não tem os exemplos dos fontes para download?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas