Páginas filhas
  • LGX - LFormMetaData

Classe que permite executar um formulário metadado de cadastro, também chamado de modelo CRUD, que são registrados e mantidos através do programa FRM1002 (Formulário Metadado Cadastral).

Hierarquia


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: BROWSE_ITEM_COUNT

Quantidade de registros encontrados na operação 'Listar' do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"BROWSE_ITEM_COUNT") => INTEGER

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim

Retorno



Tipo

Descrição

INTEGERQuantidade de registros encontrados na operação 'Listar' do formulário.

Exemplo



LET l_browse_count = _ADVPL_get_property(l_form_reference,"BROWSE_ITEM_COUNT")

FOR l_ind = 1 TO l_browse_count 
   LET l_cod_item = _ADVPL_get_property(l_form_reference,"BROWSE_VALUE","item","cod_item",l_ind) 
   LET l_den_item = man10021_get_den_item(l_cod_item) 
   CALL _ADVPL_set_property(l_form_reference,"BROWSE_VALUE","item","den_item",l_ind,l_den_item)
END FOR




Método GET: BROWSE_VALUE

Valor de uma determinada linha e coluna da operação 'Listar' do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"BROWSE_VALUE", < l_table >, < l_column >, < l_row >, [< l_alias >]) => VALUE

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim
l_tableCHARNome da tabela da coluna do formulário da qual deseja-se retornar o valor,Sim
l_columnCHARNome da coluna do formulário da qual deseja-se retornar o valor.---Sim
l_rowINTEGERNúmero da linha do grid da operação 'Listar' da qual deseja-se retornar o valor.Sim
l_aliasCHARAlias da tabela com a coluna do formulário da qual deseja-se retornar o valor.Não

Retorno



TipoDescrição
VALUEValor de determinada linha e coluna da grid da operação 'Listar' do formulário.

Exemplo



LET l_browse_count = _ADVPL_get_property(l_form_reference,"BROWSE_ITEM_COUNT")

FOR l_ind = 1 TO l_browse_count 
   LET l_cod_item = _ADVPL_get_property(l_form_reference,"BROWSE_VALUE","item","cod_item",l_ind) 
   LET l_den_item = man10021_get_den_item(l_cod_item) 
   CALL _ADVPL_set_property(l_form_reference,"BROWSE_VALUE","item","den_item",l_ind,l_den_item)
END FOR




Método GET: COMPONENT_REFERENCE

Referência do componente de um determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"COMPONENT_REFERENCE",< l_table >,< l_column >,[< l_alias >]) => CHAR

Parâmetros



Nome

Tipo

Descrição

Obrigatório?

l_form_reference
CHAR
Referência do formulárioSim
l_tableCHARNome da tabela da coluna do formulário da qual deseja-se retornar o valor,Sim
l_columnCHARNome da coluna do formulário da qual deseja-se retornar o valor.---Sim
l_aliasCHARAlias da tabela com a coluna do formulário da qual deseja-se retornar o valor.Não

Retorno



Tipo

Descrição

CHARReferência do componente de um campo do formulário.

Exemplo



LET l_component_reference = _ADVPL_get_property(l_form_reference,"COMPONENT_REFERENCE","item","cod_item")




Método GET: COMPONENT_IS_ENABLE

Identifica quando um campo do formulário está habilitado.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"COMPONENT_IS_ENABLE",< l_table >,< l_column >,[< l_alias >]) => SMALLINT

Parâmetros



Nome

Tipo

Descrição

Obrigatório?

l_form_reference
CHAR
Referência do formulárioSim
l_tableCHARNome da tabela da coluna do formulário que deseja saber se está habilitada ou não,Sim
l_columnCHARNome da coluna do formulário que deseja saber se está habilitada ou não,Sim
l_aliasCHARAlias da tabela com a coluna do formulário que deseja saber se está habilitada ou não,Não

Retorno



Tipo

Descrição

SMALLINTSe componente estiver habilitado (ENABLE), retornará TRUE, caso contrário FALSE.

Exemplo



LET l_field_enabled = _ADVPL_get_property(l_form_reference,"COMPONENT_IS_ENABLE","item","cod_item")




Método GET: COMPONENT_TYPE

Retorna o tipo de componente definido para um campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"COMPONENT_TYPE",< l_table >,< l_column >,[< l_alias >]) => SMALLINT

Parâmetros



Nome

Tipo

Descrição

Obrigatório?

l_form_reference
CHAR
Referência do formulárioSim
l_tableCHARNome da tabela da coluna do formulário,Sim
l_columnCHARNome da coluna do formulário,Sim
l_aliasCHARAlias da tabela com a coluna do formulário,Não

Retorno



Tipo

Descrição

CHARTipo do componente utilizado no formulário para o campo informado.

Exemplo



LET l_component_type = _ADVPL_get_property(l_form_reference,"COMPONENT_TYPE","item","cod_item")




Método GET: CONSTRUCT_REFERENCE

Referência do filtro de consulta utilizado na operação de pesquisa do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"CONSTRUCT_REFERENCE") => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim

Retorno



TipoDescrição
CHARReferência do filtro de pesquisa (LConstruct) utilizado na operação padrão de pesquisa do formulário.

Exemplo



LET l_construct_reference = _ADVPL_get_property(l_form_reference,"CONSTRUCT_REFERENCE")




Método GET: CURRENT_OPERATION

Operação atual em execução no formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"CURRENT_OPERATION") => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim

Retorno



TipoDescrição
CHARNome da operação que está em execução, conforme cadastrado no programa "FRM1001 - Barra de Ferramentas".

Exemplo



LET l_current_operation = _ADVPL_get_property(l_form_reference,"CURRENT_OPERATION")




Método GET: EXECUTE_OPERATION 

Executa uma determinada operação do formulário, conforme cadastrada no programa "FRM1001 - Barra de Ferramentas".

Sintaxe



_ADVPL_get_property(< l_form_reference >,"EXECUTE_OPERATION") => SMALLINT

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_operation
CHAR

Nome da operação do formulário que deseja-se executar, conforme cadastrado no programa "FRM1001 - Barra de Ferramentas".

Sim
l_where_clause
CHAR
Filtro SQL a ser utilizado caso o parâmetro OPERATION seja pesquisa (FIND), modificação (UPDATE) ou exclusão (DELETE).Não

Retorno



TipoDescrição
SMALLINTCaso a operação foi executado com sucesso retornará TRUE, caso contrário retornará FALSE.

