Escolar Documentos
Profissional Documentos
Cultura Documentos
Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
TOTVSTEC
Table of Contents
1 Encapsulamento - Modificador de Acesso...................................................... 13
2 Expressões Regulares (RegEx)......................................................................... 14
3 Interface ........................................................................................................... 15
4 Json................................................................................................................... 16
5 Método Estático ............................................................................................... 17
6 Namespace....................................................................................................... 18
7 Nomes longos................................................................................................... 19
8 Reflection e Annotation ................................................................................... 20
9 Representational State Transfer (REST) ......................................................... 21
10 Sobrecarga de Operadores.............................................................................. 22
11 TGetData e TGetMethods................................................................................. 23
12 Tipagem em TL++............................................................................................. 24
13 Try...Catch ........................................................................................................ 25
14 Encapsulamento - Modificador de Acesso...................................................... 26
15 Expressões Regulares (RegEx)......................................................................... 28
16 Interface ........................................................................................................... 29
17 Json................................................................................................................... 30
17.1 Exemplo 2: ............................................................................................................................. 30
18 Método Estático ............................................................................................... 33
19 Namespace....................................................................................................... 35
19.1 Funções dentro de namespace: ........................................................................................... 35
19.1.1 Exemplo:.............................................................................................................................................................. 35
19.2 Classes dentro de namespace:............................................................................................. 36
19.2.1 Exemplo:.............................................................................................................................................................. 36
20 Nomes longos................................................................................................... 38
21 Reflection e Annotation ................................................................................... 39
– 2
TOTVSTEC – O que há de novo ... Recursos
21.1 Novas funções disponíveis para uso juntamente com o recurso de Annotation, as funções
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
– 3
TOTVSTEC – O que há de novo ... Recursos
– 4
TOTVSTEC – O que há de novo ... Recursos
21.9.2 Parâmetros.......................................................................................................................................................... 63
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
– 5
TOTVSTEC – O que há de novo ... Recursos
– 6
TOTVSTEC – O que há de novo ... Recursos
– 7
TOTVSTEC – O que há de novo ... Recursos
21.22.2 Parâmetros.......................................................................................................................................................... 84
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
– 8
TOTVSTEC – O que há de novo ... Recursos
– 9
TOTVSTEC – O que há de novo ... Recursos
21.31 Reflection.isAnnottationMethodParamPresent.................................................................. 99
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
– 10
TOTVSTEC – O que há de novo ... Recursos
– 11
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
– 12
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
3 Interface
Interface – 15
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
4 Json
Json – 16
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
5 Método Estático
Método Estático – 17
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
6 Namespace
Namespace – 18
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
7 Nomes longos
Nomes longos – 19
TOTVSTEC – O que há de novo ... Recursos
TOTVSTEC – O que há de novo ... Recursos
8 Reflection e Annotation
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Reflection e Annotation – 20
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
10 Sobrecarga de Operadores
Sobrecarga de Operadores – 22
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
11 TGetData e TGetMethods
TGetData e TGetMethods – 23
TOTVSTEC – O que há de novo ... Recursos
TOTVSTEC – O que há de novo ... Recursos
12 Tipagem em TL++
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Tipagem em TL++ – 24
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
13 Try...Catch
Try...Catch – 25
TOTVSTEC – O que há de novo ... Recursos
TOTVSTEC – O que há de novo ... Recursos
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 o recurso de modificador de acesso está disponível no TL++ e no ADVPL.
É necessário utilizar este include atualizado: msobject.ch
O nível do modificador padrão é PRIVATE, no ADVPL padrão essa funcionalidade também está disponível, porém o
padrão é PUBLIC.
NÍVEIS
Exemplo
class EscopeMethod
private data oComp1
public data oComp2
protected data oComp3
data oComp4
public method new()
private method teste1()
public method teste2()
protected method teste3()
endclass
method new() class EscopeMethod
return self
method teste1() class EscopeMethod
conout("teste1")
return self
method teste2() class EscopeMethod
self:oComp1 := 1
self:oComp2 := 2
self:oComp3 := 3
self:teste1()
conout("teste2")
self:teste3()
return self
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
16 Interface
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 será possível a definição de interface e a utilização da mesma na definição das classes.
Uma classe pode implementar uma ou mais interfaces, todas tem que estar definidas no mesmo fonte ou em um
include desse fonte.
Interface.tlpp
1 #include "protheus.ch"
2 //A definição da interface deverá estar no mesmo fonte em que está a classe, mas poderá estar
dentro de um include também.
3 Interface FWTEST
4 Method run()
5 EndInterface
6
7
8 Class MeuTest implements FWTEST
9 Method run()
10 EndClass
11
12 Method run() Class MeuTest
13 Return
14
15
16 //erro de compilação pois não tem a implementação do método run que está definido na interface
FWTEST
17 Class MeuTest2 implements FWTEST
18 Method run2()
19 EndClass
20
21
22 Method run2() Class MeuTest2
23 Return
Interface – 29
TOTVSTEC – O que há de novo ... Recursos
17 Json
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Abrangência
Versão 17.3.0.7 e superiores
A partir da versão 17.3.0.7 será possível definir um objeto Json dentro do fonte TL++.
A sintaxe é similar a do Objeto Json1:
{ "chave" : "valor" }
Exemplo 1:
JsonObject.tlpp
1 #include "tlpp-core.th"
2
3 user function jsonObject_exemplo1()
4
5 local varJson := { "teste" : { "var1" : "oioi", "var2": "oioi2", "var3": "oioi3" }} as json
6 local varJson2 := { "teste" : 123} as json
7 local varJson3 := { "teste" : { "var1" : varJson['teste']['var1'], "var2": "oioi2" }} as json
8
9 conout(varJson['teste']['var1']) //"oioi"
10 conout(varJson['teste']['var2']) //"oioi2"
11 conout(varJson['teste']['var3']) //"oioi3"
12 conout(varJson2['teste']) //123
13 conout(varJson3['teste']['var1'])//"oioi"
14 conout(varJson3['teste']['var2'])//"oioi2"
15
16 return
17.1 Exemplo 2:
Json.tlpp
1 #include "tlpp-core.th"
2
3 user function jsonObject_exemplo2()
4 local aPropriedades as array
5 local oJson1 as json
6 local oJson2 as json
7 local oJson3 as json
8 local cVar as character
9 local cRet as character
10 local lRet as logical
11 local nIdx as numeric
12
1 https://tdn.totvs.com/display/tec/Classe+JsonObject
Json – 30
TOTVSTEC – O que há de novo ... Recursos
Json – 31
TOTVSTEC – O que há de novo ... Recursos
propriedade","numeric":0,"logical":true}
66 //veja que a propriedade numeric teve seu valor alterado de 1 para 0
67
68 //objeto:hasProperty - Verifica se o json possui uma chave
69 conout("linha 1: " + cValToChar(oJson1:hasProperty("ID_01"))) //linha 1
70 conout("linha 2: " + cValToChar(oJson1:hasProperty("ID_02"))) //linha 2
71 conout("linha 3: " + cValToChar(oJson1:hasProperty("ID_03"))) //linha 3
72 //sera impresso: .T. para as linhas 1 e 2, e .F. para a linha 3
73
74
75 //objeto:GetJsonText - retorna o valor de uma propriedade do json
76 conout("Exemplo 5: " + oJson1:GetJsonText("Name"))
77 //sera impresso: Exemplo 5: NULL, pois a propriedade Name esta dentro de um outro objeto
78
79 conout("Exemplo 6: " + oJson1:GetJsonText("ID_01"))
80 //sera impresso: Exemplo 6: {"ID":1,"Name":"TOTVS S.A.","CNPJ":"00.000.000/0001-00"}
81
82 conout("Exemplo 7: " + oJson1["ID_01"]["Name"])
83 //sera impresso: Exemplo 7: TOTVS S.A.
84
85 conout("Exemplo 8: " + oJson2:GetJsonText("numeric"))
86 //sera impresso: Exemplo 8: 0
87
88 //objeto:getJsonObject - retorna um objeto json - contido dentro de uma propriedade
89 oJson3 := oJson1:GetJsonObject("ID_01")
90 conout("Exemplo 9: " + oJson3:toJson())
91 //sera impresso: Exemplo 9: {"ID":1,"Name":"TOTVS S.A.","CNPJ":"00.000.000/0001-00"}
92
93 //objeto:getNames() - retorna um array com todas propriedades do json - exceto propriedades que
contem tipo json
94 aPropriedades := oJson2:GetNames()
95 for nIdx := 1 to len(aPropriedades)
96 conout("aPropriedades[" + cValToChar(nIdx) + "]: " + cValToChar(aPropriedades[nIdx]))
97 next
98 //sera impresso: aPropriedades[1]: chave
99 // aPropriedades[2]: propriedade
100 // aPropriedades[3]: numeric
101 // aPropriedades[4]: logical
102
103 //limpa da memoria os objetos criados
104 FreeObj(oJson1)
105 FreeObj(oJson2)
106 FreeObj(oJson2)
107 return .T.
2 https://tdn.totvs.com/display/tec/Classe+JsonObject
Json – 32
TOTVSTEC – O que há de novo ... Recursos
18 Método Estático
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 métodos estáticos estão disponíveis para TL++.
Métodos estáticos são por padrão públicos.
MetodoEstatico.tlpp
1 #include "protheus.ch"
2
3 class StaticMethod
4 method new()
5 static method staticExample()
6 method teste2()
7 data dataI
8 endclass
9
10
11 method new() class ForWithProperty
12
13 return self
14
15
16 method staticExample() class StaticMethod
17 conout("exemplo")
18 /* conout(::dataI) //C9904 Cannot access data nor methods of class from a static method */
19 /* conout(::teste2()) //C9904 Cannot access data nor methods of class from a static method */
20 return
21
22 method teste2() class StaticMethod
23 return
24
25 main function tteci_142
26 StaticMethod():staticExample()
27 return
#include "protheus.ch3"
class StaticMethod
3 http://protheus.ch
Método Estático – 33
TOTVSTEC – O que há de novo ... Recursos
method new()
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
return self
Método Estático – 34
TOTVSTEC – O que há de novo ... Recursos
19 Namespace
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
19.1.1 Exemplo:
exemplo1.tlpp
1 namespace exemplo
2
3 main function testeNamespace
4 conout("testeNamespace")
5 testeNamespace2() //a função testeNamespace2 poderá ser chamada sem explicitar o namespace nem
utilizar using porque estão no mesmo fonte
6 return
7
8 function testeNamespace2
9 conout("testeNamespace2")
10 return
Para chamar uma função que está declarada dentro de um namespace de um outro fonte é necessário que o
explicite, o separador utilizado para isso é o "." conforme exemplo a seguir:
exemplo2.tlpp
Outra opção para chamar uma função que está declarada dentro de um namespace é utilizar a instrução "using
namespace" conforme o exemplo a seguir:
exemplo3.tlpp
Namespace – 35
TOTVSTEC – O que há de novo ... Recursos
4 return
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
19.2.1 Exemplo:
exemplo4.tlpp
1 #include "protheus.ch"
2 namespace exemplo2.1
3
4 class ClassWithNamespace
5 method new()
6 data dataI
7 endclass
8
9
10 method new() class ClassWithNamespace
11 conout("construtor do ClassWithNamespace no namespace exemplo2")
12 return self
13
14
15 main function exemplo4()
16 local obj := exemplo2.1.ClassWithNamespace():new() //nesse caso está explícito o namespace e o
objeto será criado da classe ClassWithNamespace que está no namespace exemplo2
17 local obj2 := exemplo.ClassWithNamespace():new() //nesse caso está explícito o namespace e o
objeto será criado da classe ClassWithNamespace que está no namespace exemplo
18 local obj3 := ClassWithNamespace():new() //nesse caso não está explícito, mas há uma classe
com esse nome definido nesse fonte, estão essa será utilizada.
19 return
Para utilizar uma classe que está declarada dentro de um namespace de um outro fonte é necessário que o
explicite, o separador utilizado para isso é o "." conforme exemplo a seguir:
exemplo5.tlpp
Outra opção para utilizar uma classe que está declarada dentro de um namespace de um outro fonte é utilizar a
instrução "using namespace" conforme o exemplo a seguir:
exemplo6.tlpp
Namespace – 36
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
4
Return
Namespace – 37
TOTVSTEC – O que há de novo ... Recursos
TOTVSTEC – O que há de novo ... Recursos
20 Nomes longos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 o nome longo está disponível para o TL++.
Qualquer fonte escrito e utilizando com a extensão tlpp o limite do tamanho de variáveis, funções, classes,
propriedades e métodos é de 255 caracteres.
Tipagem.tlpp
1 #include 'tlpp-core.th'
2
3 Function u_teste_de_nome_longo()
4 local variavel_com_nome_longo_1
5 local variavel_com_nome_longo_2
6 local variavel_com_nome_longo_3
7
8 variavel_com_nome_longo_1:= 'var1'
9 variavel_com_nome_longo_2:= 'var2'
10 variavel_com_nome_longo_3:= 'var3'
11
12 ConOut(variavel_com_nome_longo_1)
13 ConOut(variavel_com_nome_longo_2)
14 ConOut(variavel_com_nome_longo_3)
15
16 u_esta_funcao_tem_nome_longo_1()
17 u_esta_funcao_tem_nome_longo_2()
18 u_esta_funcao_tem_nome_longo_3()
19 Return
20
21 Function u_esta_funcao_tem_nome_longo_1()
22 ConOut("u_esta_funcao_tem_nome_longo_1")
23 Return
24
25 Function u_esta_funcao_tem_nome_longo_2()
26 ConOut("u_esta_funcao_tem_nome_longo_2")
27 Return
28
29 Function u_esta_funcao_tem_nome_longo_3()
30 ConOut("u_esta_funcao_tem_nome_longo_3")
31 Return
Nomes longos – 38
TOTVSTEC – O que há de novo ... Recursos
21 Reflection e Annotation
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
O recurso de annotation foi liberado na versão 17.3.0.3 e o objetivo é possibilitar a declaração de metadados nas
nossas classes, métodos e funções, isto é, as configurações deles podem ficar dentro do mesmo código fonte.
Definição da annotation, a sugestão é que ela seja colocada em CH que pode ser utilizado em vários fontes.
exemplo1.ch
1 @annotation ExemploDeAnnotation
2 property1 as char
3 property2 as numeric default 1
4 @end
exemplo1.tlpp
1 @ExemploDeAnnotation(property1 = "MeuObject")
2 class meuObj
3 public Data data1
4 public method new()
5 EndClass
exemplo2.tlpp
1 class meuObj
2 public Data data1
3 @ExemploDeAnnotation(property1 = "MetodoNew")
4 public method new()
5 EndClass
exemplo3.tlpp
1 class meuObj
2 @ExemploDeAnnotation(property1 = "PropertyData", property2 = 456)
3 public Data data1
4 EndClass
exemplo4.tlpp
Reflection e Annotation – 39
TOTVSTEC – O que há de novo ... Recursos
4 Return
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.2.1 Propriedades
21.2.2 Métodos
4 http://tdn.totvs.com/display/tec/Reflection.getFunctionParmsByAnnotation
5 http://tdn.totvs.com/display/tec/Reflection.getMethodParmsByAnnotation
6 http://tdn.totvs.com/display/tec/Reflection.getProgramFunctionsByAnnotation
Reflection e Annotation – 40
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.2.3 Exemplos
Exemplo1.tlpp
Reflection e Annotation – 41
TOTVSTEC – O que há de novo ... Recursos
50 Conout(obj2:TesteAttr)
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
51 Conout("-----------------------")
52
53 return
21.2.5.1 Attribute:Assign
Executa o método dentro da instância do objeto desejada.
Sintaxe
Attribute:Assign(oObj, oValue)
Parametros
Reflection e Annotation – 42
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Exemplo
Exemplo1.tlpp
Resultado do Exemplo
-----------------------
Banana2
-----------------------
21.2.5.2 Attribute:GetValue
Retorna o valor da propriedade definida no objeto desejado.
Reflection e Annotation – 43
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Sintaxe
Attribute:GetValue(oObj)
Parametros
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 44
TOTVSTEC – O que há de novo ... Recursos
Resultado do Exemplo
-----------------------
Instancia 1
Instancia 2
-----------------------
21.2.5.3 Attribute:toString
Retorna uma representação em String do objeto.
Sintaxe
Attribute:toString()
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 45
TOTVSTEC – O que há de novo ... Recursos
13
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
14 @attr()
15 Public Data TesteAttr as char
16
17 Public Method New(str)
18 endclass
19
20 Method New(str) class NovaClasse
21 ::TesteAttr := str
22 return self
23
24
25 User Function testeNovo()
26 local AttrA
27 local obj1 := NovaClasse():New("Instancia 1")
28 Conout("-----------------------")
29 AttrA := Reflection.getAttributesByAnnotation(obj1, "attr")
30 Conout(AttrA[1]:toString())
31 Conout("-----------------------")
32
33 return
Resultado do Exemplo
-----------------------
{ cAttributeName: TESTEATTR, cAttributeType: CHAR }
-----------------------
char N/A N
char N/A N
Reflection e Annotation – 46
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.3.1 Propriedades
21.3.2 Métodos
21.3.3 Exemplos
Exemplo1.tlpp
Reflection e Annotation – 47
TOTVSTEC – O que há de novo ... Recursos
36
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Reflection e Annotation – 48
TOTVSTEC – O que há de novo ... Recursos
21.3.5.1 Method:Execute
Executa o método dentro da instância do objeto desejada.
Sintaxe
Parametros
Reflection e Annotation – 49
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 50
TOTVSTEC – O que há de novo ... Recursos
40 return
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Resultado do Exemplo
"{ Teste Parametro }"
21.3.5.2 Method:toString
Cria uma instância da classe descrita.
Sintaxe
Method:toString()
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 51
TOTVSTEC – O que há de novo ... Recursos
24
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Resultado do Exemplo
"{ cMethodName: METODOTESTE, aParameters:[ ] }"
21.3.6.1 Method:aParameters
Array NIL S
21.3.6.2 Method:cMethodName
char N/A N
Reflection e Annotation – 52
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.4.1 Propriedades
21.4.2 Métodos
21.4.3 Exemplos
Exemplo1.tlpp
Reflection e Annotation – 53
TOTVSTEC – O que há de novo ... Recursos
34 Return cJson
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Observações:
Disponível a partir da build 17.3.0.7.
21.4.4.1 Class:CreateInstance
Cria uma instância da classe descrita.
Sintaxe
Class:CreateInstance()
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 54
TOTVSTEC – O que há de novo ... Recursos
19 return self
20
21
22 Main Function Exemplo()
23 local oRet
24 local retVar := Reflection.getClassesByAnnotation("AnnotationExemplo", "exemplo.*") //procura
por todas as classes do namespace exemplo
25 oRet := retVar1:CreateInstance()
26 oRet:teste := "teste"
27 conout(oRet:teste)
28 Return
Resultado do Exemplo
"teste"
21.4.4.2 Class:toString
Retorna uma string com o conteúdo do objeto Class.
Sintaxe
Class:toString()
Retorno
Exemplo
Exemplo1.tlpp
Reflection e Annotation – 55
TOTVSTEC – O que há de novo ... Recursos
15
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
16
17 method new() class Obj1
18 return self
19
20
21 Main Function Exemplo()
22 retVar := Reflection.getClassesByAnnotation("AnnotationExemplo", "exemplo.*") //procura por
todas as classes do namespace exemplo
23 conout(retVar1:toString())
24 Return cJson
Resultado do Exemplo
ClassName:OBJ1;ProgramName:EXEMPLO1.TLPP
char N/A N
char N/A N
21.5 Reflection.getAttributesByAnnotation
Retorna um array com o objeto Attribute de cada um dos atributos que possuem a annotation no objeto enviado.
21.5.1 Sintaxe
Reflection.getAttributesByAnnotation( oObj,cAnnotationName )
Reflection e Annotation – 56
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.5.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
21.5.3 Retorno
Nome Tipo Descrição
21.5.4 Exemplos
exemplo1.tlpp
1 #include "tlpp-object.th"
2
3 @annotation attr
4 @end
5
6 Class NovaClasse
7
8 @attr()
9 Public Data TesteAttr as character
10
11 Public Method New(str)
12 EndClass
13
14 Method New(str) class NovaClasse
15 ::TesteAttr := str
16 Return self
17
18 Function u_testeNovo()
19 local AttrA
20 local obj1 := NovaClasse():New("Instancia 1")
21
22 ConOut("-----------------------")
23 AttrA := Reflection.getAttributesByAnnotation(obj1, "attr")
24 ConOut(AttrA[1]:cAttributeName)
Reflection e Annotation – 57
TOTVSTEC – O que há de novo ... Recursos
25 ConOut(AttrA[1]:cAttributeType)
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
26 ConOut("-----------------------")
27
28 Return
21.5.6 Abrangência
17.3.0.3
21.6 Reflection.getClassAnnotation
Procura e retorna uma Annotation em um objeto.
21.6.1 Sintaxe
21.6.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
Reflection e Annotation – 58
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.6.3 Retorno
Nome Tipo Descrição
21.6.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationExemplo
2 nickname as char
3 @end
4
5 @AnnotationExemplo(nickname = "Company")
6 class MeuObjeto
7 public data data1
8 public method new()
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 jRet := Reflection.getClassAnnotation("MeuObjeto","AnnotationExemplo")
16 conout(jRet["NICKNAME"])
17 return
21.6.6 Abrangência
17.3.0.3
21.7 Reflection.getClassAnnotationList
Retorna todas as anotações utilizadas na classe.
Reflection e Annotation – 59
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.7.1 Sintaxe
Reflection.getClassAnnotationList( cClassName)
21.7.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.7.3 Retorno
Nome Tipo Descrição
21.7.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationUm
2 nickname as char
3 @end
4
5
6 @interface AnnotationDois
7 tipo as char
8 @end
9
10
11 @AnnotationUm(nickname = "Company")
12 @AnnotationDois(tipo = "Teste Lista")
13 class MeuObjeto
14 public data data1
15 public method new()
16 EndClass
17
18 Method new() Class MeuObjeto
19 return self
20
Reflection e Annotation – 60
TOTVSTEC – O que há de novo ... Recursos
21.7.6 Abrangência
17.3.0.3
21.8 Reflection.getDataAnnotation
Procura e retorna uma Annotation em uma propriedade de um objeto.
21.8.1 Sintaxe
21.8.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
Reflection e Annotation – 61
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.8.3 Retorno
Nome Tipo Descrição
21.8.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 class MeuObjeto
6 @AnnotationExemplo(nickname = "Company")
7 public data data1
8 public method new()
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 if (Reflection.isAnnotationDataPresent(oObj,"data1", "AnnotationExemplo"))
16 jRet := Reflection.getDataAnnotation(oObj,"data1","AnnotationExemplo")
17 conout(jRet["NICKNAME"])
18 endif
19
20 return
21.8.6 Abrangência
17.3.0.3
Reflection e Annotation – 62
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.9 Reflection.getClassesByAnnotation
Retorna um array com objetos do tipo Class das classes que tem uma determinada annotation.
21.9.1 Sintaxe
Reflection.getClassesByAnnotation( cAnnotationName,[cClassNameFilter]) )
21.9.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
cAnnota cara Indica o nome da annotation que será procurada em todas as classes X
tionNam cter que estão no repositório
e e
cClassN cara Indica uma expressão regular para os nomes das classes X
ameFilt cter
er e
21.9.3 Retorno
Nome Tipo Descrição
aRet Array Retorna um array com o nome de todas as classes que tem uma
determinada annotation.
21.9.4 Exemplos
exemplo1.tlpp
Reflection e Annotation – 63
TOTVSTEC – O que há de novo ... Recursos
5 nickname as char
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
6 @end
7
8
9 @AnnotationExemplo(nickname = "MeuObject")
10 class Obj1
11 public method new()
12 EndClass
13
14 @AnnotationExemplo(nickname = "10")
15 class Obj2
16 public method new()
17 EndClass
18
19
20 method new() class Obj2
21 return self
22
23 method new() class Obj1
24 return self
25
26
27 Main Function Exemplo()
28 retVar := Reflection.getClassesByAnnotation("AnnotationExemplo", "exemplo.*") //procura por
todas as classes do namespace exemplo
29 conout(retVar[1]:cClassName)
30 conout(retVar[1]:cProgramName)
31 conout(retVar[2]:cClassName)
32 conout(retVar[2]:cProgramName)
33
34 Return cJson
21.9.6 Abrangência
17.3.0.3
7 http://tdn.totvs.com/display/tec/Classe+Class
Reflection e Annotation – 64
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.10 Reflection.getDataAnnotationList
Retorna um array contendo as anotações usadas em uma propriedade de um objeto.
21.10.1 Sintaxe
21.10.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.10.3 Retorno
Nome Tipo Descrição
21.10.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationUm
2 teste1 as char
3 @end
4
5 @annotation AnnotationDois
6 teste2 as char
7 @end
8
9 class MeuObjeto
10
Reflection e Annotation – 65
TOTVSTEC – O que há de novo ... Recursos
21.10.6 Abrangência
17.3.0.3
21.11 Reflection.getDataValue
Retorna o conteudo da propriedade do objeto.
21.11.1 Sintaxe
Reflection.getDataValue(oObj,cFieldName)
Reflection e Annotation – 66
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.11.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.11.3 Retorno
Nome Tipo Descrição
21.11.4 Exemplos
exemplo1.tlpp
1 class MeuObjeto
2 public data data1
3 public data data2
4 public data data3
5 public method new()
6 EndClass
7
8
9 main function usoDeAnnotation()
10 local oObj := MeuObjeto():New()
11 oObj:data1 := "exemplo"
12 conout(Reflection.getDataValue(oObj, "data1"))
13 return
21.11.6 Abrangência
17.3.0.3
Reflection e Annotation – 67
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.12 Reflection.getDeclaredFields
Retorna as propriedade de um objeto.
21.12.1 Sintaxe
Reflection.getDeclaredFields( oObj )
21.12.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.12.3 Retorno
Nome Tipo Descrição
21.12.4 Exemplos
exemplo1.tlpp
1 class MeuObjeto
2 public data data1
3 public data data2
4 public data data3
5 public method new()
6 EndClass
7
8
9 main function usoDeAnnotation()
10 local oObj := MeuObjeto():New()
11 local aRet := Reflection.getDeclaredFields(oObj)
12 varinfo("aRet",aRet)
Reflection e Annotation – 68
TOTVSTEC – O que há de novo ... Recursos
13 return
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.12.6 Abrangência
17.3.0.3
21.13 Reflection.getFunctionAnnotation
Procura e retorna uma Annotation em uma propriedade de um objeto.
21.13.1 Sintaxe
21.13.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
cSourceN cara Indica o nome do fonte onde está a função que será procurado a X
ame ctere Annotation.
Reflection e Annotation – 69
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.13.3 Retorno
Nome Tipo Descrição
21.13.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5
6 @AnnotationExemplo(nickname = "Company")
7 function exemploAnnotation()
8 return
9
10
11 main function usoDeAnnotation()
12 local oObj := MeuObjeto():New()
13 local jRet
14 if (Reflection.isAnnotationFunctionPresent("exemplo1.tlpp", "exemploAnnotation",
"AnnotationExemplo"))
15 jRet := Reflection.getFunctionAnnotation("exemplo1.tlpp", "exemploAnnotation","AnnotationE
xemplo")
16 conout(jRet["NICKNAME"])
17 endif
18
19 return
21.13.6 Abrangência
17.3.0.3
Reflection e Annotation – 70
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.14 Reflection.getFunctionAnnotationList
Retorna um array com as annotations utilizadas em uma função.
21.14.1 Sintaxe
Reflection.getFunctionAnnotationList(cSourceName, cFunctionName )
21.14.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
21.14.3 Retorno
Nome Tipo Descrição
jRet Array de JsonObject Se não encontrar anotação alguma, retorna NIL. Caso
contrário retorna um array onde cada posição é um
object Json representando uma annotation.
21.14.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationUm
2 teste as char
3 @end
4 @annotation AnnotationDois
5 teste as char
6 @end
7
8 @AnnotationUm(teste = "Primeira Annotation da Funcao")
9 @AnnotationDois(teste = "Segunda Annotation da Funcao")
10 function exemploAnnotation()
Reflection e Annotation – 71
TOTVSTEC – O que há de novo ... Recursos
11 return
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
12
13
14 main function usoDeAnnotation()
15 local jRet
16
17 jRet := Reflection.getFunctionAnnotationList("exemplo1.tlpp", "exemploAnnotation")
18 conout(Len(jRet))
19 conout(jRet[1]["teste"])
20 conout(jRet[2]["teste"])
21
22 return
21.14.6 Abrangência
17.3.0.3
21.15 Reflection.getFunctionParamAnnotation
Retornar a Annotation de um determinado parâmetro de uma função
21.15.1 Sintaxe
21.15.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
cSourceN cara Indica o nome do fonte onde está a função que será procurado a X
ame ctere Annotation.
Reflection e Annotation – 72
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.15.3 Retorno
Nome Tipo Descrição
21.15.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 User function testeAnnotation(@AnnotationExemplo("valor parm1") parm1, @AnnotationExemplo("valor
parm2") parm2)
6 conout("funcaoTesteAnnotation")
7 return
8 main function usoDeAnnotation()
9 local jRet := Reflection.getFunctionParamAnnotation("exemplo1.tlpp", "u_testeAnnotation", 1,
"AnnotationExemplo")
10 conout(jRet["nickname"])
11 return
Reflection e Annotation – 73
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.15.6 Abrangência
17.3.0.3
21.16 Reflection.getFunctionParmsByAnnotation
Retorna se encontrou a Annotation em qualquer parâmetro de uma função.
21.16.1 Sintaxe
21.16.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
cSourceN cara Indica o nome do fonte onde está a função que será procurado a X
ame ctere Annotation.
Reflection e Annotation – 74
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.16.3 Retorno
Nome Tipo Descrição
lRet lógico Retorna .T. caso encontre algum parâmetro que tenha a
Annotation e .F. caso não tenha
21.16.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 User function testeAnnotation(@AnnotationExemplo("valor parm1") parm1, @AnnotationExemplo("valor
parm2") parm2)
6 conout("funcaoTesteAnnotation")
7 return
8 main function usoDeAnnotation()
9 local aRet
10 local jRet := Reflection.getFunctionParmsByAnnotation("exemplo1.tlpp", "u_testeAnnotation",
aRet, "AnnotationExemplo")
11 conout(jRet)
12 conout(aRet[1]) //porque tem a annotation no parâmetro 1
13 conout(aRet[2]) //porque tem a annotation no parâmetro 2
14 return
21.16.6 Abrangência
17.3.0.3
21.17 Reflection.getFunctionsByAnnotation
Reflection e Annotation – 75
TOTVSTEC – O que há de novo ... Recursos
Retorna um array com o nome de todas as funções que tem uma determinada annotation.
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.17.1 Sintaxe
Reflection.getFunctionsByAnnotation( cAnnotationName,[cFunctionNameFilter]) )
21.17.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
cAnnota cara Indica o nome da annotation que será procurada em todas as classes X
tionNam cter que estão no repositório
e e
cFuncti cara Indica uma expressão regular para os nomes das classes X
onNameF cter
ilter e
21.17.3 Retorno
Nome Tipo Descrição
aRet Array Retorna um array de arrays com o nome dos fontes e das funções
que tem uma determinada annotation.
21.17.4 Exemplos
exemplo1.tlpp
Reflection e Annotation – 76
TOTVSTEC – O que há de novo ... Recursos
21.17.6 Abrangência
17.3.0.3
21.18 Reflection.getMethodAnnotation
Procura e retorna uma Annotation em uma propriedade de um objeto.
21.18.1 Sintaxe
21.18.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
Reflection e Annotation – 77
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.18.3 Retorno
Nome Tipo Descrição
21.18.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 class MeuObjeto
6 public data data1
7 public method new()
8 @AnnotationExemplo(nickname = "Company")
9 public method exemplo()
10 EndClass
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 if (Reflection.isAnnotationcMethodPresent(oObj,"exemplo", "AnnotationExemplo"))
16 jRet := Reflection.getMethodAnnotation(oObj,"exemplo","AnnotationExemplo")
17 conout(jRet["NICKNAME"])
18 endif
19
20 return
Reflection e Annotation – 78
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.18.6 Abrangência
17.3.0.3
21.19 Reflection.getMethodAnnotationList
Procura e retorna quais anotações estão associadas a um determinado método.
21.19.1 Sintaxe
21.19.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
oObj objeto Objeto onde está definido o método cujas anotações serão X
retornadas
21.19.3 Retorno
Nome Tipo Descrição
jRet Array de JsonObject Caso não encontre annotation alguma, retorna NIL.
Senão, retorna um array onde cada posição é um Json
Object representando uma Annotation encontrada.
Reflection e Annotation – 79
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.19.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationUm
2 teste as char
3 @end
4
5 @annotation AnnotationDois
6 teste as char
7 @end
8
9
10 class MeuObjeto
11 public data data1
12 public method new()
13 @AnnotationUm(teste = "Company")
14 @AnnotationDois(teste = "TOTVS")
15 public method exemplo()
16 EndClass
17
18 main function usoDeAnnotation()
19 local oObj := MeuObjeto():New()
20 local jRet
21
22 jRet := Reflection.getMethodAnnotationList(oObj,"exemplo")
23 conout(Len(jRet))
24 conout(jRet[1]["teste"])
25 conout(jRet[2]["teste"])
26
27 return
21.19.6 Abrangência
17.3.0.3
Reflection e Annotation – 80
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.20 Reflection.getMethodParmAnnotation
Retornar a Annotation de um determinado parâmetro de uma função
21.20.1 Sintaxe
21.20.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
oObject objet Indica o objeto onde está o método que será procurado a X
o Annotation.
21.20.3 Retorno
Nome Tipo Descrição
21.20.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationExemplo
2 NICKNAME as char
3 @end
Reflection e Annotation – 81
TOTVSTEC – O que há de novo ... Recursos
4
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
5 class MeuObjeto
6 public data data1
7 public method new()
8 public method teste(@AnnotationExemplo("valor parm1") parm1, @AnnotationExemplo("valor parm2")
parm2)
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 jRet := Reflection.getMethodParmAnnotation(oObj,"teste", 1, "AnnotationExemplo")
16 conout(jRet["NICKNAME"])
17 jRet := Reflection.getMethodParmAnnotation(oObj,"teste", 2, "AnnotationExemplo")
18 conout(jRet["NICKNAME"])
19 return
21.20.6 Abrangência
17.3.0.3
21.21 Reflection.getMethodParmsByAnnotation
Retorna se encontrou a Annotation em qualquer parâmetro de um método.
21.21.1 Sintaxe
Reflection e Annotation – 82
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.21.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
oObject objet Indica o objeto onde está o método que será procurado a X
o Annotation.
21.21.3 Retorno
Nome Tipo Descrição
lRet lógico Retorna .T. caso encontre algum parâmetro que tenha a
Annotation e .F. caso não tenha.
21.21.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationExemplo
2 NICKNAME as char
3 @end
4
5 class MeuObjeto
6 public data data1
7 public method new()
8 public method teste(@AnnotationExemplo("valor parm1") parm1, @AnnotationExemplo("valor parm2")
parm2)
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 jRet := Reflection.getMethodParmsByAnnotation(oObj,"teste", aRet, "AnnotationExemplo")
Reflection e Annotation – 83
TOTVSTEC – O que há de novo ... Recursos
16 conout(jRet)
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
17 conout(aRet[1])
18 conout(aRet[2])
19 return
21.21.6 Abrangência
17.3.0.3
21.22 Reflection.getMethodsByAnnotation
Retorna um array com o nome de todos os métodos que possuem a annotation passada como argumento
21.22.1 Sintaxe
Reflection.getMethodsByAnnotation( oObj,cAnnotationName )
21.22.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
Reflection e Annotation – 84
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.22.3 Retorno
Nome Tipo Descrição
21.22.4 Exemplos
exemplo1.tlpp
1 #INCLUDE "MsObject.CH"
2
3 NAMESPACE TesteReflection
4 MAIN FUNCTION Teste()
5 ClasseTeste():New()
6 RETURN
7
8 @annotation AnnotationMethod
9 property1 as char
10 @end
11
12 @annotation AnnotationClass
13 property1 as char
14 @end
15
16 @AnnotationClass("testeClass")
17 class ClasseUm
18
19 public method New()
20
21 @AnnotationMethod("testeMethod")
22 public method testeMethod()
23
24 endclass
25
26 METHOD NEW() CLASS ClasseUm
27 return self
28
29 method testeMethod() CLASS ClasseUm
30 conout("Teste de metodo")
31 return
32
33 CLASS ClasseTeste
34 PUBLIC METHOD NEW()
35 ENDCLASS
36
37
38 METHOD NEW() CLASS ClasseTeste
39
Reflection e Annotation – 85
TOTVSTEC – O que há de novo ... Recursos
40 local classes := {}
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
41 local methods := {}
42 local instance
43
44 // Pego todas as classes que possuem a annotation "AnnotationClass"
45 classes := Reflection.getClassesByAnnotation("AnnotationClass", "TesteReflection.*")
46
47 conout(classes[1])
48
49 // Instancio um novo objeto desta classe
50 instance := &(classes [1] + "():New()")
51
52 // Pego todos os metodos dentro da classe que possuem a annotation "AnnotationMethod"
53 methods := Reflection.getMethodsByAnnotation(instance, "AnnotationMethod")
54
55 conout(methods[1])
56
57 // Executo o metodo encontrado
58 &("instance:" + methods[1] + "()")
59
60 RETURN self
21.22.6 Abrangência
17.3.0.3
21.23 Reflection.getMethodsObjectByAnnotation
Retorna um array com o objeto Method de cada um dos métodos que possuem a annotation no objeto enviado.
21.23.1 Sintaxe
Reflection.getMethodsObjectByAnnotation( oObj,cAnnotationName )
Reflection e Annotation – 86
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.23.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
21.23.3 Retorno
Nome Tipo Descrição
21.23.4 Exemplos
exemplo1.tlpp
Reflection e Annotation – 87
TOTVSTEC – O que há de novo ... Recursos
25 return self
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
26
27 Method MetodoTeste() class NovaClasseMetodo
28 Conout("Instancia executada: " + ::TesteAttr)
29 return "Banana"
30
31
32 User Function testeMetodo()
33 local ObjMethod
34 local classes
35 local obj1
36
37 classes := Reflection.getClassesByAnnotation("classeMetodo", "") // vazio para pegar todas as
classes do repositorio
38
39 obj1 := classes[1]:CreateInstance("Instancia 1")
40
41 ObjMethod := Reflection.getMethodsObjectByAnnotation(obj1, "metodo")
42 conout("Nome do Metodo: " + ObjMethod[1]:cMethodName)
43
44 return
21.23.6 Abrangência
17.3.0.3
21.24 Reflection.getObjectAnnotation
Procura e retorna uma Annotation em um objeto.
21.24.1 Sintaxe
Reflection e Annotation – 88
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.24.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.24.3 Retorno
Nome Tipo Descrição
21.24.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationExemplo
2 nickname as char
3 @end
4
5 @AnnotationExemplo(nickname = "Company")
6 class MeuObjeto
7 public data data1
8 public method new()
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 if (Reflection.isAnnotationObjectPresent(oObj,"AnnotationExemplo"))
16 jRet := Reflection.getObjectAnnotation(oObj,"AnnotationExemplo")
17 conout(jRet["NICKNAME"])
18 endif
19
20 return
Reflection e Annotation – 89
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.24.6 Abrangência
17.3.0.3
21.25 Reflection.getProgramFunctionsByAnnotation
Retorna um array com o nome de todas as funções que tem uma determinada annotation.
21.25.1 Sintaxe
Reflection.getProgramFunctionsByAnnotation(cProgramName, cAnnotationName)
21.25.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
cProgra cara Indica o nome do programa onde serão procuradas funções que X
mName cter contenham a annotation
e
cAnnota cara Indica o nome da annotation que será procurada em todas as classes X
tionNam cter que estão no repositório
e e
21.25.3 Retorno
Nome Tipo Descrição
aRet Array Retorna um array com o nome das funções que tem uma
determinada annotation.
Reflection e Annotation – 90
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.25.4 Exemplos
exemplo1.tlpp
21.25.6 Abrangência
17.3.0.3
21.26 Reflection.isAnnotationDataPresent
Procura uma Annotation em uma propriedade de um objeto.
21.26.1 Sintaxe
Reflection e Annotation – 91
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.26.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.26.3 Retorno
Nome Tipo Descrição
lRet lógico Retorna .T. caso encontre a Annotation e .F. caso não
encontre.
21.26.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5
6 class MeuObjeto
7 @AnnotationExemplo(nickname = "Company")
8 public data data1
9 public method new()
10 EndClass
11
12
13 main function usoDeAnnotation()
14 local oObj := MeuObjeto():New()
15 conout(Reflection.isAnnotationDataPresent(oObj, "data1", "AnnotationExemplo"))
16 conout(Reflection.isAnnotationDataPresent(oObj, "data1", "Teste"))
17 return
Reflection e Annotation – 92
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.26.6 Abrangência
17.3.0.3
21.27 Reflection.isAnnotationFunctionPresent
Procura uma Annotation em uma função ADVPL.
21.27.1 Sintaxe
21.27.2 Parâmetros
Nome Tipo Descrição Obrigat Referê
ório ncia
cSourceNa carac Indica o nome do fonte onde está a função que será procurado X
me tere a Annotation.
Reflection e Annotation – 93
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.27.3 Retorno
Nome Tipo Descrição
lRet numérico Retorna .T. caso encontre a Annotation e .F. caso não
encontre.
21.27.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5
6 @AnnotationExemplo(nickname = "Company")
7 function exemploAnnotation()
8 return
9
10
11 main function usoDeAnnotation()
12 conout(Reflection.isAnnotationFunctionPresent("exemplo1.tlpp", "exemploAnnotation",
"AnnotationExemplo"))
13 conout(Reflection.isAnnotationFunctionPresent("exemplo1.tlpp", "exemploAnnotation", "Teste"))
14 return
21.27.6 Abrangência
17.3.0.3
21.28 Reflection.isAnnotationMethodPresent
Procura uma Annotation em uma propriedade de um objeto.
Reflection e Annotation – 94
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.28.1 Sintaxe
21.28.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
21.28.3 Retorno
Nome Tipo Descrição
lRet numérico Retorna .T. caso encontre a Annotation e .F. caso não
encontre.
21.28.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5
6 class MeuObjeto
7 public data data1
8 public method new()
9 @AnnotationExemplo(nickname = "Company")
10 public method exemplo()
11 EndClass
12
13
Reflection e Annotation – 95
TOTVSTEC – O que há de novo ... Recursos
21.28.6 Abrangência
17.3.0.3
21.29 Reflection.isAnnotationObjectPresent
Procura uma Annotation em um objeto.
21.29.1 Sintaxe
21.29.2 Parâmetros
Nome Tipo Descrição Obrigató Referên
rio cia
Reflection e Annotation – 96
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.29.3 Retorno
Nome Tipo Descrição
21.29.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 @AnnotationExemplo(nickname = "Company")
6 class MeuObjeto
7 public data data1
8 public method new()
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 conout(Reflection.isAnnotationObjectPresent(oObj,"AnnotationExemplo"))
15 conout(Reflection.isAnnotationObjectPresent(oObj,"Teste"))
16 return
21.29.6 Abrangência
17.3.0.3
21.30 Reflection.isAnnottationFunctionParamPresent
Verifica se existe uma Annotation para um determinado parâmetro de uma função
Reflection e Annotation – 97
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.30.1 Sintaxe
21.30.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
cSourceN cara Indica o nome do fonte onde está a função que será procurado a X
ame ctere Annotation.
21.30.3 Retorno
Nome Tipo Descrição
lRet lógico Retorna .T. caso encontre a Annotation e .F. caso não
encontre.
21.30.4 Exemplos
exemplo1.tlpp
1 @annotation AnnotationExemplo
2 nickname as char
3 @end
4
5 User function testeAnnotation(@AnnotationExemplo("oioi") parm1, @AnnotationExemplo("oioi") parm2)
6 conout("funcaoTesteAnnotation")
7 return
8 main function usoDeAnnotation()
Reflection e Annotation – 98
TOTVSTEC – O que há de novo ... Recursos
9 conout(Reflection.isAnnottationFunctionParamPresent("exemplo1.tlpp", "u_testeAnnotation", 1,
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
"AnnotationExemplo"))
10 conout(Reflection.isAnnottationFunctionParamPresent("exemplo1.tlpp", "u_testeAnnotation", 2,
"AnnotationExemplo"))
11 conout(Reflection.isAnnottationFunctionParamPresent("exemplo1.tlpp", "u_testeAnnotation", 1,
"AnnotationNaoEncontrada"))
12 return
21.30.6 Abrangência
17.3.0.3
21.31 Reflection.isAnnottationMethodParamPresent
Verifica se existe uma Annotation para um determinado parâmetro de uma função
21.31.1 Sintaxe
21.31.2 Parâmetros
Nome Tipo Descrição Obriga Refer
tório ência
oObject objet Indica o objeto onde está o método que será procurado a X
o Annotation.
Reflection e Annotation – 99
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.31.3 Retorno
Nome Tipo Descrição
lRet lógico Retorna .T. caso encontre a Annotation e .F. caso não
encontre.
21.31.4 Exemplos
exemplo1.tlpp
1 @interface AnnotationExemplo
2 NICKNAME as char
3 @end
4
5 class MeuObjeto
6 public data data1
7 public method new()
8 public method teste(@AnnotationExemplo("valor parm1") parm1, @AnnotationExemplo("valor parm2")
parm2)
9 EndClass
10
11
12 main function usoDeAnnotation()
13 local oObj := MeuObjeto():New()
14 local jRet
15 conout(Reflection.isAnnottationMethodParamPresent(oObj,"teste", 1, "AnnotationExemplo"))
16 conout(Reflection.isAnnottationMethodParamPresent(oObj,"teste", 2, "AnnotationExemplo"))
17 conout(Reflection.isAnnottationMethodParamPresent(oObj,"teste", 2, "AnnotationExemploErro"))
18 return
.F.
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
21.31.6 Abrangência
17.3.0.3
21.32 Reflection.getClassByName
Retorna uma instância da classe solicitada de maneira dinâmica.
21.32.1 Sintaxe
21.32.2 Parâmetros
Nome Tipo Descrição Obrig Refer
atório ência
cName cara Indica o nome da classe que será instanciada, caso a mesma exista no X
cter no repositório.
e
cClassN cara Indica uma expressão regular para os nomes das classes X
ameFilt cter
er e
21.32.3 Retorno
Nome Tipo Descrição
21.32.4 Exemplos
exemplo1.tlpp
Abrangência
17.3.0.3
8 http://tdn.totvs.com/display/tec/Classe+Class
23 Sobrecarga de Operadores
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
A partir da versão 19.3.1.0 será possível sobrecarregar operadores. Isso é na definição da sua classe você poderá
sobrecarregar o comportamento da Soma (ADD), da Subtração (SUB), da Multiplicação (MULT), da Divisão (DIV), da
Comparação (COMPARE) e da Conversão para String (TOSTRING).
Não é permitido declarar operadores que não sejam os citados acima, ou seja, os tokens add, sub, mult, div,
compare e tostring fazem parte da linguagem e só eles poderão ser utilizados.
Não é permitido declarar métodos cujo nome inicie com "operator".
Sobrecarga.tlpp
1 #include "tlpp-object.th"
2 class ComplexNumber
3 public data a
4 public data b
5 public method new()
6 public method create(parm1, parm2)
7 public OPERATOR Add (parm1)
8 public OPERATOR Sub(parm1)
9 public OPERATOR Mult(parm1)
10 public OPERATOR Div(parm1)
11 public OPERATOR Compare(parm1)
12 public OPERATOR ToString()
13 endclass
14
15 method new() class ComplexNumber
16
17 return self
18
19 method create(parm1, parm2) class ComplexNumber
20 self:a := parm1
21 self:b := parm2
22 return self
23
24
25 //esse será o método invocado ao executar a soma de um objeto do tipo ComplexNumber com qualquer
outro tipo
26 operator Add(parm1) class ComplexNumber
27 local ret := ComplexNumber():New()
28 ret:a := self:a + parm1:a
29 ret:b := self:b + parm1:b
30 return ret
31
32 operator Sub(parm1) class ComplexNumber
33 local ret := ComplexNumber():New()
34 ret:a := self:a - parm1:a
35 ret:b := self:b - parm1:b
36 return ret
37
38
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
94 conout(objRet)
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
95
96 if (obj < obj2)
97 conout("é menor")
98 endif
99 return
23.2 Abrangência
19.3.1.0
24 TGetData e TGetMethods
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 será possível obter o retorno dos métodos e atributos de uma classe sem instanciá-la.
Interface.tlpp
1 #include "tlpp-object.th"
2
3 Class TesteReflection
4 public method new()
5 protected method func1()
6 private method func2()
7 public data data1
8 private data data2
9 protected data data3
10 EndClass
11
12 method new() class TesteReflection
13 Return self
14 method func1() class TesteReflection
15 Return self
16 method func2() class TesteReflection
17 Return self
18
19 Function u_test_getClass
20 local retMethods := TesteReflection():TGetMethods()
21 local retData := TesteReflection():TGetData()
22 conout("### methods:")
23 conout(retMethods[1])
24 conout(retMethods[2])
25 conout(retMethods[3])
26 conout("### data:")
27 conout(retData[1])
28 conout(retData[2])
29 conout(retData[3])
30 Return
Resultado:
### methods:
FUNC1
FUNC2
NEW
### data:
DATA1
DATA3
DATA2
25 Tipagem em TL++
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
25.1 Introdução
Novidades O que eu ganho?
Estão chegando muitas novidades em relação à Agora, o desenvolvedor TL++ poderá ter um código de muito
tipagem de dados na linguagem TL++, o que a mais qualidade, pois muitos erros de type mismatch que eram
direciona para um nível de competitividade muito somente identificados em tempo de execução (com o sistema
próximo de importantes linguagens de mercado, em produção), poderão ser antecipados para o tempo de
tais como Java e Type Script. desenvolvimento, compilação ou expedição.
Perco o legado?
25.2 Requisitos
Como posso usar o TLPP Tipado? • Fonte TLPP
• é preciso estar com desenvolvimento
Por estar nativo na linguagem TL++, o seu uso é descomplicado alinhado com o TL++;
e rápido: • o fonte precisa ter extensão "tlpp".
• AppServer
• Disponível a partir da versão 20.3.0.x9
do Application Server (Harpia)
9 https://tdn.totvs.com/display/tec/Application+Server+-+20.3.y.z
deci Use para valores numéricos de alta precisão, essenciais para Nil U F
mal tratamentos monetários. (DEC_CREATE12)
Local fDec1 as decimal
Local fDec2 := DEC_CREATE( 7233.759119, 21, 20 ) as Decimal
logic Utilizado para valores lógicos, verdadeiro (.T.) ou falso (.F.) .F. L L
al (falso)
Local lBol1 as logical
Local lBol2 := .T. as logical
10 https://tdn.totvs.com/pages/viewpage.action?pageId=27677583
11 https://tdn.totvs.com/pages/viewpage.action?pageId=27677583
12 https://tdn.totvs.com/display/tec/DEC_CREATE
varia Utilizado para dizer que é um tipo variante e auto polimórfico, Nil U Confor
nt podendo assumir qualquer dos tipos disponíveis me o
tipo atr
Local xVar1 as variant
ibuído
Local xVar2 := 4 as variant
Local xVar3 := "Texto" as variant
"sem Se não for declarado nenhum dos tipos, a variável será tratada Nil U Confor
tipo como "variant" me o
defin tipo
Local xVar1
ido" atribuí
Local xVar2 := .T. do
Local xVar3 := Date()
Obs. Em TL++, as variáveis de tipo numeric, character e date não devem ser comparados com Nil. Segue um
exemplo:
If (nNum == Nil)
...
EndIf
No exemplo acima, dará erro de compilação, pois a variável nNum é igual a 'N' e já tem o valor default 0 (zero).
Caso precise fazer esta comparação com Nil, o tipo de nNum deve ser modificado para Variant.
Veja também:
VALTYPE13
DEC_CREATE14
13 https://tdn.totvs.com/pages/viewpage.action?pageId=27677583
14 https://tdn.totvs.com/display/tec/DEC_CREATE
Qual a forma básica de Data Posso deixar uma propriedade sem definição
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
declarar uma propriedade name as Exemplo - Declaração de tipo ou dar um tipo de objeto específico?
tipada? Type básica de propriedades Sim, de maneira idêntica ao que se faz com uma
tipadas variável (veja Tipando Variáveis(see page 113)).
:
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
=
10
as
Nu
me
ri
c
Re
tu
rn
nV
ar
tMyCla
ss
Return
Self
Method
myMeth
od ()
as
Numeri
c
class
tMyCla
ss
Return
10
atívei as
s com
os
Compi
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
lação
lVar
:=
typed
Func(
1)
//
Erro
de
Compi
lação
Retur
n .T.
25.8.1 Variadic
Abrangência
Versão 17.3.0.0 e superiores
A partir da versão 17.3.0.0 o recurso de parâmetro do tipo variadic está disponível no TL++.
Variadic é um tipo de dado para ser utilizado em funções que necessitam receber uma quantidade variável de
parâmetros.
Para sua correta utilização, a função deve estar com os tipos de todos os parâmetros devidamente definidos, além
disso, o parâmetro Variadic deve aparecer apenas uma vez e sempre na última posição da lista de parâmetros.
Para saber a quantidade de parâmetros que foram passados em uma chamada de função que utiliza o Variadic,
basta acessar a propriedade :vCount.
Para acessar os parâmetros propriamente ditos, deve-se acessar a propriedade :vArgs[<posição do parâmetro>].
Para ilustrar a utilização, no exemplo a seguir temos uma função que recebe uma quantidade variável de
parâmetros e imprime todos os valores recebidos:
Variadic.tlpp
Caso não seja passado nenhum valor na posição definida como parâmetro Variadic, a variável interna da
função estará com valor Nil, sendo então necessário sempre a verificação antes de acessar as
propriedades de Variadic.
integer N 0
double N 0
numeric N 0
character C ""
logical L .F.
date D 31/12/1899
A B C D F H I J L N O U
Essa tabela-verdade combina o produto cartesiano entre os tipos nativos definidos na linguagem TLPP, conforme
apresentado na seção Tipos Nativos(see page 110).
Quando houver compatibilidade entre os tipos, haverá uma marcação com o símbolo , como ilustrado no
cruzamento N x U ou U x U.
Não estando marcado, significará que há um erro de tipagem.
25.10.2 Atribuição
A linguagem TLPP disponibiliza três formatos de atribuição:
• Atribuição padrão: VAR := EXPRESSION
• Atribuição simples: VAR = EXPRESSION
• Atribuição composta: VAR1 := VAR2 := ... := VARN := EXPRESSION
Em qualquer dos formatos, seja VAR uma variável de escopo ou propriedade de objeto, a atribuição segue as regras
da tabela verdade seguinte.
A B C D F H I J L N O U
+ - += -=
Formatos:
• EXPR1 + EXPR2
• EXPR1 - EXPR2
• VAR += EXPR
• VAR -= EXPR
Nos dois primeiros formatos, temos EXPR1 nas linhas e EXPR2 nas colunas da tabela.
Nos dois últimos, VAR está nas linhas e EXPR nas colunas.
A B C D F H I J L N O U
* / % ^ << >> *= /=
Formatos:
• EXPR1 * EXPR2
• EXPR1 / EXPR2
• EXPR1 % EXPR2
• EXPR1 ^ EXPR2
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Nos primeiros formatos, temos EXPR1 nas linhas e EXPR2 nas colunas da tabela.
Nos dois últimos, VAR está nas linhas e EXPR nas colunas.
A B C D F H I J L N O U
GRUPO 1
Formatos:
• EXPR1 < EXPR2
• EXPR1 > EXPR2
• EXPR1 <= EXPR2
• EXPR1 >= EXPR2
A B C D F H I J L N O U
GRUPO 2
== <>
Formatos:
• EXPR1 == EXPR2
• EXPR1 <> EXPR2
A B C D F H I J L N O U
A B C D F H I J L N O U
Formato:
• EXPR1 $ EXPR2
A B C D F H I J L N O U
A B C D F H I J L N O U
GRUPO 1
Considere os operadores:
.OR. .AND.
Formatos:
• EXPR1 .OR. EXPR2
• EXPR1 .AND. EXPR2
A B C D F H I J L N O U
!
J
F
A
C
B
D
U
N
A
A
GRUPO 2
Formato:
• ! EXPR
B
B
C
C
Considere o operador:
D
D
F
F
H
H
I
I
J
J
L
L
N
N
O
O
U
U
A B C D F H I J L N O U
+ -
Formatos:
• - EXPR
• + EXPR
A B C D F H I J L N O U
A B C D F H I J L N O U
++ --
Formatos:
• ++EXPR
• --EXPR
• EXPR++
• EXPR--
A B C D F H I J L N O U
A B C D F H I J L N O U
25.10.10 IF e While
A expressão condicional formadora de um bloco If ou While é analisada e deve corresponder a um valor lógico.
Formatos:
• if (EXPR)
• while (EXPR)
A B C D F H I J L N O U
A B C D F H I J L N O U
Formatos:
• For VAR := EXPR1 to EXPR2
• For VAR := EXPR1 to EXPR2 step EXPR3
Em qualquer dos formatos, EXPR1, EXPR2 e EXPR3 estão restritas a terem característica numérica.
A B C D F H I J L N O U
A B C D F H I J L N O U
25.10.12 IF Ternário
O IF ternário obedece a seguinte sintaxe:
Formatos:
• if ( EXPR1, EXPR2, EXPR3 )
• iif ( EXPR1, EXPR2, EXPR3 )
A EXPR1 deve ser tratada da mesma for que a expressão condicional de If e While (veja IF e While(see page 131))
A EXPR2 e a EXPR3 devem ser compatíveis entre si. Por exemplo, não é permitido que a EXPR2 seja Character e
a EXPR3 seja Numeric. No entanto, sendo as duas Character ou as duas Numeric, a compatibilidade é garantida.
A EXPR2 está nas linhas da tabela e a EXPR3 está nas colunas.
A B C D F H I J L N O U
A B C D F H I J L N O U
VAR [ INDEX ]
Regras:
1. Sendo VAR uma variável de tipo Array, INDEX poderá ser Integer, Numeric ou Variant;
2. Sendo VAR uma variável de tipo Variant, INDEX poderá ser Integer, Numeric, Character ou Variant;
3. Sendo VAR uma variável de tipo Json, visite a seção Acesso a Json(see page 135)para entender o
tratamento;
4. Para qualquer outro tipo de VAR, será gerado um erro de compilação.
VAR [ KEY ]
Regras:
1. Sendo VAR uma variável de tipo Json, KEY poderá ser Character ou Variant;
2. Sendo VAR uma variável de tipo Array ou Variant, visite a seção Acesso a Array(see page 134) para entender
melhor;
3. Sendo VAR de qualquer outro tipo, será gerado um erro de compilação.
26 Try...Catch
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Um bloco de código entre as expressões Try...Catch são testados e caso de um erro implícito no código (uma
exceção), ou erro explicito declarado no programa, tem seu fluxo desviado para o bloco de tratamento de erro em
catch.
Diferente do BEGIN SEQUENCE ... END SEQUENCE, onde o código dispara o bloco de erros e pode continuar sua
execução sem cair no RECOVER, apenas mediante ao comando o BREAK, uma exceção no código, mesmo que de
forma implícita (por exemplo, a utilização de uma classe não definida), irá imediatamente desviar o fluxo de código
para o bloco de tratamento de erro.
Outra diferença é que a captura do erro ocorre via a classe ErrorClass(), que pode ou não ter sido definida durante a
execução do programa, e conterá em seus parâmetros o conteúdo do erro informado.
Apesar do TRY...CATCH só estar disponível no TLPP, ainda é possível realizar um THROW, implícito ou
explicito a partir de uma chamada para uma função em advpl dentro de seu bloco de código.
26.1 01. SINTAXE
TRY ...
< instruções >
...
[ THROW [ < expressão > ] ]
...
< instruções >
...
[ RECOVER [ USING < variável > ] ]
...
< instruções >
...
CATCH
< instruções >
FINALLY
< instruções >
ENDTRY
26.2 02. PARÂMETROS
Nome Tipo Descrição Obrigatório Referência
Try...Catch – 136
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
THROW [ < expressão Expressão Define um desvio explicito para o Não Sim
>] tratamento de erro
26.3 03. EXEMPLOS
Um dos modelos mais simples de exemplo que temos, é onde realizamos um throw explicito em nosso programa.
Isso faz com que, indifente do nível do stack onde estamos no nosso programa, ele vai mudar imediatamente o
fluxo do programa para o CATCH, e informar a ultima descrição de erro erro (varError:description) informada:
function u_fTryT01()
conout("funcao que cria o errorclass")
varError := ErrorClass():New() //sempre a exceção lançada deve ser uma instância da classe ErrorClass
ou de uma classe que herda de ErrorClass
varError:genCode := 15461
varError:description := "ERRO designado no ErrorClass do u_fTryT01"
throw varError //lançamento da exceção com objeto de erro
conout("NÃO PODE PASSAR NUNCA") //nunca passará nesse trecho de código porque tem uma exceção lançada
na linha anterior
return
User Function TryC001
Local x
Local y := "TryTest"
TRY
//ErrorClass pode ou não ser declarado no mesmo nível
//Local oError := ErrorClass():New()
u_fTryT01()
conout("essa linha NÃO deve ser executada (throw explicito dentro do u_fTryT01())")
x := &y.(,)
CATCH oError
ConOut( oError:description )
ENDTRY
Try...Catch – 137
TOTVSTEC – O que há de novo ... Recursos
Return( NIL )
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Uma observação importante ao declarar a ErrorClass em outro nível de stack, é o seu escopo. Observe o exemplo
abaixo:
function u_fTryT02p()
conout("funcao que cria o errorclass como publica (vai funcionar)")
public varError := ErrorClass():New() //sempre a exceção lançada deve ser uma instância da classe
ErrorClass ou de uma classe que herda de ErrorClass
varError:genCode := 15461
varError:description := "ERRO DO u_fTryT02p"
return
User Function TryC002
TRY
//se eu declarar como local, e nao public, vai dar erro no varerror dentro do catch..
u_fTryT02p()
throw varError
conout("NÃO PODE PASSAR NUNCA") //nunca passará nesse trecho de código porque tem uma exceção
lançada na linha anterior
CATCH varError
//ConOut( ProcName() + " " + Str(ProcLine()) + " " + e:description )
ConOut( varError:description )
ENDTRY
Return( NIL )
Nesse caso o throw explicito foi realizado em outro nivel de stack onde ocorreu a declaração da instancia da
ErrorClass. Porem como foi declarado como publica, não houve problema. Diferentemente do exemplo abaixo:
function u_fTryT02()
conout("funcao que cria o errorclass como local (NÃO vai funcionar)")
varError := ErrorClass():New() //sempre a exceção lançada deve ser uma instância da classe ErrorClass
ou de uma classe que herda de ErrorClass
varError:genCode := 15461
varError:description := "ERRO DO u_fTryT02"
return
User Function TryC0002
TRY
//se eu declarar como local, e nao public, vai dar erro no varerror dentro do catch..
u_fTryT02()
throw varError
conout("NÃO PODE PASSAR NUNCA") //nunca passará nesse trecho de código porque tem uma exceção
lançada na linha anterior
CATCH varError
conout("conout aqui vai mostrar errado, como 'varError nao existe', e nao como 'ERRO DO u_fTryT02'")
ConOut( varError:description )
ENDTRY
Try...Catch – 138
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
Return( NIL )
Aqui o erro capturado será na linha do THROW varError, e não a informação declarada no stack anterior, ja que
nesse ponto do stack a instancia varError não existe.
Outro exemplo simples de utilização é com a captura de erros de forma implícita, por conta de exceções na
linguagem. Veja o exemplo onde a função TryTest não existe em nosso RPO:
Local x
Local y := "TryTest"
TRY
u_fTryT02p()
x := &y.(,)
conout("NÃO PODE PASSAR NUNCA") //nunca passará nesse trecho de código porque tem uma exceção
lançada na linha anterior
CATCH oError
ConOut( oError:description )
ENDTRY
Return( NIL )
Nesse exemplo mesmo com a classe declarada varError na função , o conout da oError será "Macro FC: cannot find
function :TryTest". Observe também que apesar de não existir a instancia declara de oError, mesmo assim a
chamada de CATCH a essa instancia foi preenchida com a instancia padrão de ErrorClass() que existe no AppServer,
isso considerando que o erro foi implícito, e não explicito como na chamada de THROW varError de um exemplo
anterior.
Para ficar claro a questão de erros explicitos e implicitos, observe no proximo exemplo onde mesmo informando
uma descrição a instancia oError, a informação do conout é do erro implícito:
Local x
Local y := "TryTest"
TRY
oError := ErrorClass():New()
oError:genCode := 15461
oError:description := "ERRO designado no ErrorClass do u_TryC0003"
x := &y.(,)
conout("NÃO PODE PASSAR NUNCA") //nunca passará nesse trecho de código porque tem uma exceção
lançada na linha anterior
CATCH oError
ConOut( oError:description )
ENDTRY
Return( NIL )
Try...Catch – 139
TOTVSTEC – O que há de novo ... Recursos
Quanto a utilização da instancia da classe ErrorClass, atenção a esse comportamento já citado sobre a instancia
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
que existe nativamente do Appserver. Nesse exemplo, a instancia de oSample2 é a ErrorClass, e a instancia do
oSample de uma classe que nao existe. No catch foi utilizado a instancia errada, mas como ela não existe, foi criado
nela a referencia para a ErrorClass nativa do Appserver. Então teremos dois conouts, o do oSample2 da nossa
classe ErrorClass (que não tem nada), e o oSample com a instancia do ErrorClass nativo do Appserver, com a
descrição "invalid class NAOEXISTE":
Function u_TryC005
local val2 := 2
oSample2 := ErrorClass():New()
try
//conout("2" + val2)
oSample := naoexiste():New()
ConOut("isso NÃO deve executar...")
catch oSample //errado, mas como o objeto nao existe, ele recebe o ErrorClass nativo do Appserver
ConOut("Estou no Catch...")
ConOut( oSample2:description )
conout( oSample:description)
conout("atencao para a confusao entre as classes... o oSample2 (que é a classe correta) mas o catch
que esta com a instancia errada, funcionou")
endtry
Return
Function u_TryC0005
oSample2 := ErrorClass():New()
conout("atencao para a confusao entre as classes...")
try
oSample := Sample2Class():New() //SampleClassChild():New()
//conout("2" + 2)
ConOut("Estou no Try...")
throw oSample
catch oSample2 //as SampleClass
ConOut("Estou no Catch...")
ConOut( oSample2:description )
endtry
Return
Outra forma de setar na instancia da ErrorClass() nativa do Appserver, é utilizar a função UserException15:
15 https://tdn.totvs.com/display/tec/UserException
Try...Catch – 140
TOTVSTEC – O que há de novo ... Recursos
conout(e:description)
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
conout(e:genCode)
finally //o finally é opcional e será executado de qualquer maneira(se tiver ou não tiver exceção
lançada)
conout("finally")
endtry
return
Outro exemplo importante é que é perfeitamente possivel cruzar a utilização do Comando BEGIN SEQUENCE ...
END16 com o Try..Catch:
function u_fErrBfun03( )
conout("errorblock foi acionado com break")
break
return
Function u_TryCTLPP0002
Local oError
Local e
TRY
//se eu declarar como local, e nao public, vai dar erro no varerror dentro do catch.. deveria
resgatar?
u_fTryT02p()
oError := ErrorBlock( { | e | u_fErrBfun03() } )
Begin Sequence
var := var+1 // variavel não existe
conout("Isto jamais deve ser executado" )
return .T.
Recover
conout("Recover, passar aqui")
End Sequence
conout("terminou o begin..end")
throw varError
conout( "Isto jamais deve ser executado" ) //nunca passará nesse trecho de código porque tem uma
exceção lançada na linha anterior
CATCH varError
conout("entrou no catch")
ConOut( varError:description )
ENDTRY
Return
16 https://tdn.totvs.com/display/framework/BEGIN+SEQUENCE+...+END
Try...Catch – 141
TOTVSTEC – O que há de novo ... Recursos
You are using an UNLICENSED copy of Scroll PDF Exporter for Confluence. Do you find Scroll PDF Exporter useful? Consider purchasing it today: https://www.k15t.com/software/scroll-pdf-exporter
26.4 04. ABRANGÊNCIA
Application Server 20.3.0.0
17 https://tdn.totvs.com/display/framework/BEGIN+SEQUENCE+...+END
Try...Catch – 142