Oracle Forms Builder 6

F61
Revisão 1.0

Oracle Forms Builder 6

Sumário
1. Conceitos e Componentes..............................................................................................................1 Objetivos.......................................................................................................................................2 Oracle Forms 6 - Visão Geral.......................................................................................................3 Módulos Oracle Forms 6..............................................................................................................4 Componentes do produto Oracle Forms 6....................................................................................5 Estrutura de um módulo Forms....................................................................................................6 Navegando em um módulo Forms................................................................................................7 Preview de blocos Base Table......................................................................................................8 Preview de Relacionamento Mestre Detalhe................................................................................9 Preview de blocos Single Record e Multi Record......................................................................10 2. Aplicações Oracle Forms...............................................................................................................1 Objetivos.......................................................................................................................................2 Iniciando uma sessão Runform.....................................................................................................3 MDI Parent Window.....................................................................................................................4 Menu DEFAULT&SMARTBAR.................................................................................................5 Console.........................................................................................................................................6 Identificando os elementos de dados............................................................................................7 Navegando por uma aplicação Oracle Forms...............................................................................8 Tornando as Alterações Permanentes...........................................................................................9 Consultando dados......................................................................................................................10 Utilizando a cláusula Where em restrições de consulta.............................................................16 Modos de operação.....................................................................................................................18 Inserindo, atualizando e deletando registros...............................................................................19 Efetivando ou descartando as mudanças efetivadas...................................................................20 EXERCÍCIOS.............................................................................................................................21 3. Módulo Form..................................................................................................................................1 Objetivos.......................................................................................................................................2 Tipos de Módulos.........................................................................................................................3 Iniciando uma sessão Oracle Forms Builder................................................................................4 Criando um novo módulo form....................................................................................................5 Conectando-se ao banco...............................................................................................................6 Trocando o nome de um módulo form.........................................................................................7 Propriedades de um módulo form.................................................................................................8 4. Blocos..............................................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de bloco.........................................................................................................................3 Bloco Base Table..........................................................................................................................3 Criação de um bloco.....................................................................................................................4 Criando um bloco de controle.......................................................................................................5 Criando um bloco Base Table.......................................................................................................6 Usando o Assistente de Layout...................................................................................................10 Removendo um bloco................................................................................................................14 Atributo Visual...........................................................................................................................15
DBC Database Company

Produzindo Triggers

Propriedades de um bloco...........................................................................................................16 Manipulando propriedades de Objetos.......................................................................................17 Propriedades de um bloco...........................................................................................................18 Salvando um módulo form.........................................................................................................21 Executando um módulo form.....................................................................................................22 EXERCÍCIOS.............................................................................................................................23 5. Relacionamento Entre Blocos.......................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de relacionamento..........................................................................................................3 Criando um relacionamento entre dois blocos..............................................................................4 Construindo um relacionamento automaticamente.......................................................................5 Executando um módulo form mestre detalhe...............................................................................7 Propriedades de relacionamento...................................................................................................8 O que acontece quando você modifica um relacionamento.........................................................9 EXERCÍCIOS.............................................................................................................................10 6. Frames.............................................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de frame.........................................................................................................................3 Reorganizando os itens dimencionando o frame..........................................................................4 Propriedades de um frame............................................................................................................5 7. Itens tipo Texto...............................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de itens tipo texto (Text Item).......................................................................................3 Criando um item tipo texto (Text Item)........................................................................................4 Propriedades de um text item........................................................................................................5 Alterando cores e fontes...............................................................................................................7 Controlando os dados em um text item........................................................................................8 Formatando itens...........................................................................................................................9 Alterando o comportamento de navegação.................................................................................10 Setando as propriedades Keyboard Navigable e Enabled..........................................................11 Alterando o relacionamento do item com o banco de dados......................................................12 Adicionando funcionalidades a um item....................................................................................13 Adicionando funções de grupo e fórmulas a um item................................................................14 Labels associados do item...........................................................................................................15 Itens multi-line............................................................................................................................16 Incluindo mensagens de ajuda....................................................................................................17 EXERCÍCIOS.............................................................................................................................18 8. LOVs e Editores.............................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de Lista de Valores (LOV) ...........................................................................................3 Utilizando uma LOV em momento de execução..........................................................................4 Definindo uma Lista de Valores...................................................................................................5 Criando uma Lista de Valores (LOV)...........................................................................................6 Propriedades da LOV..................................................................................................................12 Mapeando colunas da LOV para itens do bloco.........................................................................13 Associando uma LOV a um item tipo texto...............................................................................14
DBC Database Company II

Produzindo Triggers

Conceito de Editor......................................................................................................................15 Utilizando um Editor em momento de execução........................................................................16 Criando um Editor......................................................................................................................17 Associando um Editor a um item tipo texto...............................................................................18 EXERCÍCIOS.............................................................................................................................19 9. Outros tipos de Itens......................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de item tipo Check-box.................................................................................................3 Utilizando um Check-box em momento de execução..................................................................4 Criando um item tipo Check-box..................................................................................................5 Propriedades específicas de um item tipo CheckBox...................................................................7 Incluindo mensagens de ajuda......................................................................................................8 Tratando valores nulos em itens tipo Check Box.........................................................................9 Conceito de item tipo List...........................................................................................................10 Setando valores para um List Item em momento de execução...................................................11 Criando um item tipo List...........................................................................................................12 Propriedades específicas de um item tipo List............................................................................14 Incluindo mensagens de ajuda....................................................................................................15 Tratando valores nulos em itens tipo List...................................................................................16 Conceito de itens Radio Groups.................................................................................................17 Criando um item Radio Group....................................................................................................18 Propriedades específicas de um item tipo Radio Group.............................................................20 Tratando valores nulos em um Radio Group..............................................................................21 EXERCÍCIOS.............................................................................................................................22 10. Itens tipo Não Input.....................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de itens Não Input..........................................................................................................3 Conceito de Itens tipo Display......................................................................................................4 Criando um item tipo Display.......................................................................................................5 Propriedades específicas de um item tipo Display.......................................................................6 Conceito de Itens tipo Image........................................................................................................7 Armazenando imagens..................................................................................................................8 Criando um item tipo Image.........................................................................................................9 Propriedades específicas de um item tipo Image........................................................................10 Incluindo mensagens de ajuda....................................................................................................11 Conceito de Itens tipo Sound......................................................................................................12 Armazenando sons......................................................................................................................13 Criando um item tipo Sound.......................................................................................................14 Propriedades específicas de um item tipo Image........................................................................15 Incluindo mensagens de ajuda....................................................................................................16 Conceito de Itens tipo Button.....................................................................................................17 Criando um Button......................................................................................................................18 Propriedades específicas de um Button......................................................................................19 Incluindo mensagens de ajuda....................................................................................................20 EXERCÍCIOS.............................................................................................................................21 11. Windows e Canvas.......................................................................................................................1 Objetivo........................................................................................................................................2
DBC Database Company III

Produzindo Triggers

Conceito de window, canvas e viewport......................................................................................3 Exemplo de window.....................................................................................................................5 Criando uma window....................................................................................................................6 Propriedades de uma window.......................................................................................................7 Tipos de canvas.............................................................................................................................9 Conceito de content canvas.........................................................................................................10 Exemplo de content canvas.........................................................................................................11 Criando um Content Canvas.......................................................................................................12 Propriedades de um content canvas............................................................................................13 Conceito de Stacked canvas........................................................................................................15 Criando um Stacked Canvas.......................................................................................................16 Propriedades de um Stacked canvas...........................................................................................17 Conceito de Canvas Toolbar.......................................................................................................18 Usos e benefícios de um Toolbar................................................................................................19 Criando um canvas Toolbar........................................................................................................20 Propriedades de um canvas Tollbar............................................................................................21 Conceito de Canvas Tab.............................................................................................................22 Criando um Canvas Tab.............................................................................................................23 Propriedades de um Canvas Tab.................................................................................................24 EXERCÍCIOS............................................................................................................................25 12. Introdução as Triggers................................................................................................................1 Objetivos.......................................................................................................................................2 Visão geral sobre Triggers............................................................................................................3 Trigger Type.................................................................................................................................4 Trigger Code.................................................................................................................................5 Trigger Scope................................................................................................................................6 Escopo e execução da Trigger......................................................................................................7 13. Produzindo Triggers....................................................................................................................1 Objetivos.......................................................................................................................................2 Criando um Triggers.....................................................................................................................3 Utilizando o PL/SQL EDITOR.....................................................................................................5 Propriedades de uma Trigger........................................................................................................7 Escrevendo o código da Trigger...................................................................................................8 Utilizando variáveis no Oracle Forms........................................................................................10 Referenciando variáveis Oracle Forms.......................................................................................11 Suplementando validações..........................................................................................................12 Populando itens com dados derivados........................................................................................13 Controlando falhas em Triggers.................................................................................................14 EXERCÍCIOS.............................................................................................................................16 Monitorando e Depurando Triggers...............................................................................................1 Objetivos.......................................................................................................................................2 Debugando Triggers no Forms Builder........................................................................................3 Executando um Form no modo Debug.........................................................................................4 Mostrando mensagens quando a Trigger é disparada...................................................................5 Utilizando o PL/SQL Debugger...................................................................................................6 Componentes do Debug................................................................................................................7 Comandos úteis no Debug............................................................................................................8
DBC Database Company IV

Produzindo Triggers

Invocando o Debugger..................................................................................................................9 Definindo Debug Triggers..........................................................................................................11 Desabilitando ações do Debug....................................................................................................12 14. Adicionando Funcionalidades à Itens........................................................................................1 Objetivos.......................................................................................................................................2 Respondendo a interações com itens............................................................................................3 Definindo funcionalidades à Itens Input.......................................................................................5 Definindo Funcionalidades à itens Não Input...............................................................................6 Interagindo com Itens do tipo Image............................................................................................7 Interagindo com itens do tipo Sound............................................................................................8 EXERCÍCIOS.............................................................................................................................10 15. Mensagens e Alertas....................................................................................................................1 Objetivos.......................................................................................................................................2 Tipos de Mensagens......................................................................................................................3 Detectando o sucesso ou a falha de Built-ins...............................................................................4 Controlando Mensagens de Sistema.............................................................................................5 Suprimindo Mensagens de Trabalho............................................................................................7 Criando e controlando Alerts........................................................................................................9 Utilização....................................................................................................................................10 Propriedades de um Alert...........................................................................................................11 Built-ins úteis à manipulação com Alerts...................................................................................12 EXERCÍCIOS.............................................................................................................................14 16. Triggers de Consulta....................................................................................................................1 Objetivos.......................................................................................................................................2 Associação entre triggers e consulta.............................................................................................3 Processamento de consultas no Oracle Forms..............................................................................4 Trigger PRE-QUERY...................................................................................................................5 Trigger POST-QUERY.................................................................................................................6 POST-QUERY e WHEN-VALIDATE-ITEM.............................................................................7 Disparando Triggers no Modo Enter Query.................................................................................8 Obtendo informações de consultas através de variáveis de sistema.............................................9 Usando as Built-ins GET_BLOCK_PROPERTY e SET_BLOCK_PROPERTY.....................10 EXERCÍCIOS.............................................................................................................................11 17. Validações.....................................................................................................................................1 Objetivos.......................................................................................................................................2 Processo de Validação..................................................................................................................3 Unidade de Validação...................................................................................................................4 Utilizando LOVs para validações.................................................................................................5 Utilizando Triggers para Validações............................................................................................6 Status de validação........................................................................................................................8 Relação de algumas Built-ins.......................................................................................................9 Navegação..........................................................................................................................................1 Objetivos.......................................................................................................................................2 Controlando a Navegação.............................................................................................................3 Propriedade Mouse Navigate........................................................................................................4
DBC Database Company V

Produzindo Triggers

Navegação interna.........................................................................................................................5 Triggers de Navegação.................................................................................................................6 Armadilha de Navegação..............................................................................................................7 Triggers WHEN-NEW-“objeto”-INSTANCE.............................................................................8 Built-ins usadas para Navegação em Triggers..............................................................................9 EXERCÍCIOS.............................................................................................................................10 Processamento de Transação...........................................................................................................1 Objetivos.......................................................................................................................................2 Processamento de Transação........................................................................................................3 Tarefas executada em um processamento de transação................................................................4 Incrementando o processamento de uma Transação.....................................................................5 Validação de um Delete................................................................................................................7 Atribuindo números seqüenciais a registros.................................................................................8 Mantendo uma trilha de auditoria.................................................................................................9 Informações sobre uma variável tipo Cursor no PL/SQL...........................................................10 Customizando o início e o fim de uma transação.......................................................................11 Outras triggers transacionais a nível de bloco............................................................................12 EXERCÍCIOS.............................................................................................................................13 18. Código Flexível.............................................................................................................................1 Objetivos.......................................................................................................................................2 Conceito de código flexível..........................................................................................................3 Utilizando variáveis de sistema....................................................................................................4 Utilizando Built-ins para obter informações sobre objetos..........................................................6 Referenciando objetos pelo ID interno.........................................................................................8 Built-ins FIND_ e tipos de dados retornados................................................................................9 Utilizando variáveis globais........................................................................................................11 Utilizando a Built-in NAME_IN................................................................................................12 Utilizando a Built-in COPY........................................................................................................13 EXERCÍCIOS.............................................................................................................................14 19. Compartilhando Objetos e Códigos...........................................................................................1 Objetivos.......................................................................................................................................2 Compartilhando e reutilizando Código.........................................................................................3 Classes de Propriedades................................................................................................................4 Herdando uma classe de propriedades..........................................................................................5 Grupo de Objetos..........................................................................................................................6 Copiando e Referenciando Objetos e Códigos.............................................................................7 Reutilizando PL/SQL....................................................................................................................8 Object Library...............................................................................................................................9 SmartClasses...............................................................................................................................10 EXERCÍCIOS.............................................................................................................................11 20. Aplicações Multi-Form................................................................................................................1 Objetivos.......................................................................................................................................2 Iniciando outro Módulo Form.......................................................................................................3 Buit-in OPEN_FORM..................................................................................................................4 Passando valores para outro Módulo Form..................................................................................5 Navegando para um módulo já aberto na sessão..........................................................................6
DBC Database Company VI

Produzindo Triggers

Definindo funcionalidades a uma aplicação Multi-Form.............................................................7 EXERCÍCIOS...............................................................................................................................8

DBC Database Company

VII

Oracle Forms Builder 6

1. Conceitos e Componentes

DBC Database Company

Produzindo Triggers

Objetivos
• • Obter uma visão geral do produto, entendendo seus princípios e sua função no conjunto de ferramentas Oracle. Identificar os principais componentes do Oracle Forms 6 e como eles estão relacionados.

DBC Database Company

2

Produzindo Triggers

Oracle Forms 6 - Visão Geral
O que é o Oracle Forms 6 ?
O Oracle Forms 6 é o maior produto dentro do Developer 2000. É destinado a produzir aplicações On-line baseadas em telas e janelas, permitindo apresentação e manipulação dos dados de várias formas.

Características de uma aplicação Oracle Forms 6
• • • • • Possibilita inserção, atualização, deleção e consulta de dados usando uma variedade de interfaces gráficos. Apresenta dados utilizando-se de itens tipo texto e imagens. Permite o desenvolvimento de aplicações utilizando janelas e transações de Banco de dados. Possui integração com os produtos Oracle Report, Oracle Graphics e aplicações OLE2, permitindo a utilização de recursos destes produtos. Apresenta-se sob a forma de menus.

Características do ambiente de desenvolvimento
• • • • • Utilização de menus. Construção de aplicações utilizando poderosa ferramenta gráfica de desenvolvimento. Construção de aplicações que são portáveis entre ambientes gráficos e ambientes modo caracter. Fácil cópia ou movimentação de objetos entre os componentes de uma aplicação. Uso de ferramentas comuns aos outros produtos do Developer 2000, tais como: Layout Editor, Object Navigator e ambiente de desenvolvimento PL/SQL.

DBC Database Company

3

Produzindo Triggers

Módulos Oracle Forms 6
Uma aplicação Oracle Forms pode ser composta de muitos módulos. Estes módulos podem ser do tipo: Form, Menu, Library ou Object Libraries. • • • • Módulo tipo Form: apresenta os objetos e os dados que os usuários podem ver ou interagir. Módulo tipo Menu: é composto por uma hierarquia de menus, cada qual com itens selecionáveis. Módulos Menu são atachados a módulos Form. Módulo tipo Library: é um conjunto de subprogramas PL/SQL (como em outras ferramentas PL/SQL). Módulo tipo Object Libraries: é um conjunto de diferentes objetos armazenados pelo desenvolvedor para assim referenciar ou copiá-los em um módulo forms.

DBC Database Company

4

Produzindo Triggers

Componentes do produto Oracle Forms 6
O produto Oracle Forms 6 possui três componentes : • Oracle Forms Generate - interpreta as definições de um módulo, criando um arquivo executável. • Oracle Forms Runform - executa um arquivo executável de uma aplicação Oracle Forms. Os arquivos utilizados no momento da execução já devem ter sido gerados pelo Oracle Forms Generate. • Oracle Forms Builder - permite o design e armazenamento das especificações de um módulo tipo Form, Menu ou Library. Permite também invocar os outros componentes Forms Generate e Forms Runform.

DBC Database Company

5

Produzindo Triggers

Estrutura de um módulo Forms
Módulos Forms consistem no corpo principal de uma aplicação Oracle Forms.

Principais objetos de um módulo Form
• • • Itens São objetos que apresentam valores de dados ao usuário ou, dependendo do tipo de item, permitem ao operador interagir com o form. Itens estão logicamente agrupados em blocos e visivelmente arranjados em canvas. Bloco - É o dono lógico de um item. Em um bloco os itens estão logicamente relacionados. Eles podem, por exemplo, pertencer a colunas de um mesma tabela ou fazer parte de um mesmo ciclo de navegação. Canvas - É a superfície onde os objetos visuais estão arranjados (podemos imaginá-lo como a tela de um pintor). Um módulo Form pode ter vários canvas. Por default, todos os canvas ficam na mesma janela, mas podemos alocar janelas separadas para cada canvas.

DBC Database Company

6

Produzindo Triggers

Navegando em um módulo Forms
• • • Quando se executa um módulo Form, navega-se pelo seu conteúdo através de itens e blocos, não através de canvas. Cada item tem sua posição seqüencial dentro do bloco e cada bloco tem sua posição seqüencial dentro do Form. A navegação pode ser feita através de teclas, menus, mouse ou por definição de programa.

DBC Database Company

7

Produzindo Triggers

Preview de blocos Base Table
• • • • Um bloco Base Table é aquele que está associado com uma tabela (ou view). Cada bloco pode ter somente uma tabela associado a ele, entretanto é possível acessar dados de outras tabelas, programando-se através de triggers. Na criação de um bloco Base Table são automaticamente criados os itens para as colunas da tabela base. O Oracle Forms automaticamente gera: • O código necessário para implementar as regras das constraints da tabela base; • SQL (implícito) para inserir, atualizar, deletar e consultar linhas da tabela base. Em momento de execução é possível utilizar teclas de funções, botões ou opções de menu para iniciar consultas, inserções, atualizações e deleções na tabela base e posteriormente efetivar a transação (Commit).

Exemplo de um bloco de dados:

DBC Database Company

8

Produzindo Triggers

Preview de Relacionamento Mestre Detalhe
• • Para suportar o relacionamento entre blocos e suas tabelas base é possível definir um bloco como detalhe de um outro (mestre). Isto permite valores de chave primária e de chave estrangeira ligados através dos blocos, havendo desta forma, o sincronismo dos dados. O Oracle Forms automaticamente gera o código necessário para suportar o relacionamento mestre detalhe.

DBC Database Company

9

Produzindo Triggers

Preview de blocos Single Record e Multi Record
É possível definir quantos registros um bloco mostra de cada vez. Tipos de Blocos
Bloco Single-record Bloco Multi-record

Descrição
Mostra um registro de cada vez. Mostra mais de um registro de cada vez..

Obs.:
• Em ambos os casos os registros de um bloco que não estão visíveis na tela estão armazenados no buffer do bloco.

DBC Database Company

10

Oracle Forms Builder 6

2. Aplicações Oracle Forms

DBC Database Company

Produzindo Triggers

Objetivos
• • • • • • Entender a terminologia do ambiente de execução. Navegar por uma aplicação Oracle Forms. Consultar dados sem restrições. Consultar dados utilizando argumentos de pesquisa. Inserir, atualizar e deletar registros. Consultar erros pelo help.

Neste capítulo você vai executar uma aplicação já existente, e familiarizar-se com a interface do Oracle Forms Runtime, o qual é essencial para a execução das aplicações desenvolvidas no Forms Builder.

DBC Database Company

2

Produzindo Triggers

Iniciando uma sessão Runform
• • Uma sessão Runform consiste de um ou mais módulos Forms e Menus ligados todos sobre o controle de um usuário. Uma sessão Runform pode ser iniciada selecionando um ícone ou uma opção de menu no sistema Windows. Em ambos os casos a ação vai executar um comando Runform para iniciar uma sessão. IFRUN60 ... MODULE = <nome forms> USERID = <usuário/password>

Em um ambiente GUI (Interface Gráfica) uma tela Runform Options é mostrada quando você

executa o comando (IFRUN60). Esta tela permite que você entre com o nome do form, o usuário, a password, o Banco de dados e outras opções que você não especificar na linha de comandos.

DBC Database Company

3

Produzindo Triggers

MDI Parent Window
• • O Multiple Document Interface (MDI) Parent Window é a janela (window) na qual sua aplicação pode mostrar múltiplos módulos Form (document windows). O título default da MDI Parent Window é: Oracle Developer Forms Runtime. Para executar o forms, à partir da versão 5.0, sem a MDI, no Forms Runtime acrescente a cláusula USESDI = YES.

DBC Database Company

4

Produzindo Triggers

Menu DEFAULT&SMARTBAR
• • O menu DEFAULT&SMARTBAR é o menu default que é automaticamente utilizado por todas as aplicações Oracle Forms. Ele possui um método alternativo ao uso de operações por teclas. Pode ser customizado ou substituído por outro menu de modo a introduzir sua funcionalidade ao módulo Form.

DBC Database Company

5

Produzindo Triggers

Console
• • • A console inclui uma linha de mensagem e uma linha de status que provêm informações essenciais ao usuário em momento de execução. A linha de mensagem mostra as mensagens do Oracle Forms e as específicas da aplicação. A linha de status mostra uma variedade de indicadores que refletem o estado corrente do módulo Form. Indicador Descrição
Count Record Informa o número de registros recuperados e mostrados pela consulta. Informa o indicativo do registro corrente em relação ao total consultado, na seguinte máscara : Atual/Total. • Até a navegação do último registro mostrará ? no total de registros da consulta. Indica que o bloco corrente esta em modo ENTER QUERY e nenhum registro foi consultado ainda. Indica que existe uma lista de valores associada ao item corrente.

Enter-Query List of Value

DBC Database Company

6

Produzindo Triggers

Identificando os elementos de dados
Uma aplicação típica Oracle Forms utiliza uma variedade de objetos e tipos de itens, tais como: Boilerplate Text, Boilerplate Graphics, Text Itens, Display Itens, Radio Buttons, Check Boxes, Image Itens, Sound Itens e Custom Itens.

DBC Database Company

7

Produzindo Triggers

Navegando por uma aplicação Oracle Forms
Navegando pela aplicação com o menu DEFAULT&SMARTBAR
• • • • • • • • • • Selecione opções do menu utilizando o mouse. Mova o cursor para o próximo bloco (Block-Next) ou para o bloco anterior (Block-Previous). Mova o cursor para o próximo item (Field-Next) ou para o item anterior(Field-Previous). Mova o cursor para o próximo registro (Record-Next) ou para o registro anterior (RecordPrevious). Salve (Save) ou desfaça suas mudanças (Action-> Clear All, informando o que deve ser feito com as alterações). Insira novos registros (Record-> Insert). Remova registros já existentes (Record-> Remove). Limpe o registro corrente (Record-> Clear). Execute consultas sobre o bloco corrente (Query->Enter, Query-> Execute). Chame o Help On-line (Help-> Help, Help-> Keys, Help-> List, Help-> Display Error).

Navegando através da aplicação com o Mouse
• • • • • • • • • Mova o cursor. Selecione opções do menu. Selecione uma opção de uma lista de valores (LOV). Marque ou desmarque um Check Box. Pressione um botão. Pressione um botão em um Radio Group. Troque o contexto para uma outra janela aberta. Responda a um Alert Box. Navegue por registros de um bloco utilizando o Scroll Bar.

Navegando através da aplicação com Botões
Algumas aplicações utilizam botões como meio de navegação. Você pode pressionar um botão com o mouse ou com a tecla [Select] para iniciar essa ação.

Navegando pela aplicação com teclas de função
• • • • Existe uma tecla de função associada a cada função de navegação ou operação do Oracle Forms. Para ver a lista de teclas e suas funções selecione Help->Keys do Menu Default. Quando executando uma aplicação Oracle Forms em ambiente de modo caracter as teclas de função são o único meio de navegação. Algumas teclas de função ficam habilitadas e outras desabilitadas dependendo do contexto da aplicação.

DBC Database Company

8

Produzindo Triggers

Tornando as Alterações Permanentes
Memória
Deleções Alterações

Módulo Forms
PEDIDOS Pedido

Inserções

FORMS RUNTIME Action Save

ou

Itens do Pedido

Banco Forms

DBC Database Company

9

Produzindo Triggers

Consultando dados
Você pode consultar os dados de um Banco de dados sem conhecimento de sintaxe da linguagem SQL. Entretanto se você tem experiência com SQL é possível complementar o processamento default do Oracle Forms. Tipos de consulta: Tipo
Incondicional (Unrestricted) Condicional (Restricted)

Descrição
Seleciona todas as linhas de todas as colunas representadas no bloco em relação a tabela base sem especificar condição. Seleciona somente as linhas que satisfaçam as condições especificadas para todas as colunas representadas no bloco em relação a tabela base.

DBC Database Company

10

Produzindo Triggers

Executando consultas incondicionais
• Selecionando as opções do menu default (Query -> Execute)

• •

Pressionando a tecla [Execute Query]. Para ver a lista de teclas e suas funções selecione Help -> Keys do menu default. Clicando em um botão de Execute Query, se definido.

DBC Database Company

11

Produzindo Triggers

Executando consultas condicionais
Passos para executar uma Query condicional 1. Selecione Query -> Enter do menu default ou a tecla [Enter Query]. 2. A linha de status deve sinalizar ENTER QUERY indicando que o form está no modo ENTER QUERY. 3. Entre com o critério de pesquisa apropriado. 4. Selecione Query -> Execute do menu default ou a tecla [Execute Query].

Critérios válidos
Critério
Valores compatíveis

Descrição
Pesquisa as linhas que possuem exatamente os mesmos valores passados como argumentos.

Caracteres de Implica na utilização do operador LIKE possibilitando o uso dos wildcards substituição % e _ como argumentos. (wildcards % ou _ ) Diálogo Query Where Permite a especificação de uma cláusula WHERE mais complexa para uma consulta. Operadores condicionais Permite a utilização de outros operadores condicionais, tais como : >, <, >=, <=, <>, através do prefixo #.

DBC Database Company

12

Produzindo Triggers

Exemplo 1:
Consultando os clientes do país “Japao”, com classificação de crédito “RUIN”.

DBC Database Company

13

Produzindo Triggers

Exemplo 2:
Consultando os clientes que possuem o nome iniciado pela letra “S”.

DBC Database Company

14

Produzindo Triggers

Exemplo 3:
Consultando os clientes atendidos por vendedores com o número maior que 14.

DBC Database Company

15

Produzindo Triggers

Utilizando a cláusula Where em restrições de consulta
Passos para a utilização do diálogo Query Where: 1. Selecione Query -> Enter do menu default ou a tecla [Enter Query]. 2. Especifique variáveis para cada item participante da condição prefixando a variável com “:”.Exemplo: Sales Rep Id -> :S, Pais -> :P. 3. Selecione Query -> Execute do menu default ou a tecla [Execute Query]. 4. Entre com a expressão condicional da cláusula where utilizando as variáveis definidas anteriormente. Clique no botão OK.

Exemplo:
Consultando os clientes dos países “USA” e “Japao” ou os clientes atendidos pelo vendedor com número 14. 1. Definindo as variáveis envolvidas:

DBC Database Company

16

Produzindo Triggers

2. Especificando a condição da cláusula WHERE:

DBC Database Company

17

Produzindo Triggers

Modos de operação
Oracle Forms possui dois modos de operação: modo Normal e modo Enter Query.

Modo Enter-Query
É o modo de operação que permite a entrada de critérios de pesquisa para uma consulta.

No modo Enter-Query você pode:
• • • • Consultar todos os registros. Consultar registros utilizando um critério. Consultar registros utilizando o diálogo Query Where. Obter o número de registros que seriam retornados por uma consulta antes de executá-la utilizando a opção Query -> Count Hits.

No modo Enter-Query você não pode:
• • • • • • Navegar fora do bloco corrente. Sair da sessão Runform. Usar certas funções, tais como Next Record. Inserir registros. Atualizar registros. Deletar registros.

Modo Normal

É o modo de operação que permite a inserção, atualização e deleção de registros (linhas) do Banco de dados.

No modo Normal você pode:
• • • • • • Consultar registros. Inserir novos registros. Atualizar registros. Deletar registros. Efetivar as mudanças (Comitt: Action -> Save). Sair da sessão Runform.

No modo Normal você não pode:
• • Executar uma consulta condicional. Utilizar o diálogo Query Where.

DBC Database Company

18

Produzindo Triggers

Inserindo, atualizando e deletando registros
Passos para inserir um registro
• Garanta que você está posicionado em um registro. • Use a tecla Scroll Down até encontrar um registro vazio ou • Selecione no menu a opção Record -> Insert ou tecle [Insert Record]. Preencha o registro. Efetive a mudança (Action -> Save).

• •

Passos para atualizar um registro
• • • Consulte o registro desejado. Atualize o registro. Efetive a mudança (Action -> Save).

Passos para deletar um registro
• • • Consulte o registro desejado. Remova o registro. Efetive a mudança (Action -> Save).

DBC Database Company

19

Produzindo Triggers

Efetivando ou descartando as mudanças efetivadas
• • Para efetivar as inserções, atualizações e deleções é necessário salvar (Commit da transação) no Banco de dados. Selecione a opção Action -> Save. Para descartar as inserções, atualizações e deleções (Rollback da transação) selecione a opção Action -> Clear All.

Mostrando erros
Se uma mensagem de erro Oracle aparecer na linha de mensagens você pode ver o comando SQL que originou o erro selecionado no menu a opção Help -> Display Error.

DBC Database Company

20

Produzindo Triggers

