- Criado por Usuário desconhecido (ieda.alves), ú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
Visualização