(informação) Para a operação FIND, TRUE indica que encontrou registro na pesquisa e FALSE não encontrou registro ou acusou algum erro na pesquisa.

Exemplo



LET l_where_clause = "item.cod_empresa = '01'"
LET l_status = _ADVPL_get_property(l_form_reference,"EXECUTE_OPERATION","find",l_where_clause)




Método GET: FORM_NAME

Nome do formulário

Sintaxe



_ADVPL_get_property(< l_form_reference >,"FORM_NAME") => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim

Retorno



TipoDescrição
CHARNome do formulário.

Exemplo



LET l_form_name = _ADVPL_get_property(l_form_reference,"FORM_NAME")




Método GET: GROUP_REFERENCE ou GET: CONTAINER_REFERENCE

Referência do componente do grupo de componentes de determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"GROUP_REFERENCE",< l_table >,< l_column >,[< l_alias >]) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim
l_table
CHAR
Nome da tabela da coluna do formulário da qual deseja-se recuperar a referência da descrição.Sim
l_column
CHAR
Nome da coluna do formulário da qual deseja-se recuperar a referência da descrição.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual deseja-se recuperar a referência da descrição.Não

Retorno



TipoDescrição
CHARReferência do componente de um grupo de componentes do formulário.

Exemplo



LET l_group_reference = _ADVPL_get_property(l_form_reference,"GROUP_REFERENCE","item","cod_item")




Método GET: LABEL_REFERENCE

Referência do componente de descrição de um determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"LABEL_REFERENCE",,< l_table >,< l_column >,[< l_alias >]) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulárioSim
l_table
CHAR
Nome da tabela da coluna do formulário da qual deseja-se recuperar a referência da descrição.Sim
l_column
CHAR
Nome da coluna do formulário da qual deseja-se recuperar a referência da descrição.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual deseja-se recuperar a referência da descrição.Não

Retorno



TipoDescrição
CHARReferência do componente de descrição de um campo do formulário.

Exemplo



LET l_label_reference = _ADVPL_get_property(l_form_reference,"LABEL_REFERENCE","item","cod_item")




Método GET: MENU_BUTTON_REFERENCE

Referência de um botão da barra de ferramentas do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"MENU_BUTTON_REFERENCE", < l_operation > ) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_operationCHARNome da operação, cadastrada no programa "FRM0001 - Barra de Ferramentas", do formulário da qual deseja-se retornar a referência.Sim

Retorno



TipoDescrição
CHARReferência de um botão da barra de ferramentas (LMenuButton) correspondente à operação informada como parâmetro.

Exemplo



LET l_menubutton_reference = _ADVPL_get_property(l_form_reference,"MENU_BUTTON_REFERENCE","create")




Método GET: MENUBAR_REFERENCE

Referência de um botão da barra de ferramentas do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"MENUBAR_REFERENCE") => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim

Retorno



TipoDescrição
CHARReferência da barra de ferramentas (LMenuBar) do formulário.

Exemplo



LET l_menubar_reference = _ADVPL_get_property(l_form_reference,"MENUBAR_REFERENCE")




Método GET: STATUS_BAR_REFERENCE

Referência da barra de status do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"STATUS_BAR_REFERENCE") => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim

Retorno



TipoDescrição
CHARReferência da barra de status do formulário (LStatusBar).

Exemplo



LET l_menubar_reference = _ADVPL_get_property(l_form_reference,"STATUS_BAR_REFERENCE")




Método GET: TABLE_REFERENCE

Referência da barra de status do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"TABLE_REFERENCE", < l_table >, [< l_alias >]) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Nome da tabela do formulário da qual deseja-se recuperar a referência do grid.Sim
l_alias
CHAR
Alias da tabela do formulário da qual deseja-se recuperar a referência do grid.Não

Retorno



TipoDescrição
CHARReferência do componente grid de uma tabela do formulário.

Exemplo



LET l_table_reference = _ADVPL_get_property(l_form_reference,"TABLE_REFERENCE","item_man")




Método GET: VALUE

Valor de um determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"VALUE", < l_table >, < l_column>, [< l_row >], [< l_alias >]) => VALUE

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Tabela da coluna do formulário da qual deseja-se retornar o valor.Sim
l_column
CHAR
Coluna do formulário da qual deseja-se retornar o valor.Sim
l_row
INTEGER
Linha do grid do formulário da qual deseja-se retornar o valor.Não
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual deseja-se retornar o valor.Não

Retorno



TipoDescrição
VALUEValor de um determinado campo do formulário.

Exemplo



LET l_value = _ADVPL_get_property(l_form_reference,"VALUE","item","cod_item")




Método GET: ZOOM_BUTTON_REFERENCE

Referência do componente do botão de zoom de um determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"ZOOM_BUTTON_REFERENCE",< l_table >,< l_column >,[< l_alias >]) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Nome da tabela da coluna do formulário da qual deseja-se recuperar a referência do botão de zoom.Sim
l_column
CHAR
Nome da coluna do formulário da qual deseja-se recuperar a referência do botão de zoom.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual deseja-se recuperar a referência do botão de zoom.Não

Retorno



TipoDescrição
CHARReferência do componente do botão de zoom de um campo do formulário.

Exemplo



LET l_zoom_button_reference = _ADVPL_get_property(l_form_reference,"ZOOM_BUTTON_REFERENCE","item","cod_item")




Método GET: ZOOM_REFERENCE

Referência do zoom de um determinado campo do formulário.

Sintaxe



_ADVPL_get_property(< l_form_reference >,"ZOOM_REFERENCE",< l_table >,< l_column >,[< l_alias >]) => CHAR

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Nome da tabela da coluna do formulário da qual deseja-se recuperar a referência do zoom.Sim
l_column
CHAR
Nome da coluna do formulário da qual deseja-se recuperar a referência do zoom.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual deseja-se recuperar a referência do zoom.Não

Retorno



TipoDescrição
CHARReferência do zoom de determinado campo do formulário.

Exemplo



LET l_zoom_reference = _ADVPL_get_property(l_form_reference,"ZOOM_REFERENCE","item","cod_item")




Métodos SET

Métodos acessíveis através da função _ADVPL_set_property que permite alterar e manipular os valores do componente.


Método SET: ACTIVATE

Inicia ou finaliza o formulário.

Sintaxe



CALL _ADVPL_set_property(< l_form_reference >,"ACTIVATE", < l_status >)

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_statusSMALLINT

Indicador que define se será ativado ou desativado o formulário.

   TRUE - Ativa o formulário

   FALSE - Desativa/Fecha o formulário.

Sim