EXERCÍCIOS
1. Inicie uma sessão Runform utilizando o Forms CLIENTES.FMX com o usuário, password e String de conexão, fornecidos pelo instrutor. 2. Selecione a opção Help -> Keys do menu. Utilize o scrollbar para ver as funções e suas teclas correspondentes. 3. Execute uma consulta incondicional. Após, navegue para os próximos registros e retorne para os registros anteriores, utilizando as setas [Up] e [Down]. 4. Execute consultas condicionais: • consulte o cliente com o nome “Womansport”; • consulte os clientes com o código do vendedor maior que 13; • consulte todas as cidades iniciadas pelo string “Sa”; • consulte os clientes localizados no país “USA” com classificação de crédito “Excelente”. 5. Consulte o cliente “Big John’s Sports Emporium” e clique no botão “Pedidos” para chamar o form PEDIDOS.FMX. 6. Clique no botão Image On para desligar a imagem do item. 7. Consulte somente os pedidos com o tipo de pagamento “A Prazo”. 8. Mova para o primeiro registro do bloco “Itens” e pressione o botão “Estoque”. 9. Insira um novo registro no bloco “Pedidos” e um novo registro no bloco “Itens”. 10. Salve os registros novos. 11. Atualize o pedido que você inseriu. 12. Tente remover o pedido que você inseriu, o que acontece? 13. Remova o item do pedido que você inseriu e salve. 14. Agora tente deletar o pedido que você inseriu. 15. Encerre a sessão Runform.

DBC Database Company

21

Oracle Forms Builder 6

3. Módulo Form

DBC Database Company

Produzindo Triggers

Objetivos
• • • • • • Entender os tipos de módulos form. Criar um módulo form com e sem o assistente. Construir um bloco utilizando uma especificação de tabela existente com e sem o assistente. Salvar um módulo form. Executar um módulo form. Construir um módulo form mestre/detalhe.

DBC Database Company

2

Produzindo Triggers

Tipos de Módulos
Lembre-se de que existem 4 tipos de módulos de aplicação que podem ser criados através da ferramenta Oracle Forms. Módulo
Form

Descrição
Telas (janelas) com blocos de dados pertencentes ou não a tabelas do Banco de dados que proporcionam consultas, inserções, atualizações e deleção de linhas. Interface hierárquico com o objetivo de prover um método simples de emitir comandos para a aplicação. Conjunto de sub programas PL/SQL armazenados centralizados, proporcionando reutilização. Biblioteca de objetos, armazena objetos criados pelo desenvolvedor, para serem copiados ou referenciados à modulos forms.

Menu Library Object Libraries

Obs.:
• • Você pode atachar um módulo Menu a um módulo form executando as opções disponíveis em momento de execução. Você pode atachar um módulo Library a um módulo form ou Menu a fim de tornar disponíveis os sub programas dentro do outro módulo.

DBC Database Company

3

Produzindo Triggers

Iniciando uma sessão Oracle Forms Builder
• • • • • • Para iniciar uma sessão efetue duplo clique no ícone Oracle Forms Builder Ao executar o Forms Builder 6, se a preference “Welcome Dialog” estiver setada e mostrado antes de entrar no forms um Wizard: Para criar um novo modulo form manualmente, selecione “Build a new form manually”; Para, com o Wizard, criar um novo modulo form e já criar um bloco nele, selecione “Use the Data Block Wizard”; Para criar um novo modulo form baseado em um modulo form template, selecione “Build a form based on a template”; Para Abrir um modulo form já existente, selecione “Open na existing form”.

DBC Database Company

4

Produzindo Triggers

Criando um novo módulo form
Existem 5 formas de se criar um módulo tipo form: • Iniciando uma sessão Forms Builder (implicitamente é criado um novo módulo). • Selecionando File -> New -> Form.

• Efetuando um clique na entrada Form, ou um módulo existente, no Object Navigator e no ícone CREATE.

• Selecione qualquer objeto dentro da entrada Forms, e clique no ícone NEW.

• Efetuando um duplo clique na entrada Forms no Object Navigator, quando nenhum outro módulo form está aberto.

DBC Database Company

5

Produzindo Triggers

Conectando-se ao banco
Conecte-se ao Banco de dados Oracle selecionando File -> Connect. Na janela Connect, entre com o nome do usuário Oracle (User Name), a senha (Password) e o nome do Banco de dados (Database). Após, clique em Connect.

DBC Database Company

6

Produzindo Triggers

Trocando o nome de um módulo form
O Oracle Form atribui o nome MODULEn para um novo módulo, onde n é o próximo número disponível para nomes de módulos. Este nome aparece no Object Navigator e no Property Palette. Existem duas formas para trocar o nome de um módulo tipo form: • no Object Navigator efetuando um duplo clique no nome do módulo form

no Property Pallete, na propriedade Name: nelecionando no menu Tools -> Property Palette;

com um duplo clique no ícone do módulo form no Object Navigator ou com o botão direito do mouse e selecionado a opção Properties.

Convenções de nomenclatura
Não é permitido nomes duplicados para objetos do mesmo tipo nem a utilização de palavras reservadas do Oracle. Nomes devem: • • • Conter até 30 caracteres. Possuir o primeiro caracter como uma letra. Ou podem possuir combinação de letras, números e alguns caracteres especiais ($, “, etc).

DBC Database Company

7

Produzindo Triggers

Propriedades de um módulo form
Todos os objetos dentro de um form possuem propriedades, inclusive o módulo que também é um objeto.

Efetuado alterações de propriedades
Efetue uma alteração ou consulta nas propriedades de um módulo através do Property Pallete:

• • •

selecionando no menu Tools -> Property Palette ou com um duplo clique no ícone do módulo form no Object Navigator ou um clique com o botão direito do mouse e escolhendo a opção Property Palette.
Demonstrado anteriormente

É aconselhável definir as propriedades de um módulo form na sua criação, visto que as mesmas afetam o comportamento do form genericamente.

Principais Propriedades de um módulo
• • Name: nome interno do módulo form (visualizado no Object Navigator). Coordinate System: define a unidade usado como medida para os objetos de um form e suas posições (coordenadas). Outras propriedades de um módulo form serão vistas nos próximos capítulos.

DBC Database Company

8

Produzindo Triggers

Escolhendo a unidade de coordenação
• Pressione o botão More na propriedade Coordinate System no Property Palette.

Na janela Coordinate Info altere as propriedades desejadas.

O sistema de coordenação para um form pode ser: Opção
Real

Descrição
Utilizada para modo gráfico, permite flexibilidade e alinhamento fino quando ajustando posições e tamanhos de objetos na tela. Ao selecioná-la pode-se escolher na opção Real Unit: Pixels, Centímetros, Pontos e Decipontos. A unidade default é Point. Utilizadas para modo caracteri, ncluem dispositivos de modo caracter.

Caracter

DBC Database Company

9

Oracle Forms Builder 6

4. Blocos

DBC Database Company

Produzindo Triggers

Objetivos
• • • • Modificar o comportamento e a aparência de um bloco e seus componentes. Utilizar as técnicas de construção para gerenciar as propriedades de blocos e seus objetos. Construir blocos baseados em tabelas do banco de dados. Construir blocos que não são baseados à tabelas do banco de dados.

DBC Database Company

2

Produzindo Triggers

Conceito de bloco
Bloco é o dono lógico de um Ítem, ele armazena-os e contém propriedades que afetam ao funcionamento dos quais. Um bloco pode ser de controle, sem ser baseado à uma origem de dados, ou ser Base Table, baseado à uma origem de dados.

Bloco Base Table
É um bloco que é baseado à uma origem de dados do banco, seja tabela, view, stored procedure ou ainda uma query. Na criação de um bloco base table o forms arranja e modifica as propriedades de tela e itens, automaticamente conforme especificações da fonte dos dados e do Layout Wizard, assistente de disposição dos dados do bloco na tela, setadas ao criar o bloco, facilitando e agilizando ainda mais na construção de uma aplicação.
Algumas tarefas efetuadas pelo forms na criação de um bloco Base Table:

• • • • •

Alteração das propriedades do bloco conforme a tabela, view ou array. Cria um item tipo Text para cada coluna do objeto origem dos dados. Seta as propriedades para cada Text item (name, data type, max length e etc) de acordo com a especificação da coluna correspondente. Cria um prompt tipo label para cada item, o default é o nome da coluna. Arranja os itens na tela de acordo com as propriedades de layout especificadas.

Bloco de Controle
Um Control Block é um bloco que não está associado a nenhuma origem de dados do banco. Em outras palavras a propriedade Basetable Data Block é No. Use um bloco de controle para organizar a disposição dos objetos auxiliares, como botões, que poderão ser colocados em uma Toolbar.

DBC Database Company

3

Produzindo Triggers

Criação de um bloco
• Clique na entrada Data Blocks no Object Navigator.

Clique no ícone Create no Object Navigator. A janela New Data Block Options aparecerá. 1. Para usar o Wizard na criação do bloco selecione “Use the Data Block

Wizard”; 2. Para criar um bloco manualmente, sem items, em branco, selecione a opção “Build a new data block manually”. Esta opção, normalmente é utilizada na criação de um bloco de controle, visto a seguir.

DBC Database Company

4

Produzindo Triggers

Criando um bloco de controle
• • • • Siga os passos definidos acima, para criação de um bloco. Na janela New Data Block, selecione a opção Build a new data block manually. Clique em OK. Altere a propriedade Database Data Block do bloco para No.

DBC Database Company

5

Produzindo Triggers

Criando um bloco Base Table
• • • Siga os passos definidos acima, para criação de um bloco. Na janela New Data Block, selecione a opção Use the Data Block Wizard. Clique em OK.

Tela de boas vindas do Data Block Wizard
Um diálogo, avisando que o Wizard irá criar um bloco com especificações que devem ser preenchidas nos próximos diálogos, será mostrado.

DBC Database Company

6

Produzindo Triggers

Escolha do tipo de origem de dados (Table or View)
Escolha o tipo da origem de dados do bloco: • • Table or View : Tabela ou Visão do banco; Stored Procedure : Array em forma de record retornado de uma procedure do banco, visto no curso de Forms Avançado.

DBC Database Company

7

Produzindo Triggers

Escolhendo os itens que farão parte do bloco
1. Digite o nome da, tabela ou visão, caso não saiba, pressione o botão Browse e escolha uma opção da lista;

2.

Mova as colunas que deseja incluir no bloco, as arrastando ou através dos botões;

3. Marque o CheckBox Enforce data integrity, para criar triggers relativas as constraints da tabela ou visão;

DBC Database Company

8

Produzindo Triggers

Etapa final da criação do bloco
Na página do Assistente selecione uma das seguintes opções: • • Create the data block, then call the Layout Wizard : executa o Assistente de Layout; Just create the data block : não executa o Assistente de Layout, o usuário deve fazer-lo mais tarde.

DBC Database Company

9

Produzindo Triggers

Usando o Assistente de Layout

Tela de boas vindas do assistente Seleção do canvas, tela, no qual será adicionados os itens do bloco
Selecione um Canvas já existente na lista;, ou New Canvas, criará um novo canvas.

DBC Database Company

10

Produzindo Triggers

Seleção dos itens do bloco que serão mostrados no layout

Acerto dos prompts e tamanho dos itens

DBC Database Company

11

Produzindo Triggers

Seleção do estilo dos prompts em relação aos itens

Form : Label, prompt, à esquerda do Item;

Tabular : Label, prompt, à cima do Item.

DBC Database Company

12

Produzindo Triggers

Especificação de scrollbar e argumentos de agrupamento de tela

• • • •

Frame Title: Descrição do frame, quadro, envolvedor dos dados na tela. Records Displayed: Numero de registros, instâncias, mostrados na tela. Distance Between Records: Distância entre os registros, quando mostrados mais do que 1. Display Scrollba: Informa se o bloco deve possuir uma barra de rolagem dos registros.

Conclusão das especificações de Layout

DBC Database Company

13

Produzindo Triggers

Removendo um bloco
• Selecione o bloco desejado no Object Navigator.

• •

Clique no ícone Delete no Object Navigator. Um diálogo solicitará a confirmação.

Click em Yes.

DBC Database Company

14

Produzindo Triggers

Atributo Visual
Um atributo visual é um objeto usado para definir propriedades visuais que serão associadas a objetos de tela, nele são definidas propriedades por exemplo cor de fonte e cor de fundo. Um atributo visual é bastante utilizado para destacar o registro corrente, que possui o foco, de um bloco com mais de uma instância visível na tela, Multi-Records.

Criando um atributo visual
• Selecione a entrada Visual Atributtes no Object Navigator.

• •

Clique no ícone Create . Altere as propriedades desejadas do atributo criado.

DBC Database Company

15

Produzindo Triggers

Propriedades de um bloco
Você pode definir ou alterar propriedades adicionais aos blocos após a criação dos mesmos. • As propriedades de um bloco estão dispostas em grupos de propriedades para agilizar na busca das quais.

DBC Database Company

16

Produzindo Triggers

Manipulando propriedades de Objetos
As propriedades de qualquer tipo de objeto podem ser consultadas e modificadas pelo Property Palette. Para abrir o Property Palette existem 5 formas: • Selecionando Tool -> Property Palette. • Pressionando a tecla <F4>. • Efetuando duplo clique no ícone do objeto no Object Navigator. • Efetuando duplo clique no objeto no layout editor. • Efetuando um clique no botão direito do mouse e selecionando a opção Property Palette. Uma vez ativado o Property Palette você pode manipular as propriedades do objeto.

Tipos de Interface de manipulação do Property Palette
Existem 4 tipo de interface para a manipulação do Property Palette:
Interface Text Field Pop List Descrição Uma linha de texto é aberta na control area. Um botão icônico também aparece permitindo o uso de um editor. Uma lista de valores é oferecida com um conjunto de valores fixos. Clique na control área para abrir a lista de valores ou dê um duplo clique na propriedade para ver o próximo valor na lista. Uma lista de valores potencialmente grande é oferecida. Clique na control área para abrir a lista de valores ou dê um duplo clique na propriedade para ver o próximo valor na lista. Clicando no botão More na control área, mais propriedades são oferecidas através de um diálogo extra.

LOV Window

More button

DBC Database Company

17

Produzindo Triggers

Propriedades de um bloco
Propriedades de navegação
Propriedade Navigation Style Descrição Same Record – quando você navega do último item em um registro utilizando [Next Item] o cursor move para o primeiro item do mesmo registro. Change Record - quando você navega do último item em um registro utilizando [Next Item] o cursor move para o primeiro item do próximo registro. Change Block – quando você navega do último item do bloco utilizando [Next Item] o cursor move para o primeiro item do primeiro registro do próximo bloco. Normalmente quando se executa uma operação para se movimentar para o bloco anterior o Oracle Forms move o controle para o bloco anterior na seqüência, a menos que você especifique um bloco nesta propriedade. Normalmente quando se executa uma operação para se movimentar para o próximo bloco o Oracle Forms move o controle para o próximo bloco na seqüência, a menos que você especifique um bloco nesta propriedade.

Previous Navigation Data Block Next Navigation Data Block

Propriedades de registro
Propriedade Descrição Current Record Visual Atributo visual utilizado para realçar o registro corrente do bloco. Atributte Group Query Array Size Quantidade de Registros para dar fetch. Para agilizar no display dos os primeiros registros de um bloco multi-records. Number of Records Buffered Number of Records Displayed Query All Records Record Orientation Single Record Quantidade de registros trazidos a cada fetch. Número de display de registros de um bloco multi-records. Força o fetch de todos os registros. Usado em itens tipo sumario. Orientação dos registros no bloco. Geralmente os registros são orientados verticalmente. Você pode alterar para horizontal se assim desejar. Informa que o bloco só tem um registro, somente para blocos de controle.

DBC Database Company

18

Produzindo Triggers

Propriedades relacionadas aos dados
Propriedade
Database Data Block Enforce Primary Key

Descrição
Se o bloco é baseado em uma tabela, view ou array. Controla se este registro é único antes dele ser inserido na tabela base. Yes significa que pelo menos um item no bloco tem a propriedade Primary Key setada como Yes.

Delete/nsert/Query/Up Define se a operação associada pode ser executada dade Allowed ( Yes / No ) Query Data Source Type Query Data Source Name Query Data Source Columns Query Data Source Arguments WHERE Clause Especifica o tipo da origem dos dados, tabela, view, ou procedure (array). None significa que o bloco é de controle (não base table). Especifica o nome da tabela, view ou procedure. Especificações de tipo e tamanho das colunas da tabela, view, sub-query, ou procedure. Argumentos de tipo, tamanho, nome de coluna, tipo da coluna e valores para transação de dados via procedure. Permite que você defina uma condição para a clausula Where, do comando Select, que será executada para todas consultas efetuadas no bloco. Se for executada uma consulta condicional os argumentos da consulta serão adicionados a condição especificada da cláusula Where através do operador AND. Permite que você defina a cláusula order by para a ordenação dos registros para todas consultas efetuadas no bloco. Permite a definição de um hint string que será adicionado ao SQL implícito gerado para as consultas efetuadas no bloco. Exemplo: /*+ FIRST ROWS */ Habilita o controle para que somente os itens que o operador tenha permissão de atualização podem ser atualizados pelo mesmo. Yes - somente os itens alterados pelo operador são inseridos ou alterados na tabela base. No - o Oracle Forms atualiza todas as colunas associadas ao bloco na tabela base. Estas propriedades referenciam-se a transações com registros de blocos associados a tabelas não Oracle. Para transações com tabelas Oracle as propriedades default são as mais apropriadas.

ORDER BY Clause Optimizer Hint

Enforce Column Security Update Changed Columns Only

Key Mode / Locking Mode / Transational Triggers

DBC Database Company

19

Produzindo Triggers

Propriedades de scrollbar
Propriedade Show Scroll Bar Descrição Yes – inclui um scroll bar para o bloco. Quando setado habilita outras propriedades, como o canvas, a posição e o tamanho para o scroll bar. Você pode definir estas propriedades pelo layout editor. No – não inclui um scroll bar para o bloco. Canvas onde deve mostrar o scrollbar.

Scroll Bar Canvas

Scroll Bar Tab Page Se o canvas é do tipo Tab, em qual Page ele deve ser mostrado.

Propriedades a nível de módulo
Propriedade Descrição

Listed In Data Block Permite que o bloco apareça no menu de blocos, <F5>. Menu Data Block Define a descrição do bloco no menu de blocos. Description

DBC Database Company

20

Produzindo Triggers

Salvando um módulo form
Você pode salvar um módulo Forms de 2 formas: • Selecionando File -> Save ou File -> Save As

• Clicando no ícone Save . As duas opções causam o aparecimento do diálogo Save As, aonde você deve entrar com a localização e o nome do arquivo e clicar em OK.

Obs. :
• você pode definir entre salvar no Banco de dados (database) ou em arquivo (file) setando a preference Access, selecionando no menu Tools -> Preferences -> Access.

DBC Database Company

21

Produzindo Triggers

Executando um módulo form
Você pode executar um módulo, do módo “Client/Server”, sem sair do Form Builder, de 2 formas: Selecionando no menu Program -> Run Form -> Client/Server CTRL+R;

• Clicando no ícone Run

.

Quando você termina a sua sessão Runform, você retorna ao Oracle Forms Builder.

DBC Database Company

22

Produzindo Triggers

EXERCÍCIOS
1. Execute o Oracle Forms Builder. Conecte-se ao banco utilizando o User Name, Password e Database fornecidos pelo instrutor. 2. Crie um módulo forms, chamado CLIENTES. Nele crie um bloco baseado na tabela CLIENTES, inclua todas as colunas da tabela no bloco. Para o layout use o estilo “Form”, e mostre somente um registro na tela. 3. Garanta que os registros consultados no bloco CLIENTES, sejam classificados pelo código do cliente. 4. Salve e execute o módulo CLIENTES, Experimente os efeitos das propriedades que você definiu. Encerre a sessão Runform e retorne ao Oracle Forms Builder. 5. Feche o módulo CLIENTES. 6. Crie um novo módulo form, chamado PEDIDOS. Nele crie um bloco baseado na tabela PEDIDOS, inclua todas as colunas da tabela no bloco. Para o layout, use o estilo “form”, e mostre somente um registro na tela. 7. Ainda no módulo PEDIDOS, crie outro bloco baseado na tabela ITENS. Para o layout, utilize o estilo “Tabular” e na mesma tela, canvas, mostre 4 registros. Mostre uma Scroll Bar. Garanta que os registros correntes no bloco ITENS apareçam visualmente diferentes. Crie um atributo visual chamado REGISTRO_CORRENTE, com as seguintes propriedades: • • Foreground Color : White; Background Color : Darkcyan. 8. Garanta que os registros consultados no bloco ITENS sejam classificados por Numero_do_Item. 9. Defina que a navegação para o bloco ITENS, quando estiver no último item do bloco PEDIDOS, seja automática. 10. Defina que a navegação para o próximo registro, quando estiver no último item do bloco ITENS, seja automática. 11. Salve e execute o módulo PEDIDOS. Experimente os efeitos das propriedades que você definiu. Encerre a sessão Runform e retorne ao Oracle Forms Builder.

DBC Database Company

23

Oracle Forms Builder 6

5. Relacionamento Entre Blocos

DBC Database Company

Produzindo Triggers

Objetivos
• • • • Entender o conceito de relação entre blocos. Criar uma relação usando o assistente. Criar uma relação manualmente. Entender as propriedades de uma relação.

DBC Database Company

2

Produzindo Triggers

Conceito de relacionamento
Relacionamento é uma relação entre dois blocos através de uma chave primária e uma chave estrangeira das tabelas nas quais os blocos estão baseados. O bloco Mestre é aquele baseado na tabela que possui a chave primária e o bloco detalhe é aquele baseado na tabela que possui a chave estrangeira. • • • O relacionamento Mestre Detalhe equivale a um relacionamento 1:M no diagrama ER. Um bloco detalhe pode ser um bloco mestre em relação a outro bloco. Um bloco mestre pode ter mais de um bloco detalhe.

DBC Database Company

3

Produzindo Triggers

Criando um relacionamento entre dois blocos
Existem duas formas de criar-se relacionamentos: • Automática: Usando o Data Block Wizard. • Manual: Especificando manualmente o relacionamento.

Passos para a criação de uma relação manual
1. Selecione a entrada Relations do bloco Mestre, no Object Navigator.

2. 3. 4.

Clique no ícone Create . Será mostrada a janela New Relations. Especifique o nome do bloco Detalhe.

5.

Escolha a propriedade de deleção.

6.

Escolha a propriedade de coordenação.

7.

Especifique a condição de Join.

DBC Database Company

4

Produzindo Triggers

Construindo um relacionamento automaticamente
• • Crie o bloco mestre; Crie o bloco detalhe setando as opções de relacionamento: 1. Clique no botão Create Relationship; 2. Ao mostrar lista de blocos criados selecione o bloco mestre; 3. Se necessário corrija a condição de join.

DBC Database Company

5

Produzindo Triggers

Opções do Assistente:
Opção
Create Relationship Button Delete Relationship Button Auto-join data blocks Check Box Detail Item List

Descrição Motra a lista de blocos criados no modulo para selecionar o bloco mestre do relacionamento. Deleta o relacionamento selecionado.
Cria automáticamente a relação de join. Lista de items do bloco detalhe para o join com items do bloco mestre. Lista de items do bloco mestre para o join com items do bloco detalhe.

Master Item List

DBC Database Company

6

Produzindo Triggers

Executando um módulo form mestre detalhe
Características de execução
• • • • Consultando o bloco mestre, automaticamente são consultados os registros correspondentes no bloco detalhe. Inserindo um registro no bloco detalhe automaticamente, ele estará associado ao registro mestre corrente. A tentativa de deleção de um registro mestre é impedida caso um registro detalhe associado exista. As características de um relacionamento mestre detalhe podem ser alteradas através das propriedades de uma relação (Relations) que serão vistas em capítulos seguintes.

DBC Database Company

7

Produzindo Triggers

Propriedades de relacionamento
Você pode alterar as propriedades de uma relação de maneira a afetar o comportamento das deleções e das coordenações de consultas.

Master Deletes
Propriedade
Non Isolated Cascading

Uso
Previne a deleção do registro do bloco mestre quando registros detalhes para esse mestre existem. Deleta os registros detalhes em cascata quando o registro mestre é deletado. Obs.: a mensagem de Commit mostra somente o número de registros deletados do bloco mestre, embora os registros detalhe também sejam deletados. Deleta somente o registro mestre.

Isolated

Coordenação de consultas
Propriedade
Default Deferred with Auto Query

Uso
Força a coordenação dos blocos de maneira a sempre que o registro mestre for trocado os correspondentes registros detalhes serão apresentados. Adia a consulta dos registros detalhes associados ao registro mestre de maneira que eles sejam consultados automaticamente no momento em que o cursor se posicionar no bloco detalhe.

Deferred without Auto Adia a consulta dos registros detalhes associados ao registro mestre de Query maneira que eles sejam consultados no momento em que o cursor se posicionar no bloco detalhe e for executada uma consulta no bloco detalhe. Prevent Masterless Operations Garante que um bloco detalhe não pode ser consultado ou utilizado para inserção de registros quando não existe um registro mestre.

Join Condition
Propriedade
Condição de join

Uso
Condição de ligação entre blocos. Obs: utilize nomes de blocos e itens ao invés de nomes de tabelas e colunas na expressão de condição.

DBC Database Company

8

Produzindo Triggers

O que acontece quando você modifica um relacionamento
• • Trocando a propriedade Delete Record Behavior de Non Isolated para Cascading a trigger ON_CHECK_DELETE_MASTER é substituida pela trigger PRE_DELETE. Trocando a propriedade Delete Record Behavior de Non Isolated para Isolated a trigger ON_DELETE_MASTER é removida.

DBC Database Company

9

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo PEDIDOS. No bloco ITENS, crie uma relação com o bloco PEDIDOS, garanta que não seja permitido a exclusão de um pedido se houverem itens associados a ele. 2. Invocando o Assistente de Layout, retire da tela o item CODIGO_DO_PEDIDO do bloco ITENS. 3. Salve e execute o módulo. Teste as propriedades da relação. 4. Crie um bloco baseado na tabela ESTOQUES, aproveitando o assistente, crie uma relação do bloco ITENS, que será o mestre da relação. Este bloco deve ser o último bloco navegável. 5. Diferencie os registros correntes deste bloco associando a ele o atributo visual REGISTRO_CORRENTE. 6. Defina que a navegação para o próximo registro, quando estiver no último item do bloco ESTOQUE, seja automática. 7. Garanta que seja possível deletar um item, se houverem registros no bloco ESTOQUE. 8. Defina a coordenação de maneira que o bloco ESTOQUE não seja consultado até que você efetue explicitamente uma consulta no bloco. 9. Salve e execute o módulo PEDIDOS. Experimente os efeitos das propriedades que você definiu. 10. Encerre a sessão Runform e retorne ao Oracle Forms Builder.

DBC Database Company

10

Oracle Forms Builder 6

6. Frames

DBC Database Company

Produzindo Triggers

Objetivos
• • Entender o conceito de frame. Modificar a aparência de itens de bloco, no canvas, utilizando frame.

DBC Database Company

2

Produzindo Triggers

Conceito de frame
Frame é o dono logico de um grupo de items do bloco, no canvas, onde pode-se referenciar os items deste bloco diretamente pelo frame, podendo assim dimenciona-los, e preenche-los automaticamente na área do mesmo. Também é possível setar algumas propriedades comuns nos itens do mesmo, pelo frame.

DBC Database Company

3

Produzindo Triggers

Reorganizando os itens dimencionando o frame
Você pode reorganizar os itens do canvas englobados pelo frame, dimencionando o mesmo no canvas.

DBC Database Company

4

Produzindo Triggers

Propriedades de um frame
Propriedade
Name Layout Data Block Update Layout

Descrição
Nome do frame. Bloco com o qual o frame está associado. Forma de controle do frame com os itens englobados por ele: Automatically : Dimenciona e controla os itens automaticamente, ao setar propriedades no frame, é repassado aos itens e bloco; Manually : O frame passa a não mais fazer efeito nos respectivos itens e bloco, mas o Layout Wizard consegue alterá-lo; Locked : O frame passa a não mais fazer efeito nos respectivos itens e bloco, e o Layout Wizard não consegue alterá-lo. Estilo de Layout: Form : Label à esquerda do item; Tabular : Label à cima do item. Alinhamento dos objetos no frame Start : Início; End : Fim; Center : Centro; Fill : Ajusta preenchendo o espaço; Column : Alinha os objetos na mesma coluna. Alinhamento quando o frame possuir um só objeto e a propriedade Frame Alignment for Fill. Especifica a margem horizontal e vertical dos objetos do frame. Especifica a distância horizontal e vertical entre os objetos dentro do frame.

Layout Style Frame Alignment

Single Object Alignment Hirizontal e Verital Margin Hirizontal e Verital Object Offset Allow Expansion

Habilita expandir a borda do frame quando algum item, ao ser redimensionado, passar da borda do frame Shrinkwrap Redimenciona o frame para eliminar os espaços vazios entre as margens e as bordas do frame. Vertical Fill Força os objetos a ajustarem-se de forma a preencher o máximo possível da linha. Maximum Objects per Determina o número máximo de objetos por linha, faz efeito se a propriedade Line Vertical Fill for No.

DBC Database Company

5

Produzindo Triggers

Continuação...
Propriedade
Start prompt Alignment Start prompt Offset Top Prompt Alignment Top prompt Offset Allow Start-Attached Prompts Frame Title Frame Title Alignment Frame Title Offset Frame Title Spacing Number of Records Displayed Distance Between Records Show Scroll Bar Scroll Bar Alignment Scroll Bar Width X e Y Position Width Height Line Width Dash Style Bevel

Descrição
Alinhamento do label em relação ao item. Distância horizontal do label ao item. Alinhamento do label em relação ao item, quando o label posiciona-se à cima do item(estilo tabular). Distância vertical do label ao item. Permite otimizar o prompt, quando o Form Styte for Tabular, permite reorganizá-lo para, se houver espaço, mover ao lado do item. Descrição do label título do frame. Alinhamento do título do frame. Margem distância do título do frame. Espaço entre a borda do frame e o título. Número de registros à serem mostrados no bloco. Distância entre os registros. Habilita a barra de rolagem para os registros. Especifica a posição da Scroll Bar em relação aos itens. Especifica a largura da Scroll Bar. Posição, nas coordenadas X e Y, do frame em relação ao canvas. Largura do frame. Altura do frame. Espessura da linha (borda) do frame. Estilo do tracejado da linha. Representação de saliência e depressão da linha.

DBC Database Company

6

Produzindo Triggers

Tela de propriedades de um frame

DBC Database Company

7

Oracle Forms Builder 6

7. Itens tipo Texto

