Voltamos com mais um post da série Protheus News, dessa vez trazendo mais uma novidade do TL++ para quem gosta de trabalhar com orientação a objetos.
Você pode com o TL++ trabalhar com Reflection e Annotation, veja abaixo um exemplo:
fonte EveryPessoa.tlpp
#include ‘totvs.ch’
@annotation parametros
nome as char
tipoParametro as char
tamanho as numeric
decimal as numeric
descricao as char
@annotation classe
nome as char
descricao as char
namespace EverySystem
@classe (nome= “Pessoa”, descricao= “Classe de pessoa”)
@parametros(nome = “cNome” , tipoParametro=”character” , tamanho=50, decimal=0, descricao=”Nome da pessoa”)
@parametros(nome = “cSobrenome” , tipoParametro=”character” , tamanho=50, decimal=0, descricao=”Sobrenome da pessoa”)
@parametros(nome = “cCpf” , tipoParametro=”character” , tamanho=11, decimal=0, descricao=”CPF da pessoa”)
class Pessoa
public method new() constructor
public method getNome()
public method getSobrenome()
public method getCpf()
private data cNome as string
private data cSobrenome as string
private data cCpf as string
/*/{Protheus.doc} Pessoa::new
Método construtor
@type method
@version 1.0
@author every system
@since 20/05/2021
@param cNome, character, nome da pessoa
@param cSobrenome, character, sobrenome da pessoa
@param cCpf, character, cpf da pessoa
/*/
method new(cNome, cSobrenome, cCpf) class Pessoa
self:cNome := cNome
self:cSobrenome := cSobrenome
self:cCpf := cCpf
return
method getNome() class Pessoa
method getSobrenome() class Pessoa
return self:cSobrenome
method getCpf() class Pessoa
return self:cCpf
fonte everyReflectionTeste.tlpp
#include ‘totvs.ch’
using namespace EverySystem
user function testeReflection()
local aClasse as array
//————————————————————————————————————————-
//Verificando todas as classes do namespace “EverySystem” com a annotation “classe”
//———————————————————————————————————————–
aClasse := Reflection.getClassesByAnnotation(“classe”, “EverySystem”)
//—————————————————-
//Verificando os parâmetros da classe
//—————————————————-
aParams := Reflection.getClassAnnotationList(aClasse[1]:cClassName)
//———————————————–
//Atribuindo valores aos parâmetros
//———————————————–
&(aParams[2][“nome”]) := “João”
&(aParams[3][“nome”]) := “Amaro”
&(aParams[4][“nome”]) := “12345678911”
//—————————————–
//Instanciando a classe Pessoa
//—————————————–
oPessoa := aClasse[1]:CreateInstance(&(aParams[2][“nome”]), &(aParams[3][“nome”]), &(aParams[4][“nome”]))
//——————————————————
//Testando os métodos da classe Pessoa
//——————————————————-
conout(oPessoa:getNome())
conout(oPessoa:getSobrenome())
Veja que você pode criar annotations personalizadas e também instanciar objetos através da classe Reflection facilmente.
Para quem se interessou veja mais no site da TOTVS:
https://tdn.totvs.com/display/tec/Reflection+e+Annotation
Espero que tenham gostado!
Até a próxima edição do Protheus News!
0 comentários