Protheus News TL++ Reflection & Annotation

ERP

20 de maio de 2021

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

@end

@annotation classe
    nome as char
    descricao as char

@end

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

endClass

/*/{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

return self:cNome

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

    local aParams 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())

    conout(oPessoa:getCpf())

return

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!

Talvez você possa se interessar

Atualização de Release 12.1.33

Atualização de Release 12.1.33

Atualização de Sistema ERP Protheus é uma ação periódica importante para manter e melhorar o desempenho do sistema…

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

AGENDE AGORA MESMO

UMA APRESENTAÇÃO

Vamos conversar para entender as
necessidades de sua empresa.