DATABASE logix
GLOBALS
DEFINE p_user LIKE usuarios.cod_usuario
DEFINE p_cod_empresa LIKE empresa.cod_empresa
END GLOBALS
DEFINE mr_item RECORD LIKE item.*
DEFINE ma_item_man ARRAY[100] OF RECORD LIKE item_man.*
DEFINE m_form_reference VARCHAR(10)
##------------------------------------------------------------------------------------------------------------#
# PROGRAMA: crud1 #
# OBJETIVO: Modelo 01 de formulário CRUD #
#------------------------------------------------------------------------------------------------------------#
# OBS: Este formulário possui um componente de imagem instanciado em componente #
# FREEFORM para demonstrar uso em paralelo com os eventos do formulário CRUD. #
#------------------------------------------------------------------------------------------------------------#
#SCRIPT SQL PARA CRIAÇÃO DA TABELA USADA NESTE PROGRAMA MODELO DE FORMULÁRIO CRUD METADADO NO BANCO DE DADOS:#
#------------------------------------------------------------------------------------------------------------#
# CREATE TABLE frm_modelo_crud1 #
# (crud_id CHAR(10) NOT NULL, #
# crud_description CHAR(30) NOT NULL, #
# crud_image_button CHAR(50) NOT NULL, #
# crud_status CHAR(1) NOT NULL); #
# #
# ALTER TABLE frm_modelo_crud1 ADD CONSTRAINT pk_frm_modelo_crud1 PRIMARY KEY (crud_id); #
#------------------------------------------------------------------------------------------------------------#
DATABASE logix
DEFINE mr_frm_modelo_crud1 RECORD
END RECORD
DEFINE m_container_reference VARCHAR(10)
DEFINE m_form_reference VARCHAR(10)
DEFINE m_image_reference VARCHAR(10)
DEFINE m_button_reference VARCHAR(10)
#------------------------------------------------------------------#
FUNCTION crud1_runInContainer(l_container_reference)
#------------------------------------------------------------------#
#OBJETIVO: função para acionamento de programa a partir de uma tela COCKPIT,
# onde deverá passar a referencia do painel lateral do cockpit, onde
# o formulário deverá ser renderizado, como parâmetro.
DEFINE l_container_reference VARCHAR(10)
LET m_container_reference = l_container_reference
RETURN crud1() #TRUE - Formulario executado com sucesso / FALSE - Falha na carga/execução do formulário
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1()
#------------------------------------------------------------------#
INITIALIZE m_form_reference TO NULL
IF LOG_initApp("PADRAO") = 0 THEN
IF m_container_reference <> " " THEN
LET m_container_reference = _ADVPL_create_component(NULL,"LSCROLLPANEL",m_container_reference)
CALL _ADVPL_set_property(m_container_reference,"ALIGN","CENTER")
END IF
LET m_form_reference = _ADVPL_create_component(NULL,"LFORMMETADATA",m_container_reference)
CALL _ADVPL_set_property(m_form_reference,"INIT_FORM","crud1",mr_frm_modelo_crud1)
END IF
RETURN (m_form_reference IS NOT NULL) #TRUE - Formulario executado com sucesso / FALSE - Falha na carga/execução do formulário
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_create_before_input()
#------------------------------------------------------------------#
CALL _ADVPL_set_property(m_button_reference,"ENABLE",TRUE)
# Esta função tbem é usada na copia entao não deve limpar a imagem na cópia
IF UPSHIFT(_ADVPL_get_property(m_form_reference,"CURRENT_OPERATION")) = "CREATE" THEN
CALL _ADVPL_set_property(m_image_reference,"IMAGE","x")
END IF
RETURN TRUE
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_create_cancel_input()
#------------------------------------------------------------------#
CALL _ADVPL_set_property(m_button_reference,"ENABLE",FALSE)
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_create_after_confirm()
#------------------------------------------------------------------#
CALL _ADVPL_set_property(m_button_reference,"ENABLE",FALSE)
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_create_before_confirm()
#------------------------------------------------------------------#
#Validações antes de gravar novo registro (retornar FALSE quando ocorrer uma falha)
RETURN TRUE #inclusão permitida
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_update_before_confirm()
#------------------------------------------------------------------#
#Validações antes de alterar registro (retornar FALSE quando ocorrer uma falha)
RETURN TRUE #aleraçao permitida
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_find_before_input()
#------------------------------------------------------------------#
#Limpar o campo de imagem da tela quando acionar nova consulta
CALL _ADVPL_set_property(m_image_reference,"IMAGE","x")
RETURN TRUE
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_update_before_input()
#------------------------------------------------------------------#
#Habilitar campo de imagem da tela quando acionar nova inclusão de registro
CALL _ADVPL_set_property(m_button_reference,"ENABLE",TRUE)
RETURN TRUE
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_update_cancel_input()
#------------------------------------------------------------------#
#Desabilitar campo de imagem da tela quando cancelar modificacao de registro
CALL _ADVPL_set_property(m_button_reference,"ENABLE",FALSE)
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_update_after_confirm()
#------------------------------------------------------------------#
#Desabilitar campo de imagem da tela quando finalizar modificacao de registro
CALL _ADVPL_set_property(m_button_reference,"ENABLE",FALSE)
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_find_confirm()
#------------------------------------------------------------------#
#Mostrar imagem indicada no registro na tela
CALL crud1_show_image(mr_frm_modelo_crud1.crud_image_button)
RETURN TRUE
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_after_load()
#------------------------------------------------------------------#
DEFINE l_group_reference VARCHAR(10)
DEFINE l_panel_reference VARCHAR(10)
DEFINE l_layout_reference VARCHAR(10)
DEFINE l_panel_button VARCHAR(10)
DEFINE l_component_reference VARCHAR(10)
#obter referencia do componente da coluna CRUD_STATUS para tomar como base de posicionamento para criar campo de imagem na tela
LET l_component_reference = _ADVPL_get_property(m_form_reference,"LABEL_REFERENCE","frm_modelo_crud1","crud_status")
#obter referencia do grupo de componentes do formulário em que está registrado a coluna CRUD_ID, pois é a referencia do CONTAINER onde será instanciado componente de imagem
CALL LOG_retorna_referencia_grupo_componentes(m_form_reference,'frm_modelo_crud1','crud_id')
RETURNING l_group_reference
#criar novo painel com título onde será exibida a imagem e botão para selecionar nova imagem.
LET l_panel_reference = _ADVPL_create_component(NULL,"LTitledPanelEx",l_group_reference)
#Definir posição relativa do novo painel com base na posição da coluna CRUD_STATUS
CALL _ADVPL_set_property(l_panel_reference,"BOUNDS",_ADVPL_get_property(l_component_reference,"X")+400,
_ADVPL_get_property(l_component_reference,"Y"),350,350)
CALL _ADVPL_set_property(l_panel_reference,"TITLE","Imagem de identificação")
#componente de layout para renderização automática de componentes dentro do container (PANEL)
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)
#Campo de imagem posicionado no topo/centro do painel
LET m_image_reference = _ADVPL_create_component(NULL,"LImage",l_layout_reference)
CALL _ADVPL_set_property(m_image_reference,"SIZE",120,120)
CALL _ADVPL_set_property(m_image_reference,"ALIGN","CENTER")
#Painel posicionado abaixo da imagem pra acondicionar um botão pra escolher nova imagem (posicionado no rodapé do painel)
LET l_panel_button = _ADVPL_create_component(NULL,"LPANEL",l_layout_reference)
CALL _ADVPL_set_property(l_panel_button,"HEIGHT",24)
CALL _ADVPL_set_property(l_panel_button,"ALIGN","BOTTOM")
#Botão posicionado abaixo da imagem para escolher nova imagem
LET m_button_reference = _ADVPL_create_component(NULL,"LBUTTON",l_panel_button)
CALL _ADVPL_set_property(m_button_reference,"SIZE",120,24)
CALL _ADVPL_set_property(m_button_reference,"FOCAL",TRUE)
CALL _ADVPL_set_property(m_button_reference,"ALIGN","RIGHT")
CALL _ADVPL_set_property(m_button_reference,"TEXT","&Trocar Imagem")
CALL _ADVPL_set_property(m_button_reference,"CLICK_EVENT","crud1_change_image")
CALL _ADVPL_set_property(m_button_reference,"ENABLE",FALSE)
#Mostrar uma imagem padrao qdo nao tiver nenhuma imagem escolhida (Imagem não definida)
CALL crud1_show_image("x.png")
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_change_image()
#------------------------------------------------------------------#
DEFINE l_file CHAR(250)
DEFINE l_image IMAGE
#Zoom de imagens contidas no RPO respeitando o filtro prefixo at_* e extensão .png
LET l_file = _ADVPL_LOG_zoom_images("Imagem de identificação","at_*","*.png")
IF NOT crud1_show_image(l_file) THEN
CALL log0030_mensagem("Não foi possível carregar a imagem escolhida.","excl")
END IF
END FUNCTION
#------------------------------------------------------------------#
PRIVATE FUNCTION crud1_show_image(l_file)
#------------------------------------------------------------------#
DEFINE l_file CHAR(50)
DEFINE l_image IMAGE,
l_tempFile CHAR(250)
IF STRING_isEmpty(l_file) THEN
RETURN
END IF
#Copia a imagem do RPO para a pasta temporária local.
LET l_tempFile = _ADVPL_getSrvTempPath(TRUE)||"BTCRUD1.PNG" #Nome PNG qquer apenas para definir nome de imagem temporária para permitir exibição na tela, pois ela é baixada do RPO em disco
CALL LOG_file_remove(l_tempFile,FALSE)
IF _ADVPL_LOG_resource2File(l_file,l_tempFile) THEN
LET l_image = LOAD_IMAGE(l_tempFile,1)
IF status <> 0 THEN
CALL LOG_show_status_bar_text(m_form_reference,"Não foi possível carregar a imagem.","ERROR_TEXT")
ELSE
#Carregar a imagem na tela
CALL _ADVPL_set_property(m_image_reference, "IMAGE_BUFFER", "imagem", l_image)
LET mr_frm_modelo_crud1.crud_image_button = l_file #Salvar nome da imagem no registro da tabela.
END IF
CALL LOG_file_remove(l_tempFile,FALSE) #Eliminar o arquivo PNG temporário usado pra baixar imagem do RPO.
ELSE
CALL LOG_show_status_bar_text(m_form_reference,"Não foi possível carregar a imagem.","ERROR_TEXT")
END IF
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_load_image()
#------------------------------------------------------------------#
IF mr_frm_modelo_crud1.crud_image_button IS NULL OR UPSHIFT(_ADVPL_get_property(m_form_reference,"CURRENT_OPERATION")) = "DELETE" THEN
#quando eliminar registro limpar a imagem da tela e exibir a imagem padrao (IMAGEM NAO DEFINIDA)
CALL _ADVPL_set_property(m_image_reference,"IMAGE","x")
ELSE
#Mostrar a imagem na tela
CALL crud1_show_image(mr_frm_modelo_crud1.crud_image_button)
END IF
END FUNCTION
#------------------------------------------------------------------#
FUNCTION crud1_version_info()
#---------------------------------#
FUNCTION man10021()
#------------------------------#
# Verifica permissão para o usuário conforme módulo do programa.
IF LOG_initApp("PADRAO") <> 0 THEN
RETURN
END IF
INITIALIZE mr_item.*, ma_item_man TO NULL
LET m_form_reference = _ADVPL_create_component(NULL,"LFORMMETADATA")
CALL _ADVPL_set_property(m_form_reference,"INIT_FORM","man10021",mr_item,ma_item_man)
END FUNCTION |