Arquivo da tag: Oracle Forms 6i

Procedimento para executar depuração de formulários no Oracle Forms 6i

Para realizar a depuração (“debugar”) de um formulário em busca de erros, basta utilizar a ferramenta “Depurador de Forms” contido no pacote do Oracle Forms Builder 6i. Importante lembrar que o modo de depuração pode variar de acordo com a versão do Oracle Forms. Este procedimento é voltado para a versão 6i.

Inicie o Depurador de Forms, clicando no botão “Executar o Depurador de Forms” – presente na caixa de ferramentas do Oracle Forms Builder.

Executar_Depurador_Forms

A janela do depurador será exibida:

OracleForms6i_-_Depurador

No depurador você terá alguns nós:

  • Módulos: contendo informações sobre os formulários abertos, incluindo seus gatilhos, blocos, variáveis;
  • Variáveis globais;
  • Variáveis do sistema;
  • Parâmetros da Linha de Comandos;
  • Ações de Depuração;
  • Stack: exibe o valor das variáveis do escopo atual;
  • Objetos de Banco de Dados;

Dentro do item “Módulos”, selecione o gatilho ou procedimento que você deseja depurar. Após selecionar, dê um clique duplo sobre a linha que você deseja inserir um ponto de parada (Break Point);

OracleForms6i_-_Ponto_de_Parada

Agora é só clicar no “X vermelho na barra de ferramenta do depurador para que inicie a execução.

OracleForms6i_-_Depurador

Você pode navegar através do execução usando comandos como:

  • botao-01 “Entrar” – Executa a próxima linha, caso ela seja uma função o depurador iniciará a depuração do código da função;
  • botao-02 “Transpor” – Executa a próxima linha, caso ela seja uma função o depurador calcula o resultado não entrando no código desta;
  • botao-03 “Sair”;
  • botao-04 “Ir” – Executa o código até que encontre o próximo ponto de parada.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como preencher um Popup List (“Item da Lista”)) programaticamente no Oracle Forms 6i

Como preencher dinamicamente um Popup List (traduzido no Oracle Forms 6i como “Item da Lista”) em tempo de execução? Você pode utilizar um cursor e adicionar cada um dos elementos usando o comando ADD_LIST_ELEMENT, ou a forma abaixo que acredito ser a mais fácil:

DECLARE

	lobj_grupoID RecordGroup;
	lobj_listaID Item := Find_Item('BLOCODEDADOS.LST_NOMEDALISTA');
	lint_grupoStatus NUMBER;
	
BEGIN

	-- ----------------------------------------------------------------------
	-- Remove todos os itens da lista.
	-- ----------------------------------------------------------------------

	Clear_List(lobj_listaID); 

	-- ----------------------------------------------------------------------
	-- Preenche o PopupList com o nome dos cursos
	-- ----------------------------------------------------------------------

	lobj_grupoID := Create_Group_From_Query('listaCursos', 'SELECT DESCRICAO, TO_CHAR(CODIGO) CODIGO FROM CURSO ORDER BY DESCRICAO');
	lint_grupoStatus := Populate_Group('listaCursos');
	Populate_List(lobj_listaID, lobj_grupoID);

END;

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como fazer validação de um campo de e-mail no Oracle Forms 6i?

Para realizar a validação de um campo de e-mail no Oracle Forms 6i teremos que criar um gatilho “WHEN-VALIDATE-ITEM” no campo que será validado. Toda vez que o usuário tentar salvar o formulário ou preencher este campo e remover o foco dele, o evento abaixo será ativado.

DECLARE
BEGIN

	IF :TXT_EMAIL IS NOT NULL THEN
	
		IF ( nomedoschema.VALIDAR_EMAIL(:TXT_EMAIL) = FALSE ) THEN
			// Mensagem de alerta informando que o campo não contém um e-mail válido;
			raise form_trigger_failure;
		END IF;

	END IF;

END;

O código abaixo é um procedimento PL/SQL armazeando no banco que será executado no momento da validação (nomedoschema.VALIDAR_EMAIL):

CREATE OR REPLACE FUNCTION VALIDAR_EMAIL(pstr_email IN VARCHAR2) RETURN BOOLEAN
IS

    lint_emailValido NUMBER(1);

BEGIN

    SELECT
        1 INTO lint_emailValido
    FROM
        DUAL
    WHERE
        regexp_like(pstr_email ,'^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*(.[a-zA-Z]{2,4})$');
  
    RETURN TRUE;

EXCEPTION

    WHEN no_data_found THEN RETURN FALSE;
    WHEN others THEN RETURN FALSE;

END VALIDAR_EMAIL;

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como verificar se um campo foi preenchido no Oracle Forms 6i?

O Oracle forms segue o padrão PL/SQL, logo é possível saber se o campo foi preenchido comparando seu valor com NULL. Exemplo:

IF :NOMEDOCAMPO IS NULL THEN

    -- Código para alertar o usuário de que este campo não foi preenchido.

END IF;

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

O que significa o Erro 41039 no Oracle Forms 6i (FRM-41039: Invalid alert ID 0)?

Esta mensagem ocorre quando tentamos exibir uma mensagem de alerta não definida. Ao contrário de outras linguagens como Visual Basic, o Oracle Forms exige que seja definida a mensagem e o tipo de caixa de alerta no Navegador de Objetos (Alertas). Mas como criar uma mensagem ou um alerta de forma dinâmica? siga o exemplo abaixo:

