Páginas filhas
  • Características Gerais - Metadados Logix - LGX


Agora que já conhecemos o conceito e arquitetura de funcionamento do metadado é preciso citar algumas características envolvendo tipos de dados, componentes usados e como montar um código 4GL para iniciar a execução de um formulário Metadado.


Tipos de dados



O metadado utiliza uma lista restrita de tipos de dados conforme a seguir:


CHAR(n): alfanumérico de comprimento “n”. Uma variável do tipo CHAR pode ter o tamanho que varia de 1 a 32767;

SMALLINT: números inteiros pequenos, uma variável do tipo SMALLINT pode receber números inteiros entre -32767 e 32767;

INTEGER: números inteiros entre -2.147.483.647 e 2.147.483.647;

DECIMAL(m,n): números decimais com “m” algarismos, sendo que “n” algarismos são para formar o número de casas decimais. Uma variável do tipo DECIMAL não pode exceder 32 dígitos significativos;

DATE: tipo equivalente a uma data, configurável através da variável de ambiente DBDATE. O formato padrão do DBDATE atual utilizado no metadado é “dmy4/”, seja, DD/MM/YYYY, onde DD é o dia (01 a 31), MM é o mês (01 a 12) e YYYY é o ano (1899 a 9999);

VARCHAR(n): igual ao tipo CHAR, mas armazenando na variável e no banco somente o texto necessário, eliminando espaços em branco a direita do texto;

SERIAL: para campos inteiros de auto incremento, selecionando o último registro da tabela e incrementando um para a coluna;

DATETIME: o tipo de dado DATETIME define uma instância de tempo, expresso como uma data do calendário e uma hora do dia. As unidades do tempo que o valor de DATETIME armazena são determinadas pelo programador. A precisão pode variar de um ano até um segundo. A especificação de escala de precisão é chamada de qualificador do DATETIME. Este qualificador é utilizado no formato do “inicial ao final".

LISTA DE QUALIFICADORES

Operações padrões do metadado



Para formulários de cadastro as operações padrões (automáticas) do metadado são:

create – opção de inclusão do formulário de cadastro;

copy – opção de cópia (inclusão com valores pré-definidos) do formulário de cadastro;

update – opção de modificação do formulário de cadastro;

delete – opção de exclusão do formulário de cadastro;

find – opção de consulta do formulário de cadastro;

first – opção de navegação para o primeiro registro encontrado na consulta do formulário de cadastro;

previous – opção de navegação para o registro anterior encontrado na consulta do formulário de cadastro;

next – opção de navegação para o registro seguinte encontrado na consulta do formulário de cadastro;

last – opção de navegação para o último registro encontrado na consulta;

browse – opção para exibir todos os registros cadastrados na tabela;

print – opção para emissão de relatório com os registros do formulário;

quit – opção de sair do formulário de cadastro.


Para formulários de parâmetros operações padrões (automáticas) do metadado são:

inform – opção de informar os parâmetros do formulário de parâmetros;

profile – opção para salvar os dados informados pelo usuário no formulário;

process – opção de processamento do formulário de parâmetros

quit – opção de sair do formulário de parâmetros.


Máscaras


Máscaras são os formatos que o componente irá assumir ao informar os dados no componente. Lembrando que máscaras em campos LTextField são gravadas junto na variável.

C (Caractere)       N (Numérico)        L (Lógico)

(informação) Para cada caractere do componente é necessário informar o símbolo de formatação.


Modelos de tabelas


MASTER: para tabelas que utilizam uma RECORD normal, um registro por cadastro.


DETAIL: para tabelas que utilizam ARRAY de RECORD, vários registros por cadastro.


MATER-DETAIL: para tabelas que representam os dois tipos de modelo, tendo pelo menos uma coluna mestre (comum entre todos os registros da tabela que serão cadastrados).


Tipos de Componentes



Componentes são objetos responsáveis por manipular os dados das colunas nos formulários, cada coluna visível no formulário deve ter um componente. Os componentes dependem do tipo de dado da coluna, mas alguns possuem controle para qualquer tipo de dado.

