Image for post
Image for post
Código fonte tosco pra imagem do artigo! =]

O arquivo PPO é o código fonte ADVPL após a pré-compilação, achei documentações do Clipper dizendo que significa “preprocessor output”, acho que faz sentido!

Como assim?

Um código ADVPL pode conter ou não diretivas de compilação, e essas que sofrem mudanças após a pré-compilação, após o pré-processamento.

Quais diretivas?

  • #command

Existem muitas diretivas já prontas nos arquivos .CH do Protheus, tais como: CRLF, Default

Essas, por suas vez, são transformadas em código ADVPL após a pré-compilação:

CRLF — Essa diretiva se transforma nas funções Chr(13) + Chr(10), ou seja, uma quebra de linha.

Default — Essa aqui se transforma numa espécie de operador ternário, ela verifica o valor e se estiver nulo, retorna o valor informado no default, caso contrário o valor permanece o mesmo. …


Image for post
Image for post

Sabe aquela dúvida que você está tendo sobre ADVPL, Protheus etc? Será que alguém já não teve a mesma?

Pois é… Sabe onde a resposta pode ser encontrada?

No stackoverflow!

É… Não posso discordar :D

Mas pensando exatamente em plataformas do gênero, e para centralizar seus produtos, a TOTVS criou sua própria plataforma de perguntas e respostas, trata-se do DEVFORUM.

No ar já há alguns anos, agora já mais forte, com um conteúdo interessante, tendo hoje mais de 1220 perguntas cadastradas. Não tenho ideia de quantas respostas, pois contei as páginas para o número de perguntas e contar as respostas na mão seria loucura…

Enfim, tá com dúvida, procura uma resposta por lá e, não encontrando, faça sua pergunta, é um fórum colaborativo que qualquer um com cadastro pode perguntar ou responder!

Entra lá: https://devforum.totvs.com.br/

O DEVFORUM é mais uma das ideias do TOTVS Developers:

https://developers.totvs.com/


Bem, falar sobre boas práticas é sempre bem complexo, gera muita discussão, não agrada todo mundo… Enfim, mas ainda sim, vou tentar. Já dicas, são dicas, normalmente não tem muita gente pra atirar pedra =D

Image for post
Image for post
https://marketplace.visualstudio.com/items?itemName=KillerAll.advpl-vscode

Boas práticas

Escopo

Vou começar por esse, pois acho um dos piores assuntos para abordar, variáveis private, public. Pode parecer MUITO mais fácil declarar uma variável private e não ter que passar a mesma para as demais funções por parâmetro, mas a pessoa que vai dar manutenção no dia seguinte nessas funções, vai saber disso? …


Image for post
Image for post

Bem, todos nós já sabemos que o AdvPl tem uma limitação de dez caracteres para variáveis, funções, métodos etc. Isso, claro, complica bastante as nossas implementações, afinal, deixar uma função com uma nome explícito, autoexplicativo com dez caracteres, por vezes é bem difícil.

Ah, mas agora com o Lobo-guará, essa limitação acabou certo? Certo! Tem toda a razão e mais motivos para migrar e/ou atualizar o seu binário.

Mas e o seu legado? Legado é uma palavra que todo desenvolvedor Protheus convive e, para isso, nós temos alguns truques!

Classe

Bem, quando criamos uma classe ainda em Advpl, existe uma herança mágica que permite termos mais de dez caracteres para propriedades e métodos. …


Já falamos sobre a tabela temporária anteriormente. Caso não tenha visto, não deixe de dar uma lida aqui.

Bem, já que a tabela temporária é no banco de dados, como posso criar registros nela copiando de outra tabela? Preciso fazer um while?

Não é uma resposta padrão, mas, não… Você não precisa de um while, for ou qualquer laço na camada ADVPL. Lembre-se, a tabela é no banco de dados, você pode utilizar os recursos dele!

Image for post
Image for post

Cenário

Preciso criar um tabela temporária com os dados da tabela de naturezas do Protheus.

