Histórico da Página
...
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 | ||
---|---|---|
| ||
#---------------------------------------------------------------------------------------------------------------# 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 | ||
---|---|---|
| ||
#---------------------------------------------------------------------------------------------------------------#
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:
...