Os principais componentes utilizados no metadado são:


LTextField: componente para controle de colunas dos tipos CHAR e VARCHAR. O alinhamento do registro neste componente é sempre à esquerda.


LNumericField: componente para controle dos tipos SMALLINT, INTEGER, DECIMAL e SERIAL. O alinhamento do registro neste componente é sempre à direita.


LTextArea: componente para controle dos tipos CHAR e VARCHAR para textos muito longos que precisam de quebra de linha. O alinhamento do registro neste componente é sempre à esquerda.


LDateField: componente para controle do tipo DATE. Este componente formata automaticamente a data de acordo com a variável de ambiente DBDATE, que por padrão é DD/MM/YYYY. Ao lado deste componente irá aparecer um ícone para abertura do calendário para escolha da data.




LCheckBox: este componente controla os dados dos tipos CHAR, VARCHAR, SMALLINT, INTEGER e DECIMAL. Permite apenas dois valores, para representação de valores lógicos (Sim ou Não, Verdadeiro ou Falso).


LCombobox: este componente controla os dados dos tipos CHAR, VARCHAR, SMALLINT, INTEGER e DECIMAL. Apresenta os dados em forma de lista dobrável, apresentando a descrição e gravando um código na variável. Este componente só aceita a escolha de uma opção.


LRadioGroup: semelhante ao componente LComboBox, este controla os dados dos tipos CHAR, VARCHAR, SMALLINT, INTEGER e DECIMAL. Apresenta os dados em uma lista, apresentando todas as descrições uma abaixo da outra e gravando um código na variável. Este componente só aceita a escolha de uma opção. Não aconselhado a ser utilizado quando houver mais de três opções.


LLabel / LRLabel: componentes que não controlam variável, são os componentes para descrições. O LLabel alinha a descrição à esquerda e o LRLabel alinha a descrição à direita.


LButton / LImageButton: componentes que não controlam variável, são componentes do tipo botões, sendo que o LImageButton são para botões com imagem e LButton apenas texto.

 


LDatetimeField: componente para controle do tipo DATETIME. Este componente formata automaticamente a data de acordo com o tipo de dado informado para a coluna utilizando o tamanho e a precisão.


Propriedades 



Propriedades são comportamentos que os componentes assumem no formulário. Todos os componentes têm uma lista de propriedades sendo a maioria destas propriedades comuns entre os componentes.

Nos cadastros de metadado, para informar uma propriedade para o componente, deve-se utilizar a seguinte sintaxe:

            {‘PROPRIEDADE’,’VALOR’}

            O comando deve estar entre os caracteres chaves “{}”, o nome da propriedade deverá estar entre aspas simples e em letra maiúscula e o valor da propriedade deverá estar entre aspas simples quando for do tipo caractere, caso contrário não é necessário utilizar aspas simples.

            (informação) Quando houver necessidade de informar mais de uma propriedade, basta informá-la na sequência usando o mesmo padrão com {‘PROPRIEDADE’,’VALOR’}.

EXEMPLOS
{'WIDTH',70}
{'HEADER','Inclusão'}
{'ORDER',0}{'HEADER_CLICK_EVENT','funcao_de_click_no_header'}{'IMAGE_HEADER','UNCHECKEDH'} 
{'VALUE_CHECKED','S'} {'VALUE_NCHECKED','N'}
{'WIDTH',60}{'ALIGN','RIGHT'}
{'BEFORE_EDIT_EVENT','funcao_evento_before_edit_grid'}{'AFTER_EDIT_EVENT','funcao_evento_after_edit_grid'}
{'COLUMN_SIZE',110}
{'ADD_ITEM','R','Recusado'}{'ADD_ITEM','C','Concluído'}{'ADD_ITEM','A','Aprovado'} 
{'RANGE','YEAR','SECOND'} 
{'COLUMN_WIDTH',300} 
{'ALIGN','CENTER'} 
{'IMAGE_HEADER','CHECKED'} 
{'HEADER_CLICK_EVENT','funcao_acionada_ao_clicar_na_barra_de_titulo_de_coluna_de_grid'}