Como fazer?

Vou criar a tabela temporária, fazer um DBGoTop na SED e criar aquele belo while EOF… Não, não faça isso! …


A linguagem TL++ (TOTVS Language Plus Plus) é a evolução do nosso querido AdvPl, mas… O que muda?

Image for post
Image for post

Extensão

Para trabalhar com TL++ você precisa criar o seu código fonte com a extensão tlpp, abandonando então nossos prw, prg e prx. Exemplo:

fonte_financeiro.tlpp

Tipagem

Apesar de não ser uma novidade na linguagem, agora a tipagem permite gerar exceções e não somente warnings.

Não é uma novidade? Não… É possível tipar já há alguns anos, acredito que desde o lançamento do Protheus 12.

E quais são os tipos? Os básicos são os seguintes:

  • char

Nomes?

Essa acho que é a parte que eu mais amei… Com TL++ não existe mais a limitação de dez (10) caracteres para variáveis, funções etc! Sim, isso me faz lacrimejar… Mas enfim, agora a limitação é de 255 caracteres, portanto eu posso criar uma função da seguinte…


Bom galera, o Protheus é um ERP super customizável, que hoje tem alguns releases expedidos, que podem conter ainda versão distintas de LIB em versões X, Y ou Z de binários… Ou seja, analisar um ambiente muitas vezes é complexo.

Algum dia alguém já pediu pra você a data de um fonte? Perguntou a versão dos binários? Pois é… Isso é bem comum e faz parte da rotina de análise. Por conta disso, existe um recurso já antigo, porém muito útil, no Protheus. Trata-se de um wizard com diversas opções e informações que facilitam a compreensão do ambiente.

Para acessar esse cara, basta logar no Protheus e no próprio menu usar as teclas Shift+F6. Pronto! …


Apesar do título dar medo (tem um smile pra ficarmos menos apreensivos), vamos falar sobre o error.log do Protheus.

Esse cara que por vezes nos dá desespero, também é a principal informação que temos para a solução do problema!

Ponto importante, o error.log trabalha com o estado da thread, portanto o error.log pode ser bem diferente… Como assim? Bem, quando o ambiente do Protheus está aberto, é possível recolher diversas informações. Quando é uma thread simples sem ambiente aberto, error.log é exibido de forma mais enxuta!

Vamos trabalhar com a seguinte função que vai nos gerar um error.log:

Esse exemplo vai gerar um error.log, afinal nada está certo nessa função!

Gerando o erro:

Chamando a função diretamente pelo SmartClient, vamos ter o seguinte…


Image for post
Image for post
https://phpenthusiast.com/blog/what-is-rest-api

REST… Que diabos é isso?

Bem, REST é o acrônimo de Representational State Transfer… E continuamos sem saber o que é… Resumindo, é uma forma de enviar e receber dados utilizando do protocolo HTTP. Explanar sobre o que é o REST/RESTful é complexo e existem diversas documentações sobre. Vou deixar essas aqui para quem estiver interessado em conhecer mais sobre o conceito:

A LIB do Protheus já vem pronta para rodar um servidor HTTP, recebendo e respondendo requisições REST.

Então, é só subir o server (appserver) e pronto? Não!! É necessário habilitar esse servidor nas opções do appserver.ini. Com isso, um job ficará em execução, escutando a porta designada nas configurações. …


Para quem não conhece, MVC significa Model-View-Controller. É um padrão de arquitetura que visa separar a aplicação em três camadas.

Image for post
Image for post

As três camadas são:

  • Model — Responsável pela manipulação dos dados, CRUD e afins…

Essa arquitetura nos dá diversos benefícios, como melhor manutenabilidade, pois temos uma separação de responsabilidades, criação de interfaces distintas para o mesmo modelo etc.

Existem N frameworks para N linguagens que facilitam a implementação de MVC em seu projeto, para o Protheus, não é diferente. …

Daniel Mendes

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store