Páginas filhas
  • 5. Widget de consulta rápida

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

No 4GL o nome da função deve conter o sufixo _indicator_get_data e não receberá parâmetros. Estes serão passados para a função através de uma área de memória compartilhada, acessível através da função _ADVPL_QSGetParameter(<nome_do_parametro>).

A O corpo da função SEARCH deve ser transferido para a função GET-DATA, sendo que a primeira deve ser mantida no 4GL, por questões de compatibilidade, sendo e deve ser reescrita para apenas chamar a função GET-DATA passando os parâmetros através da área de memória compartilhada. No exemplo de como transferir dados para a função GET-DATA é possível verificar como fazer a passagem dos valores.

Transferindo dados para a função GET-DATA

Os dados devem ser transferidos para a função usando uma estrutura do tipo RECORD, que deve ser definida como segue:

 

   DEFINE lr_params RECORD
                      l_searchcol    CHAR(50),
                      l_searchval    CHAR(300),
                      l_selection    CHAR(01),
                      l_sortcol      CHAR(50),
                      l_sortorder    CHAR(04),
                      l_rows         CHAR(10),
                      l_page         CHAR(10),
                      l_customfilter CHAR(500)
                   END RECORD

A estrutura deve ser preenchida com os valores correspondentes antes de ser passada como parâmetro para a função _ADVPL_QSSetParameters(). Lembre-se de inicializar o RECORD antes de atribuir valores ao mesmo.
 

    INITIALIZE lr_params.* TO NULL  # Inicialização do record
LET lr_params.l_searchcol    = l_filter_column
    LET lr_params.l_searchval    = l_filter_value
    LET lr_params.l_selection    = l_selection
    LET lr_params.l_sortcol      = l_sort_col
    LET lr_params.l_sortorder    = l_sort_order
    LET lr_params.l_rows         = l_rows
    LET lr_params.l_page         = l_page
    LET lr_params.l_customfilter = ""    
    CALL _ADVPL_QSSetParameters( lr_params ) # Passando o record para a área de memória compartilhada
Exemplo

Trecho demonstrando a função SEARCH reescrita para chamar a função GET-DATA.

 

 

 

Bloco de código
languagetext
#---------------------------------------------------------------------------------------------------------------#
FUNCTION log1i_indicator_search(l_filter_column,l_filter_value,l_selection,l_sort_col,l_sort_order,l_rows,l_page)
#---------------------------------------------------------------------------------------------------------------#
    DEFINE l_filter_column CHAR(50),  #Coluna de filtro (opcional)
           l_filter_value  CHAR(300), #Valor do filtro da coluna acima (opcional)
           l_selection     CHAR(01),  #Valor selecionado na lista de filtros (opcional)
           l_sort_col      CHAR(50),  #Coluna de ordenação (opcional)
           l_sort_order    CHAR(04),  #Tipo de ordenação ASC ou DESC (opcional)
           l_rows          SMALLINT,  #Máximo de registros por página
           l_page          SMALLINT   #Página atual de pesquisa
                      
    DEFINE lr_params RECORD
                        l_searchcol    CHAR(50),
                        l_searchval    CHAR(300),
                        l_selection    CHAR(01),
                        l_sortcol      CHAR(50),
                        l_sortorder    CHAR(04),
                        l_rows         CHAR(10),
                        l_page         CHAR(10),
                        l_customfilter CHAR(500)
                     END RECORD

    INITIALIZE lr_params.* TO NULL
    
    # O record recebe os parâmetros da função search
    LET lr_params.l_searchcol    = l_filter_column
    LET lr_params.l_searchval    = l_filter_value 
    LET lr_params.l_selection    = l_selection 
    LET lr_params.l_sortcol      = l_sort_col
    LET lr_params.l_sortorder    = l_sort_order
    LET lr_params.l_rows         = l_rows
    LET lr_params.l_page         = l_page 
    LET lr_params.l_customfilter = "" # Customfilter sempre será branco quando a função search for chamada.
    
    CALL _ADVPL_QSSetParameters(lr_params)
    
    RETURN LOG1i_indicator_get_data() # O retorno da função search é o mesmo da get_data

END FUNCTION

 

 

...

Recebendo dados na função GET-DATA

Os dados são recebidos...

...

atribuidos à área de memória compartilhada são recuperados através da função _ADVPL_QSGetParameter(<nome_do_parametro>). No exemplo abaixo, vemos o trecho da função GET-DATA onde é feita a recuperação dos parâmetros.

Exemplo

 

Bloco de código
languagetext
#---------------------------------------------------------------------------------------------------------------#
FUNCTION log1i_indicator_get_data()
#---------------------------------------------------------------------------------------------------------------#
    DEFINE l_filter_column CHAR(50),  #Coluna de filtro (opcional)
           l_filter_value  CHAR(300), #Valor do filtro da coluna acima (opcional)
           l_selection     CHAR(01),  #Valor selecionado na lista de filtros (opcional)
           l_sort_col      CHAR(50),  #Coluna de ordenação (opcional)
           l_sort_order    CHAR(04),  #Tipo de ordenação ASC ou DESC (opcional)
           l_rows          SMALLINT,  #Máximo de registros por página
           l_page          SMALLINT,  #Página atual de pesquisa
           l_customfilter  CHAR(500)
    
    DEFINE l_sql_stmt      CHAR(500),
           l_sql_count     CHAR(500),
           l_where_clause  CHAR(250)
           
    DEFINE l_ind           SMALLINT,
           l_position      INTEGER
    
    DEFINE lr_search       RECORD
                               data  ARRAY[60] OF 
                                     RECORD     #Lista com os resultados da consulta
                                         cod_usuario     LIKE usuarios.cod_usuario,
                                         nom_funcionario LIKE usuarios.nom_funcionario,
                                         ind_admlog      LIKE usuarios.ind_admlog
                                     END RECORD,
                               count SMALLINT,
                               total INTEGER,   #Total de registros encontrados na consulta (sem a paginação)
                               cpage INTEGER,   #Página de registros atual
                               pages SMALLINT   #Total de páginas resultantes da consulta
                           END RECORD
                           
    IF  LOG_initApp("PADRAO") > 0 THEN
        RETURN
    END IF

    #Recebe os valores dos parametros
    LET l_filter_column = _ADVPL_QSGetParameter("l_searchcol")
    LET l_filter_value  = _ADVPL_QSGetParameter("l_searchval")
    LET l_selection     = _ADVPL_QSGetParameter("l_selection")
    LET l_sort_col      = _ADVPL_QSGetParameter("l_sortcol")
    LET l_sort_order    = _ADVPL_QSGetParameter("l_sortorder")
    LET l_rows          = _ADVPL_QSGetParameter("l_rows")
    LET l_page          = _ADVPL_QSGetParameter("l_page")
    LET l_customfilter  = _ADVPL_QSGetParameter("l_customfilter")

    CALL conout( "Executando LOG1i_indicator_get_data..." )
    CALL conout( "Coluna de filtro...: " || l_filter_column )
    CALL conout( "Valor de filtro....: " || l_filter_value )
    CALL conout( "Selecao............: " || l_selection )
    CALL conout( "Coluna de Ordenacao: " || l_sort_col )
    CALL conout( "Ordenacao:.........: " || l_sort_order )
    CALL conout( "LInhas.............: " || l_rows )
    CALL conout( "Pagina.............: " || l_page )
    CALL conout( "Filtro customizado.: " || l_customfilter )

    # A partir daqui, segue o restante da função get_data

 

 

 

Função AUTO-COMPLETE

No 4GL o nome desta função deve ter o sufixo _indicator_autocomplete, deve ter como parâmetro:

...