DBC Database Company

Produzindo Triggers

Objetivos
• • • • • • • Criar um item tipo texto. Controlar os dados em itens tipo texto. Alterar as propriedades de navegação de um item tipo texto. Incrementar o relacionamento entre um item tipo texto e o Banco de dados. Adicionar funcionalidade a um item tipo texto. Incluir mensagens de ajuda. Incluir Helps tipo ToolTip.

DBC Database Company

2

Produzindo Triggers

Conceito de itens tipo texto (Text Item)
Text item ou item tipo texto são itens de interface, através dos quais você pode consultar, inserir, atualizar e deletar dados. Um item tipo texto corresponde a uma coluna de uma tabela. O tipo de item determina as propriedades disponíveis no Property Palette. Neste capítulo serão vistas as propriedades relativas a um item tipo texto (Text Item).

DBC Database Company

3

Produzindo Triggers

Criando um item tipo texto (Text Item)
Você pode criar um item do tipo texto de 4 formas: • Convertendo um item já existente para Text Item • Usando o ícone Text Item do Toolbar no layout editor. • Usando o ícone Create no Object Navigator. • Criando um novo bloco Base Table, usando o wizard e selecionando a opção para layout, os respectivos Text Itens serão criados implicitamente.

Passos para a criação de um Text Item no Layout Editor
1. 2. 3. 4. 5. Entre no Layout Editor. Selecione Tools -> Layout Editor F2. Clique no ícone Text Item no Toolbar do Layout Editor. Clique no Canvas, e o Text Item deve aparecer. Dê um duplo clique no Text Item, e o Property Palette deve aparecer. Defina as propriedades conforme sua necessidade.

DBC Database Company

4

Produzindo Triggers

Propriedades de um text item
Propriedade
Item Type Canvas Visible X e Y Position Width Heigth Distance Between Records Bevel

Descrição
Define o tipo de item que você deseja criar. Determina em qual canvas o item deverá ser mostrado. Determina se o item deve ou não ser mostrado. Define as coordenadas dos eixos X e Y relativa ao canvas definido. Define a largura do item. Define a altura do item. Define a quantidade de espaços entre registros. Define a aparência da borda do item: Depressão, saliência e efeito de foco. None: o item não possui borda. Conserva os recursos do sistema. Quando um item Rendered não é o foco, os recursos utilizados para mostrá-lo, são liberados.

Rendered

DBC Database Company

5

Produzindo Triggers

Continuação...
Propriedade Descrição

Visual Atribute Group Especifica o nome de um atributo visual previamente definido. Font Name Font Size Font Style Font Spacing Font Weight Foreground Color Background Color Fill Pattern Character mode Logical Attribute White on Black Especifica o tipo de fonte Especifica o tamanho do fonte em pontos. Especifica o estilo do fonte. Especifica a largura do fonte. Especifica o peso da luminosidade do fonte. Especifica a cor de primeiro plano do item. Especifica a cor de fundo do item. Especifica o padrão de preenchimento para o item. Especifica o nome do arquivo de recursos Oracle Terminal, que seta os atributos quando executado em modo caracter. Especifica se o item deve ser mostrado de cor branca em fundo preto (em dispositivos monocromáticos).

Current Record Visual Especifica o nome de um atributo visual, previamente definido, para utilizar Attribute Group no item quando for o registro corrente. Number of Itens Displayed Define o número de ocorrências de um item.

DBC Database Company

6

Produzindo Triggers

Alterando cores e fontes
Utilize a propriedade Visual Attribute Group para definir cores e fontes para um item texto. O atributo visual é um conjunto de propriedades que podem ser aplicadas a um objeto do Oracle Forms. Existem dois tipos diferentes de atributos visuais. Tipos de Atributos Visuais
Default Named

Uso
Atributo visual default. Utiliza definições default, podendo setar algumas propriedades do Windows. Especifica o nome de um atributo visual, pré-definido, que pode ser utilizado por vários objetos.

DBC Database Company

7

Produzindo Triggers

Controlando os dados em um text item
Utilize as seguintes propriedades de dados de um Text Item para controlar o modo como os dados serão mostrados e inseridos: Data Properties Descrição

Synchronize with Item Especifica o nome de um item a partir do qual este item copia seu valor. Esta propriedade significa que você pode ter dois itens em um bloco que simultaneamente representam o mesmo valor. Data Type Maximum Length Fixed Length Determina o tipo de dado Oracle permitido como entrada para este item. Define o número máximo de caracteres permitidos para este item. Geralmente corresponde a largura da coluna da tabela base. Especifica se o usuário necessita preencher o item completamente antes de poder se mover para outro item. Fixed Length é freqüentemente utilizado em conjunto com a propriedade Auto Skip. Determina se o item é obrigatório. Define o formato da máscara para o item. Especifica o valor mínimo permitido para este item. Especifica o valor máximo permitido para este item. Especifica o valor default para o item a cada novo registro.

Required Format Mask Lowest Allowed Value Highest Allowed Value Initial Value

Copy Value from Item Especifica o bloco e o item utilizado como fonte para o valor deste item. Utilizado quando da existência de relações entre blocos.

DBC Database Company

8

Produzindo Triggers

Formatando itens
A máscara de formatação permite que você especifique o formato pelo qual o valor do item será visualizado. Utilize padrões SQL de formatação para datas e números. Por exemplo: DD/MM/YY e 99,999.99.

Definindo um valor default
Utilize uma das seguintes opções para definir um valor default para um item: Tipo
Valor Variável de sistema

Descrição e exemplo
Valor simples. Exemplo:340. Exemplo de utilização de variáveis de sistema: $$DATE$$ - data do sistema operacional no formato DD-MON-YY $$DATETIME$$ - data do sistema operacional no formato DD-MONYYYY hh:mi:[ss] $$TIME$$ - hora do sistema operacional no formato hh:mi[:ss] $$DBDATE$$ - data do Banco de dados no formato DD-MON-YY $$DBDATETIME$$ - data do Banco de dados no formato DD-MONYYYY hh:mi:[ss] $$DBTIME$$ - hora do Banco de dados no formato hh:mi[:ss] Exemplo de utilização de variáveis globais: :GLOBAL.CODIGO_DO_PRODUTO Exemplo de utilização de itens do módulo form: :PEDIDOS.CODIGO Exemplo de utilização de valores de seqüências: :SEQUENCE.PEDIDOS_CODIGO_SQ.NEXTVAL

Variável Global Item do Form Sequence

DBC Database Company

9

Produzindo Triggers

Alterando o comportamento de navegação
Você pode alterar a seqüência de navegação dos itens no Object Navigator. Como as entradas de itens são mostradas na ordem de navegação basta selecionar o item e arrasta-lo para a posição desejada na seqüência de navegação. Para forçar a navegação de um item seta-se as seguintes propriedades dele: Navigation
Enabled Keyboard Navigable Next Navigation Item Previous Navigation Item

Descrição
Determina se é possível navegar e manipular o item com o mouse. Determina se é possível navegar para o item com as teclas de função ou itens de menu. Determina para qual item a navegação será feita quando for selecionado Field -> Next ou for usada a tecla [Next Item]. Determina para qual item a navegação será feita quando for selecionado Field -> Previous ou for uasada a tecla [Previous Item].

DBC Database Company

10

Produzindo Triggers

Setando as propriedades Keyboard Navigable e Enabled
Keyboard Navigable Yes No No Yes Enabled Yes Yes No No Comportamento da Navegação O item é incluído na navegação default, através de teclas e menu, e pode ser navegado e manipulado pelo mouse. O item é excluído da navegação default, através de teclas e menu, mas pode ser navegado e manipulado pelo mouse. O item é excluído da navegação default e não pode ser navegado ou manipulado pelo mouse. O item é excluído da navegação default e não pode ser navegado ou manipulado pelo mouse. Neste caso, a propriedade Keyboard Navigable é efetivamente setada para No.

Obs.: • Se você setar a propriedade Enabled para No o item será visualizado em cor cinza.

DBC Database Company

11

Produzindo Triggers

Alterando o relacionamento do item com o banco de dados
Você pode alterar a maneira como o item interage com a coluna correspondente na tabela base do Banco de dados, setando as seguintes propriedades: Database Properties Descrição
Database Item Column Name Primary Key Insert Allowed Update Allowed Query Allowed Query Length Determina se o valor do item está armazenado em uma coluna da tabela base do bloco. Especifica o nome da coluna origem, no banco, a qual o item representa. Determina se o item é baseado em uma coluna que faz parte da Primary Key da tabela base para o bloco. Determina se o item permite a inserção de valores. Esta propriedade se aplica somente para novos registros. Determina se o item permite a atualização de valores. Determina se o item permite a utilização de critérios de consulta sobre ele. Define o tamanho máximo para um argumento ou expressão de consulta sobre o item. Não pode ser definido um valor menor do que Maximum Length, a não ser zero. Determina se a diferença entre maiúsculas e minúsculas deve ser reconhecida durante o processo de consulta. Yes: não leva em consideração o Case. No: obedece rigidamente o Case.

Case Insensitive Query

Update Only if NULL Determina se o item permite atualização somente quando o valor corrente é nulo (NULL). Esta propriedade se aplica somente a registros já existentes. Lock Record Determina se o registro é travado (locked) quando o item é modificado. Esta propriedade se aplica somente a itens não pertencentes a tabela base.

DBC Database Company

12

Produzindo Triggers

Adicionando funcionalidades a um item
Você pode mudar a funcionalidade de um item através das seguintes propriedades: Functional Properties
Case Restriction

Descrição
Upper: obriga a informação de letras maiúsculas. Lower: obriga a informação de letras minúsculas. Mixed: aceita a informação de letras minúsculas e maiúsculas. Determina o critério de alinhamento do item. Determina se o item pode armazenar mais de uma linha de texto. Utilizado para colunas VARCHAR2 e LONG. Determina se um item multi-line continua na próxima linha. None: não continua. Character: continua normalmente. Word: continua sem truncar palavras. Determina se o valor do item digitado deve ser visível ao usuário. Mantém a posição do cursor de modo que quando o usuário reentrar no item o cursor voltará a mesma posição. Determina se o cursor automaticamente pula para o próximo item ao completar o item. Determina se um item Multi-Line inclui um Scroll Bar. Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

Justification Multi-LIne Wrap Style

Conceal Data Keep Cursor Position Automatic Skip Show Vertical Scroll Bar Popup Menu

DBC Database Company

13

Produzindo Triggers

Adicionando funções de grupo e fórmulas a um item
É possível adicionar funções e fórmulas a um item, usando as seguintes propriedades: Calculation Properties
Calculation Mode

Descrição
Especifica o que será adicionado ao item: Formula : Habilita uma fórmula ao item; Summary : Habilita uma função de grupo ao item; Especifica a fórmula do item. Relação das funções de grupo que será assimilada ao item: Avg : Média; Count : Quantidade; Max : Valor máximo; Min : Valor mínimo; Stddev : Desvio padrão; Sum : Soma; Variance : Variância. Especifica o bloco no qual será executada a função de grupo. Especifica o item no qual será executada a função de grupo.

Formula Summary Function

Summarized Block Summarized Item

Para Sumarizar um item, os seguintes cuidados devem ser tomados: • • O bloco sumarizado deve estar com a propriedade Query All Records como Yes. Se o item sumarizado estiver em um bloco de controle, o qual deve possuir a propriedade Single Record como Yes.

DBC Database Company

14

Produzindo Triggers

Labels associados do item
Prompt Properties
Prompt Prompt Display Style

Descrição
Descrição do label do item. Freqüência de visualização do label

Hidden: Nunca; First Record: Só no primeiro registro; All Records: Sempre.
Prompt Justification Prompt Attachment Edge Prompt Alignment Prompt Attachment Offset Prompt Alignment Offset Determina o critério de alinhamento do label. Determina o posicionamento do label em relação ao item. Determina o alinhamento do label em relação ao item. Determina a distância do label em relação ao item. Determina a margem alinhamento do label em relação ao item.

DBC Database Company

15

Produzindo Triggers

Itens multi-line
Utilize itens multi-line para mostrar: • Endereços • Comentátios • Descrições O tipo de dado de um item multi-line deve ser um dos seguintes: • Char • Alpha • Long Na criação de um item multi-line considere as seguintes propriedades: • Width • Heigth • Maximun Length

DBC Database Company

16

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

17

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo CLIENTES. Remova o item CODIGO_DA_REGIAO do bloco. 2. Controle automaticamente o número do cliente, CODIGO, como único para cada novo cliente, associando a ele a sequence CODIGO_DO_CLIENTE_SQ. 3. Garanta que não seja permitido a inserção neste item, e que ele não tenha navegação interna. Alterar as propriedades Insert Allowed e Keyboard Navigable para No. 4. Crie um novo item chamado NOME_DO_VENDEDOR (51 caracteres), e posicione-o próximo ao item CODIGO_DO_VENDEDOR. Garanta que NOME_DO_VENDEDOR não esteja associado com a tabela CLIENTES. Não permita inserção, atualização ou consulta neste item e garanta que a navegação só seja possível através do mouse. 5. Renomeie o frame do bloco de clientes para FRAME_CLIENTES. Garanta que a manipulação deste frame não reposicione mais os itens automaticamente. 6. Torne o item OBSERVAÇÃO como Mult-Line, quebrando o texto por palavras. 7. Reposicione os itens e seus labels e acerte os tamanhos. Utilize a tela a seguir como sugestão.

8. Salve e execute o módulo CLIENTES. Experimente o form.

DBC Database Company

18

Produzindo Triggers

9. Abra o módulo PEDIDOS. Renomeie o frame do bloco de pedidos para FRAME_PEDIDOS, do bloco de itens para FRAME_ITENS, e do bloco de estoque para FRAME_ESTOQUE. Garanta que a manipulação neles não reposicionem mais os itens automaticamente. 10. Crie um novo item no bloco PEDIDOS chamado NOME_DO_CLIENTE (50 caracteres), e posicione-o próximo ao item CODIGO_DO_CLIENTE. Garanta que não esteja associado com a tabela PEDIDOS. Não permita inserção, atualização ou consulta neste item e garanta que a navegação só seja possível através do mouse. 11. Crie outro item no bloco PEDIDOS chamado NOME_DO_VENDEDOR (51 caracteres), e posicione-o próximo ao item CODIGO_DO_VENDEDOR. Garanta que ele não esteja associado com a tabela PEDIDOS. Não permita inserção, atualização ou consulta neste item e garanta que a navegação só seja possível através do mouse. 12. Exclua o item QUANTIDADE_ENTREQUE do bloco ITENS. 13. Exclua os seguintes itens do bloco ESTOQUE: CODIGO_DO_DEPOSITO; DATA_DE_REABASTECIMENTO; MOTIVO_DE_FORA_DE_ESTOQUE. 14. Mude o label dos itens dos seguintes blocos: • PEDIDOS: • - DATA_DO_PEDIDO para “Data”; • - DATA_PREVISAO_DA_ENTREGA para “Entrega”; • - CODIGO_DO_CLIENTE para “Cliente”; • - CODIGO_DO_VENDEDOR para “Vendedor”. ITENS: • - NUMERO_DO_ITEM para “Item”; • - CODIGO_DO_PRODUTO para “Produto”; • - PRECO para “Preço”. ESTOQUE: • - CODIGO_DO_PRODUTO para “Produto”; • - QUANTIDADE_EM_ESTOQUE para “Estoque”; • - QUANTIDADE_MINIMA para “Qtd. Mínima”; • - QUANTIDADE_MAXIMA para “Qtd. Máxima”. 15. Defina as propriedades para o item TOTAL do bloco PEDIDOS, de modo que a navegação só seja possível com o mouse. Não permita inserção, atualização ou consulta neste item. Mostre o valor utilizando 9,999,990.99 como máscara, alinhado pela direita. 16. Defina DD/MM/YYYY como máscara para os itens DATA_DO_PEDIDO e DATA_PREVISAO_DA_ENTREGA.

DBC Database Company

19

Produzindo Triggers

17. Gere, automaticamente, um valor default igual a data do sistema operacional para o item DATA_DO_PEDIDO para cada novo registro de pedido. 18. Graranta que os itens CODIGO e DATA_DO_PEDIDO do bloco PEDIDOS, somente sejam navegados com o mouse. 19. Controle automaticamente o número do pedido, CODIGO, como único para cada novo pedido, associando a ele a sequence CODIGO_DO_PEDIDO_SQ. 20. Crie um novo item no bloco ITENS chamado TOTAL_DO_ITEM. Posicione ao lado do item QUANTIDADE; Garanta que ele não esteja associado com a tabela ITENS; Não permita inserção, atualização ou consulta neste item; Garanta que a navegação só seja possível através do mouse. Permita somente valores numéricos, a máscara seja 9,999,990.99, e alinhe-o a direita. Este item deve ser o resultado do item QUANTIDADE * PRECO do bloco ITENS. 21. Crie outro item no bloco ITENS chamado TOTAL_DOS_ITENS. Posicione abaixo do item TOTAL_DO_ITEM; Garanta que ele não esteja associado com a tabela ITENS; Não permita inserção, atualização ou consulta neste item; Garanta que a navegação só seja possível através do mouse. Mostre somente uma instância na tela; Permita somente valores numéricos, a máscara seja 99,999,999,990.00, e alinhe-o a direita. Este item deve ser o somatório de TOTAL_DO_ITEM do bloco ITENS. 22. Crie um outro item, TOTAL_EM_ESTOQUE. agora no bloco ESTOQUE chamado

Posicione abaixo do item QUANTIDADE_EM_ESTOQUE; Garanta que ele não esteja associado com a tabela ESTOQUE; Não permita inserção, atualização ou consulta neste item; Garanta que a navegação só seja possível através do mouse. Mostre somente uma instância na tela; Permita somente valores numéricos, a máscara seja 99,999,999,990.00, e alinhe-o a direita. Este item deve ser o somatório de QUANTIDADE_EM_ESTOQUE do bloco ESTOQUE. 23. Reposicione os itens, seus labels, e tamanhos. Utilize a tela à seguir como sugestão:

DBC Database Company

20

Produzindo Triggers

24. Execute o forms, teste as alterações e encerre a sessão Forms Builder:

DBC Database Company

21

Oracle Forms Builder 6

8. LOVs e Editores

DBC Database Company

Produzindo Triggers

Objetivos
• • • Identificar os objetos e mecanismos envolvidos em LOVs. Definir LOVs e associá-las com itens tipo texto em um form. Criar editores e associá-los a itens tipo texto.

DBC Database Company

2

Produzindo Triggers

Conceito de Lista de Valores (LOV)
Uma LOV é um tipo de objeto utilizado para prover ao operador uma lista de valores dinâmica. São definidas a nível de form, ou seja podem ser utilizadas por mais de um item em qualquer bloco do módulo form. LOVs podem ser: • Dinâmicas - as entradas da lista de valores podem refletir os valores disponíveis, exatamente no momento em que se solicitou a lista. • Independentes - pode-se chamar uma mesma lista de vários itens, desde que a mesma lista esteja associada a esses itens. • Eficientes - pode-se definir LOVs que reutilizem valores já carregados anteriormente, evitando vários acessos ao Banco de dados. Esta opção somente deve ser utilizada quando os valores da lista são estáticos.

DBC Database Company

3

Produzindo Triggers

Utilizando uma LOV em momento de execução
Você pode identificar facilmente se um item tipo texto possui uma lista de valores associada a ele através do indicador “List of Value” na linha de status do form, quando o cursor está posicionado no mesmo. Para acionar a lista de valores: 1. Posicione o cursor no item que possui a lista de valores associada. 2. Pressione a tecla [List] ou selecione a opção Edit -> Display List do menu ou clique no botão que aciona a lista de valores, se houver algum definido para esta função. 3. Escolha um dos valores oferecidos pela lista. Você pode digitar caracteres para auto-reduzir a lista ou entrar com um argumento de pesquisa no campo Find. 4. Clique em OK ou dê um duplo clique na opção escolhida para recuperar o valor da lista.

DBC Database Company

4

Produzindo Triggers

Definindo uma Lista de Valores
Quando você cria uma LOV existem 3 tipos de objetos envolvidos: • Record Group - objeto utilizado para armazenar o array de valores representados pela lista. Pode ser criado antes ou fazer parte do processo de criação da LOV. • LOV - lista de valores propriamente dita. Apresenta os valores, a partir do Record Group, que poderão ser selecionados e passados para os itens do form. • Text Itens - item tipo texto do form associado a lista de valores (LOV), a partir do qual a lista de valores poderá ser chamada.

DBC Database Company

5

Produzindo Triggers

Criando uma Lista de Valores (LOV)
• Selecione a entrada LOVs no Object Navigator.

Clique no ícone Create

. A janela New List-Of-Values (LOV) deverá ser apresentada.

• • •

Para criar uma LOV definindo maualmente todas suas propriedades selecione a opção Build a new LOV manually. Selecione Use the LOV Wizard, para cirar uma LOV usando o assistente, escolha esta opção. A janela de associação de um Record Group será apresentada. Com a opção Existing Record Group, você seleciona um Record Group existente. Com a opção New-Record Group based on a query, você cria um novo Record Group, escolha esta opção. Defina uma query na seção SQL Query Statement, da janela de definição de Record Group. • Com o botão Build SQL Query invoque a ferramenta de criação de consultas, Query Builder.

DBC Database Company

6

Produzindo Triggers

• Com o botão Import SQL Query importe uma consulta de um arquivo externo.

DBC Database Company

7

Produzindo Triggers

Escolha as colunas do Record Group que farão parte da LOV.

Defina as propriedades visuais das colunas da LOV: • Title: Descrição da coluna; • Width: Largura da coluna. • Return Value: Quando selecionado um valor na LOV, este retornará no item especificado neste campo.

DBC Database Company

8

Produzindo Triggers

• Botão LooK up return item: Mostra uma LOV com todos os itens, para selecionar

um item de retorno.

Propriedades da janela da LOV
• • • Defina o título da LOV, no campo Title. Defina o tamanho da janela da LOV com os campos Width e Height. Para posicionar a janela da LOV próximo ao item que a invocar, selecione a opção Yes, let Forms position my LOV automatically, caso contrário defina as posições em coordenadas do canto superior esquerdo da janela da LOV, selecionando No, I want to position it manually.

DBC Database Company

9

Produzindo Triggers

Propriedades de Processamento da LOV
• • • Retrieve ? rows at a time: Número de registros para armazenamento de buffer. Refresh record group data before displaying LOV: Força a execução da query do Record Group, a cada chamada da query. Let the user filter records before displaying them: Força a execução de um filtro ao invocar a LOV, isto para melhorar a performance da consulta dos dados.

DBC Database Company

10

Produzindo Triggers

Selecionando os Itens que invocarão a LOV

Finalizando a criação da LOV

DBC Database Company

11

Produzindo Triggers

Propriedades da LOV
Depois de criar uma LOV é possível definir outras propriedades importantes. Propriedade
Name Title X Position Y Position Width Heigth Column Mapping Properties Automatic Select Automatic Display Automatic Refresh

Descrição
Define um nome apropriado para a LOV. Define um título. Coordenada do eixo X onde o canto superior esquerdo da janela da lista de valores deve ser apresentada. Coordenada do eixo Y onde o canto superior esquerdo da janela da lista de valores deve ser apresentada. Largura da janela da lista. Escolha um tamanho apropriado para conter os dados. Altura da janela da lista. Escolha um tamanho apropriado para conter os dados. Clicando no botão More é apresentada a janela Column Mapping (será visto a seguir). Determina se a LOV deve fechar e retornar valores automaticamente quando só existe uma entrada. Determina se a LOV deve ser chamada automaticamente quando o cursor entrar no item associado ao LOV. Yes: o Record Group re-executa a consulta toda vez que a LOV é chamada. No: o Record Group executa a consulta somente na primeira vez que a LOV é chamada. Obs.: mais eficiente quando os dados são estáticos. No retorno da LOV o cursor se posiciona automaticamente no próximo Item. Tenta posicionar a LOV próximo ao item. Determina se será apresentado um diálogo que permite entrar com um critério de pesquisa antes da LOV ser chamada. Este critério é utilizado como restrição adicional na primeira coluna da cláusula SELECT.

Automatic Skip Automatic Position Filter Before Display

DBC Database Company

12

Produzindo Triggers

Mapeando colunas da LOV para itens do bloco
Você pode montar sua lista de valores e especificar que o valor de uma ou mais colunas da LOV retornem em um item especificado no forms, setando as seguintes propriedades: Propriedade
Column Names Return Item

Descrição
Coluna a ser mapeada. Define o valor a ser retornado, podem ser: bloco.item (item do form). GLOBAL.nome_variável (variável global) PARAMETER.nome_parametro (parâmetro do form) <Em Branco> (nenhum valor é retornado). Largura da coluna na janela LOV. O valor 0 determina que a coluna fique invisível enquanto o valor fica disponível para ser retornado. Cabeçalho para a coluna na janela LOV.

Display Width Column Title

DBC Database Company

13

Produzindo Triggers

Associando uma LOV a um item tipo texto
Depois de criar uma LOV, deve-se associá-la a um item, especificando o nome da LOV nas propriedades do item. Passos para associar uma LOV a um Item: 1. 2. 3. 4. Selecione o item no Object Navigator. No Property Palette do item selecione a propriedade LOV ( no grupo List of Values (LOV) ). Escolha o LOV para este item a partir da lista apresentada. Para apresentar a LOV em coordenadas diferentes determine: • List X Position • List Y Position

DBC Database Company

14

Produzindo Triggers

Conceito de Editor
Um Editor é um tipo de objeto utilizado para prover ao operador um editor customizado para itens multi-line. Editores são definidos a nível de form, ou seja podem ser utilizados por mais de um item em qualquer bloco do módulo form. Todo Text Item já possue um editor default disponível, mas você pode definir o seu próprio Editor para atender uma determinada necessidade. Criando seu próprio Editor você pode: • Prover uma janela de edição maior. • Opcionalmente utilizar um editor externo do sistema operacional.

DBC Database Company

15

Produzindo Triggers

Utilizando um Editor em momento de execução
Para acionar o Editor: 1. Posicione o cursor no item que possui o editor associado. 2. Pressione a tecla [Edit] ou selecione a opção Edit -> Edit do menu ou clique no botão que aciona o editor, se houver algum definido para esta função. 3. Edite o texto na janela do Editor. 4. Clique em OK para salvar suas mudanças no item tipo texto.

DBC Database Company

16

Produzindo Triggers

Criando um Editor
Selecione a entrada Editors no Object Navigator e clique no ícone Create. A janela de diálogo para a criação de Editor será ser apresentada. Defina as propriedades do Editor criado no Property Palette do mesmo. Propriedade
Title Bottom Title Width Heigth X Position Y Position Wrap Style Vertical Scroll Bar

Descrição
Título do Editor. Rodapé do Editor. Largura do Editor. Altura do Editor. Coordenado do eixo X onde o canto superior esquerdo do Editor deve ser apresentado. Coordenado do eixo Y onde o canto superior esquerdo do Editor deve ser apresentado. Word, Character ou None. Determina se deve ser criado um Scroll bar vertical.

DBC Database Company

17

Produzindo Triggers

Associando um Editor a um item tipo texto
Depois de criar um Editor você deve associá-lo a um item especificando o nome do Editor nas propriedades do item. Passos para associar um Editor a um Item: 1. 2. 3. Selecione o item no Object Navigator. No Property Palette do item selecione a propriedade Editor (no grupo Editor). Escolha o Editor para este item a partir da Lista. • Null - o item utiliza o editor default do Oracle Forms. • SYSTEM_EDITOR - o item utiliza o editor do sistema operacional. • <nome_editor> - o item utiliza um editor criado pelo Oracle forms Builder. 4. Se você deseja apresentar o Editor em coordenadas diferentes determine: • 1. Editor X Position • 2. Editor Y Position

DBC Database Company

18

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Crie uma Lista de Valores (LOV) para mostrar os clientes e suas descrições. Utilize as colunas CODIGO e NOME da tabela CLIENTES, classifique a consulta por nome. Defina que a coluna CODIGO preencha o item CODIGO_DO_CLIENTE do bloco ITENS. Mude o título “Consulta de Clientes” para a lista de valores. Troque o nome da lista de valores para LOV_DE_CLIENTES e o Record Group para RG_DE_CLIENTES. 2. Crie uma Lista de Valores (LOV) para mostrar os vendedores e suas descrições. Utilize as colunas CODIGO, NOME e SOBRENOME da tabela VENDEDORES, classifique a consulta por nome e sobrenome. Defina que a coluna CODIGO preencha o item CODIGO_DO_VENDEDOR do bloco ITENS. Mude o título “Consulta de Vendedores” para a lista de valores. Troque o nome da lista de valores para LOV_DE_VENDEDORES e o Record Group para RG_DE_VENDEDORES. 3. Crie uma Lista de Valores (LOV) para mostrar os produtos e suas descrições. Utilize as colunas CODIGO e NOME da tabela PRODUTOS, classifique a consulta por nome. Defina que a coluna CODIGO preencha o item CODIGO_DO_PRODUTO do bloco ITENS. Mude o título “Consulta de Produtos” para a lista de valores. Troque o nome da lista de valores para LOV_DE_PRODUTOS e o Record Group para RG_DE_ PRODUTOS. 4. Associe a lista LOV_DE_CLIENTES ao item CODIGO_DO_CLIENTE do bloco ITENS. 5. Associe a lista LOV_DE_VENDEDORES ao item CODIGO_DO_VENDEDOR do bloco ITENS. 6. Associe a lista LOV_DE_PRODUTOS ao item CODIGO_DO_PRODUTO do bloco ITENS. 7. Execute o form e teste a lista de valores criada. 8. Abra o módulo CLIENTES. Crie uma Lista de Valores (LOV) para mostrar os vendedores e suas descrições. Utilize as colunas CODIGO, NOME e SOBRENOME da tabela VENDEDORES, classifique a consulta por nome e sobrenome. Defina que a coluna CODIGO preencha o item CODIGO_DO_VENDEDOR do bloco ITENS. Mude o título “Consulta de Vendedores” para a lista de valores. Troque o nome da lista de valores para LOV_DE_VENDEDORES e o Record Group para RG_DE_VENDEDORES. 9. Associe a lista LOV_DE_VENDEDORES ao item CODIGO_DO_VENDEDOR do bloco CLIENTES. 10. No form CLIENTES crie um editor e associe-o ao item OBSERVACAO do bloco CLIENTES. Coloque o título de “O.B.S.” para o editor e troque o nome do editor para EDITOR_OBSERVACAO. Inclua um Scroll Bar vertical.

DBC Database Company

19

Produzindo Triggers

11. Execute o form e teste a lista de valores e o editor criados. Encerre a sessão Oracle Forms Builder.

DBC Database Company

20

Oracle Forms Builder 6