(informação) Para ativar ou desativar um formulário, deverá ter executado previamente o método "FORM" ou "INIT_FORM" para o mesmo.


Exemplo



CALL _ADVPL_set_property(l_form_reference,"ACTIVATE",TRUE)




Método SET: BROWSE_VALUE

Atribui valor para uma determinada linha e coluna da operação 'Listar' do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"BROWSE_VALUE", < l_table >, < l_column >, < l_row >, < l_value >, [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Nome da tabela da coluna do formulário da qual terá o valor alterado.Sim
l_column
CHAR
Nome da coluna do formulário da qual terá o alterado.Sim
l_row
INTEGER
Número da linha do grid</span> da operação 'Listar' da qual terá o valor alterado.Sim
l_value
CHAR
Valor a ser atribuído para a coluna da grid</span> da operação Listar do formulário.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual terá o valor alterado.Não


Exemplo



LET l_browse_count = _ADVPL_get_property(l_form_reference,"BROWSE_ITEM_COUNT")

FOR l_ind = 1 TO l_browse_count    
  LET l_cod_item = _ADVPL_get_property(l_form_reference,"BROWSE_VALUE","item","cod_item",l_ind)    
  LET l_den_item = man10021_get_den_item(l_cod_item)        
  CALL _ADVPL_set_property(l_form_reference,"BROWSE_VALUE","item","den_item",l_ind,l_den_item)
END FOR




Método SET: CONTAINER_COLUMNS_COUNT

Inicia ou finaliza o formulário.

Sintaxe



CALL _ADVPL_set_property(< l_form_reference >,"CONTAINER_COLUMNS_COUNT", < l_columns >)

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_columnsSMALLINT

Quantidade máxima de colunas que irá definir o agrupamento dos grupos de componentes do formulário.

Sim

(informação) Este método deve sempre ser chamado uma única vez na função de 'Before Load' do formulário.


Exemplo



CALL _ADVPL_set_property(l_form_reference,"CONTAINER_COLUMNS_COUNT",2)




Método SET: DETAIL_WHERE_CLAUSE

Filtro de consulta padrão para uma tabela de detalhe. Este filtro será utilizado para cada pesquisa que o usuário executar.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"DETAIL_WHERE_CLAUSE", < l_where_clause >, < l_table >, [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_where_clause
CHAR
Filtro de pesquisa SQL para ser utilizado na operação de pesquisa padrão do formulário.Sim
l_table
CHAR
Nome da tabela da qual será definido o filtro.Sim
l_alias
CHAR
Alias da tabela da qual será definido o filtro.Não

(informação) Este filtro será utilizado dentro das cláusulas de junção das tabelas no SQL.

Exemplo



##Definir filtro para a tabela detalhe ITEM_MAN de cardinalidade N..0 que possui junção com uma tabela mestre ITEM
LET l_where_clause = "item_man.cod_item = '8575'"

CALL _ADVPL_set_property(l_form_reference,"DETAIL_WHERE_CLAUSE",l_where_clause,"item_man")

Neste exemplo acima, quando o usuário executar a pesquisa no formulário o filtro SQL será montado da seguinte forma:

 
FROM item LEFT OUTER JOIN item_man
ON item_man.cod_empresa = item.cod_empresa
AND item_man.cod_item = item.cod_item
AND item_man.cod_item = '8575'




Método SET: ENABLE_COMPONENTS

Habilita/desabilita os campos em tela que estiverem registrados no formulário como Editável no cadastro de formulários cadastrais (FRM1002).

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ENABLE_COMPONENTS", < l_status >, [< l_operation >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_status
SMALLINT

Indicador que define se irá habilitar ou desabilitar os campos da tela para edição.

TRUE - Habilitar campos

FALSE - Desabilitar campos

Sim
l_operation
CHAR/SMALLINT

Quando STATUS (Parâmetro l_status) tiver valor TRUE este parâmetro deve indicar a operação que será utilizada para identificar os campos que devem ou não ser habilitados para edição em tela.

create - Inclusão de dados. 
copy - Cópia de dados.
update - Modificação de dados. Não habilita os campos chave.

   (ideia) Se operação não for informada, será considerada a operação create por padrão.


Quando STATUS (Parâmetro l_status) tiver valor FALSE, este parâmetro indicará se para desabilitar a edição dos campos, continuará permitindo que o usuário permita acessar o conteúdo dos campos desabilitados para copiar seu conteúdo ou não.

TRUE -  Permitirá copiar conteúdo do campo desabilitado.
FALSE - Não permitirá copiar conteúdo do campo desabilitado.

   (ideia) Quando não for informado, será considerada valor FALSE por padrão.

Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"ENABLE_COMPONENTS",TRUE,"update")

CALL _ADVPL_set_property(l_form_reference,"ENABLE_COMPONENTS",FALSE,TRUE)




Método SET: ENABLE_VALID_FOREIGN_KEY

Habilita/desabilita a validação de chaves estrangeiras para determinada(s) tabelas do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ENABLE_VALID_FOREIGN_KEY", < l_status >, [< l_table >], [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_status
SMALLINT

Indicador que define se será habilitada ou desabilitada a validação de chaves estrangeiras de uma ou mais tabelas do formulário.

TRUE - Habilitar validação de chaves estrangeiras.

FALSE - Desabilitar validação de chaves estrangeiras.

Sim
l_table
CHAR

Nome da tabela do formulário da qual deseja habilitar/desabilitar a validação de chaves estrangeiras.

(informação) Quando não for informar a tabela, todas as tabelas do formulário serão afetadas. 

Não
l_alias
CHAR
Alias da tabela do formulário da qual deseja habilitar/desabilitar a validação de chaves estrangeiras.Não


Exemplo



CALL _ADVPL_set_property(l_form_reference,"ENABLE_VALID_FOREIGN_KEY",FALSE,"item")




Método SET: ENABLE_VALID_NOT_NULL

Habilita/desabilita a validação de campos obrigatório para determinada(s) tabelas do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ENABLE_VALID_NOT_NULL", < l_status >, [< l_table >], [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_status
SMALLINT

Indicador que define se será habilitada ou desabilitada a validação de campos obrigatório de uma ou mais tabelas do formulário.

TRUE - Habilitar validação de campos obrigatórios.

FALSE - Desabilitar validação de campos obrigatórios.

Sim
l_table
CHAR

Nome da tabela do formulário da qual deseja habilitar/desabilitar a validação de campos obrigatórios.

(informação) Quando não for informada a tabela, todas as tabelas do formulário serão consideradas.

Não
l_alias
CHAR
Alias da tabela do formulário da qual deseja habilitar/desabilitar a validação de campos obrigatórios.Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"ENABLE_VALID_NOT_NULL",FALSE,"item")




