CONTEÚDO
- Visão Geral
- Atributos, Métodos e Procedures
- Exemplo de Utilização
- Dicas de Conversão do OCX para o TotvsTreeList
- Tela do TotvsTreeList
01. VISÃO GERAL
Este componente TotvsTreeList, feito em progress, tem como objetivo substituir o componente TreeList fornecido pela Microsoft (mscomctrl.ocx), pois este OCX não possui compatibilidade com o OpenEdge 64Bits.
Ele é um TreeList que possui as seguintes características:
- Performático, onde testamos mais de 5000 nós e não houve perda de performance, pois utiliza um browse.
- Feito totalmente em 4GL, sendo uma classe progress.
- Possuímos o código fonte, onde podemos customizá-lo de acordo com as nossas necessidades.
- Não possui imagem
- Permite a adição de colunas extras
- Aceita comandos de teclado para expandir ou recolher os itens filhos, como:
- "*" - Expande todos os itens do TreeList
- "/" - Recolhe todos os itens do TreeList
- "+" - Expande o próximo nível do node selecionado
- "-" - Recolhe todos os filhos do node selecionado
02. ATRIBUTOS, MÉTODOS E PROCEDURES
Foi disponibilizado no TotvsTreeList os seguintes atributos:
Atributo | Tipo | Descrição | Exemplo/Utilização |
---|---|---|---|
parentFrame | Handle | Handle da frame pai que vai receber o TreeList. | // cria a instancia do TreeList |
parentProg | Handle | Handle do programa pai, que instancionou o TreeList. É utilizado para executar a procedure browseEvent, no programa pai, quando ocorrer algum evento no TreeList. | oTreeList:parentProg = THIS-PROCEDURE. |
row | Decimal | Especifica a linha em que o TreeList será apresentado. | oTreeList:row = 2. |
col | Decimal | Especifica a coluna em que o TreeList será apresentado. | oTreeList:col = 5. |
width | Decimal | Especifica o tamanho do TreeList. | oTreeList:width = 100. |
height | Decimal | Especifica a altura do TreeList. | oTreeList:height = 12. |
currentCode | Character | Contem o código do node corrente/selecionado. Ele é utilizado para obter informações e ações sobre o item selecionado. | MESSAGE "Node selecionado:" oTreeList:currentCode SKIP |
browseTreeList | Handle | Retorna o handle do Browse do TreeList. Utilize este recurso somente quando quiser manipular diretamente o Browse do TreeList. OBS: Muito cuidado ao tentar manipular diretamente este Browse. | oTreeList:browseTreeList:sensitive = FALSE. |
Métodos | Parâmetros | Descrição | Exemplo/Utilização | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
initialize | Inicializa o componente. Este método deverá ser chamado após ser adicionado todas as colunas do TreeList, após inicializado, a adição de colunas não será permitida. | oTreeList:initialize(). | |||||||||||||||||||||||||
setSize |
| Define a posição, tamanho e altura do TreeList. | // define o tamanho do componente | ||||||||||||||||||||||||
showInvalidValues |
| Indica se deve ou não apresentar valores inválidos no Treelist (conteúdo igual a nulo "?"). Se for configurado para não mostrar, eles serão apresentados como: "". O valor padrão é "TRUE". | // mostra valores invalidos | ||||||||||||||||||||||||
addColumn |
| Adiciona uma coluna no TreeList. Sugerimos a não utilização do tipo Extent, para isso informar o valor "0". Esta sugestão é devido ao fato de não ser possível manipular estas colunas do tipo Extent, como por exemplo, não é possível definir o label, o tamanho, o tipo de dados... | // adiciona colunas extras | ||||||||||||||||||||||||
addColumn |
| Adiciona uma coluna no TreeList, onde pode ser especificado se a coluna será apresentada no Browse ou não. As colunas do tipo INTERNAS, NÃO serão apresentadas no Browse e servem apenas para trabalho interno. As colunas do tipo EXTERNO são apresentadas no Browse do TreeList e podem ser "escondidas" a qualquer momento com o método hideColumn. Sugerimos a não utilização do tipo Extent, para isso informar o valor "0". Esta sugestão é devido ao fato de não ser possível manipular estas colunas do tipo Extent, como por exemplo, não é possível definir o label, o tamanho, o tipo de dados... | oTreeList:AddColumn("dtCalculo", // nome coluna | ||||||||||||||||||||||||
setColumnLabel |
| Define o Label de uma determinada coluna. | oTreeList:setColumnLabel("cod_empres", // nome col | ||||||||||||||||||||||||
getColumnLabel |
| Retorna o Label de uma determinada coluna. | MESSAGE oTreeList:getColumnLabel("cod_usuar") | ||||||||||||||||||||||||
setColumnSize |
| Define o tamanho de uma determinada coluna. | oTreeList:setColumnSize("cEstrutura", // nome coluna | ||||||||||||||||||||||||
getColumnSize |
| Retorna o tamanho de uma determinada coluna. | MESSAGE oTreeList:getColumnSize("cod_empres") | ||||||||||||||||||||||||
moveColumn |
| Especifica uma nova posição para uma determinada coluna dentro do TreeList. | oTreeList:moveColumn("cod_empres", // nome da coluna | ||||||||||||||||||||||||
setLineBgColor |
| Define a cor de fundo de um determinado node. O número da cor corresponde a tabela de Cores do Progress (de 1 a 15), ou números adicionais configurados na sessão (.ini). | oTreeList:setLineBgColor("cod55", // codigo node | ||||||||||||||||||||||||
getLineBgColor |
| Retorna o número da cor de fundo de um determinado node. | MESSAGE oTreeList:getLineBgColor("cod55") | ||||||||||||||||||||||||
setLineFgColor |
| Define a cor de frente de um determinado node. O número da cor corresponde a tabela de Cores do Progress (de 1 a 15), ou números adicionais configurados na sessão (.ini). | oTreeList:setLineFgColor("cod55", // codigo node | ||||||||||||||||||||||||
getLineFgColor |
| Retorna o número da cor de fundo de um determinado node. | MESSAGE oTreeList:getLineFgColor("cod55") | ||||||||||||||||||||||||
setLineFont |
| Define a fonte de um determinado node. O número da fonte corresponde a tabela de Fontes do Progress (de 1 a 7), ou números adicionais configurados na sessão (.ini). | oTreeList:setLineFont("cod55", // codigo node | ||||||||||||||||||||||||
getLineFont |
| Retorna o número da fonte de um determinado node. | MESSAGE oTreeList:getLineFont("cod55") | ||||||||||||||||||||||||
addNode |
| Adiciona um node dentro do TreeList. | // cParentId, cNodeId, cNodeLabel | ||||||||||||||||||||||||
setData |
| Define o valor de uma determinada coluna de um node. O valor pode, ser dos seguintes tipos:
| oTreeList:setData("cod40", // codigo node | ||||||||||||||||||||||||
getDataChar |
| Retorna o valor de uma coluna CHARACTER do node. | MESSAGE oTreeList:getDataChar("cod55", // codigo node | ||||||||||||||||||||||||
getDataDec |
| Retorna o valor de uma coluna DECIMAL do node. | MESSAGE oTreeList:getDataDec("cod24", // codigo node | ||||||||||||||||||||||||
getDataInt |
| Retorna o valor de uma coluna INTEGER do node. | MESSAGE oTreeList:getDataInt("cod51", // codigo node | ||||||||||||||||||||||||
getDataDate |
| Retorna o valor de uma coluna DATE do node. | MESSAGE oTreeList:getDataDate("cod67", // codigo node | ||||||||||||||||||||||||
getDataLog |
| Retorna o valor de uma coluna LOGICAL do node. | MESSAGE oTreeList:getDataLog("cod12", // codigo node | ||||||||||||||||||||||||
clearData |
| Limpa o valor de uma determinada coluna de um node. Atribui a valor nulo ("?"). | oTreeList:clearData("cod40", // codigo node | ||||||||||||||||||||||||
emptyTreeList | Elimina todos os nodes do TreeList. | oTreeList:emptyTreeList(). | |||||||||||||||||||||||||
applyEntry | Executa um APPLY ENTRY no TreeList, jogando o foco para ele. | oTreeList:applyEntry(). | |||||||||||||||||||||||||
refresh | Atualiza os dados do Browse do TreeList. | oTreeList:refresh(). | |||||||||||||||||||||||||
browseEvent |
| Este método é executado sempre que um evento ocorrer no TreeList. Ele também executará uma procedure interna no programa pai, que possua o mesmo nome, assinatura e tenha sido especificado o parentProg. Eventos que são tratados no TreeList:
| // cria o TreeList | ||||||||||||||||||||||||
enableTreeList |
| Habilita ou desabilita o TreeList. | // desabilita o TreeList | ||||||||||||||||||||||||
hideTreeList |
| Esconde ou mostra o TreeList. | // esconde o TreeList | ||||||||||||||||||||||||
hideColumn |
| Esconde ou mostra uma coluna EXTERNA no TreeList. | // esconde a coluna | ||||||||||||||||||||||||
selectLine |
| Seleciona um node no TreeList. Dispara o evento de selected. | oTreeList:selectLine("cod55"). | ||||||||||||||||||||||||
expandeNode |
| Expande ou recolhe um determinado node. | // serão apresentados os filhos deste node, | ||||||||||||||||||||||||
expandAll |
| Expande toda a árvore de um determinado node, a partir do código dele. | oTreeList:expandAll("cod55"). | ||||||||||||||||||||||||
expandAll | Expande todos os nodes do TreeList. | oTreeList:expandAll(). | |||||||||||||||||||||||||
collapseAll | Recolhe todos os nodes do TreeList. | oTreeList:collapseAll(). | |||||||||||||||||||||||||
hasNode |
| Retorna se existe nodes no TreeList. | MESSAGE oTreeList:hasNode() | ||||||||||||||||||||||||
hasChildren |
| Retorna se existe algum filho para um determinado node. | MESSAGE oTreeList:hasChildren("cod22") | ||||||||||||||||||||||||
countChildren |
| Retorna o número de filhos do próximo nível do node selecionado | MESSAGE oTreeList:countChildren("cod22") VIEW-AS ALERT-BOX. | ||||||||||||||||||||||||
deleteAllChildren |
| Elimina todos os filhos de um determinado node. | oTreeList:deleteAllChildren("cod22"). | ||||||||||||||||||||||||
getColumnList |
| Retorna uma lista, separada por virgulas, das colunas EXTERNAS do TreeList (que são as colunas que aparecem no Browse). | ASSIGN cColList = oTreeList:getColumnList(). | ||||||||||||||||||||||||
setNodeLabel |
| Define o label de um determinado node. | oTreeList:setColumnLabel("cod55", // codigo node | ||||||||||||||||||||||||
getNodeLabel |
| Retorna o label de um determinado node. | MESSAGE oTreeList:getColumnLabel("cod55") | ||||||||||||||||||||||||
getFirstNode | Retorna o código do primeiro node. | MESSAGE "Primeiro" oTreeList:getFirstNode() VIEW-AS ALERT-BOX . | |||||||||||||||||||||||||
getlastNode | Retorna o código do último node. | MESSAGE "Último" oTreeList:getlastNode() VIEW-AS ALERT-BOX . | |||||||||||||||||||||||||
getNextNode | Retorna o código do próximo node a partir do atual. | MESSAGE "Próximo " oTreeList:getNextNode() VIEW-AS ALERT-BOX . | |||||||||||||||||||||||||
getPrevNode | Retorna o código do node anterior a partir do atual. | MESSAGE "Anterior" oTreeList:getprevNode(cRef) VIEW-AS ALERT-BOX . |
Não se esqueça de eliminar o TreeList da memória no final do seu programa!!!IMPORTANTE!
03. EXEMPLO DE UTILIZAÇÃO
Estamos disponibilizando um exemplo de um programa utilizando o componente TotvsTreeList.
USING com.totvs.framework.utp.treelist.*. DEFINE VARIABLE oTreeList AS TotvsTreeList NO-UNDO. // alguma logica de negocio e criacao de frame ... // cria o treelist oTreeList = NEW TotvsTreeList(). oTreeList:parentFrame = FRAME default-frame:HANDLE. oTreeList:parentProg = THIS-PROCEDURE. // adiciona as colunas extras // oTreeList:AddColumn("nome_da_coluna", "type", extent, "format", "initial", "label", Interno?). oTreeList:AddColumn("cod_empresa", "character", 0, "x(05)", "", "Empresa"). oTreeList:AddColumn("cod_usuario", "character", 0, "x(15)", "", "Usuario"). oTreeList:AddColumn("dtCalculo", "date", 0, "99/99/9999", "01/09/2022", "Calculo", FALSE). // define o tamanho do componente oTreeList:setSize(2, 4, 107, 10). // inicializa o treelist oTreeList:initialize(). // altera o nome e o tamanho da coluna que mostra os nodes oTreeList:setColumnLabel("cEstrutura", "Tree"). oTreeList:setColumnSize("cEstrutura", 50.0). // adiciona os nodes // addNode(cParentId, cNodeId, cNodeLabel). oTreeList:addNode( "", "cod00", "Tataravo0"). oTreeList:addNode("cod00", "cod11", "Avo1"). oTreeList:addNode("cod11", "cod55", "Pai1"). oTreeList:addNode("cod55", "cod66", "Filho1"). oTreeList:addNode("cod66", "cod22", "Neto1"). oTreeList:addNode("cod00", "cod77", "Pai2"). oTreeList:addNode("cod77", "cod33", "Filho2"). // adiciona os dados das colunas extras DO ix = 0 TO 7: oTreeList:setData("cod" + string(ix) + string(ix), "cod_empresa", "FND-" + string(ix)). oTreeList:setData("cod" + string(ix) + string(ix), "cod_usuario", "Super-" + string(ix)). oTreeList:setData("cod" + string(ix) + string(ix), "dtCalculo", TODAY + ix). END. // seta a cor de fundo e de frente de um node oTreeList:setLineBgColor("cod66", 4). oTreeList:setLineFgColor("cod66", 15). oTreeList:setLineFont("cod66", 2). // atualiza o browse do treelist oTreeList:refresh(). // seleciona a linha no browse oTreeList:selectLine ("cod77"). // altera o label de um node oTreeList:setNodeLabel ("cod77", "Teste de Escrita (Pai2)"). // expande todos os nodes oTreeList:expandAll(). //procura primeiro node oTreeList:getFirstNode(). //procura ultimo node oTreeList:getLastNode(). //procura próximo node oTreeList:getNextNode(). //procura node anterior oTreeList:getLastNode(). ... WAIT-FOR ... ... // Retira o TreeList da Memoria DELETE OBJECT oTreeList NO-ERROR. ... PROCEDURE browseEvent : DEFINE INPUT PARAMETER cEvent AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER cNodeId AS CHARACTER NO-UNDO. MESSAGE cEvent SKIP cNodeId SKIP oTreeList:getDataChar(cNodeId, "cLabel") SKIP oTreeList:getDataInt(cNodeId, "cPai") SKIP oTreeList:getDataChar(cNodeId, "cod_empresa") SKIP oTreeList:getDataChar(cNodeId, "cod_usuario") SKIP oTreeList:getDataDate(cNodeId, "dtCalculo") SKIP VIEW-AS ALERT-BOX. END PROCEDURE.
04. DICAS DE CONVERSÃO DO OCX PARA O TOTVSTREELIST
Segue abaixo uma tabela com algumas dicas para facilitar o processo de conversão dos programas que atualmente utilizar o TreeList OCX.
Processo | OCX | TotvsTreeList |
---|---|---|
Definição de Variáveis | DEFINE VARIABLE chTreeList AS COM-HANDLE NO-UNDO. | USING com.totvs.framework.utp.treelist.*. |
Carregar o TreeList | Carrega o OCX através da procedure "control_load". | oTreeList = NEW TotvsTreeList(). |
Posicionar a TreeList na tela | CREATE CONTROL-FRAME CtrlFrame ASSIGN | oTreeList:setSize(7.25, 1, 129, 8.5). |
Incluir uma coluna | chTreeList:ColumnHeaders:Add(iColPos, | oTreeList:AddColumn(cColId, |
Verificar se o Componente está válido | IF VALID-HANDLE(chTreeList) THEN DO: | IF oTreeList <> ? THEN DO: |
Jogar o foco para o TreeList | APPLY "ENTRY" TO CtrlFrame. | oTreeList:applyEntry(). |
Mostrar/Esconder o TreeList | chTreeList:VISIBLE = YES. // Mostra | oTreeList:hideTreeList(FALSE). // Mostra |
Mostrar/Esconder uma Coluna | // Mostrar | ASSIGN cColId = entry(iColId, oTreeList:getColumnList()). |
Definir a cor de uma Linha | ASSIGN chTreeList:nodes(cNodeId):BackColor = | oTreeList:setLineBgColor(cNodeId, 15). |
Incluir um node | chTreeList:Nodes:Add(cParentId, | oTreeList:addNode(cParentId, |
Apagar todos os nodes | chTreeList:Nodes:CLEAR(). | oTreeList:emptyTreeList(). |
Verificar se existem nodes | IF chTreeList:nodes:Count > 0 THEN DO: | IF oTreeList:hasNode() THEN DO: |
Selecionar um node | ASSIGN chTreeList:SelectedItem = | oTreeList:selectLine(cNodeId). |
Expandir o node | ASSIGN chTreeList:Nodes(cNodeId):Expanded = TRUE. | oTreeList:expandNode(cNodeId, TRUE). |
Expandir/Fechar Todos os nodes | DO iNodeId = 1 TO chTreeList:Nodes:Count: | // Expandir |
Monitorar o evento de click | PROCEDURE CtrlFrame.TreeList.NodeClick: | Criar a procedure "browseEvent" |
Pegar a chave do node selecionado | ASSIGN cNodeId = chTreeList:selectedItem:KEY. | ASSIGN cNodeId = oTreeList:currentCode. |
Incluir ou Atualizar uma informação em uma Célula (Linha/Coluna) | // Incluir | // Incluir ou Atualizar |