- Criado por Ieda Ferreira Alves Flock, última alteração em 01 mar, 2023
As tabelas e colunas que poderão ser filtradas podem ser informadas manualmente ou recuperadas através do conteúdo metadado.
Nesta tela podem ser informados filtros no formato básico (apenas com valores), avançado (utilizando valores e comandos especiais) e também permite definir a ordenação dos registros. Este componente não executa nenhum comando na base de dados, apenas monta um filtro no formato SQL para que seja utilizado em uma pesquisa.
Sintaxe
_ADVPL_create_component( NULL, "LCONSTRUCT" )
Métodos GET
Métodos acessíveis através da função _ADVPL_get_property
que permite recuperar e manipular os valores do componente:
Método GET: INIT_CONSTRUCT
Inicia a execução da tela de filtro de pesquisa e retorna se o filtro foi ou não confirmado pelo usuário.
Sintaxe
_ADVPL_get_property( <cReference>, "INIT_CONSTRUCT" ) => Boolean
Retorno
Tipo | Descrição |
---|---|
BOOLEAN | Verdadeiro se o filtro foi confirmado pelo usuário, falso se foi cancelado |
Exemplo
LET l_status = _ADVPL_get_property( <cReference>, "INIT_CONSTRUCT" )
Método GET: WHERE_CLAUSE
Retorna o filtro informado na tela de pesquisa, no formato SQL.Sintaxe
_ADVPL_get_property( < creference >, "WHERE_CLAUSE" ) => Char
Retorno
Tipo | Descrição |
---|---|
CHAR | Filtro informado na tela de pesquisa no formato SQL. |
Exemplo
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE" )
Método GET: WHERE_CLAUSE_TABLE_COLUMN
Retorna o filtro no formato SQL, informado para determinada coluna da tela de pesquisa.Sintaxe
_ADVPL_get_property( < creference >, "WHERE_CLAUSE_TABLE_COLUMN", <cTable>, <cColumn> ) => Char
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela da coluna. | Sim |
cColumn | CHAR | Nome da coluna. | Sim |
Retorno
Tipo | Descrição |
---|---|
CHAR | Filtro no formato SQL informado para a coluna. |
Exemplo
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE_TABLE_COLUMN", <cTable>, <cColumn> )
Método GET: ORDER_BY
Retorna a ordenação informada na tela de pesquisa, no formato SQL.Sintaxe
_ADVPL_get_property( < creference >, "ORDER_BY") => Char
Retorno
Tipo | Descrição |
---|---|
CHAR | Ordenação informada na tela de pesquisa, no formato SQL. |
Exemplo
LET l_order_by = _ADVPL_get_property( <cReference>, "ORDER_BY" )
Método GET: CONSTRUCT_NAME
Retorna o nome identificador definido para o componente.Sintaxe
_ADVPL_get_property( < creference >, "CONSTRUCT_NAME") => Char
Retorno
Tipo | Descrição |
---|---|
CHAR | Nome identificador definido para o componente. |
Exemplo
LET l_construct_name = _ADVPL_get_property( <cReference>, "CONSTRUCT_NAME" )
Método GET: WHERE_CLAUSE_BY_TABLE
Retorna o filtro no formato SQL, informado para determinada tabela da tela de pesquisa.Sintaxe
_ADVPL_get_property( < creference >, "WHERE_CLAUSE_BY_TABLE", <cTable>) => Char
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela. | Sim |
Retorno
Tipo | Descrição |
---|---|
CHAR | Filtro no formato SQL, informado para a tabela. |
Exemplo
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE_BY_TABLE", <cTable> )
Método GET: ORDER_BY_TABLE
Retorna a ordenação no formato SQL, informado para determinada tabela da tela de pesquisa.Sintaxe
_ADVPL_get_property( < creference >, "ORDER_BY_TABLE", <cTable> ) => Char
Retorno
Tipo | Descrição |
---|---|
CHAR | Ordenação no formato SQL informado para a tabela. |
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela. | Sim |
Exemplo
LET l_order_by = _ADVPL_get_property( <cReference>, "ORDER_BY", <cTable> )
Métodos SET
utilizando a função _ADVPL_set_property
que permite alterar e manipular os valores do componente.
Método SET: ADD_TABLE
Adiciona uma tabela, cadastrada no metadado, na tela de pesquisa.
Sintaxe
_ADVPL_set_property(< cReference >,"ADD_TABLE",< cTable >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "ADD_TABLE", <cTable> )
Método SET: ADD_COLUMN
Valor quando a caixa de seleção estiver assinalada.
Sintaxe
_ADVPL_set_property(< cReference >,"ADD_COLUMN",, <cTable>, <cColumn>, [cParent], [cZoom])
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela da coluna. | Sim |
cColumn | CHAR | Nome da coluna. | Sim |
cParent | CHAR | Nome do objeto pai da coluna (para colunas virtuais). | opcional, padrão: NULL |
cZoom | CHAR | Nome do zoom da coluna. | opcional, padrão: NULL |
Exemplo
CALL _ADVPL_set_property( <cReference>, "ADD_COLUMN", <cTable>, <cColumn>, [cParent], [cZoom] )
Método SET: ADD_VIRTUAL_TABLE
Adiciona uma tabela na tela de pesquisa.
Sintaxe
_ADVPL_set_property( <cReference>, "ADD_VIRTUAL_TABLE", <cTable>, <cLabel> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela. | Sim |
cLabel | CHAR | Descrição da tabela. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "ADD_VIRTUAL_TABLE", <cTable>, <cLabel> )
Método SET: ADD_VIRTUAL_COLUMN
Adiciona uma coluna da tabela na tela de pesquisa.
Sintaxe
_ADVPL_set_property( <cReference>, "ADD_VIRTUAL_COLUMN", <cTable>, <cColumn>, <cLabel>, <nType>, <nSize>, [nPrecision], [cZoom], [cPicture] )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela da coluna. | Sim |
cColumn | CHAR | Nome da coluna. | |
cLabel | CHAR | Descrição da tabela. | Sim |
nType | INTEGER | Tipo de dado da coluna, sendo: 1–CHAR, 2–SMALLINT, 3–INTEGER, 4–DECIMAL, 5–DATE, 6–DATETIME, 7–VARCHAR, 8–SERIAL e 9–IMAGE | Sim |
nSize | INTEGER | Tamanho da coluna. | Sim |
nPrecision | INTEGER | Precisão da coluna. | opcional, padrão: 0 |
cZoom | CHAR | Nome do zoom da coluna. | opcional, padrão: NULL |
cPicture | CHAR | Máscara de edição da coluna *** válido a partir do pacote Logix 12.1.15 *** | opcional, padrão: NULL |
Exemplo
CALL _ADVPL_set_property( <cReference>, "ADD_VIRTUAL_COLUMN", <cTable>, <cColumn>, <cLabel>, <nType>, <nSize>, [nPrecision], [cZoom], [cPicture] )
Método SET: VISIBLE_ORDER_BY
Habilita/desabilita a aba de ordenação de registros.
Sintaxe
_ADVPL_set_property( <cReference>, "VISIBLE_ORDER_BY", <nVisible>)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
nVisible | BOOLEAN | Verdadeiro para habilitar a aba de ordenação, falso para desabilitar. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "VISIBLE_ORDER_BY", <nVisible> )
Método SET: VISIBLE_FILTER_BASIC
Habilita/desabilita a aba de filtro básico.
Sintaxe
_ADVPL_set_property( <cReference>, "VISIBLE_FILTER_BASIC", <nVisible> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
nVisible | BOOLEAN | Verdadeiro para habilitar a aba de filtro básico, falso para desabilitar. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "VISIBLE_FILTER_BASIC", <nVisible> )
Método SET: VISIBLE_FILTER_ADVANCED
Habilita/desabilita a aba de filtro avançado.
Sintaxe
_ADVPL_set_property( <cReference>, "VISIBLE_FILTER_ADVANCED", <nVisible> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
nVisible | BOOLEAN | Verdadeiro para habilitar a aba de filtro avançado, falso para desabilitar. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "VISIBLE_FILTER_ADVANCED", <nVisible> )
Método SET: CONSTRUCT_NAME
Define um identificador para o componente.
Sintaxe
_ADVPL_set_property( <cReference>, "CONSTRUCT_NAME", <cName> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cName | CHAR | Nome identificador para o componente. | Sim |
Exemplo
CALL _ADVPL_set_property( <cReference>, "CONSTRUCT_NAME", <cName> )
Método SET: APPEND_WHERE_CLAUSE
Adiciona um filtro temporário que será descartado após a finalização da tela de pesquisa.
Se uma tabela não for informada neste método, o filtro será geral para todas as tabelas do componente.
Sintaxe
_ADVPL_set_property( <cReference>, "APPEND_WHERE_CLAUSE", <cWhere>, [cTable] )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cWhere | CHAR | Sim | |
cTable | CHAR | Nome da tabela. | opcional, padrão: NULL |
Método válido apenas para programas desenvolvidos em metadado.
Exemplo
CALL _ADVPL_set_property( <cReference>, "APPEND_WHERE_CLAUSE", <cWhere>, [cTable] )
Método SET: APPEND_ORDER_BY
Adiciona uma ordenação temporária para uma determinada coluna, a ordenação será descartada após a finalização da tela de pesquisa.
Sintaxe
_ADVPL_set_property( <cReference>, "APPEND_ORDER_BY", <cTable>, <cColumn>, <cOrder> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|---|---|---|
cTable | CHAR | Nome da tabela da coluna. | Sim |
cColumn | CHAR | Nome da coluna. | Sim |
cOrder | CHAR | Tipo de ordenação, sendo:
| Sim |
Método válido apenas para programas desenvolvidos em metadado.
Exemplo
CALL _ADVPL_set_property( <cReference>, "APPEND_ORDER_BY", <cTable>, <cColumn>, <cOrder> )
Exemplo
DATABASE logix DEFINE ma_tela ARRAY[1000] OF RECORD cod_empresa CHAR(02), den_empresa CHAR(36), cod_item CHAR(15), den_item CHAR(76) END RECORD DEFINE m_statusbar_reference, m_grid_reference, m_construct_reference VARCHAR(10) DEFINE m_max_item SMALLINT #--------------------# FUNCTION const0001() #--------------------# DEFINE l_dialog_reference, l_menubar_reference, l_menubutton_reference, l_panel_reference, l_layout_reference, l_column_reference VARCHAR(10) INITIALIZE ma_tela TO NULL #Define a quantidade máxima de itens dentro da grid, deve ser alterada #sempre que o tamanho do ARRAY ma_tela for alterado também LET m_max_item = 1000 #Conecta-se ao banco de dados CALL LOG_connectDatabase("DEFAULT") LET l_dialog_reference = _ADVPL_create_component(NULL,"LDIALOG") CALL _ADVPL_set_property(l_dialog_reference,"SIZE",640,480) CALL _ADVPL_set_property(l_dialog_reference,"TITLE","Exemplo de Utilização: LLAYOUTMANAGER") LET m_statusbar_reference = _ADVPL_create_component(NULL,"LSTATUSBAR",l_dialog_reference) CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_ABOUT",FALSE) CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_HOTKEY",FALSE) CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_RESIZE",FALSE) LET l_menubar_reference = _ADVPL_create_component(NULL,"LMENUBAR",l_dialog_reference) CALL _ADVPL_set_property(l_menubar_reference,"HELP_VISIBLE",FALSE) LET l_menubutton_reference = _ADVPL_create_component(NULL,"LFINDBUTTON",l_menubar_reference) CALL _ADVPL_set_property(l_menubutton_reference,"EVENT","const0001_find_event") CALL _ADVPL_set_property(l_menubutton_reference,"TYPE","NO_CONFIRM") CALL _ADVPL_create_component(NULL,"LQUITBUTTON",l_menubar_reference) LET l_panel_reference = _ADVPL_create_component(NULL,"LPANEL",l_dialog_reference) CALL _ADVPL_set_property(l_panel_reference,"ALIGN","CENTER") LET l_layout_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_panel_reference) CALL _ADVPL_set_property(l_layout_reference,"MARGIN",TRUE) CALL _ADVPL_set_property(l_layout_reference,"COLUMNS_COUNT",1) CALL _ADVPL_set_property(l_layout_reference,"EXPANSIBLE",TRUE) LET m_grid_reference = _ADVPL_create_component(NULL,"LTABLEEX",l_layout_reference) CALL _ADVPL_set_property(m_grid_reference,"ALIGN","CENTER") LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference) CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",55) CALL _ADVPL_set_property(l_column_reference,"HEADER","Empresa") CALL _ADVPL_set_property(l_column_reference,"VARIABLE","cod_empresa") LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference) CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",200) CALL _ADVPL_set_property(l_column_reference,"HEADER","Descrição da empresa") CALL _ADVPL_set_property(l_column_reference,"VARIABLE","den_empresa") LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference) CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",120) CALL _ADVPL_set_property(l_column_reference,"HEADER","Item") CALL _ADVPL_set_property(l_column_reference,"VARIABLE","cod_item") LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference) CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",400) CALL _ADVPL_set_property(l_column_reference,"HEADER","Descrição do item") CALL _ADVPL_set_property(l_column_reference,"VARIABLE","den_item") CALL _ADVPL_set_property(m_grid_reference,"SET_ROWS",ma_tela,0) CALL _ADVPL_set_property(l_dialog_reference,"ACTIVATE",TRUE) END FUNCTION #-------------------------------# FUNCTION const0001_find_event() #-------------------------------# DEFINE l_status SMALLINT DEFINE l_where_clause CHAR(500) #Se a tela de pesquisa não foi criada, deverá criá-la no primeiro uso IF m_construct_reference IS NULL THEN CALL const0001_create_construct_component() END IF #Inicia a tela de pesquisa LET l_status = _ADVPL_get_property(m_construct_reference,"INIT_CONSTRUCT") #Verifica se o usuário cancelou a pesquisa IF NOT l_status THEN CALL _ADVPL_set_property(m_statusbar_reference,"WARNING_TEXT","Pesquisa cancelada.") RETURN FALSE END IF #Retorna o filtro informado LET l_where_clause = _ADVPL_get_property(m_construct_reference,"WHERE_CLAUSE") #Efetua a pesquisa na base de dados e exibe em tela IF NOT const0001_find_confirm(l_where_clause) THEN CALL _ADVPL_set_property(m_statusbar_reference,"WARNING_TEXT","Argumentos de pesquisa não encontrados.") RETURN FALSE END IF CALL _ADVPL_set_property(m_statusbar_reference,"INFO_TEXT","Pesquisa efetuada com sucesso.") RETURN TRUE END FUNCTION #-----------------------------------------------# FUNCTION const0001_create_construct_component() #-----------------------------------------------# LET m_construct_reference = _ADVPL_create_component(NULL,"LCONSTRUCT") CALL _ADVPL_set_property(m_construct_reference,"CONSTRUCT_NAME","CONS0001_FILTER") #Desabilita a aba de ordenação de registros CALL _ADVPL_set_property(m_construct_reference,"VISIBLE_ORDER_BY",FALSE) #Adiciona a tabela empresa para a consulta e suas colunas #Esta tabela não possui cadastro no metadado, então será "virtual" CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_TABLE","empresa","Empresa") CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_COLUMN","empresa","cod_empresa","Empresa",1 {CHAR},2,0,"zoom_empresa") CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_COLUMN","empresa","den_empresa","Descrição da empresa",1 {CHAR},36,0) #Adiciona a tabela item para a consulta e suas colunas #Esta tabela possui cadastro no metadado, então não será "virtual" CALL _ADVPL_set_property(m_construct_reference,"ADD_TABLE","item") CALL _ADVPL_set_property(m_construct_reference,"ADD_COLUMN","item","cod_item",NULL {PARENT},"zoom_item") CALL _ADVPL_set_property(m_construct_reference,"ADD_COLUMN","item","den_item") END FUNCTION #-----------------------------------------------# FUNCTION const0001_find_confirm(l_where_clause) #-----------------------------------------------# DEFINE l_where_clause CHAR(0500), l_sql_stmt CHAR(1000) DEFINE l_ind SMALLINT LET l_ind = 1 LET l_sql_stmt = 'SELECT empresa.cod_empresa,empresa.den_empresa,item.cod_item,item.den_item ', 'FROM empresa ', 'INNER JOIN item ', 'ON empresa.cod_empresa = item.cod_empresa ', 'WHERE ',l_where_clause CLIPPED,' ', 'ORDER BY 1,3' WHENEVER ERROR CONTINUE PREPARE var_item FROM l_sql_stmt WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log003_err_sql("PREPARE SQL","var_item") RETURN FALSE END IF WHENEVER ERROR CONTINUE DECLARE cq_item CURSOR FOR var_item WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log003_err_sql("DECLARE CURSOR","cq_item") RETURN FALSE END IF WHENEVER ERROR CONTINUE FOREACH cq_item INTO ma_tela[l_ind].cod_empresa, ma_tela[l_ind].den_empresa, ma_tela[l_ind].cod_item, ma_tela[l_ind].den_item IF sqlca.sqlcode <> 0 THEN CALL log003_err_sql("FOREACH CURSOR","cq_item") EXIT FOREACH END IF LET l_ind = l_ind + 1 IF l_ind > m_max_item THEN CALL log0030_mensagem("Quantidade máxima de itens ultrapassados.","excl") EXIT FOREACH END IF END FOREACH FREE var_item FREE cq_item WHENEVER ERROR STOP LET l_ind = l_ind - 1 CALL _ADVPL_set_property(m_grid_reference,"ITEM_COUNT",l_ind) CALL _ADVPL_set_property(m_grid_reference,"REFRESH") RETURN (l_ind > 0) END FUNCTION