Método SET: ENABLE_VALID_PRIMARY_KEY

Habilita/desabilita a validação de chaves primárias para determinada(s) tabelas do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ENABLE_VALID_FOREIGN_KEY", < l_status >, [< l_table >], [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_status
SMALLINT

Indicador que define se será habilitada ou desabilitada a validação de chave primária de uma ou mais tabelas do formulário.

TRUE - Habilitar validação de chaves primárias.

FALSE - Desabilitar validação de chaves primárias.

Sim
l_table
CHAR

Nome da tabela do formulário da qual deseja habilitar/desabilitar a validação de chaves primárias.

(informação) Quando não for informar a tabela, todas as tabelas do formulário serão afetadas. 

Não
l_alias
CHAR
Alias da tabela do formulário da qual deseja habilitar/desabilitar a validação de chaves primárias.Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"ENABLE_VALID_PRIMARY_KEY",FALSE,"item")




Método SET: FORM

Carrega as informações do formulário, mas não o executa.

Utilizado em casos em que é necessário carregar o formulário e após isso executar diretamente uma operação do mesmo.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"FORM", < l_form_name >, <l_4glRecord1>, < l_4glRecord2 >, ..., <l_4GLrecordNz> )

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário de cadastro (FRM1002)Sim
l_4glRecord (1,2,..,N)
4GL 
RECORD

Variáveis RECORD ou ARRAY OF RECORD, separadas por vírgula, que irão controlar o conteúdo do formulário, sendo que para cada tabela informada no formulário é necessário uma variável RECORD para tabelas do tipo mestre e ARRAY OF RECORD para as tabelas do tipo detalhe ou mestre-detalhe.

A  ordem das variáveis RECORD ou ARRAY OF RECORD deve obedecer a ordem informada no campo "Posição Record 4GL" no cadastro de formulários cadastrais (FRM0002).
Sim

Exemplo



CALL _ADVPL_set_property(l_form_reference,"FORM","man10021",mr_item,ma_item_man)




Método SET: GET_FOCUS

Forçar o foco do cursor para um determinado campo do formulário, sendo que este apenas obterá foco se permitido.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"GET_FOCUS", < l_table >, < l_column >, [< l_row >], [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Nome da tabela no formulário.Sim
l_column
CHAR
Nome da coluna no formulário.Sim
l_row
INTEGER

Linha do grid do formulário para qual deseja forçar o foco.

Não
l_alias
CHAR
Alias da tabela com a coluna do formulário para qual deseja forçar o foco.Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"GET_FOCUS","item","cod_item")




Método SET: HOTKEY

Define uma tecla de atalho para executar uma ação específica no formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"HOTKEY", < l_hotkey >, < l_function >, < l_description >)

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário de cadastro (FRM1002)Sim
l_hotkey
CHAR

Tecla de atalho.

Informe o código numérico correspondente da tecla desejada ou então o nome da tecla que deve respeitar uma lista pré-definida de nomes previstos no metadado.

Sim
l_function
CHAR

Nome da função 4GL que será acionada ao invocar o atalho da tecla de atalho.

Sim
l_description
CHAR

Texto de descrição da tecla de atalho.

Nãao

Exemplo



 CALL _ADVPL_set_property(m_form, "HOTKEY", "CTRL-H", "xxx9999_funcao_especifica","Executa função específica")




Método SET: INIT_FORM

Junção dos métodos "FORM" e "ACTIVATE" para carregar as informações do formulário e executá-lo em seguida.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"INIT_FORM", < l_form_name >, <l_4glRecord1>, < l_4glRecord2 >, ..., <l_4GLrecordNz> )

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário de cadastro (FRM1002)Sim
l_4glRecord (1,2,..,N)
4GL 
RECORD

Variáveis RECORD ou ARRAY OF RECORD, separadas por vírgula, que irão controlar o conteúdo do formulário, sendo que para cada tabela informada no formulário é necessário uma variável RECORD para tabelas do tipo mestre e ARRAY OF RECORD para as tabelas do tipo detalhe ou mestre-detalhe.

A  ordem das variáveis RECORD ou ARRAY OF RECORD deve obedecer a ordem informada no campo "Posição Record 4GL" no cadastro de formulários cadastrais (FRM0002).
Sim

Exemplo



CALL _ADVPL_set_property(l_form_reference,"INIT_FORM","man10021",mr_item,ma_item_man)




Método SET: PROPERTY

Ajustar o valor de uma propriedade de um campo do formulário antes que ele seja carregado em memória (evento BEFORE_LOAD), para que ele passe a respeitar o valor da propriedade durante a carga da tela.

(aviso) Esta ação somente é válida quando acionada no evento BEFORE_LOAD do formulário. (aviso) 

Sintaxe



_ADVPL_set_property(< l_form_reference >,"PROPERTY", < l_property >, < l_value_property >, < l_table >, < l_column >, [< l_table_alias >] )

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_property
CHAR
Nome da propriedade do componente da coluna do formulário.Sim
l_value_property
CHAR
Valor a ser atribuído para a propriedade informada.Sim
l_table
CHAR
Nome da tabela no formulário.Sim
l_column
CHAR
Nome da coluna no formulário.Sim
l_table_alias
CHAR
Alias da tabela com a coluna do formulário.Não

Exemplo



 CALL _ADVPL_set_property(m_form_reference,"PROPERTY","IS_VISIBLE",FALSE,"empresa","rastreada","a")




Método SET: ORDER_BY

Ordem de consulta padrão para determinado(s) campos do formulário que será utilizada para toda pesquisa executada no formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ORDER_BY", < l_table_alias >, < l_column >, [< l_order >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table_alias
CHAR
Nome da tabela OU alias. Caso a tabela tenha alias definido no formulário, deverá ser informado apenas o alias para definir a ordenação a ser utilizada na operação de pesquisa padrão do formulário.Sim
l_column
CHAR
Nome da coluna da qual deseja definir a ordenação para ser utilizada na operação de pesquisa padrão do formulário.Sim
l_order
CHAR

Ordenação da coluna a ser respeitada.
ASC - ordenação crescente.
DESC - ordenação decrescente.

(informação) Quando não informado irá assumir automaticamente a ordenação como ASC.

Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"ORDER_BY","item","cod_item","DESC")




Método SET: VALUE

