Páginas filhas
  • LGX - LCONSTRUCT

Cria e executa uma tela de pesquisa, onde são informados filtros utilizados na seleção de registros.

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.


Hierarquia



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



TipoDescriçã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



TipoDescriçã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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.Sim


Retorno



TipoDescriçã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



TipoDescriçã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



TipoDescriçã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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela.Sim


Retorno



TipoDescriçã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



TipoDescrição
CHAR

Ordenação no formato SQL informado para a tabela.


Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome 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



NomeTipoDescriçãoObrigatório?
  cTable CHARNome 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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.Sim
cParentCHARNome do objeto pai da coluna (para colunas virtuais).opcional, padrão: NULL
cZoomCHARNome 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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela.Sim
cLabelCHARDescriçã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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.
cLabelCHARDescrição da tabela.Sim
nTypeINTEGER

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
nSizeINTEGERTamanho da coluna.Sim
nPrecisionINTEGERPrecisão da coluna.opcional, padrão: 0
cZoomCHARNome do zoom da coluna.opcional, padrão: NULL
cPictureCHAR
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



NomeTipoDescriçãoObrigatório?
nVisibleBOOLEANVerdadeiro 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



NomeTipoDescriçãoObrigatório?
nVisibleBOOLEANVerdadeiro 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



NomeTipoDescriçãoObrigatório?
nVisibleBOOLEANVerdadeiro 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



NomeTipoDescriçãoObrigatório?
cNameCHARNome 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



NomeTipoDescriçãoObrigatório?
cWhereCHAR
Sim
cTableCHARNome 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



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.Sim
cOrderCHAR

Tipo de ordenação, sendo:

  • ASC - Ordenação crecente ou
  • DESC - Ordenação decrescente
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