As propriedades dos componentes mais utilizados nos cadastros de metadado são:

VALUE_CHECKED / VALUE_NCHECKED: para componentes do tipo LCheckBox. Esta propriedade define o valor do componente quando ele estiver marcado e o valor dele quando estiver desmarcado.

ADD_ITEM: para componentes do tipo LComboBox. Adiciona um item para a lista do componente, este item é composto por um código e pela descrição.

ADD_RADIO_BUTTON: adiciona um botão de escolha para o componente LRadio-Group. Este botão é composto por um código e por uma descrição.

LENGTH: define a largura e a altura para o componente LTextArea.

WORD_WRAP: define se o texto dentro do componente LTextArea quebrará linha automaticamente.

TEXT: define um texto para componentes do tipo LButton, LLabel e LRLabel.

IMAGE: define a imagem para o componente LImageButton.

CLICK_EVENT: define a função 4GL que deverá ser executada no clique de um componente LButton ou LImageButton.

SIZE: define a largura e a altura do componente.

RANGE: define o qualificador de um componente LDatetimeField.

IMAGE_HEADER: Define uma imagem junto ao label de uma coluna de um Grid.

BEFORE_EDIT_EVENT: Define a chamada de uma função a ser invocada no ato em que uma ação de edição em grid for iniciada. 


Grupos de Componentes 


Os grupos de componente são utilizados para organizar os componentes no formulário. Para cada grupo é necessário informar a quantidade de colunas que irá ter, para organizar os componentes linha por linha.


PAINEL

PAINEL COM TÍTULO


FOLDER


Componente Multivalorado


Componentes multivalorado são componentes que permitem a inclusão de um ou mais registros para a mesma coluna.

Programando Metadado


Para iniciar um formulário metadado é preciso criar dois códigos fontes, o .prw (fonte AdvPL) e o .4gl, no entanto, quando for executado a partir do produto LOGIX, usando o menu padrão do produto ou o menu de desenvolvimento (programa FRM0000), não é necessário desenvolver o código fonte com extensão .prw.

O fonte com extensão prw, quando desejar desenvolvê-lo, apenas irá conter a chamada do programa em 4GL, enquanto a programação estará no fonte com extensão 4GL.

Lembrando que nenhuma função chamada pelos eventos registrados nos formulários do metadado deve conter parâmetros.


Para iniciar um programa metadado é simples:

FONTE .PRW
#include "framework.ch" 

MAIN FUNCTION prog00000() 
   SET EPOCH TO 1950 
   SET DATE TO BRITISH 
   SET CENTURY ON PtSetAcento(.T.) 

   _4GL_prog00000() 
RETURN 
FONTE .4GL
DATABASE logix 


DEFINE mr_tabela RECORD 
                 campo LIKE tabela.campo 
                 END RECORD 

DEFINE ma_tabela ARRAY[100] OF RECORD 
                               campo LIKE tabela.campo 
                               END RECORD 

DEFINE m_form_name VARCHAR(10) 

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

   IF LOG_initApp('<SiglaModuloLogix>') <> 0 THEN
      RETURN FALSE
   END IF
   
   #Toda variável deve ser inicializada, índice por índice 
   FOR l_ind = 1 TO 100 
      INITIALIZE ma_tabela[l_ind].* TO NULL 
   END FOR 


   INITIALIZE mr_tabela.* TO NULL 


   #Formulário de cadastro 
   LET m_form_name = _ADVPL_create_component(NULL,"LFORMMETADATA") 
   CALL _ADVPL_set_property(m_form_name,"INIT_FORM","<formulario>",mr_tabela,ma_tabela) 


   #Formulário de parâmetro 
   LET m_form_name = _ADVPL_create_component(NULL,"LPARMETADATA") 
   CALL _ADVPL_set_property(m_form_name,"INIT_PARAMETER","<formulario>",mr_tabela,ma_tabela) 
END FUNCTION