Atribui valor para determinado campo do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"VALUE", < l_table>, < l_column >, < l_value >, [< l_row >], [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_table
CHAR
Tabela da coluna do formulário da qual terá o valor alterado.Sim
l_column
CHAR
Coluna do formulário da qual terá o alterado.Sim
l_value
-
Qualquer valor a ser atribuído para a coluna do formulário, respeitando o tipo de dado.Sim
l_row
INTEGER
Linha do grid do formulário da qual terá o valor alteradoNão
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual terá o valor alterado.Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"VALUE","item","cod_empresa","50")




Método SET: WHERE_CLAUSE

Filtro de consulta padrão para o formulário que será utilizado para toda pesquisa realizada.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"WHERE_CLAUSE", < l_where_clause >)

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_where_clause
CHAR
Filtro de pesquisa SQL para ser utilizado na operação de pesquisa padrão do formulário.Sim

(informação) Este filtro será utilizado no filtro WHERE do SQL padrão do metadado.

Exemplo



#Definir um filtro para uma tabela mestre (item):
LET l_where_clause = "item.cod_empresa = '50'"

CALL _ADVPL_set_property(l_form_reference,"WHERE_CLAUSE",l_where_clause)

Neste exemplo acima, quando o usuário executar a pesquisa, este filtro será montado da seguinte forma:


FROM item WHERE item_man.cod_empresa = '50'




Método SET: REFRESH_COMPONENTS

Força atualização da exibição de todos campos do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"REFRESH_COMPONENTS")

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim

Exemplo



CALL _ADVPL_set_property(l_form_reference,"REFRESH_COMPONENTS")



Método SET: ZOOM_NAME

Atribui valor para uma determinada linha e coluna da operação 'Listar' do formulário.

Sintaxe



_ADVPL_set_property(< l_form_reference >,"ZOOM_NAME", < l_zoom_name >, < l_table >, < l_column >, [< l_alias >])

Parâmetros



NomeTipoDescriçãoObrigatório?
l_form_reference
CHAR
Referência do formulário.Sim
l_zoom_name
CHAR
Nome do novo zoom que será atribuído para o campo. Este zoom deve estar cadastrado no programa "FRM1008 - Zoom".Sim
l_table
CHAR
Nome da tabela da coluna do formulário da qual terá o zoom alterado.Sim
l_column
CHAR
Nome da coluna do formulário da qual terá o zoom alterado.Sim
l_alias
CHAR
Alias da tabela com a coluna do formulário da qual terá o zoom alterado.Não

Exemplo



CALL _ADVPL_set_property(l_form_reference,"ZOOM_NAME","zoom_item_man","item","cod_item")
 



Sintaxe


LET m_form_reference = _ADVPL_create_component(NULL,"LFORMMETADATA")     
CALL _ADVPL_set_property(m_form_reference,"INIT_FORM",<form_name>,<4GLrecord1>,<4GLrecord2>,...,<4GLrecordN>) 

Exemplo


Clique no link na lateral direita para expandir o código de exemplo CRUD1.

Formulário CRUD (Mestre)
#------------------------------------------------------------------------------------------------------------#
# 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()
#------------------------------------------------------------------#
RETURN "$Archive: crud1.4gl $|$Revision: 1 $|$Date: 16/05/23 00:38 $|$Modtime: 16/05/23 00:38 $" # Informações do controle de versão de fontes Logix - Não remover esta linha (FRAMEWORK)
END FUNCTION


Clique no link na lateral direita para expandir o código de exemplo CRUD2.
Formulário CRUD (Mestre X Detalhe)
#------------------------------------------------------------------------------------------------------------#
# PROGRAMA: crud2                                                                                            #
# OBJETIVO: Modelo 02 de formulário CRUD (MASTER X DETAIL)                                                   #
#------------------------------------------------------------------------------------------------------------#
# 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_crud2_master                                                                     #
#         (crud_id CHAR(10) NOT NULL,                                                                        # 
#          crud_description CHAR(30) NOT NULL,                                                               # 
#          crud_status CHAR(1) NOT NULL);                                                                    # 
#                                                                                                            # 
#   ALTER TABLE frm_modelo_crud2_master ADD CONSTRAINT pk_frm_modelo_crud2_master                            #
#               PRIMARY KEY (crud_id);                                                                       #
#   INFORMIX:                                                                                                #
#       ALTER TABLE frm_modelo_crud2_master ADD CONSTRAINT PRIMARY KEY (crud_id)                             #
#             CONSTRAINT pk_frm_modelo_crud2_master;                                                         #
#                                                                                                            # 
#                                                                                                            # 
#   CREATE TABLE frm_modelo_crud2_detail                                                                     #
#         (crud_id CHAR(10) NOT NULL,                                                                        # 
#          crud_sequence SMALLINT NOT NULL,                                                                  # 
#          crud_datetime DATETIME YEAR TO SECOND NOT NULL,     (oracle e sqlserver - tipo DATE)              # 
#          crud_type     CHAR(1) NOT NULL,                                                                   # 
#          crud_text     CHAR(100) NOT NULL)                                                                 # 
#                                                                                                            # 
#   ALTER TABLE frm_modelo_crud2_detail ADD CONSTRAINT pk_frm_modelo_crud2_detail                            #
#               PRIMARY KEY (crud_id,crud_sequence);                                                         #
#   INFORMIX:                                                                                                #
#       ALTER TABLE frm_modelo_crud2_detail ADD CONSTRAINT PRIMARY KEY (crud_id,crud_sequence)               #
#             CONSTRAINT pk_frm_modelo_crud2_detail;                                                         #
#------------------------------------------------------------------------------------------------------------#
DATABASE logix

GLOBALS
    DEFINE p_user LIKE usuarios.cod_usuario
END GLOBALS

DEFINE mr_frm_modelo_crud2_master  RECORD
                                   crud_id  CHAR(10),
                                   crud_description CHAR(30),
                                   crud_status CHAR(1)
                                   END RECORD

DEFINE ma_frm_modelo_crud2_detail ARRAY[50] OF
                                 RECORD
                                 crud_id       CHAR(10),
                                 crud_sequence SMALLINT,
                                 crud_text     CHAR(100),
                                 crud_datetime DATETIME YEAR TO SECOND,
                                 crud_type     CHAR(1)
                                 END RECORD

DEFINE m_count_crud2_detail INTEGER

DEFINE m_form_reference, m_container_reference  VARCHAR(10)
DEFINE m_crud2_detail_table_reference           VARCHAR(10)