9. Outros tipos de Itens

DBC Database Company

Produzindo Triggers

Objetivos
• • • Criar um item tipo Check-box. Criar um item tipo List Item. Criar um item tipo Radio Group.

DBC Database Company

2

Produzindo Triggers

Conceito de item tipo Check-box
Check-box é um tipo de item que possui dois estados “Checked” ou “Unchecked”. Para cada um dos estados existe um valor associado. Você deve especificar um valor para “Checked” e um valor para “Unchecked” e ainda como os outros valores devem ser processados.

DBC Database Company

3

Produzindo Triggers

Utilizando um Check-box em momento de execução
Como setar valores
Você pode setar valores para itens tipo check-box da seguinte maneira: • pelo input do usuário; • pela propriedade Initial Value; • por programação.

Como consultar valores
Você pode consultar valores em itens tipo check-box da seguinte maneira: • por valores marcados; • por valores desmarcados; • ignorando os valores do Check Box no modo Enter Query desabilitando o item através do Shift-Click.

DBC Database Company

4

Produzindo Triggers

Criando um item tipo Check-box
Um item Check-box pode ser criado da seguinte maneira: • convertendo um item já existente; • utilizando o ícone check-box no Layout Editor; • usando o ícone Create no Object Navigator.

Passos para converter um item para Check-box
1. 2. 3. 4. 5. 6. Acesse o Property Pallete para o ítem que você deseja converter. Altere o tipo do item para Check-box. Entre com um valor default para o item. Entre com um label para o Check-box. Entre com os valores para os estados “Checked” e “Unchecked” Defina a propriedade Check Box Mapping of Other Values.

DBC Database Company

5

Produzindo Triggers

Passos para criar um item tipo Check-box no Layout Editor
1. Acesse o Layout Editor. 2. Clique no ícone Check Box na tool bar do Layout Editor. 3. Clique no canvas na posição que você deseja que o Check Box seja mostrado. 4. Dê um duplo clique no item tipo Check Box que você criou para acessar o Property Pallete. 5. Entre com um valor default para o item. 6. Entre com um label para o Check Box. 7. Entre com os valores para os estados “Checked” e “Unchecked” 8. Defina a propriedade Check Box Mapping of Other Values.

DBC Database Company

6

Produzindo Triggers

Propriedades específicas de um item tipo CheckBox
Propriedade
Item Type Label / Prompt Access Key Mouse Navigate Value when Checked Value when Unchecked Check Box Mapping of Other Values

Descrição
Determina o tipo de dado do item. Define o label e o Prompt adjacente ao item Check Box. Determina que combinação de teclas pode ser usada para navegar e manipular o item. Determina se o Oracle Forms navega para o item quando o usuário clica no item com o mouse. O default é Yes. Especifica o valor que está associado ao estado “Checked” do item. O valor deve ser compatível com o Data Type especificado. Especifica o valor que está associado ao estado “Unchecked” do Item. O valor deve ser compatível com o Data Type especificado. Determina como outros valores são processados em uma consulta, quando os registros forem diferentes dos valores associados à “Checked” e “Unchecked”: Not Allowed - são ignorados. Checked - são associados a “Checked” e se forem salvos serão convertidos para este valor. Unchecked - são associados a “Unchecked” e se forem salvos serão convertidos para este valor. Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

Popup Menu

DBC Database Company

7

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

8

Produzindo Triggers

Tratando valores nulos em itens tipo Check Box
Se a coluna em que o item está baseado permite nulos, você pode tratá-los: • Setando a propriedade Check Box Mapping of Other Values; • Setando o estado “Checked” ou “Unchecked”. Para representar nulo (NULL), basta permitir que o valor não seja preenchido; • Ignorando o Check Box no modo Enter Query (Utilize Shift-Clique).

DBC Database Company

9

Produzindo Triggers

Conceito de item tipo List
List é um tipo de item que apresenta um conjunto de valores pré-definidos para escolha. Você utiliza um item tipo List, em momento de execução, para selecionar somente um valor. A lista de elementos a escolher é mutuamente exclusiva. Um e somente um elemento pode ser selecionado por vez.

Estilos de itens tipo List
Estilo
Pop List

Descrição
Item com um botão icônico conjugado do lado direito. Clique no Pop List para ver a lista de elementos pré-definidos. Não é permitida a digitação de valores. Item com um scroll bar conjugado ao lado direito. Utilize o scroll bar para ver a lista de elementos. Item com um botão icônico ao seu lado direito, mas não conjugado. Clique no botão para ver a lista de elementos. Permite a digitação de valores.

T-List Combo Box

DBC Database Company

10

Produzindo Triggers

Setando valores para um List Item em momento de execução
Você pode setar o valor de um List Item da seguinte maneira: • Pelo input do usuário, selecionando o elemento da lista; • Por digitação (somente para Item List do estilo Combo box); • Por programação; • Definindo um valor default para o item.

DBC Database Company

11

Produzindo Triggers

Criando um item tipo List
Um item tipo List pode ser criado: • Convertendo um item já existente; • Utilizando o Layout Editor; • Usando o Object Navigator.

Passos para converter um item para List Item
1. Acesse o Property Pallete para o item que você deseja converter. 2. Altere o tipo de item para List Item. 3. Selecione a propriedade Elements in List. Clique em More... , o diálogo List Elements irá aparecer. 4. Entre com o primeiro elemento que você deseja que apareça na lista. 5. Entre com valor para o elemento corrente selecionado na lista de elementos na propriedade List Item Value. 6. Entre com outros elementos da lista e valores repetindo os passos 4 e 5 7. Entre com um valor default para o Item. 8. Defina a propriedade Mapping of Other Values.

DBC Database Company

12

Produzindo Triggers

Passos para criar um item tipo List Item no Layout Editor
1. Acesse o Layout Editor. 2. Clique no ícone List Item na tool bar do Layout Editor. 3. Clique no canvas na posição que você deseja que o List Item seja mostrado. 4. Dê um duplo clique no item tipo List que você criou, para acessar o Property Pallete. 5. Selecione a propriedade Elements in List. Clique em More... , o diálogo List Elements irá aparecer. 6. Entre com o primeiro elemento que você deseja que apareça na lista. 7. Na propriedade List Item Value, entre com o valor para o elemento corrente. 8. Entre com os outros elementos e valores repetindo os passos 6 e 7. 9. Entre com um valor default para o item. 10. Defina a propriedade Mapping of Other Values.

DBC Database Company

13

Produzindo Triggers

Propriedades específicas de um item tipo List
Propriedade
Item Type Access Key List Style Mapping of Other Values

Descrição
Determina o tipo de dado do item. Determina que combinação de teclas pode ser usada para navegar e manipular o item. Determina o estilo de interface da lista. Escolha entre Pop-List, T-List ou Combo-Box. Determina como os outros valores são processados. Escolha entre: Deixar o valor em branco - ignora outros valores além dos definidos na lista. No processamento de consultas, os registros com valores diferentes dos associados `a lista são ignorados. Associar com o um dos elementos da lista ou definir um valor - no processamento de consultas, os registros com valores diferentes dos associados à lista são associados ao elemento da lista especificado. Se forem salvos os valores serão convertidos para o valor associado. Clique no botão More... para abrir o diálogo List Elements. List Elements - especifica o label do elemento da lista. List Item Value - especifica o valor associado ao elemento corrente da lista de elementos. Determina se o Oracle Forms navega para o item quando o usuário clica no item com o mouse. O default é Yes. Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

Elements in List

Mouse Navigate Popup Menu

DBC Database Company

14

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

15

Produzindo Triggers

Tratando valores nulos em itens tipo List
• • Se a coluna em que o item está baseado permite nulos você pode tratá-los criando explicitamente um elemento da lista associado ao valor nulo (NULL). Se este não for criado, o Oracle Forms criará implicitamente um elemento para representar os nulos. ⇒ Pop List - mostra um elemento vazio. ⇒ T-list - mostra a lista sem nenhum elemento selecionado. ⇒ Combo-Box - mostra um elemento vazio.

DBC Database Company

16

Produzindo Triggers

Conceito de itens Radio Groups
Radio Groups são um conjunto de radio buttons. Cada radio button representa um valor diferente. Os radio buttons pertencentes a um Radio Group são mutuamente exclusivos.

Usos e benefícios de um Radio Group
• • • Mostrar mais do que dois valores estáticos. Prover uma alternativa aos itens tipo List com 2 ou 3 escolhas. Prover uma alternativa aos itens prazo tipo Check Boxes diferentes de SIM/NÃO, ON/OFF, YES/NO, etc.

Para mais do que 3 ou 4 escolhas, não use Radio Groups; Para estes casos utilize item tipo List.

Setando valores para um Radio Group em momento de execução
Você pode setar o valor de um Radio Group da seguinte maneira: • Pelo input do usuário, selecionando o elemento da lista; • Por programação; • Definindo um valor default para o item.

Consultando valores em um item Radio Group:
• Ignore o valor de um Radio Group em modo Enter Query garantindo que nada foi selecionado, com Shift-Click.

DBC Database Company

17

Produzindo Triggers

Criando um item Radio Group
Você pode criar um item Radio Group da seguinte maneira: • Convertendo um Item já existente. • Utilizando o ícone Radio Button no Layout Editor. • Usando o ícone Create no Object Navigator.

Passos para converter um item para Radio Group
1. Acesse o Property Pallete para o item que você deseja converter. 2. Altere o tipo de item para Radio Group. 3. Defina a propriedade Mapping of Other Values. 4. Especifique o valor default e as demais propriedades do Radio Group 5. Expanda a entrada do Radio Group criado no Object Navigator. A entrada dos Radio Buttons deve aparecer. 6. Selecione a entrada Radio Buttons, clique no ícone Create. E Radio Button será criado no Object navigator. 7. Acesse o Property Palette correspondente ao Radio Button criado, entre com o label e o valor para o Radio Button. 8. Especifique as demais propriedades do Radio Button. 9. Crie outros Radio Buttons repetindo os passos 5,6 e 7

DBC Database Company

18

Produzindo Triggers

Passos para criar um Radio Button pelo Layout editor
1. Acesse o Layout Editor. 2. Clique no ícone Radio Button na tool bar do Layout Editor. 3. Clique no canvas na posição que você deseja que o Radio Button seja mostrado. 4. Se o seu form já possuir um Radio Group definido no bloco corrente, o diálogo Radio Group irá aparecer para você decidir se o novo radio button deve fazer parte do existente ou se deve ser criado um novo Radio Group. 5. Dê duplo clique no Radio Button que você criou para acessar o Property Pallete. 6. Entre com o label e o valor para o Radio Button. 7. Especifique as demais propriedades do Radio Button. 8. Crie outros Radio Buttons repetindo os passos 2,3,4,5,6 e 7

DBC Database Company

19

Produzindo Triggers

Propriedades específicas de um item tipo Radio Group
Miscellaneous Properties
Data Type Access Key Mapping of Other Values

Descrição
Determina o tipo de dado do item. Determina que combinação de teclas pode ser usada para navegar e manipular este item. Determina como outros valores são processados. Escolha entre: Deixar o valor em branco - ignora outros valores além dos definidos na lista. No processamento de consultas, os registros com valores diferentes dos associados aos Radio Buttons são ignorados. Associar o valor com o nome de um Radio Button ou definir um valor - no processamento de consultas, os registros com valores diferentes dos da lista são associados ao Radio Button especificado. Se forem salvos serão convertidos para o valor associado ao elemento da lista. Determina se o Oracle Forms navega para o item quando o usuário clica no item com o mouse. O default é “TRUE”. Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

Mouse Navigate Popup Menu

DBC Database Company

20

Produzindo Triggers

Tratando valores nulos em um Radio Group
Se a coluna em que o item está baseado permite valore nulos você pode tratá-los: • Criando explicitamente um elemento da lista associado ao valor nulo (null); • Deixando a propriedade Ignore Mapping of Other Values não preenchida; • Associando Mapping of Other values com um dos Radio Buttons pelo seu nome ou pelo valor especificado.

DBC Database Company

21

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo CLIENTES. Converta o Item CATEGORIA_DE_CREDITO para um Item do tipo List com estilo Pop List. Adicione os elementos “Ruim”, “Bom” e “Excelente” para representar os valores do Banco de dados ( “RUIM”, “BOM”, e “EXCELENTE” ). Mostre quaisquer outros valores como “Ruim”. Garanta que os novos registros mostrem “BOM” como valor default. Troque o List Item para o estilo Combo Box para ver a diferença. Acerte o tamanho no Layout Editor. 2. Execute e teste o form. 3. Abra o módulo PEDIDOS. Converta o Item PEDIDO_PREENCHIDO para um Item do tipo Check Box. Defina o estado “Checked” para representar o valor “S” e “Unchecked” para representar o valor “N”. Garanta que os regisitros novos tenham “N” como valor default. Permita que somente registros com valores “S” ou “N” sejam mostrados no Layout Editor. Acerte o tamanho do item de modo que o label “Pedido Preenchido” apareça à direita do item. 4. Converta o Item TIPO_DE_PAGAMENTO para um Radio Group. Adicione Radio Buttons para “Avista” e “A prazo” representando os valores “AVISTA” e “PRAZO”.Defina teclas de acesso como: • “V” para “Avista”; • “P” para “A prazo”. 5. Garanta que os novos registros mostrem “A vista” como valor default. 6. Execute e teste o form. Encerre a sessão Oracle Forms Builder.

DBC Database Company

22

Oracle Forms Builder 6

10. Itens tipo Não Input

DBC Database Company

Produzindo Triggers

Objetivos
• • • • Criar itens tipo Display. Criar itens tipo Image. Criar itens tipo Sound. Criar itens tipo Button (Botões).

DBC Database Company

2

Produzindo Triggers

Conceito de itens Não Input
Itens visuais ou não input são itens que o usuário não entra diretamente com valores.

Itens Não Input que mostram dados
• • • Itens tipo Display. Itens tipo Image. Itens tipo Sound.

Itens Não Input que não mostram dados
• Itens tipo Button.

DBC Database Company

3

Produzindo Triggers

Conceito de Itens tipo Display
Display é um tipo de item similar ao item tipo Text com exceção de que não pode ser editado ou navegado em momento de execução. Um item Display é utilizado somente para leitura (consulta). Seu valor deve ser atribuído por programação.

Usos de itens tipo Display
• • • Mostrar informações adicionais baseadas em dados não existentes na tabela base do bloco. Mostrar valores derivados. Conservar valores em memória.

DBC Database Company

4

Produzindo Triggers

Criando um item tipo Display
Um item Display pode ser criado: • Convertendo um item já existente; • Utilizando o Layout Editor; • Usando o Object Navigator;

Passos para converter um item para Display
1. converter. 2. 3. 4. Acesse o Property Pallete para o item que você deseja Altere o tipo de item para Display. Defina as propriedades conforme sua necessidade. Clique em OK.

Passos para criar um item tipo Display no Layout Editor
1. Acesse o Layout Editor. 2. Clique no ícone Display Item na Tool Bar do Layout Editor. 3. Clique no canvas na posição que você deseja que o item Display seja mostrado. 4. Dê um duplo clique no item tipo Display que você criou para acessar o Property Pallete. 5. Defina a propriedades conforme sua necessidade. 6. Clique em OK.

DBC Database Company

5

Produzindo Triggers

Propriedades específicas de um item tipo Display
O conjunto de propriedades de um Display item é o mesmo subconjunto das propriedades de um Text item.

DBC Database Company

6

Produzindo Triggers

Conceito de Itens tipo Image
Image é um tipo de item que permite mostrar e armazenar imagens. Um item tipo Image pode ser baseado em uma coluna da tabela base ou não.

Utilizando itens tipo Image
Você pode preencher um item tipo Image de duas formas: • Através de colunas LONG RAW ou LOB da tabela base do bloco; • Programando através de Triggers e built-ins.

DBC Database Company

7

Produzindo Triggers

Armazenando imagens
Você pode armazenar e utilizar uma imagem de duas formas: Local
Database File

Descrição
A imagem é armazenada em uma coluna LONG RAW ou LOBs podendo ter até 2 ou 4 GigaBytes. A imagem é lida pelo processo de FETCH default do bloco. A Imagem é armazenada em um arquivo qualquer, dentro dos formatos de imagem suportados. A imagem é lida através de programacão utilizando Triggers e Built-ins.

Formatos de imagens suportados:
Formato
BMP CALS GIF JFIF TIFF PCX PICT RAS PCD

Descrição
Windows e OS/2 Bit Map Picture CALS type Raster Compuserve JPEG File Interchange Format Tag Image File Format IBM PC Paintbrush Macintosh Quickdraw Picture Sun Raster Kodak Photo CD

Boilerplate
Y Y Y Y Y Y Y Y Y

Image item
Read / Write Read / Write Read / Write Read / Write Read / Write Read Read / Write Read / Write Read

DBC Database Company

8

Produzindo Triggers

Criando um item tipo Image
Um item Image pode ser criado da seguinte maneira: • Convertendo um item já existente; • Utilizando o Layout Editor; • Usando o Object Navigator.

Passos para converter um item para Image
• • • Acesse o Property Pallete para o item que você deseja converter. Altere o tipo de item para Image Defina as propriedades do item.

Passos para criar um item tipo Image no Layout Editor
1. Acesse o Layout Editor. 2. Clique no ícone Image Item na Tool Bar do Layout Editor. 3. Clique no canvas na posição que você deseja que a imagem seja mostrada. 4. Dê um duplo clique no item tipo Image que você criou para acessar o Property Pallete. 5. Defina as propriedades do item.

DBC Database Company

9

Produzindo Triggers

Propriedades específicas de um item tipo Image
Propriedade
Image Format Image Depth Compression Quality Display Quality Show Palette Sizing Style

Descrição
Especifica o formato da imagem. Especifica a formação de cores da imagem. Especifica se a imagem deve ser armazenada no formato comprimido, se for armazenado no Banco. Determina a resolução utilizada para mostrar a imagem. Permite o controle entre qualidade e performance. Escolha entre: High, Medium e Low. Determina se deve aperecer ou não, em momento de execução, a paleta de manipulação de imagem. Determina como a imagem deve ser mostrada quando o tamanho da imagem é diferente do tamanho do item. Escolha entre: Crop - corta a imagem de modo a aparecer no retângulo. Adjust - realiza escala da imagem para preencher o retângulo. Habilita um Scroll Bar horizontal na imagem. Habilita um Scroll Bar vertical na imagem. Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

Show Horizontal Scroll Bar Show Vertical Scroll Bar Popup Menu

DBC Database Company

10

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

11

Produzindo Triggers

Conceito de Itens tipo Sound
Sound é um tipo de item que permite rodar e armazenar sons. Um item tipo Sound pode ser baseado em uma coluna da tabela base ou não.

Utilizando itens tipo Sound
Você pode usar um item tipo Sound de duas formas: • através de uma coluna LONG RAW da tabela base do bloco; • programando através de Triggers e built-ins.

DBC Database Company

12

Produzindo Triggers

Armazenando sons
Você pode armazenar e utilizar um som de duas formas: Local
Database File

Descrição
O som é armazenado em uma coluna LONG RAW podendo ter até 2 GigaBytes. O som é lido pelo processo de FETCH default do bloco. O som é armazenado em um arquivo qualquer, dentro dos formatos de sons suportados. O som é lido através de programacão utilizando Triggers e Builtins.

Formatos de sons suportados:
• • • • AU; AIFF; AIFF-C; WAV.

DBC Database Company

13

Produzindo Triggers

Criando um item tipo Sound
Um item Sound pode ser criado: • Convertendo um item já existente; • Utilizando o Layout Editor; • Usando o Object Navigator.

Passos para converter um item para Sound
1. 2. 3. Acesse o Property Pallete para o item que você deseja converter; Altere o tipo de item para Sound; Defina as propriedades do item.

Passos para criar um item tipo Sound no Layout Editor
1. Acesse o Layout Editor. 2. Clique no ícone Sound Item na Tool Bar do Layout Editor. 3. Clique no canvas na posição que você deseja que o som seja mostrado. 4. Dê um duplo clique no item tipo Sound que você criou para acessar o Property Pallete. 5. Defina as propriedades do item.

DBC Database Company

14

Produzindo Triggers

Propriedades específicas de um item tipo Image
Propriedade
Sound Format Audio Channels Compress Sound Quality

Descrição
Especifica o formato do som. Especifica o número de canais do som. Automatic / Mono / Stereo. Especifica se o som deve ser armazenada no formato comprimido, se for armazenado no banco. Determina a qualidade utilizada para rodar o som. Permite o controle entre qualidade e performance. Escolha entre: Automatic, Highest, High, Medium, Low e Lowest. Determina se as opções de manipulação de sons, devem aperecer ou não, em momento de execução.

Show : Play button; Record button; Rewind button; Fast Forward button; Volume Control; Time Indicator; Slider Button Popup Menu

Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item.

DBC Database Company

15

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

16

Produzindo Triggers

Conceito de Itens tipo Button
Button é um objeto de interface que você pressiona para iniciar uma ação. Um botão é geralmente apresentado como um retângulo com um label ou um ícone.

Ações típicas com botões
• • • • • • • • Navegar. Mostrar uma lista de valores. Chamar um Editor. Abrir outra janela. Salvar dados (Commit). Executar uma consulta. Iniciar cálculos. Encerrar a sessão.

DBC Database Company

17

Produzindo Triggers

Criando um Button
Um botão pode ser criado da seguinte maneira: • Utilizando o Layout Editor. • Utilizando o Object Navigator.

Passos para criar um Button no Layout Editor
1. 2. 3. 4. 5. Acesse o Layout Editor. Clique no ícone Button na Tool Bar do Layout Editor. Clique no canvas na posição que você deseja que o Button seja mostrado. Dê um duplo clique no Button que você criou para acessar o Property Pallete. Defina as propriedades do botão.

DBC Database Company

18

Produzindo Triggers

Propriedades específicas de um Button
Propriedade
Label Mouse Navigate Default Button

Descrição
Especifica o texto que deve aparecer no label do botão. Determina se o Oracle Forms navega para o item quando o usuário clica no item com o mouse. O default é Yes. Determina se este é o botão default para o bloco. Isto significa que pressionando a tecla especificada para botão default, o botão é acionado sem a necessidade de navegar com o uso do mouse. Determina se o botão será mostrado como um ícone ou um label. Para botões icônicos, especifica o nome do arquivo que contém o ícone. (Não entre com a extensão do arquivo aqui). Associa um Menu do tipo Popup, criado na entrada Popup Menus, ao item. No momento de execução do forms, este deve ser chamado com um clique no botão da direita do mouse, em cima do item. Descrição do label do item.

Iconic Icon Filename Popup Menu

Prompt

DBC Database Company

19

Produzindo Triggers

Incluindo mensagens de ajuda
Miscellaneous Properties
Hint Display Hint Automatically Tooltip Tooltip Visual Attribute Group

Descrição
Especifica a mensagem que deve aparecer na linha de mensagem como ajuda sobre o item corrente. Determina o critério para hint. Yes: Mostra a mensagem de hint automaticamente ao tornar o item corrente. Especifica a mensagem de help, do estilo Windows, quando o cursor do mouse estiver em cima do item. Determina o atributo visual para o Tooltip.

DBC Database Company

20

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Crie um item tipo Display Item chamado “DESCRICAO”, coloque-o a direita do item CODIGO_DO_PRODUTO no bloco ITENS. Este item deverá mostrar a descrição do produto quando adicionarmos triggers nos próximos capítulos. Garanta que a propriedade Database Item seja setada para “No”. 2. Salve e execute o form e teste. 3. No módulo PEDIDOS, crie um item tipo IMAGEM chamado IMAGEM_DO_PRODUTO no bloco ITENS. Garanta que as seguintes propriedades sejam setadas: • Database Item: No; • Number of Items Displayed: 1; • Bevel: Lowered; • Keyboard Navigable: No; • Sysing Style: “Adjust”.

DBC Database Company

21

Produzindo Triggers

4. Coloque-o na posição sugerida no exemplo a seguir. Este deverá mostrar a imagem do produto corrente quando adicionarmos triggers nos próximos

capítulos. 5. Salve, execute o form e teste as alterações.

DBC Database Company

22

Produzindo Triggers

6. No módulo PEDIDOS. Crie um bloco de controle (não Base Table), chamado CONTROL. Crie um botão chamado BOTAO_LOV_DE_PRODUTOS no bloco CONTROL, coloque-o, na tela, a esquerda do item CODIGO_DO_PRODUTO, utilize a ícone “Listval” para o botão. Defina as seguintes propriedades: • Keyboard Navigable: No; • Mouse Navigate: No. 7. Este botão deverá ser utilizado para chamar a lista de valores para o código do produto quando adicionarmos triggers nos próximos capítulos. 8. Abra o módulo CLIENTES. Crie um botão chamado BOTAO_LOV_DE_VENDEDORES no bloco CONTROL, coloque-o, na tela, ao lado do item CODIGO_DO_VENDEDOR, utilize a icone “Listval” para o botão. Defina as seguintes propriedades: • Keyboard Navigable: No; • Mouse Navigate: No. 9. Este botão deverá ser utilizado para chamar a lista de valores para o código de vendedor quando adicionarmos triggers nos próximos capítulos.Coloque-o na posição sugerida no exemplo a seguir.

10. Salve, execute o forms e teste-o. Encerre a sessão Oracle Forms Builder.

DBC Database Company

23

Oracle Forms Builder 6

11. Windows e Canvas

DBC Database Company

Produzindo Triggers

Objetivo
• Entender o conceito de windows e content canvas. • Entender o relacionamento entre a window e o canvas. • Identificar as propriedades de windows e canvas. • Mostrar um módulo forms em múltiplas janelas (window). • Mostrar um módulo forms em múltiplos layouts. • Construir uma Toolbar.

DBC Database Company

2

Produzindo Triggers

Conceito de window, canvas e viewport
Window
É similar a uma moldura de um quadro. O gerenciador de janelas do sistema operacional provê os controles para janelas possibilitando funcionalidades como scroll, movimentação e redimensionamento. Quando você cria um novo módulo, o Oracle Forms cria automaticamente uma nova janela (window) chamada “WINDOW1”. Você pode criar outras janelas na sua aplicação, pois um módulo forms pode conter mais de uma window.

Canvas
Similar a uma tela em branco sobre a qual um desenho será pintado. É a área sobre a qual são colocados itens, frames, boilerplates textos e boilerplates images.

Viewport
É a área do canvas que é visível em momento de execução. O método utilizado para determinar o tamanho da view depende do tipo de canvas. Um canvas sempre é mostrado na janela a qual ele está associado.

DBC Database Company

3

Produzindo Triggers

Usos e benefícios de uma nova Janela (window)
• • • Mostrar dois ou mais content canvas ao mesmo tempo. Mudar de tela sem sair da tela inicial Gerenciar janelas (windows), como por exemplo minimizar uma tela, a qual estará em uma window

Tipos de window
Você pode criar dois tipos de window: Tipo
Modal Window

Descrição
É uma janela restrita que o operador deve responder antes de mover o foco para outra janela. Deve ser encerrada explicitamente antes de passar o controle para outra janela. Torna-se ativa assim que mostrada. Requer um meio de saída explícito. Não podem ser apresentadas mais de uma janela tipo modal ao mesmo tempo. É uma janela irrestrita que o operador pode mover o foco para outra janela, deixando-a inativa e depois retornar quando achar conveniente. Não necessariamente deve estar ativa quando mostrada. Podem ser apresentadas mais de uma janela tipo modeless ao mesmo tempo. É o tipo de janela default.

Modeless Window

DBC Database Company

4

Produzindo Triggers

Exemplo de window
O forms a seguir possui duas windows: • “Pedidos e Itens”; • “Estoque”.

DBC Database Company

5

Produzindo Triggers

Criando uma window
Para criar uma nova window é simples, basta: • Selecionar a entrada Windows no Object Navigator

• E clicar no ícone Create

, na toolbar.

DBC Database Company

6

Produzindo Triggers

Propriedades de uma window
Physical Property
Propriedade
X Position Y Position Width Heigth Bevel Show Horizontal Scroll Bar Show Vertical Scroll Bar

Descrição
Determina a coordenada do eixo x para a janela. Determina a coordenada do eixo y para a janela. Determina a largura da janela. Determina a altura da janela. Determina o tipo de borda da janela. Determina se a janela deve possuir um Scroll Bar horizontal. Determina se a janela deve possuir um Scroll Bar vertical.

GUI Hint Property
Propriedade
Close Allowed Move Allowed Resize Allowed Minimize Allowed Minimize Title Inherit Menu

Descrição
Habilita o botão close da janela, mas, para executá-lo é necessário programar-se através de trigger. Determina se o usuário pode mover a janela em momento de execução. Possibilita o usuário redimensionar a janela em momento de execução. Determina se o usuário pode minimizar a janela. Especifica o título da janela quando minimizada. Determina se a janela deve mostrar o menu corrente do form.

DBC Database Company

7

Produzindo Triggers

Functional Property
Propriedade
Title Primary Canvas Vertical Toolbar Canvas Horizontal Toolbar Canvas Window Style

Descrição
Especifica o título da janela que deve aparecer na barra da janela. Especifica o nome do canvas a ser mostrado na janela quando esta é chamada por programa. Determina se uma toolbar vertical deve ser mostrada nesta janela. Determina se uma toolbar horizontal deve ser mostrada nesta janela. Determina o estilo da janela. Escolha entre Document - a janela deve estar sempre dentro da MDI parent Window. Dialog - a janela pode ser movimentada ou ser redimensionada para fora da MDI parent Window. (Document é o default). Determina se a janela é do tipo Modal, caso contrário esta será do tipo Modeless. Determina que ao navegar para uma outra window, se esta for do tipo Modeless, o forms deve esconde-la. Especifica o nome do ícone utilizado para a janela minimizada.

Modal Hide on Exit Icon Filename

DBC Database Company

8

Produzindo Triggers

Tipos de canvas
Existem 5 (cinco) tipos de canvas, são eles: • Content • Stacked • Vertical Tollbar • Horizontal Tollbar • Tab

DBC Database Company

9

Produzindo Triggers

Conceito de content canvas
Um Content Canvas é um canvas que é base para uma janela, ocupando todo o seu conteúdo. Geralmente é criado pelo menos um Content Canvas para cada janela em sua aplicação. Somente um Content Canvas pode ser mostrado em uma janela por vez, em momento de execução.

DBC Database Company

10

Produzindo Triggers

Exemplo de content canvas

DBC Database Company

11

Produzindo Triggers

Criando um Content Canvas
Implicitamente
Existem 2 formas de criar um Content Canvas implicitamente • Layout wizard: Quando você usa o Layout wizard para arranjar os itens no canvas, o wizard abilita você para selecionar um novo canvas na página de canvas. Neste caso, o wizard cria um novo canvas com um nome defaul de CANVASn Layout editor: Quando você está num canvas em um módulo forms e você invocar o Layout editor, o Forms Builder criará um canvas defaul o qual você poderá por itens.

Explicitamente
É muito simples criar um canvas tipo content explicitamente, basta: • Selecionar a entrada Canvases no Object Navigator.

• E clicar no ícone Create

, na toolbar.

Alterando o tamanho de um content canvas
Você pode alterar o tamanho de um Content Canvas modificando o tamanho da janela que ele aparece. Quando o operador redimensiona a janela, o tamanho da view do canvas é alterada dinamicamente. A Viewport pode ser menor que o canvas sem eliminar os itens fora da view. O Oracle Forms permite rolar ( Scroll ) o canvas de forma que o item se torne visível.

DBC Database Company

12

Produzindo Triggers

Propriedades de um content canvas
General Property
Propriedade Canvas Type Descrição Especifica o tipo do canvas ( para um content canvas, esta propriedade deve ser setada para Content.

Physical Property
Propriedade Window Viewport X Position on Canvas Viewport Y Position on Canvas Width Heigth Bevel Descrição Determina em qual janela o canvas será mostrado. Especifica a coordenada do eixo X do topo esquerdo da view no canvas. Especifica a coordenada do eixo Y do topo esquerdo da view no canvas. Determina a largura do canvas. Determina a altura do canvas. Determina o tipo de borda do canvas.

DBC Database Company

13

Produzindo Triggers

Functional Property
Propriedade Raise on Entry Descrição Determina se o canvas é colocado à frente ao se navegar para um item dele quando outro canvas é mostrado na mesma janela.

DBC Database Company

14

Produzindo Triggers

Conceito de Stacked canvas
Um Stacked Canvas é um canvas que não é base para uma janela, compartilhando a janela com um content canvas e qualquer número de outros stacked canvas. Geralmente o stacked canvas é menor que a janela em que ele aparece. Vários Stacked Canvas podem ser mostrados em uma janela ao mesmo tempo em momento de execução.

Usos e benefícios de um Stacked Canvas
• • • • • Criar um efeito de sobreposição dentro de uma mesma janela. Criar um efeito de cascata dentro de uma mesma janela. Mostrar informações adicionais. Mostrar um Help sensível ao contexto. Esconder informações.

DBC Database Company

15

Produzindo Triggers

Criando um Stacked Canvas
Você pode criar um Stacked Canvas pelo Object Navigator ou pelo Layout Editor.

Criando um Stacked Canvas pelo Object Navigator
• • Repita os passos para criação de um Content Canvas. Altere a propriedade Canvas Type para Stacked.

Criando um Stacked canvas pelo Layout Editor
• Abra a tela de um Content Canvas, pelo Layout Editor.

Clique no ícone Stacked Canvas Content.

, na toolbar, posicione e dimencione-o dentro do canvas

DBC Database Company

16

Produzindo Triggers

Propriedades de um Stacked canvas
Propriedade
Width Heigth Viewport X Position Viewport Y Position Viewport Width Viewport Heigth Viewport X Position on Canvas Viewport Y Position on Canvas Show Vertical Scroll Bar Show Horizontal Scroll Bar

Descrição
Determina a largura do Stacked Canvas. Determina a altura do Stacked Canvas. Especifica a coordenada do eixo X do Stacked Canvas. Especifica a coordenada do eixo Y do Stacked Canvas. Determina a largura da View do Stacked Canvas. Determina a altura da View do Stacked Canvas. Especifica a coordenada do eixo X da View em relação ao Canvas. Especifica a coordenada do X da View em relação ao Canvas. Determina se o Stacked Canvas mostra um Scroll Bar vertical. Determina se o Stacked Canvas mostra um Scroll Bar horizontal.

DBC Database Company

17

Produzindo Triggers

Conceito de Canvas Toolbar
Um Toolbar é um tipo especial de Canvas que é utilizado para criar e possuir botões e outros objetos GUI utilizados freqüentemente como uma barra de ferramentas.

Tipos de Toolbar
Tipo
Vertical Toolbar HorizontalToolbar MDI Toolbar

Descrição
O Toolbar é criado e posicionado verticalmente do lado esquerdo ou direito da janela (window). O Toolbar é criado e posicionado horizontalmente no topo ou na parte inferior da janela (window). Utilizado quando se deseja evitar a criação de mais de um Toolbar para uma aplicação Oracle Forms que utiliza várias janelas.

DBC Database Company

18

Produzindo Triggers

Usos e benefícios de um Toolbar
• • • • • Prover uma barra de ferramentas padrão para vários canvas mostrados na mesma janela (window). Diminuir o tempo de manutenção. Incrementar a facilidade de uso da aplicação. Criar aplicações similares no mesmo ambiente. Prover uma alternativa ao menu ou `as teclas de funções para comandar a aplicação.