1 – Defina em “Alertas” (Navegador de Objetos) uma caixa de alerta. No exemplo utilizaremos o nome ‘PERGUNTA_SALVAR’
2 – Observe o código:

DECLARE

  lint_respostaCaixaDialogo NUMBER(4);

BEGIN

  set_alert_property('PERGUNTA_SALVAR', alert_message_text, 'Tem certeza que deseja salvar as modificações?');

  lint_respostaCaixaDialogo := show_alert ('PERGUNTA_SALVAR');

  if lint_respostaCaixaDialogo = ALERT_BUTTON1 then

    -- Código para salvar os dados

  end if

END;

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como utilizar cursor no Oracle Forms 6i?

Se você esta procurando como criar cursores no Oracle Forms 6i, segue abaixo um exemplo:

DECLARE
		      	
  CURSOR lobj_cursorUsuario is
  SELECT
     nome
     e-mail
  FROM
     usuario
  WHER
     AREA = :ID_AREA
			  
BEGIN

  FOR lobj_registroUsuario IN lobj_cursorUsuario LOOP
      
      message('Nome: ' || lobj_registroUsuario.nome || ' - E-Mail: ' || lobj_registroUsuario.e-mail, no_acknowledge);

  END LOOP;

END;

Observe que o objeto onde será armazenado o registro ( no exemplo lobj_registroUsuario) não precisa ser declarado.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Erro – 40735o gatilho WHEN-BUTTON-PRESSED levantou a exceção ORA-01722 não manipulada

Ao criar um cursor PL/SQL que recebia parâmetros no Oracle Forms, ao executá-lo eu recebia a mensagem “Erro – 40735o gatilho WHEN-BUTTON-PRESSED levantou a exceção ORA-01722 não manipulada”.

Erro - 40735o gatilho WHEN-BUTTON-PRESSED levantou a exceção ORA-01722 não manipulada

O problema é que eu estava tentando passar um parâmetro numérico, mas me enganei e passei um parâmetro que passava um texto. A exceção ORA-01722 está associada a problema de conversão de tipos.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

FRM-18108: Falha na carga dos objetos a seguir.

Quando tento abrir o formulário, o Oracle Forms 6i abre uma janela acusando o erro “FRM-18108: Falha na carga dos objetos a seguir”:

Source Module:NOMEDOFORMULARIO.fmb
Source Object: KEY-CLRBLK
Source Module:NOMEDOFORMULARIO.fmb
Source Object: KEY-CLRFRM
Source Module:NOMEDOFORMULARIO.fmb
Source Object: KEY-EXIT
Source Module:NOMEDOFORMULARIO.fmb
Source Object: KEY-ENTQRY
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ON-ERROR
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ON-MESSAGE
Source Module:NOMEDOFORMULARIO.fmb
Source Object: CONSULTA_REGISTRO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: GRAVA_REGISTRO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ALERTA_ERRO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ALERTA_INFORMACAO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ALERTA_INFORMACAO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ALERTA_ERRO
Source Module:NOMEDOFORMULARIO.fmb
Source Object: ALERTA_INFORMACAO

O problema é que o Oracle Forms não consegue encontrar onde estão armazenados os módulos PLL, ou algum formulário que ele faça referência. Existem duas formas de consertar: a primeira, é copiando os arquivos *.PLL, ou o formulário que está sendo referenciado, que estão faltando para o local onde está seu arquivo *.FMB; a segunda, é adicionando o caminho da pasta do *.PLL, ou do formulário referenciado, ao registro do Windows: “FORMS60_PATH”.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como obter o endereço da pasta temporária do windows utilizando o Oracle 6i?

Para obter o endereço da pasta temporária é necessário acessar o registro do Windows. Para ter acesso às funções de leitura e gravação de registro do Windows através do Oracle Forms 6i é necessário anexar a biblioteca “D2KWUTIL.PLL” ao seu módulo.

Agora é só utilizar a função:

lstr_caminhoPastaTemporariaWindows := WIN_API_ENVIRONMENT.READ_REGISTRY ('HKEY_CURRENT_USEREnvironment', 'TEMP', false);

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Como utilizar uma biblioteca anexada no Oracle 6i?

É possível adicionar algumas funcionalidades que não estão presentes na linguagem de programação utilizada pelo Oracle Forms. Uma das formas de ter acesso a elas é anexando Bibliotecas externas do Oracle Forms (*.PLL) ao seu módulo:

Para fazer isso, selecione o item “Bibliotecas Anexadas” (Attached Libraries) no Navegador de Objetos (Object Navigator):

Bibliotecas Anexadas do Oracle Forms 6i

Selecione no sinal “+” para adicionar um novo item (Ele se encontra no canto inferior esquerdo da imagem a cima). Aparecerá uma caixa de dialogo onde você deverá selecionar o local onde se encontra o arquivo PLL que você deseja utilizar.

Selecionando uma Biblioteca Anexada no Oracle Forms 6i

Depois de selecionada a bibioteca e clique em “Anexar”. Pronto, basta utilizar as novas funções disponíveis. No exemplo abaixo utilizamos a função para leitura de uma chave do registro do Windows. Esta função está incluída na biblioteca D2KWUTIL.PLL

lstr_caminhoPastaTemporariaWindows := WIN_API_ENVIRONMENT.READ_REGISTRY ('HKEY_CURRENT_USEREnvironment', 'TEMP', false);

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).