DEFINE m_vt_crud_status_image_reference    VARCHAR(10)
DEFINE m_vt_crud_status_text_reference     VARCHAR(10)

DEFINE m_status_process                         SMALLINT
DEFINE m_progressbar_reference                  VARCHAR(10)

#------------------------------------------------------------------------------#
FUNCTION crud2()
#------------------------------------------------------------------------------#
   RETURN crud2_executeOperation(NULL,NULL,NULL)
END FUNCTION

#------------------------------------------------------------------#
 FUNCTION crud2_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)

   RETURN crud2_executeOperation(NULL,NULL,l_container_reference)
 END FUNCTION 

#-----------------------------------------------------------------------------------#
FUNCTION crud2_executeOperation(l_operation,l_where_clause,l_container_reference)
#-----------------------------------------------------------------------------------#
   DEFINE l_operation           CHAR(050)
   DEFINE l_where_clause        CHAR(500)
   DEFINE l_container_reference VARCHAR(10)
   DEFINE l_status              SMALLINT

   LET l_status = FALSE

   LET m_container_reference = l_container_reference

   IF crud2_load_form() THEN
      IF l_operation <> " " THEN
         LET l_status = _ADVPL_get_property(m_form_reference,"EXECUTE_OPERATION",UPSHIFT(l_operation),l_where_clause CLIPPED)
      ELSE
         LET l_status = _ADVPL_set_property(m_form_reference,"ACTIVATE",TRUE)
         LET m_form_reference = NULL
      END IF
   END IF

   RETURN l_status
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_load_form()
#------------------------------------------------------------------------------#
   DEFINE l_ind SMALLINT

   IF m_form_reference IS NULL THEN
      #Aqui no parâmetro da função LOG_initApp deve-se utilizar a chave de sistema do módulo Logix correspondente 
      #Vide chaves de sitemas disponíveis em https://tdn.totvs.com/display/LLOG/LOG_InitApp
      IF LOG_initApp("PADRAO") <> 0 THEN
         RETURN FALSE
      END IF

      INITIALIZE mr_frm_modelo_crud2_master,ma_frm_modelo_crud2_detail TO NULL

      FOR l_ind = 1 TO arrayLength(ma_frm_modelo_crud2_detail)
         INITIALIZE ma_frm_modelo_crud2_detail[l_ind].* TO NULL
      END FOR

      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,"FORM","crud2",mr_frm_modelo_crud2_master,ma_frm_modelo_crud2_detail)
   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 crud2_after_load()
#------------------------------------------------------------------------------#
   LET m_crud2_detail_table_reference  = _ADVPL_get_property(m_form_reference,"TABLE_REFERENCE","frm_modelo_crud2_detail")

   CALL _ADVPL_set_property(m_crud2_detail_table_reference,"CAN_COPY_ROW",FALSE)

   LET m_vt_crud_status_image_reference = _ADVPL_get_property(m_form_reference,"COMPONENT_REFERENCE","frm_modelo_crud2_master","vt_crud_status_image")
   LET m_vt_crud_status_text_reference  = _ADVPL_get_property(m_form_reference,"COMPONENT_REFERENCE","frm_modelo_crud2_master","vt_crud_status_text")

   CALL _ADVPL_set_property(m_crud2_detail_table_reference,"BEFORE_EDIT_ROW","crud2_detail_before_edit_row")

   CALL _ADVPL_set_property(m_form_reference,"ORDER_BY","frm_modelo_crud2_master","crud_id","DESC")

   IF NOT LOGIN_logix_userIsAdministrator(p_user) THEN
      #Apenas usuarios adminiistradores tem acesso a funncionalidade de DELETE 
      CALL LOG_visible_toolbar_button(m_form_reference,"delete",FALSE)
   END IF

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_create_before_input()
#------------------------------------------------------------------------------#
   #Inicializar contador de linhas de grid numa ação de inclusao/copia q pode ser usado para consistencias no final da operação
   LET m_count_crud2_detail = 0

   LET mr_frm_modelo_crud2_master.crud_status = 'A'

   CALL crud2_display_crud_status(mr_frm_modelo_crud2_master.crud_status)

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_create_before_confirm()
#------------------------------------------------------------------------------#
   #Consistencias antes de iniciar a inclusão de registro. Em caso de falha ou falta de permissão, retornar FALSE.

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_create_confirm()
#------------------------------------------------------------------------------#
   #Consistencias de inclusão de registro

   IF NOT crud2_update_before_confirm() THEN 
      RETURN FALSE
   END IF

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_update_before_input()
#------------------------------------------------------------------------------#
   #Recuperar total de linhas do GRID existentes no inicio de uma ação de modificação, caso precise validar a mudança de total de linhas ao final da operação
   LET m_count_crud2_detail = _ADVPL_get_property(m_crud2_detail_table_reference,"ITEM_COUNT")

   CALL crud2_display_crud_status(mr_frm_modelo_crud2_master.crud_status)

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_update_before_confirm()
#------------------------------------------------------------------------------#
   DEFINE l_ind     SMALLINT
   DEFINE l_count   SMALLINT
   DEFINE l_changed SMALLINT

   #Consistencias antes de iniciar o processo de exclusão de registro. Em caso de falha ou falta de permissão, retornar FALSE.

   CALL LOG_clear_status_bar_text(m_form_reference)

   LET l_count = _ADVPL_get_property(m_crud2_detail_table_reference,"ITEM_COUNT")

   FOR l_ind = 1 TO l_count
      IF ma_frm_modelo_crud2_detail[l_ind].crud_sequence <= 0 THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Sequencia precisa ser maior que zero.","ERROR_TEXT")
         CALL LOG_atribui_foco_componente_tabela(m_form_reference,'frm_modelo_crud2_detail',"crud_sequence",l_ind)
         RETURN FALSE
      END IF
      IF ma_frm_modelo_crud2_detail[l_ind].crud_sequence > 999 THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Sequencia precisa ser entre 1 e 999.","ERROR_TEXT")
         CALL LOG_atribui_foco_componente_tabela(m_form_reference,'frm_modelo_crud2_detail',"crud_sequence",l_ind)
         RETURN FALSE
      END IF
      IF LENGTH(ma_frm_modelo_crud2_detail[l_ind].crud_text) <= 3 THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Texto precisa ter mais de 3 caracteres.","ERROR_TEXT")
         CALL LOG_atribui_foco_componente_tabela(m_form_reference,'frm_modelo_crud2_detail',"crud_text",l_ind)
         RETURN FALSE
      END IF
   END FOR

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_update_confirm()
#------------------------------------------------------------------------------#
   #Consistencias de modificação de registro

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_delete_before_confirm()
#------------------------------------------------------------------------------#
   DEFINE l_menu_button_reference VARCHAR(10)
   DEFINE l_question              VARCHAR(500)

   #Consistencias antes de iniciar o processo de exclusão de registro. Em caso de falha ou falta de permissão, retornar FALSE.

   #Modificando o texto padrão da pergunta de exclusão.
   LET l_question = l_question CLIPPED, "\nEsta ação irá excluir todas as sequências apresentadas para este registro. \n\nConfirma exclusão?"
   LET l_menu_button_reference = _ADVPL_get_property(m_form_reference,"MENU_BUTTON_REFERENCE","delete")
   CALL _ADVPL_set_property(l_menu_button_reference,"EVENT_MESSAGE",l_question)

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_delete_confirm()
#------------------------------------------------------------------------------#
   #Consistencias e ajustes durante transação de exclusão de registro. Em caso de falha, retornar FALSE.

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_update_status_confirm()
#------------------------------------------------------------------------------#
   DEFINE l_status CHAR(1)

   IF STRING_isEmpty(mr_frm_modelo_crud2_master.crud_id) THEN
      CALL LOG_show_status_bar_text(m_form_reference,"Efetue primeiramente a pesquisa.","WARNING_TEXT")
      RETURN FALSE
   END IF

   LET l_status = mr_frm_modelo_crud2_master.crud_status

   IF l_status = "A" THEN
      IF NOT LOG_question("Confirma inativação do registro?") THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Operação de inativação cancelada.","WARNING_TEXT")
         RETURN FALSE
      END IF
      LET l_status = "I"
   ELSE
      IF NOT LOG_question("Confirma reativação do registro?") THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Operação de reativação cancelada.","WARNING_TEXT")
         RETURN FALSE
      END IF
      LET l_status = "A"
   END IF

   WHENEVER ERROR CONTINUE
   UPDATE frm_modelo_crud2_master
      SET crud_status = l_status
   WHERE frm_modelo_crud2_master.crud_id  = mr_frm_modelo_crud2_master.crud_id
   WHENEVER ERROR STOP
   IF sqlca.sqlcode <> 0 THEN
      CALL LOG_show_status_bar_text(m_form_reference,"Falha ao ajustar a situação do registro. ("||log0030_mensagem_get_texto()||")","ERROR_TEXT")
      RETURN FALSE
   END IF

   CALL LOG_show_status_bar_text(m_form_reference,"Situação do registro alterada com sucesso.","INFO_TEXT")
   LET mr_frm_modelo_crud2_master.crud_status = l_status

   CALL crud2_display_crud_status()

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
 FUNCTION crud2_cancel_input()