DBC Database Company

19

Produzindo Triggers

Criando um canvas Toolbar
Para criar um canvas tipo Tollbar, basta: 1. 2. Repita os passos para criação de um Canvas Content Altere a propriedade Canvas Type para Horizontal ou Vertical Toolbar.

3.

Adicione os botões, e objetos desejados ao toolbar (pelo layout editor).

DBC Database Company

20

Produzindo Triggers

Propriedades de um canvas Tollbar
Propriedade
Canvas Type Window Width Heigth

Function
Especifica o tipo do canvas ( para um canvas Horizontal Tollbar, esta propriedade deve ser setada para Horizontal Tollbar. Determina em qual janela o canvas será mostrado. Determina a largura do canvas. Determina a altura do canvas.

Associando o Canvas Toolbar a uma determinada Window
Na propriedade da window que você deseja mostrar o toolbar, defina: • Se for Horizontal: a propriedade Horizontal Toolbar; • Se for Vertical: a propriedade Vertical Toolbar.

Associando o Canvas Toolbar a todas as Windows do módulo
Na propriedade do módulo que você deseja mostrar o toolbar,defina: • Se for Horizontal: a propriedade Form Horizontal Toolbar; • Se for Vertical: a propriedade Form Vertical Toolbar.

DBC Database Company

21

Produzindo Triggers

Conceito de Canvas Tab
Um Tab canvas é também um tipo especial de canvas que é utilizado para melhor organizar e mostrar informações separadas por páginas. Como os Stacked canvas o canvas tipo Tab é mostrado em cima de um canvas do tipo content.

Usos e benefícios de um Canvas Tab
• • • • Criar paginas de tela dentro de uma única tela. Mostrar um grande número de informações na mesma tela. Esconder informações. Facilitar o acesso a requisição de informações com um simples clique em uma Tab Page (página).

DBC Database Company

22

Produzindo Triggers

Criando um Canvas Tab
Você pode criar um Canvas Tab pelo Object Navigator ou pelo Layout Editor.

Criando um Canvas Tab pelo Object Navigator
• • Repita os passos de criação de um Canvas Content. Altere a propriedade Canvas Type para Tab.

Criando um Canvas Tab pelo Layout Editor
• Abra a tela de um Content Canvas, pelo Layout Editor.

Clique no ícone Tab Canvas Content.

, na toolbar, posicione e dimencione-o dentro do canvas

DBC Database Company

23

Produzindo Triggers

Propriedades de um Canvas Tab
Tab Canvas Property
Propriedade Viewport X/Y Position Viewport Width Viewport Height Tab Style Descrição Coordenadas dos eixos X e Y do canvas em relação ao content canvas. Largura da view (área de visão) do canvas. Altura da view (área de visão) do canvas. Especifica o estilo da borda das tabs pages.

Tab Attachment Edge Especifica a disposição das tab pages: topo, rodapé, lateral, etc...

Tab page Property
Propriedade Label Descrição Especifica o texto do label da Tab page

Item Property
Propriedade Canvas Tab Page Descrição Especifica o canvas a qual o item será mostrado. Especifica a Tab Page (página) do canvas Tab que o item será mostrado.

DBC Database Company

24

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Renomeie o canvas existente para CANVAS_PEDIDOS_E_ITENS. Crie um novo canvas, do tipo Content, chamado CANVAS_ESTOQUES. 2. Reposicione os dados do bloco ESTOQUE para o canvas CANVAS_ESTOQUES. Pelo Object Navigator, arraste o frame para o novo canvas e redimencione-o. 3. Salve e execute o módulo. Navegue para o bloco ESTOQUE. Note que os canvas aparecem na mesma window. 4. Renomeie a window existente para WINDOW_PEDIDOS_E_ITENS, e modifique o seu tamanho, para melhor visualizar o conteúdo do canvas. Defina, que seu canto superior esquerdo fique ligeiramente abaixo e a direita na tela. Posição sugerida: X=10; Y=10 (points). 5. Crie uma nova window, chamada WINDOW_ESTOQUES. Associe o canvas CANVAS_ESTOQUES para ela. e modifique o seu tamanho, para melhor visualizar o conteúdo do canvas. Defina, que seu canto superior esquerdo fique ligeiramente abaixo e a direita na tela. Posição sugerida: X=20; Y=20 (points). 6. Salve, execute e teste o módulo. 7. Ainda no módulo PEDIDOS. Crie um canvas do tipo Toolbar Horizontal chamado TOOLBAR, e associe-o a window WINDOW_PEDIDOS_E_ITENS. 8. Crie 5 botões no bloco CONTROL, como especificado abaixo, e coloque-os no canvas TOOLBAR. • BOTAO_SAIR: Icon Filename = “EXIT”; • BOTAO_SALVAR: Icon Filename = “SAVE”; • BOTAO_CONSULTAR: Icon Filename = “QUERY”; • BOTAO_ESTOQUE: Label: “Estoque”; • BOTAO_IMAGEM: Label: “ON”. Crie o prompt “Imagem: “, para identificá-lo. Todos os botões acima possuem as propriedades: • Mouse Navigate = No; • Keyboard Navigable = No. 9. Ainda no canvas TOOLBAR, crie um item, no bloco CONTROL, tipo Display chamado HELP. Este item deve ser capaz de mostrar um único caracter: “?” • • Obs.: Neste momento o item deve ser invisível em execução. Ele funcionará como um chamador do Help quando adicionarmos esta funcionalidade nos próximos capítulos. Veja na próxima página o Layout sugerido:

DBC Database Company

25

Produzindo Triggers

10. Pelo Layout Editor, usando a ícone Stacked Canvas, crie um canvas chamado CANVAS_HELP, e posicione-o no canvas CANVAS_PEDIDOS_E_ITENS. Este canvas mostrará informações adicionais sobre atela ao usuário. Garanta que ele não será visualizado por enquanto, altere a propriedade Visible do CANVAS_HELP para No. • Este canvas será visualizado quando, em capítulos mais a frente, 11. Salve, execute o módulo e teste-o. 12. No forms CLIENTES, crie um Canvas Tab, o qual dividirá as sessões de dados dos clientes. Renomeie este canvas para TAB_CLIENTES, crie 3 (três) páginas, PG_ENDERECOS com label “Endereço”, PG_FATURAMENTO com label “Faturamento” e PG_OBSERVACOES com label “Observações”. Altere as posições dos items de acordo com as telas à seguir:

PG_ENDERECO

DBC Database Company

26

Produzindo Triggers

PG_FATURAMENTO

PG_OBSERVACOES

13. Salve, execute o módulo, e teste-o, encerre a sessão Oracle Forms Builder.

DBC Database Company

27

Oracle Forms Builder 6

12. Introdução as Triggers

DBC Database Company

Produzindo Triggers

Objetivos
• • • Identificar as diferentes categorias de Triggers. Planejar o tipo e o escopo das Triggers de um Form. Descrever as propriedades que afetam o comportamento de uma Trigger.

DBC Database Company

2

Produzindo Triggers

Visão geral sobre Triggers
Uma Trigger é uma unidade de programa que é executada (disparada) quando ocorre um evento. O Oracle Forms permite a construção de poderosas facilidades sem a necessidade de escrever código. Uma triggers permite adicionar e modificar a funcionalidade de um módulo de uma forma procedural de maneira que processos detalhados de aplicação possam ser definidos. Toda Trigger está associada a um evento específico. O Oracle Forms possui uma grande variedade de eventos que associam-se a uma trigger. As Triggers são escritas em PL/SQL como nas demais ferramentas do Developer/2000.

Componentes de uma Trigger
Componentes Trigger Type Trigger Code Trigger Scope Descrição Tipo de Trigger: especifica o evento que fará com que a trigger dispare. Corpo da Trigger: bloco PL/SQL que define a ação a ser executada pela trigger. Escopo da Trigger: determina o escopo sobre o qual os eventos serão detectados pela trigger. Nível em que a trigger está definida.

DBC Database Company

3

Produzindo Triggers

Trigger Type
Caracteriza o evento que faz com que a trigger dispare. A primeira parte do nome da trigger (prefixo) segue um padrão que permite a identificação do tipo de trigger. Todas as built-in triggers são associadas a um evento e seus nomes sempre contém um prefixo seguido de hífens ”_”. Os tipos são:
Prefixo PREPOSTWHENDescrição A trigger é disparada quando ocorre um evento antes de uma ação (por exemplo uma consulta é executada PRE_QUERY). A trigger é disparada quando ocorre um evento depois de uma ação (por exemplo uma consulta é executada POST_QUERY). A trigger é dispara em adição ao processamento padrão, permite você aumentar a funcionalidade (por exemplo na validação de um item WHENVALIDATE-ITEM). A trigger é dispara em substituição ao processamento padrão, permite você aumentar a funcionalidade (por exemplo quando ocorrer um erro ONERROR). A trigger é dispara em substituição ao processamento padrão de uma tecla de função, permite você aumentar a funcionalidade (por exemplo quando precionar o Enter KEY-ENTER.

ONKEY-

Obs.:
• Além das built-in triggers o Oracle Forms suporta User-named triggers. User-named triggers são triggers que o usuário define um nome. Este tipo de trigger é disparado por outra trigger. Atualmente o mesmo efeito pode ser conseguido utilizando Procedures, Functions e Packages com melhor resultado. User-named triggers são mantidas para compatibilização com versões anteriores do Oracle Forms.

DBC Database Company

4

Produzindo Triggers

Trigger Code
É a ação que a trigger executa quando disparada. Você escreve um bloco PL/SQL anônimo utilizando o PL/SQL editor. O Oracle Forms automaticamente envolve o seu código com BEGIN... END sendo portanto desnecessário entrar com essas palavras chaves, a menos que o seu bloco precise de um seção DECLARE, então você deve entrar com toda a estrutura criando um sub-bloco. Você pode utilizar normalmente os recursos da linguagem PL/SQL. Comandos de controle da transação (COMMIT, ROLLBACK, SAVEPOINT) não podem ser incluídos diretamente com comandos SQL no bloco PL/SQL. Estas ações são executadas pelo Oracle Forms como resultados de comandos e built-in procedures que você emite.

DBC Database Company

5

Produzindo Triggers

Trigger Scope
O escopo de uma trigger é determinado pela sua posição na hierarquia dos objetos do form, ou seja em baixo de que tipo de objeto você criou a trigger. Os níveis são: Nível
Nível de Form

Descrição
A trigger pertence ao módulo form e é disparada quando o evento a qual ela esta associada ocorrer em qualquer posição no form (qualquer bloco, qualquer item). A trigger pertence ao bloco e somente é disparada quando o evento a qual ela esta associada ocorrer neste bloco (em qualquer item dentro do bloco da trigger). A trigger pertence ao item e somente é disparada quando o evento a qual ela esta associada ocorrer neste item (específico).

Nível de Bloco

Nível de Item

Obs.:
• Algumas triggers não podem ser definidas em certos níveis. Por exemplo: a trigger POSTQUERY não pode ser definida a nível de item, porque uma consulta é sempre efetuada sobre um bloco.

DBC Database Company

6

Produzindo Triggers

Escopo e execução da Trigger
Normalmente somente a trigger mais específica em relação a posição do cursor é executada. Considere os exemplos: • • • Quando o cursor está no item DATA_PREVISAO_DA_ENTREGA um mensagem é disparada pela trigger ON-MESSAGE definida para o item. Quando o cursor está no bloco PEDIDOS uma mensagem é disparada pela trigger ONMESSAGE definida para o bloco, desde que não exista nenhuma trigger definida para o item corrente. Quando o cursor está no bloco ITENS um mensagem é disparada pela trigger ON-MESSAGE definida para o form, desde que não exista nenhuma trigger definida para o item corrente ou para o bloco.

Estilo de execução da Trigger
O estilo de execução (Execution Hierarchy) é a propriedade da trigger que controla o que acontece quando há mais de uma trigger do mesmo tipo em diferentes níveis. As definições para o estilo de execução são:
Nível Override After Before Descrição Somente a trigger mais específica é disparada (Comportamento default). A trigger é disparada depois de disparada a trigger do mesmo tipo em um nível mais alto (se existir). A trigger é disparada antes de disparada a trigger do mesmo tipo em um nível mais alto (se existir).

DBC Database Company

7

Oracle Forms Builder 6

13. Produzindo Triggers

DBC Database Company

Produzindo Triggers

Objetivos
• • • • Criar e modificar triggers Escrever triggers que derivam valores de itens não base table. Escrever triggers para suplementar a validação do item. Gerenciar falhas na trigger através do controle de exceções.

DBC Database Company

2

Produzindo Triggers

Criando um Triggers
Você pode criar uma trigger pelo Object Navigator ou pelo PL/SQL editor se ele já estiver aberto.

Criando uma trigger pelo Object Navigator
• No Navigator, selecione a entrada Triggers embaixo do Form, do Bloco ou do Item que a trigger deve estar associada. O objeto que você escolher determinará o escopo da trigger e os tipos de triggers disponíveis.

Clique no ícone Create , ou selecione no menu Program -> SmartTriggers, deverá mostrar uma lista das triggers apropriadas para o objeto corrente.

Caso a solicitação da criação da Trigger for pelo botão Create, ou pela opção Other do SmartTriggers, será mostrada uma LOV com todas as Triggers disponíveis. Utilize o recurso de auto redução teclando as letras iniciais dos nome da trigger. Exemplo: “W” reduz a lista para triggers WHEN-.. Entre com o código PL/SQL da trigger no Source Pane do Editor.

DBC Database Company

3

Produzindo Triggers

Criando uma trigger pelo PL/SQL EDITOR
• Se o PL/SQL Editor já estiver aberto, clique no botão NEW.

Escolha a Trigger da Lista de Triggers.

Entre com o código PL/SQL da trigger no source pane do PL/SQL Editor.

DBC Database Company

4

Produzindo Triggers

Utilizando o PL/SQL EDITOR
Você pode abrir o PL/SQL Editor da seguinte maneira: • Selecionando no menu Program -> PL/SQL Editor. • Pressionando o botão direito do mouse e selecionando PL/SQL Editor. • Ou precionando a tecla F11.

Compilando o código alterado
Os códigos novos ou modificados devem ser compilados, para isso você pode compilar o código: • Pressionando o botão Compile • ou selecionando no menu Program -> Compile Selection.

Para compilar só os códigos alterados desde a última compilação
Selecione no menu Program -> Compile -> Incremental. Para compilar todos os códigos Program -> Compile -> All.

Obs.:
• Se o código ainda não foi compilado, ele será compilado quando o módulo for gerado.

DBC Database Company

5

Produzindo Triggers

Navegando no PL/SQL Editor
Os pop-list Block e Item não alteram o escopo corrente da trigger. Eles simplesmente permitem a navegação para outras triggers. Componente
Type Object Item Name Source Pane

Descrição
Setado para Trigger. Permite que você troque entre blocos ou forms para acessar outras triggers. Permite que você troque entre itens do bloco atual para acessar outras triggers. Nome da trigger. Permite a você navegar para uma outra trigger já existente. Onde o texto da trigger é digitado.

DBC Database Company

6

Produzindo Triggers

Propriedades de uma Trigger
No Property Palette você pode especificar as seguintes propriedades de uma trigger.

General
Propriedade
Name

Descrição
Especifica o nome da trigger.

Functional
Propriedade
Trigger Style Fire in Enter Query Mode Execution Hierarchy

Descrição
PL/SQL: código da trigger definido na linguagem PL/SQL (default). Yes: permite a trigger ser disparada mesmo que o evento ocorra no modo Enter Query. No: a trigger só é disparada se o evento ocorrer no modo Normal. Override, Before ou After.

Help
Propriedade
Display in ‘Keyboard Help’ ‘Keyboard Help’ text

Descrição
Mostra a tecla associada na tela [Show Keys]. Só é válida para Key- triggers. Descrição para ser mostrada na tela [Show Keys]. Só é válida para Keytriggers.

DBC Database Company

7

Produzindo Triggers

Escrevendo o código da Trigger
• • • • • Defina sub-blocos adicionais dentro de uma trigger utilizando a estrutura DECLARE... BEGIN... EXCEPTION... END se necessário. Faça chamadas a procedures, functions do Banco, no form ou em uma library. Faça chamadas a built-in ou packages. O operador de comparação IS NULL testa se o valor é nulo (NULL). Para tratar valores nulos utilize a funçao NVL.

Exemplo 1:
Quando a trigger não necessita das cláusulas BEGIN e END. • When-Validate-Item: IF :itens.preco IS NULL THEN :itens.preco := :itens.preco_padrao; END IF; Calcula_Total; --Procedure

Exemplo 2:
Quando a trigger necessita de declaração das cláusulas BEGIN e END. • When-Button-Pressed: DECLARE v_desconto NUMBER; BEGIN v_desconto := calcula_desconto( :itens.codigo_do_produto , :itens.quantidade); --Function MESSAGE(‘Desconto: ’||TO_CHAR(v_desconto)); END;

Exemplo 3:
Para tratar exceptions, utilize a cláusula EXCEPTION na trigger. • Post-Insert:

DBC Database Company

8

Produzindo Triggers

INSERT INTO tab_log ( val_log , user_log) VALUES ( :departamentos.codigo , USER); EXCEPTION WHEN OTHERS THEN MESSAGE(‘Erro! ’||SQLERRM);

DBC Database Company

9

Produzindo Triggers

Utilizando variáveis no Oracle Forms
Em triggers e subprogramas o Oracle Forms geralmente permite o uso de dois tipos de variáveis: Oracle Forms e PL/SQL. Tipos de Variáveis
Oracle Forms

Descrição
Tipos de variáveis mantidos pelo Oracle Forms. São vistas pelo PL/SQL como variáveis externas e requerem o prefixo (:) para distingui-las dos objetos PL/SQL. As variáveis Oracle Forms não são declaradas formalmente na seção DECLARE do bloco PL/SQL e podem existir no escopo de todo o bloco PL/SQL. Variáveis que devem ser declaradas na seção DECLARE do bloco PL/SQL. Não possuem prefixo.

PL/SQL

Variáveis Oracle Forms
Variáveis do Forms Descrição
Itens (Text, List, Checkbox, etc) Globais De Sistema Parâmetros Escopo: form corrente e menu associado ao form. Uso: apresentação e interação com o operador. Escopo: todos os módulos da sessão corrente. Uso: varíaveis de comunicação entre os módulos durante uma sessão. Escopo: form corrente e menu associado ao form. Uso: controles e estados do form. Escopo: módulo corrente. Uso: passagem de valores de entrada e saída de um módulo.

Inicializando variáveis Globais
Muitas vezes é preciso testar uma variável Global podendo ela ou não existir, neste caso utiza-se a built-in DEFAULT_VALUE. Por exemplo, para inicializar a variável Global: “pais”, como “ Brasil ”, utilize: DEFAULT_VALUE(‘Brasil’, ‘GLOBAL.pais’);

Removendo variáveis Globais
Uma variável Global aloca 255 bytes, para removê-la utilize a built-in ERASE. Exemplo: ERASE(‘GLOBAL.pais’);

DBC Database Company

10

Produzindo Triggers

Referenciando variáveis Oracle Forms
• Referênciando uma variável tipo item na trigger PRE-QUERY a nível de bloco para o bloco PEDIDOS do form PEDIDOS. :pedidos.codigo_do_cliente := :GLOBAL.codigo_do_cliente;

Referênciando uma variável tipo Global na trigger PRE-FORM no form PEDIDOS. :DEFAULT_VALUE('#','global.codigo_do_cliente'); :GLOBAL.pedido_aberto := 'SIM';

Referênciando uma variável de sistema na trigger WHEN-BUTTON-PRESSED para o item BOTAO_CONSULTAR no bloco CONTROL no form PEDIDOS. IF :SYSTEM.MODE THEN ENTER_QUERY; ELSE EXECUTE_QUERY; END IF; = 'NORMAL'

DBC Database Company

11

Produzindo Triggers

Suplementando validações
WHEN-VALIDATE-ITEM Trigger
Esta trigger é disparada quando o Oracle Forms valida um item que esta marcado como “changed” . Isto acontece se o operador altera o item ou se outra trigger altera o valor deste item. A trigger é disparada imediatamente após as validações padrão do Oracle Forms para o item alterado. Esta validação geralmente ocorre quando o cursor navega para fora do item.

Usos da Trigger When-Validate-Item:
• • Incrementar a validação de um item para validações complexas que não podem ser implementadas pelas propriedades de um item. Popular outros itens como: itens não base table e display itens Exemplo: • Trigger WHEN-VALIDATE-ITEM para o item QUANTIDADE no bloco ITENS do form PEDIDOS. DECLARE v_quant NUMBER; BEGIN SELECT SUM(quantidade_em_estoque) INTO v_quant FROM estoque WHERE codigo_do_produto = :itens.codigo_do_produto; IF :itens.quantidade > v_quant THEN :itens.quantidade := v_quant; MESSAGE('Produto não possui estoque !'); END IF; END;

DBC Database Company

12

Produzindo Triggers

Populando itens com dados derivados
Utilizando o comando SELECT em Triggers
• • • • • O comando SELECT dentro do bloco PL/SQL deve utilizar a claúsula INTO para retornar os valores das colunas para variáveis. Somente uma linha deve ser retornada pelo comando SELECT, ou então uma exceção será disparada. Se esta exceção não é tratada ocasionará um término anormal do bloco (portanto, trate as prováveis exceções no seu bloco PL/SQL). Se ocorrer uma exceção na trigger When-Validate-Item e a mesma não for tratada a trigger falhará e o cursor não sairá do item. A seguinte mensagem será mostrada: ‘FRM-40735” <trigger type> trigger raised unhandled exception <expection>. Exemplo: Trigger POST-QUERY para o bloco PEDIDOS do forms PEDIDOS.

SELECT c.name , e.last_name INTO :pedidos.nome_do_cliente , :pedidos.nome_do_vendedor FROM clientes c , empregados e WHERE c.codigo = :pedidos.codigo_do_cliente AND e.codigo = :pedidos.codigo_do_vendedor;

DBC Database Company

13

Produzindo Triggers

Controlando falhas em Triggers
Tratamento de exceções
• • • • Para prevenir exceções não tratadas e falhas sem controle de uma trigger você precisa adicionar tratamento de exceções ao seu bloco PL/SQL. Você pode substituir as mensagens de erro utilizadas pelo Oracle Forms por uma mensagem customizada utilizando a procedure built-in MESSAGE no tratamento das exceções. Note que embora o operador receba uma mensagem mais apropriada utilizando a built-in MESSAGE a trigger não falha pois a exceção foi tratada, isto significa que o cursor pode sair do item mesmo que ele esteja inválido. Para forçar a falha da trigger de modo que o cursor não possa sair do item enquanto este não estiver correto dispare a exceção FORM_TRIGGER_FAILURE através do comando RAISE. Isto fará com que a trigger falhe, mas não causará uma exceção não tratada, pois o Oracle Forms tem o seu próprio tratamento para esta exceção. Você pode tratar outras exceções não explicitamente tratadas com WHEN-OTHERS que deve ser o último. Exemplos:

Trigger WHEN-VALIDATE-ITEM para o item CODIGO_DO_CLIENTE do bloco PEDIDOS do form PEDIDOS.

BEGIN SELECT nome , codigo_do_vendedor INTO :pedidos.nome_do_cliente , :pedidos.codigo_do_vendedor FROM clientes WHERE codigo = :pedidos.codigo_do_cliente; EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE(‘Cliente não existe !!!’); RAISE Form_Trigger_Failure; WHEN OTHERS THEN MESSAGE(‘Muitos Clientes com este código !!!’); RAISE Form_Trigger_Failure; END;

Trigger WHEN-VALIDATE-ITEM para o item DATA_DO_PEDIDO do bloco PEDIDOS do form PEDIDOS.

DBC Database Company

14

Produzindo Triggers

IF :pedidos.data_do_pedido > SYSDATE THEN MESSAGE('Data do pedido posterior a data atual !!!'); RAISE Form_Trigger_Failure; END IF;

DBC Database Company

15

Produzindo Triggers

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Crie uma trigger para escrever os valores corretos de NOME_DO_CLIENTE, NOME_DO_VENDEDOR e CODIGO_DO_VENDEDOR sempre que ocorrer uma validação para o item CODIGO_DO_CLIENTE. Utilize a trigger WHEN_VALIDATE_ITEM, mostre uma mensagem e cause a falha da trigger se o CODIGO_DO_CLIENTE não existir. 2. Crie uma trigger para escrever os valores corretos de NOME_DO_PRODUTO e PRECO do produto, sempre que ocorrer uma validação para o item CODIGO_DO_PRODUTO. Utilize a trigger WHEN_VALIDATE_ITEM, mostre uma mensagem e cause a falha da trigger se o CODIGO_DO_PRODUTO não existir. 3. Salve, execute o módulo e teste-o.

DBC Database Company

16

Oracle Developer/2000: Forms Builder 5.1 Vol I

Monitorando e Depurando Triggers

On Targget Treinamento e Consultoria

Monitorando e Depurando Triggers

Objetivos
• • • Conhecer os componentes do Debug. Rodar um módulo forms no modo Debug. Tratar a auditoração de um código usando programação (Debug PL/SQL code)

On Targget Treinamento e Consultoria

2

Monitorando e Depurando Triggers

Debugando Triggers no Forms Builder
Para debugar um código no forms builder existem 3 formas: • Compilando: os erros de sintaxe e de referencia a objetos (inclusive objetos do Banco de dados) são apontados na compilação permitindo a correção do bloco PL/SQL no Editor antes de executar. • Mostrando mensagens de Debug: no modo debug você pode requisitar mensagens que serão mostradas para indicar o disparo da trigger. Isto ajuda a verificar se certas triggers estão sendo disparadas ou não. • Invocando o Debugger: o Debugger permite que você monitore a execução do código dentro da trigger (inclusive em program units). Você pode executar linha a linha e monitorar os subprogramas chamados, conteúdo das variáveis, etc.

On Targget Treinamento e Consultoria

3

Monitorando e Depurando Triggers

Executando um Form no modo Debug
Passo 1
Rode o forms no modo debuger, clique no ícone Program - > Run Fomr -> Debug SHIFT+CTRL+R. , ou selecione a opção no menu

Passo 2
Na tela do Debug, selecione a trigger que você deseja depurar e entre com as ações de Debug, definindo os pontos de parada (duplo clique na linha desejada). Saia do Debugger clicando no botão Close e continue a execução do form.

Passo 3
A cada break point atingido o debugger é invocado de modo que você possa monitorar e interagir com o form, executando linha a linha a trigger depurada.

On Targget Treinamento e Consultoria

4

Monitorando e Depurando Triggers

Mostrando mensagens quando a Trigger é disparada
Você pode mostrar mensagens que serão emitidas antes da execução de cada trigger disparada. Estas mensagens são exibidas na linha de mensagem e incluem o tipo de trigger e o escopo. Para isto especifique na linha de comando: IFRUN60 MODULE=<nome do módulo> USERID=user/password@Host String DEBUG_MESSAGES=Yes

On Targget Treinamento e Consultoria

5

Monitorando e Depurando Triggers

Utilizando o PL/SQL Debugger
O PL/SQL Debugger/Interpreter permite você; • Executar passo a passo uma unidade de programa e suas chamadas a subprogramas. • Examinar e modificar o conteúdo das variáveis durante a execução. • Definir pontos de parada (breakpoints) de modo a suspender a execução do form, permitindo a análise da situação da aplicação em um ponto específico. • Definir ações de debug que serão executadas em certos eventos (debug triggers).

On Targget Treinamento e Consultoria

6

Monitorando e Depurando Triggers

Componentes do Debug
Componentes
Source Pane Navigator Pane Interpreter Pane Step Into (Button)

Descrição
Cópia somente para leitura da unidade de programa corrente. Você pode selecionar linhas de código e setar breakpoints neste painel. Lista hierárquica dos objetos. Funciona como o Object Navigator. Linha de comando onde você entra com PL/SQL e comandos do debugger. Executa o comando STEP INTO. O comando STEP INTO avança a execução para o próximo subprograma chamado por esta linha ou executa a linha corrente e avança para a próxima. Executa o comando STEP OVER. O comando STEP OVER salta a chamada de um subprograma, avançando para a próxima linha. Executa o comando STEP OUT. O comando STEP OUT salta para o término do subprograma corrente. Executa o comando GO. O comando GO segue a execução indefinidamente. Executa o comando RESET. O comando RESET termina o subprograma corrente imediatamente. Fecha o Interpreter/Debugger. Create, Delete, Expand, Collapse, Expand All, Collapse All, Find. Controla o Painel Navigator como o Object Navigator.

Step Over (Button)

Step Out (Button) Go (Button) Reset (Button) Close (Button) Navigator Controls

On Targget Treinamento e Consultoria

7

Monitorando e Depurando Triggers

Comandos úteis no Debug
Os seguintes comandos podem ser informados na linha de comando do Debugger (no Intepreter Pane). Os comandos marcados com (*) são equivalentes aos botões do Tool Bar do Debugger. Comando
STEP INTO (*) STEP OVER (*) STEP OUT (*) GO (*) RESET (*) SHOW LOCALS

Descrição
Avança a execução para o próximo subprograma chamado por esta linha ou executa a linha corrente e avança para a próxima. Salta a chamada de um subprograma, avançando para a próxima linha. Salta para o término do subprograma corrente. Segue a execução indefinidamente. Termina o subprograma corrente imediatamente. Mostra todas as variáveis locais (variáveis PL/SQL declaradas localmente) e parâmetros.

Package DEBUG
Os seguintes comandos da Package DEBUG podem ser informados na linha de comando do Debugger (no Intepreter Pane) ou incluídos em Debug ou Brekpoint triggers. Eles permitem que você mostre e atualize valores para variáveis e parâmetros na trigger ou no subprograma corrente. Comando
DEBUG.INTERPRET (‘string’) DEBUG.GETx (nome_vari)

Descrição
Procedure que permite que você emita um comando do Interpreter como parâmetro (string) e então execute a partir das Debug Triggers. Função que retorna o valor da variável com o nome fornecido. • x : representa o datatype CHAR da variável, assim como n para variáveis numéricas. • nome_var : nome da variável Procedure que seta o valor da variável com o nome fornecido. • x : representa o datatype CHAR da variável, assim como n para variáveis numéricas. • nome_var : nome da variável • valor : valor a ser setado para a variável

DEBUG.SETx (nome_var, valor)

On Targget Treinamento e Consultoria

8

Monitorando e Depurando Triggers

Invocando o Debugger
Você pode invocar o Debugger a qualquer momento durante a execução do form, selecionando Help -> Debug.

Setando Breakpoints em uma Trigger
Existem dois métodos para setar um breakpoint em uma Trigger

Método 1
1. Ative o Debugger e execute o form em Debug Mode ou se o form já está em execução selecione Help -> Debug. 2. No Navigator Pane do Debugger selecione a trigger desejada. O bloco PL/SQL da trigger deverá ser mostrado no Source Pane. 3. De um duplo clique na linha do bloco PL/SQL no Source Pane em que você deseja setar um breakpoint. 4. Para sair do Debugger, clique em Close. 5. Continue normalmente a execução do form, quando a linha para qual foi setado o breakpoint for executada o Debugger será ativado e mostrado automaticamente antes da execução da linha, permitindo que você monitore a execução a partir daquele ponto.

On Targget Treinamento e Consultoria

9

Monitorando e Depurando Triggers

Método 2
1. Ative o Debugger e execute o form em Debug Mode ou se o form já está em execução selecione Help -> Debug. 2. No Navigator Pane do Debugger selecione a trigger desejada. O bloco PL/SQL da trigger deverá ser mostrado no Source Pane. 3. Posicione o cursor na linha do bloco PL/SQL no Source Pane em que você deseja setar um breakpoint. 4. Selecione Debug -> Break a partir do Menu. O diálogo PL/SQL Breakpoint deve aparecer. 5. Na Trigger Área do diálogo Breakpoint entre com o comando: • RAISE DEBUG.BREAK. 6. Para sair do Debugger, clique em Close. 7. Continue normalmente a execução do form, quando a linha para qual foi setado o breakpoint for executada o Debugger será ativado e mostrado automaticamente antes da execução da linha, permitindo que você monitore a execução a partir daquele ponto.

On Targget Treinamento e Consultoria

10

Monitorando e Depurando Triggers

Definindo Debug Triggers
1. Ative o Debugger e execute o form em Debug Mode ou se o form já está em execução selecione Help -> Debug. 2. No Navigator Pane do Debugger selecione a trigger desejada. O bloco PL/SQL da trigger deverá ser mostrado no Source Pane. 3. Posicione o cursor na linha do bloco PL/SQL no Source Pane em que você deseja setar um breakpoint. 4. Selecione Debug -> Trigger a partir do Menu. O diálogo PL/SQL Breakpoint deve aparecer. 5. No Trigger Body Area entre com o código PL/SQL que a Debug Trigger deve executar. Clique em OK. 6. A Debug Trigger definida será executada toda vez que a linha para qual ela foi definida for executada. 7. Para sair do Debugger, clique em Close. 8. Continue normalmente a execução do form, quando a linha para qual foi setada a Debug Trigger for executada o Debugger será ativado e a Debug Trigger será executada neste ponto.

On Targget Treinamento e Consultoria

11

Monitorando e Depurando Triggers

Desabilitando ações do Debug
Para desabilitar uma ação do Debug, durante a execução, desmarque o breakpoint setado ou desmarque o Check-box Enabled nos diálogos Debug PL/SQL Trigger ou Debug PL/SQL Breakpoint.

On Targget Treinamento e Consultoria

12

Oracle Forms Builder 6

14. Adicionando Funcionalidades à Itens

DBC Database Company

Código Flexível

Objetivos
• • Complementar a funcionalidade de itens do tipo input usando triggers e built-ins. Complementar a funcionalidade de itens do tipo não input usando triggers e built-ins.

DBC Database Company

2

Código Flexível

Respondendo a interações com itens
Existem alguns tipos de GUI Itens que o operador pode interagir clicando com o mouse ou pressionando uma tecla de função. A maioria destes itens possui uma funcionalidade default.. Por exemplo, clicando em um Radio Button o operador pode alterar o valor para um item tipo Radio Group. Você pode customizar funcionalidades, por exemplo: • • • Executar testes e ações apropriadas tão logo o operador clique em um Radio Button, uma Lista ou um Check Box. Mostrar a foto de um produto quando o operador clica no quadro (item do tipo Image). Definir a funcionalidade de um botão.

Triggers de interação com itens
Trigger
WHEN-BUTTON-PRESSED

Evento que dispara a trigger

Seleção de um botão, através de um simples clique com o mouse ou por uma tecla de função. WHEN-CHECKBOX-CHANGED Troca do estado de um item tipo checkbox com o mouse ou com uma tecla de função. WHEN-RADIO-CHANGED Seleção de um botão diferente ou do corrente em um Radio Group. WHEN-IMAGE-PRESSED Um clique simples ou duplo clique em um item tipo Image.
WHEN-IMAGE-ACTIVATED Execução de um duplo clique em um item tipo Image.

WHEN-LIST-CHANGED

Troca o valor de um item tipo List.

WHEN-LIST-ACTIVATED Execução de um duplo clique em um elemento de uma T-List. WHEN-MOUSE-ENTER WHEN-MOUSE-LEAVE Dispara quando o ponteiro do mouse passa sobre o objeto. Dispara quando o ponteiro do mouse sai de cima do objeto.

DBC Database Company

3

Código Flexível

Exemplo:
• Trigger WHEN_RADIO_CHANGED no Item PEDIDOS.TIPO_DE_PAGAMENTO.

DECLARE v_cred clientes.categoria_de_credito%TYPE; BEGIN IF :pedidos.tipo_de_pagamento = 'PRAZO' THEN SELECT categoria_de_credito INTO v_cred FROM clientes WHERE codigo = :pedidos.codigo_do_cliente; IF v_cred NOT IN('BOM','EXCELENTE') THEN :pedidos.tipo_de_pagamento := 'AVISTA'; MESSAGE(‘Este cliente só pode comprar à vista !!!’); END IF; END IF; END;

• •

Você pode utilizar RAISE FORM_TRIGGER_FAILURE para terminar esta trigger, no entanto a falha desta trigger não terá efeito de validação ou de navegação no form. As triggers de interação não são disparadas pelos eventos de navegação ou validação. Utilize as triggers WHEN-VALIDATE- para tratar falhas de validação e navegação.

DBC Database Company

4

Código Flexível

Definindo funcionalidades à Itens Input
Check Boxes
Quando você altera o valor de um item do tipo CheckBox, dispara a trigger When-CheckBoxChanged, você pode complementar a trigger usando a built-in CHECKBOX_CHECKED, que retorna se a instância do item especificado está como CHECKED ou não. • Exemplo: IF CHECKBOX_CHECKED(‘pedidos.pedido_preenchido’) THEN SET_ITEM_PROPERTY( ‘pedidos.data_previsao_da_entrega’ , UPDATE_ALLOWED , PROPERTY_FALSE); ELSE SET_ITEM_PROPERTY( ‘pedidos.data_previsao_da_entrega’ , UPDATE_ALLOWED , PROPERTY_TRUE); END IF;

List Item
Quando você altera o valor de um item do tipo List, dispara a trigger When-List-Changed, Se for dado um duplo clique em um item do tipo List e estilo T-List, é disparada a trigger Wuen-List-Actived juntamente com a trigger When-List_Changed. Você pode, via programa popular um item do tipo List, usando as seguintes Built-ins: • ADD_LIST_ELEMENT: para adicionar um elemento a lista. • DELETE_LIST_ELEMENT: para deletar um elemento da lista.

Sintaxe:
ADD_LIST_ELEMENT( ‘item_do_tipo_list’ , indice , ’label’ , ’valor’); DELETE_LIST_ELEMENT( ‘item_do_tipo_list’ , indice);

Descrição dos parâmetros: Parâmetro Descrição
Indice Número que identifica a posição do elemento na lista, no primeiro = 1.
5

DBC Database Company

Código Flexível

Label Valor

Descrição do elemento na lista. Valor do elemento na lista.

Definindo Funcionalidades à itens Não Input
Mostrando LOVs através de botões
Se em um item haver uma LOV atachada a ele, para invocá-la basta pelo menu chamar a opção Edit -> Display List. Para chamar uma LOV via programa, você pode utilizar as seguintes Built-ins: • LIST_VALUES (procedure): é restrita, só executará a LOV se o item corrente possuír uma asosciada a ele. • SHOW_LOV (function): não é restrita, pode ser chamada de qualquer lugar, se for escolhido um valor na LOV, retornará TRUE, bastando especificar o nome da LOV, e opcionalmente as coordenadas X e Y do canto esquerdo superior da janela da LOV. LIST_VALUES; <variável> := SHOW_LOV(‘nome_da_lov’,x,y); <variável> := SHOW_LOV(‘nome_da_lov’);

DBC Database Company

6

Código Flexível

Interagindo com Itens do tipo Image
• • Itens Base Table: São automaticamente populados por uma consulta sobre o seu bloco (a partir de uma coluna da tabela base com o tipo de dado LONG RAW). Itens Não Base Table: Podem ser populados por imagens que se encontram em arquivos através da built-in READ_IMAGE_FILE. Esta é a forma mais utilizada. Para buscar a imagem a partir de um arquivo no disco: READ_IMAGE_FILE( ‘nome_do_arquivo’ , ’tipo_da_imagem’ , ’nome_do_item_image’);

Parâmetros da Buit-in READ_IMAGE_FILE: Parâmetro Descrição
nome_do_arquivo Nome do arquivo do sistema operacional que contém a imagem. Sem especificar o caminho. O caminho default é assumido (variável FORMS60_PATH). Tipo da imagem, por exemplo: TIFF,JFIF,PCX,PICT,GIF,CALS,RAS, etc.

tipo_da_imagem

nome_do_item_image Item tipo Image do form que vai apresentar a imagem.

Exemplo:
READ_IMAGE_FILE( ‘bola.jpg’ , ‘JPEG’ , ’produtos.foto’);

Usando triggers em itens do tipo Imagem
Você pode popular item tipo Imagem a partir de uma trigger. Trigger
WHEN-BUTTON_PRESSED

Descrição
Pode ser utilizada para popular um item tipo Image a partir do clique em um botão. Pode ser utilizada para popular um item tipo Image a partir de um clique ou de um duplo clique em um item tipo Image. Pode ser utilizada para popular um item tipo Image a partir de um duplo clique em um item tipo Image.

WHEN-IMAGE-PRESSED
WHEN-IMAGE-ACTIVATED

DBC Database Company

7

Código Flexível

Interagindo com itens do tipo Sound
• • Itens Base Table: São automaticamente populados por uma consulta sobre o seu bloco (a partir de uma coluna da tabela base com o tipo de dado LONG RAW). Itens Não Base Table: Podem ser populados por imagens que se encontram em arquivos através da built-in READ_SOUND_FILE. Esta é a forma mais utilizada. Para buscar a imagem a partir de um arquivo no disco: READ_SOUND_FILE( ‘nome_do_arquivo’ , ’tipo_do_som’ , ’nome_do_item_sound’);

Parâmetros da Buit-in READ_SOUND_FILE: Parâmetro Descrição
nome_do_arquivo Nome do arquivo do sistema operacional que contém a imagem. Sem especificar o caminho. O caminho default é assumido (variável FORMS60_PATH). Tipo da som, por exemplo: AU, WAVE, etc.

tipo_do_som

Nome_do_item_sound Item tipo Sound do form que vai rodar o som.

Exemplo:
READ_SOUND_FILE( ‘erro.wav’ , ‘WAVE’ , ’gerenciador’);

Você pode interagir em um item do tipo Sound, com as Built-ins GET_ITEM_PROPERTY e SET_ITEM_PROPERTY, usando os seguintes argumentos específicos para um item do tipo Sound: • • • • • • SHOW_FAST_FORWARD_BUTTON SHOW_PLAY_BUTTON SHOW_RECORD_BUTTON SHOW_REWING_BUTTON SHOW_SLIDER SHOW_TIME_INDICATOR
8

DBC Database Company

Código Flexível

SHOW_VOLUME_CONTROL

DBC Database Company

9

Código Flexível

EXERCÍCIOS
1. No forms PEDIDOS, faça com que ao trocar o TIPO_DE_PAGAMENTO do pedido, verifique se o cliente possui uma categoria de crédito igual a “Bom” ou “Excelente” quando o tipo de pagamento for “A Prazo”, caso contrário, envie uma mensagem ao usuário e altere automáticamente o tipo de pagamento para “Àvista”. 2. Importe o arquivo CAP15_3.TXT, de dentro da trigger selecione a opção no menu File -> Import Text CTRL+M, para trigger When-Button-Pressed no BOTAO_IMAGEM, que fará mostrar e esconder a imagem dos items, e alterar o label do BOTAO_IMAGEM, quando a imagem estiver aparecendo o label do botão refere-se a esconde-la, e vice-versa. 3. Compile, salve e execute o módulo

DBC Database Company

10

Oracle Forms Builder 6

15. Mensagens e Alertas

DBC Database Company

Código Flexível

Objetivos
• • • • Identificar os tipos de mensagens e interceptá-las. Substituir as mensagens do Oracle Forms por mensagens customizadas. Definir alertas e utilizá-los para a comunicação com o operador. Tratando erros usando Built-ins

DBC Database Company

2

Código Flexível

Tipos de Mensagens
O Oracle Forms emite mensagens em momento de execução para informar ao operador os eventos que ocorrem na sessão., elas estão divididas em 4 (quatro) categorias: Tipo Descrição
Mostrada por default na linha de mensagens. Informa ao operador o estado corrente no processamento. É possível suprimir ou alterar este tipo de mensagem através da trigger ON-MESSAGE. Exemplo: mensagem informando o número de linhas atualizadas. Mostrada por default na linha de mensagens. Informa ao operador um erro ocorrido no processamento corrente. É possível suprimir ou alterar este tipo de mensagem através da trigger ON-ERROR. Mostrada por default na linha de mensagens. Informa ao operador se o Oracle Forms está processando (por exemplo: Working...). É possível suprimir este tipo de mensagem setando a variável de sistema SUPRESS_WORKING para TRUE. Janela do tipo Modal. Um Alert mostra uma informação para o operador e precisa de uma resposta para continuar o processamento.

Informativa

Erro

Trabalho

System Alert

Tipos de Mensagens da Aplicação
Tipo
Mensagem Alert

Descrição
Mostrada na linha de mensagens. São construídas pelo desenvolvedor para a aplicação, usando a built-in MESSAGE. Mostrada em uma janela modal. São alerts definidos pelo desenvolvedor, apresentando uma mensagem e exigindo uma resposta do operador. A apresentação de um Alert é feita pela built-in SHOW-ALERT.

DBC Database Company

3

Código Flexível

Detectando o sucesso ou a falha de Built-ins
O Oracle Forms possui algumas funções para indicar se a última ação no form teve sucesso . Built-in
FORM_SUCCESS FORM_FAILURE FORM_FATAL

Descrição
TRUE: ação com sucesso. FALSE: ocorreu um erro ou um erro fatal . TRUE: um erro não fatal ocorreu. FALSE: não ocorreu erro (erro fatal ou outros). TRUE: um erro fatal ocorreu FALSE: não ocorreu erro fatal (não ocorreu erro algum ou ocorreu outro tipo de erro).

Exemplo:
GO_BLOCK(‘estoque’); IF FORM_SUCCESS THEN EXECUTE_QUERY; ELSE MESSAGE('Erro na navegação para o bloco Estoque !!!’); RAISE Form_Trigger_Failure; END IF;

Detectar tipos de Erros
O Oracle Forms possui algumas funções para indicar o tipo de erro de modo que se possa tomar uma ação específica. Built-in
ERROR_CODE ERROR_TEXT ERROR_TYPE

Descrição
Retorna o número do erro (tipo de dado NUMBER). Retorna a descrição do erro (tipo de dado CHAR). Retorna o tipo de erro (FRM=Oracle Forms, ORA=ORACLE, tipo de dado CHAR).

DBC Database Company

4

Código Flexível

Controlando Mensagens de Sistema
Você pode suprimir mensagens de sistema baseado no seu nível de severidade. Existem 6 níveis que você pode utilizar (mais do que isso se torna crítico).

Níveis de Severidade das Mensagens
Nível
0 5 10 15 20 25 >25

Descrição
Todas as mensagens. Reafirma uma condição óbvia. O operador cometeu um erro de operação. O operador tentou executar uma ação para a qual ele não tem privilégios. A ação não pode ser continuada devido a um problema na trigger ou outros tipos de problemas. Uma condição que pode resultar no processamento incorreto do form. Mensagens que o desenvolvedor não pode suprimir.

• • •

Em uma trigger pode-se especificar que somente as mensagens acima de um nível específico de severidade sejam emitidas pelo form. A variável de sistema SYSTEM.MESSAGE_LEVEL controla o nível de severidade corrente, o valor default de SYSTEM.MESSAGE_LEVEL é 0, ou seja, todas são emitidas. É possível alterar o nível de severidade atribuindo um dos valores acima para SYSTEM.MESSAGE_LEVEL. Lembre-se que todas as variáveis de sistema são do tipo de dado CHAR com escopo form, ou seja,válidas para o form corrente.

Exemplo:
• A trigger WHEN-BUTTON-PRESSED abaixo está associada a um botão UP_BUTTON e executa a movimentação para o registro anterior de um bloco, utilizando a built-in UP. No comportamento default, quando o cursor já está no primeiro registro, a built-in UP falha, retornando uma mensagem: • FRM-40100: AT first record A trigger abaixo suprime esta mensagem (mensagem de nível 5) e mostra uma mensagem customizada da aplicação.

DBC Database Company

5

Código Flexível

:SYSTEM.MESSAGE_LEVEL := 5; UP; IF NOT FORM_SUCCESS THEN MESSAGE(‘Este já é o primeiro pedido !!!’); END IF; :SYSTEM.MESSAGE_LEVEL := 0;

DBC Database Company

6

Código Flexível

Suprimindo Mensagens de Trabalho
Você pode suprimir mensagens de trabalho atribuindo ‘TRUE’ para a variável de sistema SYSTEM.SUPRESS_WORKING.

Exemplo:
• Você pode setar as variáveis de sistema tão logo um forms entre, utilizando a trigger WHENNEW-FORM-INSTANCE. :SYSTEM.SUPRESS_WORKING := ‘TRUE’;

Interceptando Mensagens de Sistema
Você pode interceptar mensagens de sistema antes de serem mostradas na tela através das triggers ON-ERROR e ON-MESSAGE. Estas triggers permitem que você altere, customize ou suprima mensagens, conforme necessidades da sua aplicação. Trigger
ON-ERROR ON-MESSAGE

Descrição
Dispara quando enviada uma mensagem de erro de sistema. Dispara quando enviada uma mensagem informativa de sistema.

Obs.:
• • • Estas triggers substituem a mensagens, logo nenhuma mensagem será emitida a menos que o operador defina no código da trigger. Você pode utilizar as Built-ins ERROR_CODE, ERROR_TEXT e ERROR_TYPE para identificar detalhes do erro. Você pode utilizar as built-ins MESSAGE_CODE, MESSAGE_TEXT e MESSAGE_TYPE para identificar detalhes da mensagem informativa.

Exemplo 1:
• Interceptando uma mensagem de erro em uma trigger ON-ERROR.

IF ERROR_CODE = 40202 THEN MESSAGE(‘Você deve preencher este item para um pedido !!!’); ELSE MESSAGE(ERROR_TYPE||‘-’||TO_CHAR(ERROR_CODE)||ERROR_TEXT); END IF; RAISE Form_Trigger_Failure;

DBC Database Company

7

Código Flexível

Exemplo 2:
• Interceptando uma mensagem informativa em uma trigger ON-MESSAGE, em uma consulta que retorna nenhum registro.

IF MESSAGE_CODE = 40350 THEN MESSAGE(‘Nenhum pedido encontrado !!!’); ELSE MESSAGE(MESSAGE_TYPE||‘-’||TO_CHAR(MESSAGE_CODE)|| MESSAGE_TEXT); END IF;

DBC Database Company

8

Código Flexível

Criando e controlando Alerts
Exemplo de um Alert

DBC Database Company

9

Código Flexível

Utilização
Utilize Alerts quando você precisar: • Mostrar uma mensagem que o operador não pode ignorar • Ter resposta à uma questão (normalmente: Sim. Não ou Cancel).

Passos para a criação de um Alert
1. Selecione a entrada Alerts no Object Navigator.

2. Clique no ícone Create . 3. Defina as propriedades do Alert criado no Property Palette.

DBC Database Company

10

Código Flexível

Propriedades de um Alert
Propriedade
Name Title Alert Style Button1, Button2, Button3 Default Alert Button Message

Descrição
Nome do objeto tipo Alert. Título do Alert.. Default ‘Forms’. Define o símbolo que acompanha a mensagem do Alert Stop, Caution(!) ou Note (I). Labels para cada um dos 3 botões possíveis. Null indica que o botão não é necessário. Define qual é o botão default. Button1, Button2 ou Button 3. Mensagem que aparece no Alert. Tamanho máximo de 200 caracteres.

DBC Database Company

11

Código Flexível

Built-ins úteis à manipulação com Alerts
Função SHOW_ALERT
Função utilizada para mostrar um Alert em momento de execução e receber a resposta do operador. <variável> := SHOW_ALERT(‘nome_do_alert’);

• A função SHOW-ALERT retorna um valor (NUMBER) que indica qual dos três botões possíveis o operador usou para responder. Retorno Descrição
ALERT_BUTTON1 ALERT_BUTTON2 ALERT_BUTTON3 O operador selecionou o botão 1. O operador selecionou o botão 2. O operador selecionou o botão 3.

Exemplo:
• Uma trigger dispara da quando o operador tenta deletar um registro (KEY-DELREC) poderia invocar um alert para obter confirmação. = ALERT_BUTTON1

IF SHOW_ALERT(‘ALERT_CHECK_DELECAO’) THEN DELETE_RECORD; END IF;

Procedure SET_ALERT_PROPERTY
Você pode utilizar esta built-in para trocar a mensagem corrente de um alert programaticamente. SET_ALERT_PROPERTY(‘nome_do_alert’,propriedade,’mensagem’)

Parâmetros da Built-in: Parâmetro Descrição
nome_do_alert propriedade DBC Database Company Nome do alert para o qual se deseja alterar uma propriedade. Propriedade que está sendo alterada.
12

Código Flexível

mensagem

Utilize ALERT_MESSAGE_TEXT para definir uma nova mensagem, e TITLE para o título da janela. Mensagem a ser definida. Se tamanho maior que 80 caracteres a mensagem será truncada.

DBC Database Company

13

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS, crie um Alert chamado ALERT_TIPO_DE_PAGAMENTO, com a seguinte mensagem: “Este cliente não pode comprar à prazo”, defina um único botão : “Ok” para o Alert, com o estilo : Caution. 2. Altere a trigger WHEN-RADIO-CHANGED para o item TIPO_DE_PAGAMENTO para mostrar um Alert ao invés da mensagem, quando um cliente deve pagar àvista. 3. Ainda no módulo PEDIDOS crie um Alert chamado ALERT_SAIR com dois botões: Sim e Não. Deixe a mensagem em branco para este alert; estilo: Stop. 4. Crie uma trigger WHEN-BUTTON-PRESSED para o BOTAO_SAIR que utilizará o alert ALERT_SAIR para pedir a confirmação ao operador da saída do form. Utilize a Built-in SET_ALERT_PROPERTY para definir a seguinte mensagem: “Você realmente deseja sair do form?”. Teste os valores retornados pela Built-in SHOW_ALERT e chame a Built-in EXIT_FORM se o operador respondeu pelo botão Sim. 5. Salve, execute o módulo e teste-o. Encerre a sessão Oracle Forms Builder.

DBC Database Company

14

Oracle Forms Builder 6

16. Triggers de Consulta

DBC Database Company

Código Flexível

Objetivos
• • • Entender os conceitos envolvidos em uma consulta ao bloco e onde as triggers podem ser codificadas e controladas. Escrever triggers que suplementam resultados de consultas. Controlar a ação de triggers baseada no status do form.

DBC Database Company

2

Código Flexível

Associação entre triggers e consulta
Uma consulta pode disparar dois tipos de triggers: PRE-QUERY e POST-QUERY. • Um evento pode disparar uma trigger quando o form está em modo Normal e se a trigger associada ao evento possuir a propriedade Fire in Enter-Query Mode = Yes no modo Enter Query.

Triggers associadas a consulta
• • As triggers PRE-QUERY e POST-QUERY são disparadas pelo processo de consulta (Query) e geralmente definidas para o bloco onde a consulta se realiza. Estas triggers permitem que você adicione funcionalidades ao processamento normal de consulta do Oracle, ou abandone a consulta antes da sua execução se as condições necessárias não foram fornecidas.

DBC Database Company

3

Código Flexível

Processamento de consultas no Oracle Forms
Quando uma consulta é iniciada em um bloco Base Table pelo operador ou por um subprograma os seguintes eventos acontecem:

Fluxo das triggers no modo Enter-Query
1. No modo Enter Query, a trigger PRE-QUERY, se definida, é disparada 2. Se a PRE-QUERY termina com sucesso, é construído o comando SELECT baseado no critério existente nas propriedades do bloco (WHERE), nos argumentos entrados pelo operador e nos outros argumentos que possam ter sido adicionados pela trigger PRE-QUERY. 3. A consulta é executada. 4. Os valores para cada coluna de uma linha são retornados para os itens base table. 5. O registro é marcado como válido. 6. A trigger POST-QUERY é disparada, se definida, (note que esta trigger é disparada uma vez para cada registro do bloco). Se a trigger falhar o registro é retirado do bloco. 7. Executa a validação dos itens e do registro, no caso de ter sido modificado pela trigger. 8. Retorna ao passo 4 para os registros remanescentes desta consulta.

DBC Database Company

4

Código Flexível

Trigger PRE-QUERY
• • Deve ser definida a nível de bloco ou superior. É disparada para consultas irrestritas ou restritas. Em uma trigger PRE-QUERY você pode: • Testar condições para a consulta e falhar o processo caso as condições não sejam satisfatórias; • Adicionar um critério para a consulta, atribuindo um valor para itens base table.

Exemplo:
• A trigger PRE-QUERY abaixo, no bloco de PEDIDOS, possui uma restrição de modo que a consulta só pode ser realizada se os itens CODIGO, DATA_DO_PEDIDO ou DATA_PREVISAO_DE_ENTREGA forem fornecidos. Isto evita consultas muito grandes.

IF :pedidos.codigo IS NULL AND :pedidos.data_do_pedido IS NULL THEN MESSAGE(‘O número ou a data devem ser preenchidos !!!’); RAISE Form_Trigger_Failure; END IF;

DBC Database Company

5

Código Flexível

Trigger POST-QUERY
• • Deve ser definida a nível de bloco ou superior. É disparada para cada registro retornado para o bloco como resultado da consulta. Utilize a trigger POST-QUERY para: • Popular itens não base table a partir dos registros retornados por uma consulta; • Calcular estatísticas.

Exemplo:
• A trigger POST-QUERY abaixo para o bloco PEDIDOS, mostra, a cada registro consultado, o nome do cliente do pedido. nome :pedidos.nome_do_cliente clientes codigo = :pedidos.codigo_do_cliente;

SELECT INTO FROM WHERE

DBC Database Company

6

Código Flexível

POST-QUERY e WHEN-VALIDATE-ITEM
Quando a trigger POST-QUERY popula um item, a validação do item é efetuada, causando, caso tenha sido definida, o disparo da trigger WHEN-VALIDATE-ITEM.

Exemplos:
• A seguinte procedure deriva o nome do produto a partir do código do produto ITENS.CODIGO_DO_PRODUTO. O nome é colocado no item ITENS.DESCRICAO.

PROCEDURE Busca_Descricao_Produto IS BEGIN SELECT nome INTO :itens.descricao FROM produtos WHERE codigo = :itens.codigo_do_produto END;

A procedure Busca_Descricao_Produto é chamada pela trigger WHEN-VALIDATE-ITEM para o item ITENS.CODIGO_DO_PRODUTO que falha a validação se o produto não for encontrado.

Busca_Descricao_Produto; EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE(‘Código do produto inválido !!!’); RAISE Form_Trigger_Failure;

A procedure Busca_Descricao_Produto é também chamada pela trigger POST-QUERY para o bloco ITENS. Se o produto não for encontrado a trigger não gerará falha pois a exceção está sendo tratada na trigger e não está sendo forçada a exceção FORM_TRIGGER_FAILURE, portanto como a POST-QUERY não gerará falha o registro será mostrado (porem sem o valor para a descrição do produto ITENS.DESCRICAO).

Busca_Descricao_Produto; EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE(‘Este produto foi excluído !!’);

DBC Database Company

7

Código Flexível

Disparando Triggers no Modo Enter Query
A propriedade Fire in Enter Query Mode de uma trigger determina se ela pode ser disparada quando o evento para qual ela estiver associada ocorrer no modo Enter-Query. Por default, esta propriedade é setada para Yes.

Exemplo:
• É definido um botão para o operador invocar uma LOV como ajuda para entrada de dados Seria interessante que este botão também pudesse ser utilizado no modo Enter-Query para fornecer argumentos de pesquisa para a consulta. Neste caso, a trigger WHEN-BUTTON-PRESSED abaixo para o item tipo button BOTAO_LOV_DE_CLIENTES deve possuir a propriedade Fire in Enter Query Mode igual a Yes. IF SHOW_LOV(‘lov_clientes’) THEN MESSAGE(‘Seleção OK !!!’); END IF;

DBC Database Company

8

Código Flexível

Obtendo informações de consultas através de variáveis de sistema
Usando a variável de sistema SYSTEM.MODE
• • Se uma trigger pode ser disparada no modo Normal e no modo Enter Query, é possível definir funcionalidades específicas para a trigger em cada modo, através da variável de sistema SYSTEM.MODE. SYSTEM.MODE é uma variável de sistema somente para consulta mantida exclusivamente pelo Oracle Forms. Relação de valores da variável SYSTEM.MODE: Valor
NORMAL ENTER-QUERY QUERY

Significado
O form está em modo Normal. O form está em modo Enter-Query. Uma consulta está em andamento (executando Fetch dos registros).

Exemplo:
• É definido um botão para o operador invocar uma Consulta. Seria interessante que este botão, se pressionado no modo Normal, colocasse o form no modo Enter Query, caso contrário se o form já estivesse no modo Enter-Query , o botão executasse a consulta. Neste caso a Trigger WHEN-BUTTON-PRESSED abaixo para o item tipo button BOTAO_CONSULTAR deve possuir a propriedade Fire in Enter Query Mode igual a Yes. IF :SYSTEM.MODE THEN ENTER_QUERY; ELSE EXECUTE_QUERY; END IF; = ‘NORMAL’

Usando a variável de sistema SYSTEM.LAST_QUERY
Retorna o SELECT montado pelo forms para executar a consulta mais recente.

DBC Database Company

9

Código Flexível

Usando as Built-ins GET_BLOCK_PROPERTY e SET_BLOCK_PROPERTY
Você pode consultar e setar algumas propriedades que afetam o comportamento da consulta de um bloco usando as Built-ins GET_BLOCK_PROPERTY e SET_BLOCK_PROPERTY, juntamente com alguns argumentos: • • • • • • DEFAULT_WHERE(*): Restrição default dos dados do bloco. ORDER_BY(*): Argumento de ordenação do bloco. QUERY_ALLOWED(*): Se o bloco permite consulta. QUERY_HITS(*): Número de registros consultados até o momento. QUERY_OPTIONS: Como a consulta vai executar. RECORDS_TO_FETCH: Total de registros trazidos em cada fetch.

DBC Database Company

10

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Escreva uma trigger para popular o item NOME_DO_CLIENTE e o item NOME_DO_VENDEDOR para cada linha retornada pela consulta no bloco PEDIDOS. 2. Salve, execute o módulo e teste-o. 3. Garanta que o botão BOTAO_SAIR não execute a saída do módulo no modo ENTER-QUERY. 4. Salve, execute o módulo e teste-o. Encerre a sessão Oracle Forms Builder.

DBC Database Company

11

Oracle Forms Builder 6

17. Validações

DBC Database Company

Código Flexível

Objetivos
• • • Entender os efeitos da unidade de validação sobre um módulo form. Conhecer outras formas de validação. Adicionar triggers que são disparadas quando a validação de um registro acontece.

DBC Database Company

2

Código Flexível

Processo de Validação
Oracle Forms executa o processo de validação em vários níveis para garantir que registros e valores individuais sigam determinadas regras.

Nível em que ocorrem as validações:
Nível de Validação Descrição
Item O Oracle Forms registra o status de cada item de modo a determinar se está válido. Se um Item é alterado e ainda não está marcado como válido então o Oracle Forms primeiro executa o check de validação padrão conforme as propriedades do item. Estes checks são executados antes de disparar a trigger WHEN-VALIDATE-ITEM. Validações padrões incluem: . Máscara de formatação . Obrigatoriedade . Tipo de dado Oracle (Data type) . Range (low-High) . LOV for Validation (Veja depois neste capítulo). Depois de deixar o registro, o Oracle Forms verifica se o registro é válido e a trigger WHEN-VALIDATE-RECORD é disparada, se presente. Quando o registro passa estes checks ele é setado para válido. Todos os registros abaixo deste nível são validados. Por exemplo, no COMMIT do módulo, então todos os seus registros são validados, a menos que esta ação seja suprimida.

Record

Block e Form

DBC Database Company

3

Código Flexível

Unidade de Validação
Quando ocorre a validação
Oracle Forms executa a validação para a unidade de validação quando: • a tecla [Enter] é pressionada ou a procedure built-in ENTER é invocada, com o propósito de forçar a validação imediatamente; • o operador ou uma trigger navega para fora da unidade de validação, incluindo quando as mudanças são salvas (commited). A unidade de validação default é item, mas pode também ser setada para record, block ou form pelo Designer. A unidade de validação define a quantidade máxima de dados que um operador pode entrar em um form antes do Oracle Forms iniciar a validação. • Validation Unit é uma propriedade do módulo Form e pode ser setada pelo Property Palette para: • . Item (Default) • . Record • . Block • . Form A opção Validação Default é equivalente a validação a nível de item. Na prática a validação a nível de item significa que o Oracle Forms valida as mudanças quando o operador navega para fora de um item alterado. Desta forma as validações padrões são realizadas, sendo disparada a trigger WHEN-VALIDATE-ITEM imediatamente, e o operador recebe uma falha de validação de um item tão logo sair dele. Em uma unidade de validação maior (record, block ou form) os checks vistos acima são postecipados até que uma tentativa de navegação para fora da unidade de validação aconteça. Todas as validações de itens e registros adiadas são realizadas juntas, incluindo o disparo das triggers WHEN-VALIDATE-ITEM e WHEN-VALIDATE-RECORD. Você pode setar uma unidade de validação acima de item quando a validação referencia um Banco não Oracle e você deseja adiar a transmissão até que o operador complete o registro (Record).

DBC Database Company

4

Código Flexível

Utilizando LOVs para validações
• • • Quando você associa uma LOV a um item através da propriedade LOV, você pode opcionalmente utilizar o conteúdo da LOV para validar os dados entrados para o item. Faça isto setando a propriedade LOV for Validation para YES. No momento de validação o Oracle Forms automaticamente utiliza o valor do item como um string de pesquisa não sensitivo ao case para o conteúdo da LOV. Tenha certeza que na LOV que você criou tenha a coluna de validação como a primeira mostrada e com Display Width maior que 0. Por motivos de performance não utilize LOV for validation em LOVs muito grandes.

Validação contra uma LOV:
• Se o item é unico e igual a um valor da primeira coluna da LOV, a fase de validação é concluída sem mostrar a LOV. • Se o valor do item encontra somente um registro na LOV, mas é igual somente a parte do valor da LOV então a coluna completa da LOV é retornada para o item (se o item está definido como return item da LOV). • Se mais do que um registro é encontrado para o valor do item, então estes registros são mostrados na LOV e o operador deve escolher. • Se nenhum valor compatível é encontrado na LOV, então todo o conteúdo da LOV é mostrado para o operador.

DBC Database Company

5

Código Flexível

Utilizando Triggers para Validações
Existem triggers que são disparadas para validação permitindo ações customizadas.

WHEN-VALIDATE-ITEM
Esta trigger é disparada quando o Oracle Forms valida um item que esta marcado como “changed” . Isto acontece se o operador altera o item ou se outra trigger altera o valor deste item. A trigger é disparada imediatamente após as validações padrão do Oracle Forms para o item alterado. Esta validação geralmente ocorre quando o cursor navega para fora do item.

Uso:
• • Incrementar a validação de um item para validações complexas que não podem ser implementadas pelas propriedades de um item. Popular outros itens como: itens não base table e itens displays.

Exemplo:
• Trigger WHEN-VALIDATE-ITEM para o item QUANTIDADE no bloco ITENS do form PEDIDOS.

DECLARE v_quant NUMBER; BEGIN SELECT SUM(quantidade_em_estoque) INTO v_quant FROM estoque WHERE codigo_do_produto = :itens.codigo_do_produto; IF :itens.quantidade > v_quant THEN :itens.quantidade := v_quant; MESSAGE('Não possui estoque !!!'); END IF; END;

Trigger WHEN-VALIDATE-Item a nível de item para o item DATA_DO_PEDIDO.

IF :pedidos.data_do_pedido > SYSDATE THEN MESSAGE(‘Data do pedido é posterior a data atual !!!’); RAISE Form_Triggert_Failure; END IF;

DBC Database Company

6

Código Flexível

WHEN-VALIDATE-RECORD
Esta trigger é disparada após a validação padrão do registro quando o operador navega para outro registro. Assim que o Oracle Forms checa se todos os itens obrigatórios do registro estão com status válido a trigger é disparada permitindo checks adicionais envolvendo mais do que um dos itens do registro.

Exemplo:
• Trigger WHEN-VALIDATE-RECORD a nível de bloco para o bloco PEDIDOS.

IF :pedidos.data_previsao_da_entrega < :pedidos.data_do_pedido THEN MESSAGE('Data da expedição é anterior à do pedido !!!'); RAISE Form_Trigger_Failure; END IF;

DBC Database Company

7

Código Flexível

Status de validação
De Item
Status Descrição •
NEW

• • • • • • •

CHANGED

VALID

Quando o registro é novo, foi criado, o Forms marca o status do Item como NEW. Quando o item é populado pela propriedade Copy Value from Item. Quando o item é alterado pelo usuário ou trigger. Quando um Item de um novo registro é alterado, todos os items no registro serão marcados como CHANGED. Quando a validação teve êxito. Quando o item do registro for consultado, e não alterado. Depois da fase de POST e COMMIT. Quando o item do registro foi duplicado, e não alterado.

De Registro
Status Descrição •
NEW CHANGED

• • • • • •

VALID

Quando o registro é novo, foi criado, o Forms marca o status do registro como NEW. Quando um item é populado pela propriedade Copy Value from Item. Quando um item do registro é alterado, o registro recebe o status de CHANGED. Quando todos os itens do registro forem validados com êxito. Quando o registro for consultado, e não alterado. Depois da fase de POST e COMMIT. Quando o registro foi duplicado, e não alterado.

DBC Database Company

8

Código Flexível

Relação de algumas Built-ins
Abaixo algumas built-ins que podem ser utilizadas em triggers para afetar a validação.

CLEAR_BLOCK, CLEAR_FORM e EXIT_FORM
O primeiro parâmetro destas built-ins, Commit_mode, controla o que deve ser feito com alterações efetuadas e não salvas (commited) quando um bloco é limpo (CLEAR_BLOCK), um form é limpo (CLEAR_FORM) ou a saída do form é solicitada (EXIT_FORM). Quando setado I, as mudanças não são validadas nem salvas (Commited). Por default, o operador recebe um alert box solicitando salvar (Commit) ou desconsiderar (Rollback).

ENTER
A built-in ENTER executa a mesma ação que a tecla [Enter], que é forçar a validação dos dados na unidade corrente de validação.

SET_FORM_PROPERTY
Esta built-in pode ser utilizada para desabilitar a validação Oracle Forms. • Quando se está em fase de desenvolvimento e testes as vezes é interessante desprezar as validações normais.

Exemplo:
SET_FORM_PROPERTY(‘nome_do_forms’, VALIDATION, PROPERTY_FALSE);

Você pode utilizar esta built-in para alterar a unidade de validação por programação.

Exemplo:
SET_FORM_PROPERTY(‘nome_do_forms’, VALIDATION_UNIT, escopo);

Opções de escopo:
• • • • DEFAULT_SCOPE. BLOCK_SCOPE. RECORD_SCOPE. ITEM_SCOPE.

ITEM_IS_VALID
• Usado com a built-in GET_ITEM_PROPERTY, retorna se o item foi validado ou não.
9

DBC Database Company

Código Flexível

Usado com a built-in SET_ITEM_PROPERTY, força com que o item não seja validado, ou seja, não dispare, se possuir, a trigger WHEN_VALIDADE_ITEM.

DBC Database Company

10

Oracle Forms Builder 6

Navegação

DBC Database Company

Código Flexível

Objetivos
• • • Entender as diferenças entre navegação interna e externa. Utilizar triggers de navegação. Utilizar navegação em triggers.

DBC Database Company

2

Código Flexível

Controlando a Navegação
Como já foi visto, você pode controlar a ordem em que o usuário navega pelos objetos da sua aplicação, através da seqüência em que os blocos e itens foram definidos no Object Navigator, juntamente com as propriedades dos blocos e de seus respectivos itens.

Propriedades que Influenciam na navegação
Propriedade Descrição

Mouse Navigation Limit Determina o quanto o usuário pode navegar fora do item com o mouse. First Navigation Block Especifica o nome do bloco para qual o Oracle Forms deve navegar quando é iniciado.

Outras propriedades já vistas
Objeto
Block

Descrição • • • • • • • • Navigation Style Next Navigation Block Previous Navigation Block Enabled Keyboard Navigable Mouse Navigate Previous Navigation Item Next Navigation Item

Item

DBC Database Company

3

Código Flexível

Propriedade Mouse Navigate
A propriedade Mouse Navigate se aplica a objetos de tela manipulados pelo mouse. Esta propriedade é válida para os seguintes tipos de Itens: Button, Check Box, List Item, Radio group, etc. Valor Yes Descrição O Oracle Forms navega para o item, causando o disparo das triggers de navegação e de validação, se houverem O Oracle Forms não navega para o item, não causando o disparo das triggers de navegação e de validação, se houverem. O foco permanece no item atual, e o item clicado executará sua funcionalidade normal, inclusive disparando triggers associadas à ele, se houverem.

No

DBC Database Company

4

Código Flexível

Navegação interna
• • • Normalmente uma navegação ocorre quando o usuário move o foco de um objeto para outro objeto, envolvendo uma mudança de foco visível na tela. As navegações internas são as que não são visíveis (navegações lógicas). Quando você entra em um módulo form, o foco está no primeiro item do primeiro bloco de navegação do bloco; você não vê os eventos de navegação interna que ocorreram para que o foco se movesse para o primeiro item. • Estes eventos internos são: 1. Entrada no form. 2. Entrada no bloco. 3. Entrada no registro. 4. Entrada no item. Quando você salva suas inserções, atualizações e deleções no Banco de dados, você não vê os eventos de navegação interna que ocorreram antes do processamento do Commit. • Estes eventos internos são: 1. Saída do item corrente 2. Saída do registro corrente. 3. Saída do bloco corrente.

DBC Database Company

5

Código Flexível

Triggers de Navegação
As triggers de navegação podem ser divididas em dois grupos: • • Triggers de Navegação PRE- e POSTTriggers WHEN-NEW-objeto-INSTANCE

Triggers PREAs triggers PRE- são disparadas durante a navegação antes da entrada no objeto especificado como parte do nome da trigger.

Triggers POSTAs triggers POST- são disparadas durante a navegação após a entrada no objeto especificado como parte do nome da trigger.

Quando as triggers PRE- e POST- não disparam
As triggers não são disparadas quando pertencem a uma unidade inferior que a unidade de validação corrente do módulo. Por exemplo: Se a unidade de validação é Record, as triggers PRE- e POST-TEXT-ITEM não são disparadas.

Quando as Triggers PRE- e POST- falham
Se as triggers PRE- e POST- falham o foco retorna ao ponto de origem (onde estava quando a trigger foi disparada). Para o usuário a sensação é de que o foco não se moveu.

Tipos de Triggers PRE- e POST
• • • • • • • • PRE-FORM POST-FORM PRE-BLOCK POST-BLOCK PRE_RECORD POST-RECORD PRE-TEXT-ITEM POST-TEXT-ITEM

DBC Database Company

6

Código Flexível

Armadilha de Navegação
Atenção, quando uma trigger PRE- ou POST falha o Oracle Forms tenta retornar o cursor lógico para o item original.

Exemplo:
• Navegando do item A para o item B. • Se a trigger PRE-TEXT-ITEM para o item B falha, o Oracle Forms tenta retornar o cursor lógico para o item A. • A trigger PRE-TEXT-ITEM para o item A é disparada; se ocorrer uma falha também nesta trigger o cursor não tem para onde ir e um erro fatal ocorre.

DBC Database Company

7

Código Flexível

Triggers WHEN-NEW-“objeto”-INSTANCE
Trigger
WHEN-NEW-ITEM-INSTANCE

Quando dispara
Depois da navegação com sucesso para uma nova instância de item (outro item).

Depois da navegação com sucesso para uma nova instância WHEN-NEW-RECORD_INSTANCE de registro (outro registro). WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-FORM-INSTANCE Depois da navegação com sucesso para uma nova instância de bloco (outro bloco). Depois da navegação com sucesso para uma nova instancia de form (outro form).

Inicializando Objetos
Utilize as triggers WHEN-NEW-“objeto”-INSTANCE em conjunto com as built-ins SET-“objeto”-PROPERTY para inicializar objetos do módulo, especialmente se as inicializações forem condicionais.

Exemplos:
• A trigger WHEN-NEW-BLOCK-INSTANCE define condicionalmente a propriedade Delete Allowed do bloco ITENS para No.

IF GET_APPLICATION_PROPERTY(USERNAME) = ‘MARCELO’ THEN SET_BLOCK_PROPERTY(‘itens’, DELETE_ALLOWED, PROPERTY_TRUE); ELSE SET_BLOCK_PROPERTY(‘itens’, DELETE_ALLOWED, PROPERTY_FALSE); END IF;

EXECUTE_QUERY;

A trigger WHEN-NEW-FORM-INSTANCE executa uma consulta toda vez que o usuário entra no módulo.

DBC Database Company

8

Código Flexível

Built-ins usadas para Navegação em Triggers
Você pode iniciar uma navegação programaticamente utilizando Built-ins. Built-in
GO_FORM GO_BLOCK GO_ITEM GO_RECORD NEXT_BLOCK NEXT_ITEM NEXT_KEY NEXT_RECORD DOWN UP SCROLL_UP SCROLL_DOWN PREVIOUS_BLOCK PREVIOUS_ITEM

Descrição
Navega para um form já aberto (em uma aplicação com mais de um form). Navega para o bloco indicado. Navega para o item indicado. Navega para o registro indicado. Navega para próximo bloco. Navega para próximo Item. Navega para o item primary key, que permite digitação, do próximo bloco. Navega para o primeiro item que permite digitação do próximo registro. Navega para a instância do item corrente no próximo registro. Navega para a instância do item corrente no registro anterior. Executa o scroll do bloco de modo que os registros acima do primeiro registro visível sejam mostrados. Executa o scroll do bloco de modo que os registros abaixo do último registro visível sejam mostrados. Navega para o bloco anterior. Navega para o Item anterior.

PREVIOUS_RECORD Navega para o primeiro item que permite digitação (enterable) do registro anterior.

DBC Database Company

9

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Escreva uma trigger WHEN-NEW-FORM-INSTANCE para executar uma consulta assim que o form iniciar. Utilize a built-in EXECUTE-QUERY. 2. Na mesma trigger atribua o string ‘?’, ao item HELP. 3. Faça com que o CANVAS_HELP, seja exibido quando o usuário passar sobre o item HELP, no canvas TOOLBAR. Utilize a built-in SHOW_VIEW(‘nome do canvas’), para mostrar o canvas e HIDE_VIEW(‘nome do canvas’), para esconde-lo quando o mouse sair de cima do item HELP. 4. Salve, execute o módulo e teste-o. 5. Escreva uma trigger que será disparada cada vez que o cursor se posicionar em um registro no bloco ITENS, esta trigger deve popular o item IMAGEM_DO_PRODUTO com a imagem do produto para o CODIGO_DO_PRODUTO do item corrente. Utilize a built-in READ_IMAGE_FILE e a trigger WHEN-NEW-RECORD-INSTANCE para o bloco ITENS. 6. Salve, execute o módulo e teste-o. 7. Existe mais alguma trigger onde seria interessante colocar este mesmo código? Implemente o mesmo código para a trigger WHEN-VALIDATE-ITEM para o item CODIGO_DO_PRODUTO. 8. Salve, execute o form e teste. Encerre a sessão Oracle Forms Builder.

DBC Database Company

10

Oracle Forms Builder 6

Processamento de Transação

DBC Database Company

Código Flexível

Objetivos
• • • Entender o processo utilizado pelo Oracle Forms para aplicar as mudanças do usuário ao Banco de dados. Escrever triggers transacionais em pontos relevantes para incluir funcionalidades adicionais. Atribuir um número seqüencial a um item de um registro que será aplicado a tabela base.

DBC Database Company

2

Código Flexível

Processamento de Transação
Quando o Oracle Forms recebe a solicitação de salvar (Commit) as mudanças efetuadas no form, se inicia um processo que envolve eventos na transação corrente no Banco de dados. Este processo inclui: • Processo default de transação Oracle Form. Se aplica as mudanças efetuadas pelo operador às tabelas do Banco de dados. • Disparo de triggers transacionais. Executam ações adicionais ou modificam a ação default no processo de salvamento que foi definido pelo desenvolvedor. • Quando estas ações são completadas com sucesso o Oracle Forms efetua o Commit da transação, efetivando as alterações.

Quando ocorre o processamento da transação
• • O operador pressiona a tecla [Save] ou seleciona Action -> Save a partir do menu. A built-in COMMIT_FORM é chamada a partir de uma trigger.

O que acontece no Processamento da Transação Posting
• • • • • Esta fase escreve as mudanças efetuadas pelo operador nas tabelas utilizando comandos INSERT, UPDATE e DELETE implícitos gerados pelo Oracle Forms. As mudanças são aplicadas na ordem de seqüência dos blocos, assim como eles aparecem no Object Navigator. Para cada bloco as deleções são executadas primeiro, seguidas das inserções e atualizações. A built-in POST pode chamar este processo sozinho.

Commit
Esta fase executa o Commit do Banco de dados, tornando as alterações aplicadas permanentes e liberando os Locks. Outras triggers transacionais são disparadas nesta fase se definidas

DBC Database Company

3

Código Flexível

Tarefas executada em um processamento de transação
ROLLBACKS
• • O Oracle Forms executará o Rollback das alterações efetuadas se um erro ocorrer no processamento default da transação ou se uma trigger transacional falhar. Por default , o Oracle Forms emite uma mensagem informando ao operador o erro, que deve efetuar a correção e tentar novamente.

SAVEPOINTS
• O Oracle Forms insere Savepoints em uma transação automaticamente, e executa o Rollback para o último Savepoint se certos eventos ocorrem. Geralmente este Savepoints são para uso interno do Oracle Forms, mas certas buit-ins podem solicitar um Rollback para o último Savepoint através da opção TO_SAVEPOINT. Isto incluido na built-in EXIT_FORM.

LOCKS
• Quando você atualiza ou deleta um registro Base Table em uma aplicação forms, automaticamente é aplicado um lock no registro. Locks também aplicam-se durante a fase de posting de uma transação, e para declarações de DML usadas em seu código PL/SQL.

O.b.s.:
• Os comandos SQL: COMMIT, ROLLBACK e SAVEPOINT não podem ser chamados diretamente em uma trigger. Se estes forem encontrados em uma program-unit, a nível de form, o Oracle Forms trata o comando COMMIT como uma chamada a built-in COMMIT_FORM e o comando ROLLBACK como uma chamada a built-in CLEAR_FORM.

DBC Database Company

4

Código Flexível

Incrementando o processamento de uma Transação
Exemplo de alguns incrementos que você pode implementar em uma transação: • • • • Escrever mudanças a tabelas não base table. Registrar informações de auditoria de uma transação. Obter um número seqüencial para uma Unique Key de um registro. Executar validações antes de uma linha ser deletada.

Triggers transacionais
Estas triggers são disparadas devido ao processo de uma transação. Dentro destas triggers você pode incluir: • Comandos SQL, SELECT e comandos DML, incluindo INSERT, UPDATE e DELETE. • Construções PL/SQL. Existem seis tipos de triggers transacionais, a nível de bloco, que são disparadas antes ou depois do comando DML, que o Oracle Forms emite para a fase de Post do processamento da transação. • PRE-DELETE : disparada antes de cada operação de Delete no processamento default da transação. • POST-DELETE : disparada após cada operação de Delete no processamento default da transação. • PRE-INSERT : disparada antes de cada operação de Insert no processamento default da transação. • POST-INSERT : disparada após cada operação de Insert no processamento default da transação. • PRE-UPDATE : disparada antes de cada operação de Update no processamento default da transação. • POST-UPDATE : disparada após cada operação de Update no processamento default da transação. Estas triggers são disparadas pelo processamento completo de uma transação ou quando a fase de POST é disparada sozinha (você pode fazer isto pela built-in POST). • • Se uma trigger transacional falha é executado o Rollback da transação inteira. As triggers PRE- e POST- são disparadas mesmo que o desenvolvedor tenha escrito uma trigger que substitua o processamento default de registros (isto pode ser feito pelas triggers ONINSERT, ON-UPDATE e ON-DELETE).

DBC Database Company

5

Código Flexível

Exemplo do processamento de um Update:
1. O Operador atualiza o Item PRECO do form. 2. O operador salva a alteração iniciando o processo de transação. 3. A tigger PRE-UPDATE é disparada (se existir). Neste estágio o item e a coluna ainda estão diferentes porque o Update ainda não foi aplicado a tabela base. A trigger pode comparar os dois valores e por exemplo garantir que o novo preço não é menor que o anterior. 4. O Oracle Forms aplica a alteração do operador à linha da tabela do Banco de dados. 5. A trigger POST-UPDATE é disparada (se existir). O item e a coluna são iguais neste momento, no entanto o valor anterior ainda é mantida na área de Rollback, pois caso uma falha da trigger ocorra o valor original é restaurado. 6. O Oracle Forms emite um Commit, liberando a área de rollback, os Locks e efetivando as alterações no Banco de dados. 7. O operador recebe a mensagem ‘Transaction Completed’

DBC Database Company

6

Código Flexível

Validação de um Delete
• • Blocos Master-Detail ligados por uma Relation com propriedade Deletion Rule setada para Non Isolated, automaticamente previnem a deleção de um registro mestre se houver algum registro detalhe para ele. Você pode implementar uma crítica adicional para garantir que nenhuma linha detalhe, dependente do registro mestre, que está sendo deletado, foi inserida por outro usuário.

Exemplo:
• A trigger PRE-DELETE para o bloco CLIENTES previne a deleção de do registro mestre, se existirem pedidos para o cliente que está sendo deletado. SELECT 1 INTO v_aux FROM pedidos WHERE codigo_do_cliente = :clientes.codigo; MESSAGE(‘Existem pedidos para este cliente !!!’); RAISE Form_Trigger_Failure; EXCEPTION WHEN NO_DATA_FOUND THEN NULL;

DBC Database Company

7

Código Flexível

Atribuindo números seqüenciais a registros
A partir de uma SEQUENCE
• • Utilize a trigger PRE-INSERT para atribuir um número seqüencial a partir de uma SEQUENCE, imediatamente antes da inserção do registro na tabela base. Este método evita “buracos” na seqüência de números caso o operador desista da inserção do registro.

Exemplo:
• A trigger PRE-INSERT para o bloco PEDIDOS atribui o próximo número da seqüência PEDIDOS_CODIGO_SQ para o item PEDIDOS_CODIGO que será escrito na coluna CODIGO da tabela PEDIDOS. SELECT pedidos_codigo_sq.NEXTVAL INTO :pedidos.codigo FROM sys.dual;

O.b.s.:
• As propriedades Insert Allowed e Keyboard Navigable para o item PEDIDOS.CODIGO devem ser setadas para False, de modo que o operador não possa entrar com o CODIGO manualmente.

A partir de uma TABELA
• • PRE-INSERT : selecione o número disponível da sua tabela de seqüência (efetuando o lock da linha para evitar que outros usuários utilizem o mesmo número) e incremente o número (+1). POST-INSERT : atualize a sua tabela de seqüência registrando o novo valor da seqüência (número anterior + 1).

DBC Database Company

8

Código Flexível

Mantendo uma trilha de auditoria
Utilize as triggers POST para registrar informações de auditoria.

Exemplo:
• A trigger POST-UPDATE registra a operação de atualização na tabela UPD_AUDIT. INSERT INTO updt_audit ( codigo , data_hora , usuario) VALUES ( :pedidos.codigo , SYSDATE , USER);

DBC Database Company

9

Código Flexível

Informações sobre uma variável tipo Cursor no PL/SQL
Atributos de um Cursor PL/SQL implícito:
Atributos
SQL%FOUND SQL%NOTFOUND SQL%ROWCOUNT

Valor
TRUE: indica que uma ou mais linhas foram processadas. FALSE: indica que nenhuma linha foi processada. TRUE: indica que nenhuma linha foi processada. FALSE: indica que uma ou mais linhas foram processadas. Informa um número inteiro indicando o número de linhas processadas.

Exemplo de utilização:
UPDATE pedidos SET Data_previsao_da_entrega = SYSDATE WHERE codigo = :pedidos.codigo; IF SQL%NOTFOUND THEN MESSAGE (‘Registro não encontrado !!!’); RAISE Form_Trigger_Failure; END IF;

DBC Database Company

10

Código Flexível

Customizando o início e o fim de uma transação
• • Além das triggers que são disparadas durante o processamento de registros, é possível definir triggers transacionais que são disparadas no início e no final do processo de cada transação. Estas triggers devem ser definidas a nível de form

Triggers disparadas no início e no fim de uma transação:
Trigger
PRE-COMMIT POST-FORMS-COMMIT

Descrição
Disparada no Início da fase de POST, mas somente se houver mudanças no form para o POST. Disparada após a fase de POST (se o registro foi ou não POSTED), mas antes do Commit do Banco de dados. Isto significa que a transação pode ainda efetuar o Rollback se a trigger falhar. efetua Rollback da transação.

POST-DATABASE-COMMIT Disparada após a transação ser finalizada. A falha desta trigger não

DBC Database Company

11

Código Flexível

Outras triggers transacionais a nível de bloco
Trigger
ON-INSERT ON-UPDATE ON-DELETE

Descrição
Disparada em substituição a cada operação de inserção. Disparada em substituição a cada operação de atualização. Disparada em substituição a cada operação de deleção.

DBC Database Company

12

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Escreva uma trigger transacional no bloco PEDIDOS para popular o item CODIGO do bloco PEDIDOS, com o próximo valor da seqüência PEDIDOS_CODIGO_SQ, quando você salvar o registro inserido. • Utilize a trigger PRE-INSERT. • Altere as propriedades Requerid, Insert Allowed e Keyboard Navigable do item para No. 2. Reordene a seqüência do bloco PEDIDOS e garanta que o item CODIGO_DO_CLIENTE é o primeiro item no qual é permitida digitação. 3. Salve, execute o módulo e teste-o. 4. Escreva outra trigger transacional no bloco ITENS para popular o Item NUMERO_DO_ITEM do bloco ITENS, quando você salvar o registro inserido, derive este número adicionando 1 ao maior número de itens para o pedido. • Utilize a trigger PRE-INSERT. • Altere as propriedades Requerid, Insert Allowed e Keyboard Navigable do item para No. 5. Salve, execute o módulo e teste-o. Encerre a sessão Oracle Forms Builder.

DBC Database Company

13

Oracle Forms Builder 6

18. Código Flexível

DBC Database Company

Código Flexível

Objetivos
• • • • Utilizar variáveis de sistema para construir um código mais genérico. Utilizar built-ins para construir um código mais flexível. Referenciar objetos pelo ID Interno. Referenciar itens indiretamente.

DBC Database Company

2

Código Flexível

Conceito de código flexível
• • • Código flexível é um código que pode ser utilizado novamente. Geralmente utiliza variáveis de sistema ao invés de nomes de objetos. As vantagens são: facilidade de manutenção e aumento de produtividade.

DBC Database Company

3

Código Flexível

Utilizando variáveis de sistema
Algumas variáveis de sistema já foram vistas e utilizadas em capítulos anteriores, tais como modo de operação, nível de mensagem, etc. Nesta seção serão vistas variáveis de sistema que provêm o estado corrente do registro, do bloco e do form.

Variáveis de sistema para localizar o foco corrente (Input)
Variável
CURSOR_ITEM CURSOR_BLOCK CURSOR_RECORD CURSOR_VALUE

Descrição
Determina em qual item está o foco corrente. Determina em qual bloco está o foco corrente. Determina em qual registro está o foco corrente. Determina em que valor do item está o foco corrente.

Variáveis de sistema para localizar o foco de uma trigger
Variável
TRIGGER_ITEM

Descrição

Determina o bloco e o item que tinha o foco corrente (input) no momento em que a trigger foi disparada (iniciada). TRIGGER_RECORD Determina o número do registro que o Oracle Forms está processando. TRIGGER_BLOCK Determina o bloco que tinha o foco corrente (input) no momento em que a trigger foi disparada (iniciada).

Variável de Sistema para determinar o estado corrente do registro: SYSTEM_RECORD_STATUS
Status
CHANGED INSERT NEW QUERY

Descrição
O registro consultado foi retornado (fetched) do Banco de dados e pelo menos um item base table foi alterado. O usuário (ou uma trigger) entrou com um valor para um item base table de um registro novo. O usuário (ou uma trigger) ainda não entrou com um valor em um item base table de um registro novo. O registro consultado foi retornado (fetched) do Banco de dados e nenhum item base table foi alterado.

DBC Database Company

4

Código Flexível

Variável de sistema para determinar o estado corrente do bloco: SYSTEM_BLOCK_STATUS
Status
CHANGED NEW QUERY

Descrição
O bloco contém pelo menos um registro com o status de CHANGED e INSERT. O bloco contém somente registros com status NEW. O bloco contém somente registros com status QUERY.

Variável de sistema para determinar o estado corrente do form: SYSTEM_FORM_STATUS
Status
CHANGED NEW QUERY

Descrição
O form contém pelo menos um registro com o status de CHANGED e INSERT. O form contém somente registros com status NEW. O form contém somente registros com status QUERY.

DBC Database Company

5

Código Flexível

Utilizando Built-ins para obter informações sobre objetos
Built-in
GET_APPLICATION_PROPERTY GET_BLOCK_PROPERTY GET_ITEM_PROPERTY SET_ITEM_INSTANCE_PROPERTY SET_MENU_ITEM_PROPERTY SET_TAB_PAGE_PROPERTY

Descrição
Retorna informação sobre uma propriedade específica da aplicação Oracle Forms corrente. Retorna informação sobre uma propriedade específica do bloco especificado. Retorna informação sobre uma propriedade específica do item especificado. Modifica propriedades relativas a instância de um item. Modifica propriedades relativas a itens do tipo menu. Modifica uma página específica de um canvas do tipo TAB.

Exemplos:
• Capturando o nome e a password do usuário corrente. := GET_APPLICATION_PROPERTY(USERNAME); := GET_APPLICATION_PROPERTY(PASSWORD);

:GLOBAL.username :GLOBAL.password

Determinando o primeiro registro que é visível no bloco ITENS no momento.

... GET_BLOCK_PROPERTY(‘itens, TOP_RECORD)

Determinando o canvas em que o foco (input) se encontra.

DECLARE nome_canvas BEGIN nome_canvas ... END;

VARCHAR2(30); := GET_ITEM_PROPERTY( :SYSTEM.CURSOR_ITEM , item_canvas);

• Modificar o atributo visual do registro do item corrente. SET_ITEM_INSTANCE_PROPERTY( :SYSTEM.CURSOR_ITEM, VISUAL_ATTRIBUTE , CURRENT_RECORD, A_CORRENTE); • Habilitar o item save do menu. SET_MENU_ITEM_PROPERTY(‘arquivo.salvar’, ENABLED, PROPERTY_TRUE);
DBC Database Company
6

Código Flexível

SET_TAB_PAGE_PROPERTY(‘clientes.enderecos’, ENABLED , PROPERTY_TRUE);

DBC Database Company

7

Código Flexível

Referenciando objetos pelo ID interno
• • • O Oracle Forms atribui um ID interno para os objetos que você cria. O ID é um valor interno que nunca é mostrado. Você pode obter o ID de um objeto chamando a built-in FIND_ precedida pelo nome de subprograma apropriado para o tipo de objeto. A built-in FIND_ necessita do nome completo do objeto como parâmetro. Os valores retornados pela built-in FIND_ são de um tipo específico. Os tipos para IDs de objetos são predefinidos pelo Oracle Forms. Existe um tipo diferente para cada tipo de objeto.

Vantagens do uso de ID de objetos
• • • Melhor Performance. O Oracle Forms procura pelo ID do objeto uma única vez quando da chamada da buit-in FIND_. Quando você se referencia a um objeto pelo seu nome o Oracle precisa procurar pelo seu ID toda vez que você faz uma referência. Permite um código mais genérico.

DBC Database Company

8

Código Flexível

Built-ins FIND_ e tipos de dados retornados
Tipo de Objeto
ALERT BLOCK CANVAS EDITOR FORM ITEM LOV RELATION VIEWPORT WINDOW

Built-in FIND_
FIND_ALERT FIND_BLOCK FIND_CANVAS FIND_EDITOR FIND_FORM FIND_ITEM FIND_LOV FIND_RELATION FIND_VIEW FIND_WINDOW

Tipo de dado retornado
ALERT BLOCK CANVAS EDITOR FORM ITEM LOV RELATION VIEWPORT WINDOW

Para fazer uso de um ID de objeto você precisa primeiro atribuí-lo a uma variável. Você deve declarar a variável do mesmo tipo do ID do objeto.

Exemplo:
• Atribuindo o ID do item que possui o foco (input) corrente para uma variável. DECLARE v_id BEGIN v_id END; ITEM; := FIND_ITEM(‘itens.preco’);

Referenciando o item ITENS.PRECO na built-in SET_ITEM_PROPERTY: SET_ITEM_PROPERTY(v_id, POSITION, 50, 35);

Compare com a referencia ao Objeto pelo nome
• Referenciando o item ITENS.PRECO na built-in SET_ITEM_PROPERTY: SET_ITEM_PROPERTY(‘itens.preco’, POSITION, 50, 35);
DBC Database Company
9

Código Flexível

O.b.s.:
• • Você pode misturar referências a ID de objetos e a nome de objetos na mesma lista de argumentos de uma built-in, desde que, cada argumento se refira a um objeto distinto. Entretanto, você não pode utilizar um ID para compor o nome do objeto quando o argumento exige um nome totalmente qualificado (ex.: nome_bloco.nome_item).

Exemplo:
• A seguinte chamada é ilegal, supondo que v_bloco_id fosse uma variável tipo BLOCK utilizada para compor o nome do item ITENS.PRECO. GO_ITEM (v_bloco_id.‘preco’);

DBC Database Company

10

Código Flexível

Utilizando variáveis globais
• • • • Variáveis globais são aquelas que ficam ativas durante toda a sessão, ou seja, podem ser referenciadas por outros blocos além daquele onde a variável foi criada. Variáveis globais são utilizadas para passar valores de um bloco para outro, ou mesmo de um form para outro, desde que na mesma sessão de execução. Variáveis globais não precisam ser declaradas explicitamente, para se criar uma variável global basta atribuir um valor a uma variável com o prefixo :GLOBAL. As variáveis globais são do tipo de dado CHAR.

Built-in DEFAULT_VALUE
• Se por alguma razão uma variável global for referenciada e não tiver sido inicializada antes, um erro é gerado:

FRM-40815:variable GLOBAL.nome_variavel does not exist.

Você pode evitar este tipo de erro garantindo que a variável global exista através da built-in DEFAULT_VALUE; esta built-in cria e inicializa a variável global especificada caso ela ainda não exista.

Exemplos:
• A seguinte trigger WHEN-BUTTON-PRESSED para o item BOTAO_PEDIDOS atribui o valor do item CLIENTES.CODIGO para a variável global GLOBAL.CODIGO_DO_CLIENTE antes de chamar o form PEDIDOS.

DEFAULT_VALUE('NAO','GLOBAL.pedidos_abertos'); :GLOBAL.codigo_do_cliente := :clientes.codigo; IF :GLOBAL.pedidos_aberto= ‘SIM' THEN GO_FORM('pedidos'); ELSE OPEN_FORM('C:\Target\pedidos'); END IF;

A seguinte trigger PRE-QUERY para o bloco PEDIDOS atribui o valor da variável global GLOBAL.CODIGO_DO_CLIENTE para o item PEDIDOS.CODIGO_DO_CLIENTE antes da execução da consulta de modo que a consulta só traga pedidos para o cliente passado pelo form CLIENTES. := :GLOBAL.codigo_do_cliente;

:pedidos.codigo_do_cliente

DBC Database Company

11

Código Flexível

Utilizando a Built-in NAME_IN
• A built-in NAME_IN retorna o conteúdo da variável indicada através de uma referência indireta a variável.

Exemplo:
• As seguintes referências a CLIENTES.NOME são equivalentes.

Usando uma referência direta:
IF THEN ... :clientes.nome = ‘Womansport’

Usando uma referência indireta:
IF THEN ... NAME_IN(‘clientes.nome’) = ‘Womansport’

Exemplo :
• O valor de retorno de NAME_IN é sempre um string de caracteres. Para utilizar NAME_IN para um item tipo DATE ou NUMBER utilize a função de conversão apropriada. v_data := TO_DATE(NAME_IN(‘pedidos.data_do_pedido’));

DBC Database Company

12

Código Flexível

Utilizando a Built-in COPY
• A built-in COPY atribui o valor indicado a variável ou ao item indicado. Utilizando a built-in COPY você pode referenciar indiretamente o item para o qual você está atribuindo um valor.

Exemplo:
• Usando uma referência direta: COPY(‘Womansport’, ‘clientes.nome’);

COPY(‘Womansport’, :GLOBAL.nome);

Usando uma referência indireta: COPY(‘Womansport’, NAME_IN(‘clientes.nome’));

COPY(‘Womansport’, NAME_IN(‘global.nome’));

DBC Database Company

13

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Altere a trigger que popula o item IMAGEM_DO_PRODUTO de modo que ela só o faça se a propriedade Visible do item estiver setada para Yes. Utilize a built-in GET_ITEM_PROPERTY. 2. Salve, execute o módulo e teste-o. 3. Altere a trigger WHEN-BUTTON-PRESSED para o item BOTAO_IMAGEM de modo a referenciar os objetos pelos seus IDs. Declare as variáveis para cada ID e utilize a built-in FIND_ para obter o ID de cada objeto referenciado pela trigger. 4. Salve, execute o módulo e teste-o. 5. Altere a trigger WHEN-BUTTON-PRESSED para o BOTAO_SALVAR no bloco CONTROL de modo que ela execute um teste na variável de sistema SYSTEM.FORM_STATUS para verificar se houve alguma alteração no form. Somente execute a built-in COMMIT_FORM se houverem mudanças (SYSTEM.FORM_STATUS = ‘CHANGED’). 6. Salve, execute o módulo e teste-o. Encerre a sessão Oracle Forms Builder.

DBC Database Company

14

Oracle Forms Builder 6

19. Compartilhando Objetos e Códigos

DBC Database Company

Código Flexível

Objetivos
• • • • • • • Utilizar a variedade de métodos para reutilização de objetos e códigos. Utilizar classes de propriedades. Utilizar grupos de objetos para reutilização. Conhecer os símbolos de herança do Property Pallete. Reutilização de objetos de uma biblioteca de objetos (Objetct Library). Utilizar as facilidades de cópia e referência. Compartilhar códigos PL/SQL.

DBC Database Company

2

Código Flexível

Compartilhando e reutilizando Código
Você deve compartilhar e reutilizar objetos e códigos sempre que possível.

Vantagens da reutilização
• • • • Produtividade Diminuição da manutenção Modularidade Padronização

DBC Database Company

3

Código Flexível

Classes de Propriedades
• • • Uma classe de propriedades é um objeto que contém uma lista de propriedades e seus valores setados. Classes de propriedades são utilizadas para aumentar a produtividade, setando padrões ou valores freqüentemente utilizados para propriedades comuns, associando-as com alguns objetos do form. Utilize uma classe de propriedades para definir propriedades padrão não só para um objeto mas para muitos de uma só vez, o resultado é o aumento de produtividade.

Criando uma classe pelo Object Navigator
1. Clique na entrada Property Class. 2. Clique no ícone Create. Uma nova entrada de classe de propriedades deve aparecer. 3. Adicione as propriedades e seus valores para esta classe utilizando o ícone Add Property no Property Palette.

Copiando propriedades de um objeto para uma classe
1. No Object Navigator, clique nas propriedades do objeto cujo você deseja copiar para uma classe de propriedades. 2. No Property Palette, clique no ícone Property Class. Um alert será mostrado. 3. Utilize o Object Navigator para localizar a classe criada e troque seu nome.

Adicionando uma propriedade a uma classe
Após criar uma classe adicione uma propriedade clicando no ícone Add Property, escolhendo a propriedade a partir da lista. Defina o valor apropriado para a propriedade pelo Property Palette.

Deletando uma propriedade de uma classe
Após criar uma classe remova uma propriedade clicando no ícone Delete Property.

DBC Database Company

4

Código Flexível

Herdando uma classe de propriedades
1. No Object Navigator, clique na entrada do objeto para o qual você deseja herdar propriedades. 2. Vá para o Property Palette do objeto e clique na propriedade Subclass Information, escolha de onde você deseja herdar as propriedades: • Object: Propriedades herdadas de um item de um bloco em um módulo forms. • Property Class: Propriedades herdadas de uma classe de propriedades específica. 3. Os valores das propriedades herdadas da classe de propriedades são mostrados com uma seta.

Convertendo uma propriedade herdada (Inherit) para uma propriedade sobreposta (Variant)
Na propriedade do objeto, sobreponha um novo valor sobre o valor herdado da classe de propriedades.

Convertendo uma propriedade sobreposta (Variant) para uma propriedade herdada (Inherit)
Na propriedade do objeto clique no ícone Inherit.

DBC Database Company

5

Código Flexível

Grupo de Objetos
• • Um grupo de objetos (Object Group) é um conjunto lógico de objetos do Oracle Forms. Grupos de objetos são utilizados para agrupar objetos que se relacionam para serem copiados ou referenciados por outros módulos.

Criando um Grupo de Objetos
1. Clique na entrada Object Group do Object Navigator. 2. Clique no ícone Create. Uma nova entrada para Object Group deve aparecer. 3. Altere o nome do Object Group. 4. Clique na entrada Module do Object Navigator e clique no ícone Expand All. 5. Clique em todos os objetos de um mesmo tipo que você deseja incluir no Object Group. 6. Arraste os objetos selecionados para a nova entrada de Object Group do Object Navigator. Os objetos serão mostrados como filhos do Object Group. 7. Repita os passos 5 a 6 para outros tipos de objetos.

Obs.:
• • • Incluindo um bloco em um grupo de objetos, automaticamente se incluem todos os itens, triggers a nível de itens, triggers a nível de blocos e relações (relations). Você não pode utilizar nenhum destes objetos em um Grupo de Objetos sem o bloco. Deletando um objeto de um módulo, automaticamente é deletado o objeto do grupo de objetos. Deletando um grupo de objetos de um módulo não são deletados seus objetos filhos do módulo.

DBC Database Company

6

Código Flexível

Copiando e Referenciando Objetos e Códigos
Você pode copiar ou referenciar objetos entre módulos pelo Object Navigator, da seguinte maneira: 1. 2. 3. 4. Abra o módulo que possui o objeto a ser copiado. Abra o módulo para o qual você vai copiar o objeto. Selecione a entrada do objeto que você deseja copiar. Arraste o objeto selecionado para o tipo de entrada correspondente ao objeto no módulo destino. 5. No diálogo Copy or Subclass clique em Copy para copiar o objeto, e Subclass para referenciá-lo.

DBC Database Company

7

Código Flexível

Reutilizando PL/SQL
Você pode reutilizar PL/SQL em triggers das seguintes formas: 1. Copiando e colando o código pelo menu selecionando Edit -> Copy ou Edit-> Paste. 2. Copiando ou referenciando a trigger a partir de outro módulo form, utilizando Drag and Drop no Object Navigator.

Unidades de Programa PL/SQL
• • Você pode criar unidades de programa PL/SQL (Program Units que são Procedures e Functions) através do Oracle Forms. Uma Program Unit permite a utilização de parâmetros o que diminui a necessidade de cópia de objetos. Passos para a criação de uma unidade de programa 1. Clique na entrada Program Unit do Object Navigator. 2. Clique no ícone Create, o diálogo New Program Unit deve aparecer. 3. Entre com o nome da Program Unit e selecione o tipo (Procedure, Function, Package Specification ou Package Body). Clique em OK. 4. No PL/SQL Editor entre com o código PL/SQL. 5. Clique em Compile para compilar. 6. Clique em Close para salvar e fechar o PL/SQL Editor.

DBC Database Company

8

Código Flexível

Object Library
É uma espécie de repositório de objetos que serão utilizados nos módulos em desenvolvimento, com o objetivo de customizar e também padronizar objetos comuns no módulo.

Recursos de uma Object Library
• • • Podem conter itens individuais, por exemplo botão icônico. Em grupos de objetos o menor nível é o bloco. Você pode armazenar um código PL/SQL. Se você mudar uma propriedade em um objeto referência em uma biblioteca de objetos, todos os objetos referenciados serão trocados automaticamente.

Usando Object Libraries
• • • Selecione Tools->Object Library no Object Navigator. Arraste o objeto do Object Navigator para o Object Library. O comentário descritivo vem da propriedade de comentário de objeto, mas pode ser editado independentemente daquela propriedade’

Benefícios do Object Library
Há várias vantagens usando bibliotecas de objeto para desenvolver aplicativos: • Simplifica no compartilhamento e reutilização de objetos. • Provêem o controle e execuções defaults. • Elimina a necessidade de manter múltiplos forms referenciados.

DBC Database Company

9

Código Flexível

SmartClasses
Se você freqüentemente usa certos objetos padrões, como botões, itens data, e alertas, você pode marcar-los no Object Library como SmartClasses, e utilizar a opção de SmartClasses na referência de um item: • • Selecione o objeto na biblioteca de objeto e acione Object->SmartClass. Você pode criar muitos objetos SmartClasses de um mesmo tipo de objeto, por exemplo, do tipo item text uma SmartClass para número e outra para caracter.

Usando o SmartClass
• • • Selecione um objeto no Layout editor ou Object Navigator. Clique no botão direito do mouse, e selecione SmartClasses Escolha a classe requerida, e o forms seta todas as propriedades do objeto com esta classe.

DBC Database Company

10

Código Flexível

EXERCÍCIOS
1. Abra o módulo PEDIDOS. Crie um grupo de objetos (Object Group) chamado OBJETOS_DE_ESTOQUE, consistindo do bloco ESTOQUE, seu canvas e window. 2. Crie um novo módulo e copie o grupo de Objetos (Object Group) OBJETOS_DE_ESTOQUE para ele. 3. No novo módulo crie uma classe de propriedades (Property Class) chamada CLASSE_A. Defina as seguintes propriedades para a classe: • Font Name: Arial • Format Mask: 99,999 • Font Size: 8 • Justification: Right • Delete Allowed : No • Background Color: Darkred 4. Aplique a CLASSE_A ao canvas e aos seguintes itens: PEDIDOS: • DATA_DO_PEDIDO. ESTOQUE: • QUANTIDADE_MAXIMA • QUANTIDADE_MINIMA 5. Salve, execute o módulo e teste. Observe o erro. 6. Corrija o segundo erro. 7. Salve, execute o form e teste. Encerre a sessão Oracle Forms Builder.

DBC Database Company

11

Oracle Forms Builder 6

20. Aplicações Multi-Form

DBC Database Company

Código Flexível

Objetivos
• • • Entender os vários métodos de invocar um form a partir de outro. Invocar um form dentro da mesma transação e sessão. Passar valores entre módulos form através de variáveis globais.

DBC Database Company

2

Código Flexível

Iniciando outro Módulo Form
Formas de iniciar outro módulo form
• • Através de uma buit-in a partir de uma trigger no form. Através de um item de Menu em um Menu associado (attached) ao form.

DBC Database Company

3

Código Flexível

Buit-in OPEN_FORM
• • • Esta é uma built-in restrita e não pode ser chamada no modo Enter Query. A Built-in OPEN_FORM permite iniciar outro form em uma janela Modeless, de modo que o operador possa trabalhar em ambos os forms ao mesmo tempo, alternando as janelas. Esta builtin é normalmente a maneira mais utilizada em aplicações Multi-Form. Você pode iniciar outro form através de OPEN_FORM sem passar o controle para ele imediatamente. Você também tem a opção de iniciar uma outra sessão para o novo Form.

Sintaxe:
OPEN_FORM ( , , , , ‘nome_do_form’ ACTIVATE_MODE SESSION_MODE DATA_MODE lista_de_parâmetros);

Argumentos: Parâmetro
Nome_do_form ACTIVATE_MODE SESSION_MODE DATA_MODE Lista_de_parâmetros

Descrição
Nome do arquivo executável do módulo (sem o sufixo .FMX). O Path default do Oracle Forms é utilizado, a menos que você forneça como parte do string de caracteres. ACTIVATE : default, torna o módulo iniciado ativo. NO_ACTIVATE: mantém o módulo chamador ativo, não passa o controle para o outro módulo imediatamente). NO SESSION (default): não inicia nova sessão. SESSION : inicia nova sessão NO_SHARE_LIBRARY_DATA: default,não usa a library do chamador. SHARE_LIBRARY_DATA: permite usar a library do chamador. Nome do parâmetro entre aspas simples ou ID interno de um parâmetro de uma lista de parâmetros.

DBC Database Company

4

Código Flexível

Passando valores para outro Módulo Form
Utilizando variáveis Globais – Revisão
Como vimos anteriormente, as variáveis globais são utilizadas para passar valores de um bloco para outro, ou mesmo de um módulo para outro, desde que na mesma sessão de execução.

Criando variáveis Globais
No exemplo abaixo, será criada a variável Global que armazenará o cliente corrente no módulo forms CLIENTES. :GLOBAL.codigo_do_cliente := :clientes.codigo;

Recebendo valores atravéz de variáveis Globais
Utilize a Built-in DEFAULT_VALUE para previnir a utilização da variável, sem ela existir. No exemplo abaixo, a trigger PRE-QUERY, utiliza o valor da variável global CODIGO_DO_CLIENTE, para forçar a consulta no bloco PEDIDOS de somente para os pedidos do cliente passado no forms CLIENTES. DEFAULT_VALUE(‘#’, ‘GLOBAL.codigo_do_cliente’); IF :GLOBAL.codigo_do_cliente <> ‘#’ THEN :pedidos.codigo_do_cliente := :GLOBAL.codigo_do_cliente; END IF;

DBC Database Company

5

Código Flexível

Navegando para um módulo já aberto na sessão
Built-in GO_FORM
A built-in GO_FORM passa o controle para um módulo forms que já está em execução.

Syntaxe
OPEN_FORM(‘nome_do_módulo’);

Exemplo
GO_FORM(‘pedidos’);

DBC Database Company

6

Código Flexível

Definindo funcionalidades a uma aplicação Multi-Form
Fechando um form e a sessão Runform
Um form pode ser fechado e passar o controle para o form chamador. Formas de fechar um form: • • O operador seleciona Action -> Exit a partir do Menu. A built-in EXIT_FORM é executada a partir de uma trigger.

Built-in EXIT_FORM
• Sintaxe: EXIT_FORM (COMMIT_MODE);

Argumentos: COMMIT_MODE
ASK_COMMIT DO_COMMIT NO_COMMIT NO_VALIDATE

Descrição
Deixa a decisão para o operador através de um alert (default). Alterações são colocadas no Banco de dados (Post) e efetivadas (Commit) para todos os forms da transação corrente (Numa chamada OPEN_FORM). Executa validação e efetua o Rollback das alterações não efetivadas (commited) no form corrente. Não executa validação e efetua o Rollback das alterações não efetivadas (commited) no form corrente.

DBC Database Company

7

Código Flexível

EXERCÍCIOS
1. Abra o módulo CLIENTES. Crie um botão no bloco CONTROL chamado BOTAO_PEDIDOS. 2. Defina uma trigger para o botão BOTAO_PEDIDOS que inicialize a variável global GLOBAL.CODIGO_DO_CLIENTE com o valor corrente do item CLIENTES.CODIGO e então inicialize o form PEDIDOS, passando o controle para ele. Utilize a built-in OPEN_FORM. 3. Abra o módulo PEDIDOS. Crie uma trigger PRE-FORM para garantir que uma variável global chamada GLOBAL.CODIGO_DO_CLIENTE exista. Utilize a built-in DEFAULT_VALUE para atribuir o valor ‘#’ se a variável global não existir. 4. Adicione uma trigger para garantir que as consultas no bloco PEDIDOS, possuam como argumento o valor da variável Global CODIGO_DO_CLIENTE. Utilize uma trigger PRE-QUERY no bloco PEDIDOS que atribua o valor da variável global ao item CODIGO_DO_CLIENTE. 5. Gere o executável do módulo PEDIDOS. • Clique em qualquer parte do módulo e utiliza a opção no menu File -> Administration -> Compile File CTRL+T 6. Salve ambos os módulos. Execute o módulo CLIENTES, consulte um cliente e de dentro do cadastro de clientes, consulte os pedidos dele, clicando no botão pedidos.

Extra
7. No módulo PEDIDOS, crie uma trigger POST-FORM para sinalizar que o módulo PEDIDOS já está em execução. Nela atribua ‘NAO’ a variável Global PEDIDOS_ABERTO. 8. Na trigger PRE-FORM atribua ‘SIM’ a variável Global PEDIDOS_ABERTO. 9. No módulo CLIENTES, altere a trigger WHEN-BUTTON-PRESSED do BOTAO_PEDIDOS, de modo que ela utilize a built-in GO_FORM, navegando para o módulo PEDIDOS, se ele estiver aberto. Teste o valor da variável global PEDIDOS_ABERTO . Lembre-se de inicializar a variável global utilizando a built-in DEFAULT_VALUE para caso ela não existir. 10. Escreva uma trigger WHEN-CREATE-RECORD no bloco PEDIDOS que utiliza o valor da variável global CODIGO_DO_CLIENTE como valor default para o item CODIGO_DO_CLIENTE do bloco PEDIDOS. 11. No módulo CLIENTES, altere as triggers WHEN-VALIDATE-ITEM do item CLIENTES.CODIGO e WHEN-NEW--RECORD-INSTANCE do bloco CLIENTES, para atualizar a variável global CODIGO_DO_CLIENTE com o novo valor do item CODIGO do bloco CLIENTES.
DBC Database Company
8

Código Flexível

12. Salve, execute, e teste o módulos. Encerre a sessão Oracle Forms Builder.

DBC Database Company

9

Sign up to vote on this title
UsefulNot useful