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(ml_statusbarmail_reference,"VISIBLESMTP_HOTKEYPORT",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_item25) |