#------------------------------------------------------------------------------#
   LET mr_frm_modelo_crud2_master.crud_status = NULL
   CALL crud2_display_crud_status()
END FUNCTION

#------------------------------------------------------------------------------#
 FUNCTION crud2_find_before_input()
#------------------------------------------------------------------------------#
   DEFINE l_construct_reference VARCHAR(10)

   LET mr_frm_modelo_crud2_master.crud_status = NULL
   CALL crud2_display_crud_status()

   #Desabilitar a opção ORDER BY do filtro de pesquisa
   LET l_construct_reference = _ADVPL_get_property(m_form_reference,"CONSTRUCT_REFERENCE")
   CALL _ADVPL_set_property(l_construct_reference,"VISIBLE_ORDER_BY",FALSE)

   RETURN TRUE
 END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_find_confirm()
#------------------------------------------------------------------------------#
   #Carregar informações adicionais após leitura/paginação de registro.

   CALL crud2_display_crud_status()

   RETURN TRUE
END FUNCTION

#--------------------------------------------------#
FUNCTION crud2_display_crud_status()
#--------------------------------------------------#
   DEFINE l_crud_status CHAR(1)

   #Atualizar a imagem de status apresentada na tela

   CALL _ADVPL_set_property(m_vt_crud_status_image_reference,"ENABLE",TRUE)

   CASE mr_frm_modelo_crud2_master.crud_status
   WHEN "A"
      CALL _ADVPL_set_property(m_vt_crud_status_image_reference,"IMAGE","VERDE")
      CALL _ADVPL_set_property(m_vt_crud_status_text_reference,"TEXT","Ativo")
   WHEN "I"
      CALL _ADVPL_set_property(m_vt_crud_status_image_reference,"IMAGE","VERMELHO")
      CALL _ADVPL_set_property(m_vt_crud_status_text_reference,"TEXT","Inativo")
   OTHERWISE
      CALL _ADVPL_set_property(m_vt_crud_status_image_reference,"IMAGE","CINZA")
      CALL _ADVPL_set_property(m_vt_crud_status_text_reference,"TEXT","Nenhuma pesquisa ativa")
   END CASE

   CALL _ADVPL_set_property(m_vt_crud_status_text_reference,"POSITION",0,2)
END FUNCTION

#------------------------------------------------------------------------------#
 FUNCTION crud2_browse_before_input()
#------------------------------------------------------------------------------#
   DEFINE l_column_value      CHAR(50),
          l_idx               INTEGER,
          l_browse_item_count INTEGER
{
   LET l_browse_item_count = _ADVPL_get_property(m_form_reference,"BROWSE_ITEM_COUNT")

   FOR l_idx = 1 TO l_browse_item_count
      #Caso precise complementar o valor de alguma coluna na opção LISTAR deve-se preeencher aqui
   
      #Recuperar valor de um dado da grid da opção LISTAR
      LET l_column_value = _ADVPL_get_property(m_form_reference,"BROWSE_VALUE","<table_name>","<column_name>",l_idx)

      #Ajustar valor de um dado da grid da opção LISTAR
      CALL _ADVPL_set_property(m_form_reference,"BROWSE_VALUE","<table_name>","<column_name>",l_idx,"<column_value>")
   END FOR
}
   RETURN TRUE
 END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_detail_after_insert_row()
#------------------------------------------------------------------------------#
   DEFINE l_row_selected SMALLINT

   #Ações para executar após inclusão de nova linha em GRID

   LET l_row_selected = _ADVPL_get_property(m_crud2_detail_table_reference,"ROW_SELECTED")

   LET ma_frm_modelo_crud2_detail[l_row_selected].crud_sequence = l_row_selected
   LET ma_frm_modelo_crud2_detail[l_row_selected].crud_datetime = CURRENT YEAR TO SECOND
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_detail_before_delete_row()
#------------------------------------------------------------------------------#
   DEFINE l_row_selected SMALLINT

   #Ações para consistencia de eliminação de linha do GRID. Em caso de falha ou falta de permissão retornar FALSE.
{
   LET l_row_selected = _ADVPL_get_property(m_crud2_detail_table_reference,"ROW_SELECTED")

   IF <CONDICAO> THEN
       RETURN FALSE
   END IF
}
   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_detail_before_edit_row()
