A linguagem moderna do ecossistema TOTVS. Orientação a objetos completa, tipagem forte, namespaces e integração REST nativa — tudo que o AdvPL precisava para o desenvolvimento contemporâneo.
TLPP (TOTVS Language Plus Plus) é uma evolução da linguagem AdvPL, criada para trazer paradigmas modernos de programação ao ecossistema TOTVS. Mantendo total compatibilidade retroativa, a linguagem introduz tipagem forte, orientação a objetos completa e recursos que aumentam significativamente a produtividade e qualidade do código.
Utilizada principalmente no Protheus, o ERP da TOTVS,
o TLPP usa a extensão .tlpp e se integra ao módulo
tlppCore para desenvolvimento de APIs REST, testes
automatizados e expressões regulares. AdvPL e TLPP coexistem no mesmo
projeto, permitindo migração gradual sem ruptura.
// TLPP — sintaxe moderna e expressiva Namespace MeuProjeto Class Saudacao Private cNomeDestinatario as Character Method New(cNome as Character) Constructor Method Saudar() as Character EndClass Method New(cNome as Character) Class Saudacao ::cNomeDestinatario := cNome Return Self Method Saudar() Class Saudacao Local cMensagem as Character cMensagem := "Olá, " + ::cNomeDestinatario + "!" Return cMensagem
Recursos modernos que elevam a qualidade e produtividade no desenvolvimento para o Protheus
Identifique funções, variáveis e classes com até 255 caracteres, eliminando a limitação histórica de 10 do AdvPL para código autodocumentado.
ProdutividadeDeclaração explícita de tipos com verificação em compilação. Erros de type mismatch geram exceções, impedindo que problemas cheguem à produção.
SegurançaOOP completa: encapsulamento com private/protected/public, métodos estáticos, interfaces e sobrecarga de operadores.
Organize bibliotecas e evite colisões de nomes com namespaces hierárquicos. Importe com using namespace ou prefixe diretamente.
Tratamento de exceções nativo e intuitivo. Capture e trate erros de forma elegante sem comprometer o fluxo da aplicação com blocos Begin Try...Catch.
Crie e manipule estruturas JSON diretamente com a classe JsonObject. Sem parsers externos ou conversões manuais para integrar com APIs.
Chame funções especificando parâmetros por nome, tornando o código mais legível e eliminando erros de posicionamento em funções com muitos argumentos.
LegibilidadeMetaprogramação com annotations em classes e funções para mapeamento automático de rotas REST, e reflection para inspeção dinâmica de tipos em runtime.
AvançadoVeja o que evoluiu na nova geração da linguagem TOTVS
| Recurso | AdvPL | TLPP |
|---|---|---|
| Tamanho máximo de nomes | 10 caracteres | 255 caracteres |
| Tipagem | Fraca (apenas avisos) | Forte (exceções) |
| Namespaces | Não suportado | Suportado |
| Encapsulamento OOP | Apenas public | Private / Protected / Public |
| Interfaces | Não suportado | Suportado |
| Métodos estáticos | Não suportado | Suportado |
| Try / Catch nativo | Não | Sim |
| JSON nativo | Manual / Externo | Nativo (JsonObject) |
| Parâmetros nomeados | Não suportado | Suportado |
| Annotations & Reflection | Não suportado | Suportado |
| REST nativo (tlppCore) | Não | Sim |
| Extensão de arquivo | .prw / .prg | .tlpp |
| Arquivos de cabeçalho | .ch | .th |
Explore exemplos práticos que demonstram o poder da linguagem
// AdvPL — nomes limitados a 10 chars, sem declaração de tipos // Function CalcJrs(nPrc, nTx, nPrd) <-- ilegível! // TLPP — nomes descritivos até 255 chars + tipagem forte Function CalcularJurosCompostos( nPrincipal as Numeric, ; nTaxaMensal as Numeric, ; nTotalMeses as Numeric ) as Numeric Local nMontanteFinal as Numeric nMontanteFinal := nPrincipal * ( (1 + nTaxaMensal / 100) ** nTotalMeses ) Return nMontanteFinal // Chamada com parâmetros nomeados — muito mais legível! Local nResultado as Numeric nResultado := CalcularJurosCompostos( nPrincipal := 10000, ; nTaxaMensal := 1.5, ; nTotalMeses := 12 )
Namespace Financeiro.Conta Class ContaBancaria Private nSaldo as Numeric Private cTitular as Character Method New(cNome as Character, nSaldoInicial as Numeric) Constructor Method Depositar(nValor as Numeric) as Logical Method Sacar(nValor as Numeric) as Logical Method GetSaldo() as Numeric EndClass Method New(cNome, nSaldoInicial) Class ContaBancaria ::cTitular := cNome ::nSaldo := nSaldoInicial Return Self Method Sacar(nValor) Class ContaBancaria If nValor > ::nSaldo Return .F. // Saldo insuficiente EndIf ::nSaldo -= nValor Return .T.
Function BuscarDadosDoCliente(nCodigoCliente as Numeric) as Character Local oRespostaJson as Object Local cJsonResultado as Character := "" Begin Try // JSON nativo — sem bibliotecas externas oRespostaJson := JsonObject():New() oRespostaJson["codigo"] := nCodigoCliente oRespostaJson["sistema"] := "Protheus" oRespostaJson["data"] := DToS(Date()) oRespostaJson["processado"] := .T. cJsonResultado := oRespostaJson:ToJson() Catch oErro as Object // Tratamento estruturado de exceções ConOut("Erro: " + oErro:Description) cJsonResultado := '{"erro": true}' End Try Return cJsonResultado
@Get e @Post mapeiam rotas HTTP diretamente no Protheus, sem configuração adicional.
#include "tlpp-rest.th" Namespace MeuSistema.API // Annotation mapeia automaticamente a rota HTTP GET @Get("/api/clientes/{nCodigo}") Function EndpointBuscarCliente(nCodigo as Numeric) as Character Local oResposta as Object oResposta := JsonObject():New() Begin Try oResposta["codigo"] := nCodigo oResposta["nome"] := BuscarNomeCliente(nCodigo) oResposta["ativo"] := .T. oResposta["sistema"] := "Protheus" oRest:SetStatus(200) Catch oErro as Object oResposta["erro"] := .T. oResposta["mensagem"] := oErro:Description oRest:SetStatus(500) End Try Return oResposta:ToJson()
Módulo integrado que expande as capacidades do TLPP para aplicações modernas no Protheus
Desenvolva endpoints REST completos diretamente no Protheus com suporte a annotations (@Get, @Post, @Put, @Delete), controle de threads e middleware de autenticação.
Framework de testes automatizados integrado ao TLPP. Escreva testes unitários e de integração para garantir a qualidade das customizações do Protheus de forma profissional e rastreável.
Suporte nativo a regex para validação e manipulação avançada de strings. Valide CPF, CNPJ, e-mails e formatos de dados sem dependências externas.
A transição é gradual e sem ruptura. AdvPL e TLPP convivem no mesmo projeto — comece migrando um arquivo por vez e aproveite os novos recursos progressivamente.