#------------------------------------------------------------------------------#
   DEFINE l_row_selected SMALLINT
   DEFINE l_column_name  CHAR(50)

   #Consistencia para avalias se os dados da linha corrente do GRID podem ser editadas pelo usuário. Em caso de bloqueio retornar FALSE.

   #Recuperar  o nome da coluna que está tentando editar no GRID
   LET l_column_name  = _ADVPL_get_property(m_crud2_detail_table_reference,"COLUMN_NAME")

   # Recupera o nome da coluna e a linha em edição.
   LET l_row_selected = _ADVPL_get_property(m_crud2_detail_table_reference,"ROW_SELECTED")
   IF ma_frm_modelo_crud2_detail[l_row_selected].crud_datetime IS NULL THEN
      LET ma_frm_modelo_crud2_detail[l_row_selected].crud_datetime = CURRENT YEAR TO SECOND
   END IF

   IF mr_frm_modelo_crud2_master.crud_status = "I" THEN
      # Não permite modificar dados das linhas do GRID da tabela DETALHE
      CALL LOG_show_status_bar_text(m_form_reference,"Somente é permitida edição de informações da lista para registro ativo.","WARNING_TEXT")
      RETURN FALSE
   END IF

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_detail_crud_text_valid()
#------------------------------------------------------------------------------#
   #Consistencias da edição de valor de um campo do formulário. Em caso de falha do valor informado retornar FALSE e 
   #isso irá bloquear a saida do campo até que usuário corrija o valor informado.
   
   #Esta função pode ser usada para inicializar valor de campo também quando necessário.

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_master_crud_status_change_event()
#------------------------------------------------------------------------------#
   CALL LOG_clear_status_bar_text(m_form_reference)

   IF mr_frm_modelo_crud2_master.crud_status = "I" THEN
      IF NOT LOGIN_logix_userIsAdministrator(p_user) THEN
         CALL LOG_show_status_bar_text(m_form_reference,"Opção disponível apenas para usuários administradores ajustar status para INATIVO.","WARNING_TEXT")
         RETURN FALSE
      END IF  
   END IF

   RETURN TRUE
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_process_confirm()
#------------------------------------------------------------------------------#
   CALL LOG_clear_status_bar_text(m_form_reference)

   IF NOT LOGIN_logix_userIsAdministrator(p_user) THEN
      CALL LOG_show_status_bar_text(m_form_reference,"Opção disponível apenas para usuários administradores.","WARNING_TEXT")
      RETURN FALSE
   END IF  

   IF NOT log_question('Esta operação irá realizar um processamento com acompanhamento de barra de progresso.\n\nDeseja iniciar o processamento?') THEN
      RETURN FALSE
   END IF
   
   LET m_progressbar_reference = _ADVPL_create_component(NULL, "LPROGRESSPOPUP")
   CALL _ADVPL_set_property(m_progressbar_reference, "TITLE", "Processamento Geral")
   CALL _ADVPL_set_property(m_progressbar_reference, "PROGRESS_TYPE", "PROCESS" )
   CALL _ADVPL_set_property(m_progressbar_reference, "MAX_VALUE", 3 ) # Total de registros para completar barra de progresso em 100%
   CALL _ADVPL_set_property(m_progressbar_reference, "PROGRESS_EVENT", "crud2_process")
   CALL _ADVPL_set_property(m_progressbar_reference, "TIME_REFRESH", 0)
   CALL _ADVPL_get_property(m_progressbar_reference, "INIT_PROGRESS")        

   CALL LOG_progresspopup_set_reference(m_progressbar_reference)
            
   RETURN m_status_process
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_process()
#------------------------------------------------------------------------------#
   #Função de processamento acionado pela barra de progresso.

   SLEEP 1
   CALL _ADVPL_set_property(m_progressbar_reference,"VALUE",1) #mostrar andamento da barra de progresso 
   SLEEP 1
   CALL _ADVPL_set_property(m_progressbar_reference,"VALUE",2) #mostrar andamento da barra de progresso 
   SLEEP 1
   CALL _ADVPL_set_property(m_progressbar_reference,"VALUE",3) #mostrar andamento da barra de progresso 

   CALL LOG_show_status_bar_text(m_form_reference,"Processamento concluído com sucesso.","info")
   LET m_status_process = TRUE #Processamento concluido com sucesso
{
   CALL LOG_show_status_bar_text(m_form_reference,"Processamento concluído com erros","WARNING_TEXT")
   LET m_status_process = FALSE #Processamento concluido com erro
}
   #Encerrar barra de progresso    
   CALL _ADVPL_set_property(m_progressbar_reference, "FINISH") 

   RETURN m_status_process
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION crud2_version_info()
#------------------------------------------------------------------------------#
   RETURN "$Archive: /Logix/Fontes_Doc/Sustentacao/V12/V12/framework/sgdp/programas/crud2.4gl $|$Revision: 20 $|$Date: 26/08/22 21:43 $|$Modtime: 26/08/22 21:43 $" # Informações do controle de versão do SourceSafe - Não remover esta linha (FRAMEWORK)
END FUNCTION

Informações


O arquivo CRUD1.ZIP anexo contém os arquivos XML da tabela e formulário para importar via sincronizador metadado e o cógigo fonte 4GL de exemplo do programa metadado CRUD1 (Formulário CRUD Mestre) apresentado no primeiro exemplo acima.

Este formulário possui também um componente de imagem adicional em tela, instanciado no modelo livre (FREEFORM) para demonstrar uso em paralelo com os eventos do formulário CRUD metadado.

crud1.zip


O arquivo CRUD2.ZIP anexo contém o arquivo XML do (formulário + tabelas) para importar via sincronizador metadado e o código fonte 4GL de exemplo do programa metadado CRUD2 (Formulário CRUD Mestre X Detalhe) apresentado no segundo exemplo acima.

Este formulário possui também a programação de alguns eventos adicionais de controle de edição e consistências, apresenta um objeto de imagem que é alterado por uma operação do menu (alteração de situação) e possui um exemplo de botão de processamento que executa uma rotina apresentando uma tela com barra de progresso.

crud2.zip