Manual Forms 9i Sumário 1. Oracle Forms................................................................................................................... 4 1.1 Tipos de Módulos ..................................................................................................... 4 1.2 Módulo Form ............................................................................................................ 4 1.3 Abrindo uma sessão Oracle Forms Builder .............................................................. 5 1.4 Criando um novo módulo form................................................................................. 6 1.5 Conectando-se ao banco ........................................................................................... 6 1.6 Trocando o nome de um módulo form ..................................................................... 7 2. Blocos ............................................................................................................................. 8 2.1 Criando um bloco...................................................................................................... 8 2.2 Especificando a criação de um bloco de controle..................................................... 8 2.3 Especificando a criação de um bloco baseado em uma origem de dados, usando a Data Block Wizard.......................................................................................................... 9 2.4 Escolha do tipo de origem de dados ......................................................................... 9 2.5 Especificação da origem dos dados do tipo Table or View .................................... 10 2.6 Etapa final da criação do bloco de dados................................................................ 11 2.7 Usando o Layout Wizard para especificação dos itens do bloco............................ 12 2.8 Funcionalidades da criação de um bloco Base Table ............................................. 16 2.9 Removendo um bloco ............................................................................................. 17 2.10 Propriedades de um bloco..................................................................................... 17 2.11 Salvando um módulo form.................................................................................... 19 2.12 Executando um módulo form................................................................................ 19 3. Relacionamento entre Blocos ....................................................................................... 21 3.1 Criando um relacionamento entre dois Blocos ....................................................... 21 3.2 Construindo um módulo form mestre detalhe ........................................................ 21 3.3 Executando um módulo form mestre detalhe ......................................................... 22 3.4 Propriedades de relacionamento ............................................................................. 23 4. Frames........................................................................................................................... 24 5. Itens tipo Texto ............................................................................................................. 25 5.1 Criando um item tipo texto ..................................................................................... 25 5.2 Propriedades de um text item.................................................................................. 25 5.3 Alterando cores e fontes.......................................................................................... 26 5.4 Controlando os dados em um text item................................................................... 26 5.5 Formatando itens..................................................................................................... 26 5.6 Alterando o comportamento de navegação............................................................. 27 5.7 Alterando o relacionamento do item com o banco de dados .................................. 27 5.8 Adicionando funcionalidades a um item................................................................. 28 5.9 Adicionando funções de grupo e fórmulas a um item ............................................ 28 5.10 Labels associados do item..................................................................................... 29 6. LOVs e Editores............................................................................................................ 30 6.1 Conceito de Lista de Valores (LOV) ...................................................................... 30 6.2 Utilizando uma LOV em momento de execução.................................................... 30 6.3 Definindo uma Lista de Valores (LOV) ................................................................. 30 2 6.4 Criando uma Lista de Valores (LOV)..................................................................... 31 6.5 Propriedades da LOV.............................................................................................. 32 6.6 Mapeamento colunas da LOV para itens do bloco ................................................. 33 6.7 Associando uma LOV a um item tipo texto............................................................ 33 6.8 Conceito de Editor .................................................................................................. 34 6.9 Utilizando um Editor em momento de execução.................................................... 34 6.10 Associando um Editor a um item tipo texto.......................................................... 34 7. Outros tipos de Itens ..................................................................................................... 36 7.1 Check-box ............................................................................................................... 36 7.2 Passos para criar um item tipo Check-box no Layout Editor ................................. 36 7.3 Propriedades específicas de um item tipo Check-box ............................................ 36 7.4 Tratando valores nulos em itens tipo Check-box.................................................... 37 7.5 List .......................................................................................................................... 37 7.6 Criando um item tipo List ....................................................................................... 38 7.7 Propriedades específicas de um item tipo List........................................................ 38 7.8 Tratando valores nulos em itens tipo Lista ............................................................. 39 7.9 Radio Groups .......................................................................................................... 39 7.10 Propriedades específicas de um item tipo Radio Groups...................................... 40 7.11 Tratando valores nulos em um Radio Groups....................................................... 41 8. Itens tipo Não Input ...................................................................................................... 42 8.1 Itens tipo Display .................................................................................................... 42 8.2 Itens tipo Button...................................................................................................... 42 9. Windows, Canvas e Viewport....................................................................................... 44 9.1 Propriedades de uma Window ................................................................................ 44 9.2 Conceito de content canvas..................................................................................... 44 9.3 Stacked canvas ........................................................................................................ 45 9.4 Canvas Toobar ........................................................................................................ 45 9.5 Tab Canvas.............................................................................................................. 45 10. Triggers ....................................................................................................................... 46 10.1 Trigger Type ......................................................................................................... 46 11. Produzindo Triggers.................................................................................................... 47 11.1 Criando uma Trigger pelo Object Navigator ........................................................ 47 11.2 Suplementando validações.................................................................................... 47 13. Executando um Form no modo Debug ....................................................................... 49 14. Respondendo a interações com itens .......................................................................... 50 15. Triggers de Consulta ................................................................................................... 51 15.1 Trigger PRÉ-QUERY ........................................................................................... 51 15.2 Trigger POST-QUERY......................................................................................... 51 15.3 POST-QUERY e WHEN-VALIDATE-ITEM ..................................................... 52 16.Validações.................................................................................................................... 52 16.1 Utilizando LOVs para validações ......................................................................... 53 16.2 Utilizando Triggers para Validações .................................................................... 53 17. Aplicações Multi-Form............................................................................................... 54 17.1 Buit-in OPEN_FORM .......................................................................................... 54 17.2 Built-in CALL_FORM ......................................................................................... 54 3 1. Oracle Forms Oracle Forms é o principal produto do Developer/2000. Com o Form Builder é possível: • Criar aplicações que utilizem diversos de dados, e principalmente o banco de dados Oracle. • Construir aplicações rapidamente utilizando os Wizards. • Construir aplicações que são portáveis para vários ambientes. • Facilmente copiar ou mover objetos e suas propriedades entre os componentes e as aplicações. • Usar tipos familiares e comuns de ferramentas Developer/2000, como editor de layout, navegador objetos e ambiente PL/SQL de desenvolvimento. 1.1 Tipos de Módulos Uma aplicação Oracle Forms pode ser composta de muitos módulos. Podem ser criados quatro tipos de módulos: Módulo Descrição Form Apresenta os objetos e os dados que os usuários podem ver ou interagir. Itens de dados em um Form são organizados em registros. Telas (janelas) com blocos pertencentes ou não a tabelas do Banco de Dados que proporcionam consultas, inserções, atualizações e deleção de linhas. Menu É composto por uma hierarquia de menus, cada qual com itens selecionáveis. Interface hierárquica com o objetivo de prover um método simples de emitir comandos para a aplicação. Library É o conjunto de subprogramas PL/SQL armazenados centralizados, proporcionando reutilização. Object Libraries É um conjunto de diferentes objetos armazenados pelo desenvolvedor para assim referenciar ou copiá-los em um módulo forms. Biblioteca de objetos, armazena objetos criados pelo desenvolvedor, para serem copiados ou referenciados a módulos forms. 1.2 Módulo Form Módulos Forms consistem no corpo principal de uma aplicação Oracle Forms. Consistem de vários tipos de objetos e alguns desses objetos são visíveis ao usuário no momento da execução. São eles: • 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 uma mesma tabela ou fazer parte de um mesmo ciclo de navegação. 4 • Canvas - É a superfície onde os objetos visuais estão arranjados. 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. Quando um form é executado, a navegação é feita através dos seus conteúdos por meio de itens e blocos, não por canvas. Cada item tem uma posição seqüenciada dentro do bloco, e cada bloco tem uma posição seqüenciada no form. Para mover para o próximo item do bloco, o foco será mudado para o próximo item da seqüência, esteja ele onde estiver. Se o próximo item está em um canvas diferente, então este canvas será mostrado automaticamente. Similarmente, podemos mover para o próximo bloco (ou bloco anterior). Se o primeiro item neste bloco reside em um outro canvas, então aquele canvas é mostrado automaticamente. Se já sabes o item que vai ser movido, então a aplicação pode permitir que você clique diretamente com o mouse. Também pode-se programar comandos dentro da aplicação para permitir a navegação em outros modos. 1.3 Abrindo uma sessão Oracle Forms Builder 5 Para abrir uma sessão, siga os seguintes passos: • Clicar Iniciar/Programas/Oracle9 Developer Suite/Forms Developer/Form Builder 1.4 Criando um novo módulo form 1.5 Conectando-se ao banco 6 1.6 Trocando o nome de um módulo form 7 2. Blocos Bloco é o dono lógico de um item, os armazena e contém propriedades que afetam ao funcionamento dos quais. Um bloco pode ser de controle, sem ser baseado a uma origem de dados ou ser Base Table, baseado a uma tabela, view ou array. 2.1 Criando um bloco 2.2 Especificando a criação de um bloco de controle • Siga os passos para a criação de um bloco... • Selecione a opção Build a new data block manually. • Clique OK. Um Control Block é um bloco que não está associado a nenhuma tabela base. Em outras palavras a propriedade Base Data Block é NULL. Use um bloco de controle para colocar botões que poderão ser colocados em um canvas ou em um toolbar. 8 2.3 Especificando a criação de um bloco baseado em uma origem de dados, usando a Data Block Wizard 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. 2.4 Escolha do tipo de origem de dados • • Table or View: Tabela ou View do banco; Store Procedure: Array em forma de record retornado de uma procedure de banco. 9 2.5 Especificação da origem dos dados do tipo Table or View 1. Escolha o tipo da origem de dados do bloco, tabela ou view, caso não saiba, pressione o botão Browser 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 inteagrity, para quando criar um bloco, também criar triggers relativas as constraints de controle de banco; 4. Clique no botão Next para seguir para a próxima página do Assistente, ou Finish para concluir as opções até aqui. 1 3 2 4 10 2.6 Etapa final da criação do bloco de dados Na seguinte página do Assistente selecione uma das opções: • Create the data block, then call the Layout Wizard: após criar o bloco executa o Assistente de criação de Layout; • Just create the data block: não executa o Assistente de Layout, deixando para que o usuário faça mais tarde. 11 2.7 Usando o Layout Wizard para especificação dos itens do bloco Seleção do canvas no qual será adicionado os itens do bloco. Selecione em qual canvas deseja posicionar os dados do bloco: • Selecione um Canvas já existente na lista; • Ou (New Canvas: criará um novo canvas) 12 Seleção dos itens do bloco que serão incluídos no layout Acerto dos pronpts e tamanho dos itens Seleção do estilo dos prompts em relação aos itens • Form: Label à esquerda do Item; 13 • Tabular: Label à cima do item. Especificação do scrollbar e argumentos de agrupamento de tela • Frame Titler: Descrição do frame envolvendo os dados do bloco. • Records Displayed: Número de records mostrados no bloco. 14 • • Distance Between Records: Espaçamento entre os records do Item. Display Scrollbar Check Box: Se o bloco deve possuir uma barra de rolagem dos registros. Conclusão das especificações de geração de itens do bloco E finalmente e mostrada uma página de conclusão bastando pressionar o botão Finish. 15 2.8 Funcionalidades da criação de um bloco Base Table Na criação de um bloco base table e forms arranja e modifica as propriedades de canvas, frames e itens, automaticamente conforme as especificações da origem dos dados e de Layout Wizard setadas ao criar o bloco, facilitando e agilizando ainda mais na construção de uma aplicação. Algumas tarefas efetuadas pelo forms ao criar o bloco: • Cria um bloco e seta suas propriedades para as definições defoult da tabela, view ou array. • Cria um item tipo Text para cada coluna da tabela base marcada para inclusão. • Seta as propriedades para cada Text item 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 da tabela base no frame específico do canvas de acordo com as propriedades de layout. É possível programar um bloco não base table para acessar dados originados de várias tabelas escrevendo triggers, mas um bloco base table pode ter semente uma tabela base. Para a tabela base, o Oracle Forms automaticamente: 16 • Cria itens em um bloco para corresponder a colunas em uma tabela. • Produz códigos em um form para empregar regras das constraints da tabela. • Gera SQL no momento de execução (SQL implícito) para inserir, atualizar, apagar e pesquisar linhas na base table, baseada nas ações do usuário. No momento de execução pode ser usado chaves de função padrão, botões, ou opções de menu para iniciar pesquisa, inserir, atualizar ou apagar dados na tabela base, e as subseqüentes de transação. 2.9 Removendo um bloco • • • • Selecione o bloco desejado no Object Navigator. Clique no ícone Delete no Object Navigator. Um alert box solicita a confirmação. Clicar em Yes. 2.10 Propriedades de um bloco Através das propriedades de um bloco pode-se controlar o comportamento e a aparência dos blocos. Para acessar a paleta de propriedades, selecione o bloco no navegador, clique com o botão direito sobre o mesmo e escolha a paleta de propriedades. Segue a definição das principais propriedades do bloco: General Properties Descrição Especifica o nome interno do objeto. Todo objeto deve ter um nome válido que seja compatível com as convenções de nomenclatura do Oracle. Aplica-se a todos os Objetos. Subclass Information Durante a existência de uma aplicação, pode ser necessário atualizar informação sobre a origem de um objeto de sub-classe. Por exemplo, se o nome do objeto de origem mudou, Form Builder estará incapacitado de localizar o objeto quando você compila um módulo que se refira a ele. Similarmente, mover um módulo de origem a partir do sistema de arquivos para o banco de dados, invalidará referência a aquele módulo. Você pode atualizar a informação sobre objetos de origem sub-classe, definindo a Propriedade Subclass Informatiom. A definição de um objeto sub-classe inclui informação sobre objetos de origem no qual ele é baseado, incluindo o nome do objeto de origem, o nome do módulo de origem e o local de armazenamento. Nota: Tomar cuidado quando modificar essa propriedade. Se digitar o nome ou o local de origem do objeto incorretamente, as propriedades herdadas do objeto irão se reverter aos valores padrão Name 17 para o tipo de objeto. Navigation Navigation Style Records Properties Descrição Determina como uma operação Next Item ou Previous Item, é processada quando o foco está no último item navegável ou no primeiro item navegável no bloco respectivamente. Aplica-se a blocos. Descrição Current Record Especifica o atributo visual nomeado usado quando um item é parte Visual Attribute do registro atual. Aplica-se a form, block e item. Group Number of Records Especifica o número mínimo de registros em buffer de memória Buffered durante uma pesquisa em um bloco. Default = NULL; que indica que o mínimo valor permitido é o valor definido para a propriedade Records Displayed + 3. Number of Records Especifica o número máximo de registros que um bloco pode Displayed mostrar de uma vez. O padrão é 1. Definir o número máximo de registros exibidos para mais de 1, cria um registro multi-bloco. Especifica se todos os registros seguindo o critério de pesquisa, Query All Records deverão ser trazidos para o data block quando uma pesquisa é executada. Aplica-se a blocos. Database Properties Descrição Database Data Block Define se o bloco é baseado em tabela, procedure, transactional trigger ou sub-query Define se aplicações e usuários finais podem fazer pesquisas no Query Allowed bloco. Query Data Source Especifica o nome da origem de dados para pesquisa no bloco. Essa Name propriedade vale quando o tipo é tabela, sub-query ou procedure. WHERE clause As propriedades padrão WHERE Clause e ORDER BY Clause ORDER BY clause especificam cláusulas standard SQL clauses para o comando padrão SELECT associado a um data block. Essas cláusulas são automaticamente incorporadas ao comando Select que o Form Builder constrói e emite sempre que o operador da aplicação executa uma pesquisa no bloco. Define se registros podem ser inseridos no bloco. Insert Allowed Update Allowed Define se registros podem ser atualizados no bloco. Delete Allowed Especifica se registros podem ser apagados do bloco. 18 Scroll Bar Properties Show Scroll Bar Descrição Scroll Bar Canvas Define se deve ser criada uma scroll bar para o bloco que está sendo criado. Canvas no qual a Scroll Bar deve ser exibida. Scroll Bar Tab Page Tab Canvas onde a scroll bar aparece. 2.11 Salvando um módulo form Duas formas para salvar um módulo: • Selecionando File -> Save As ou • Clicando no ícone Save As duas opções causam o aparecimento do diálogo File para o salvamento inicial. Então deve entrar com o nome do arquivo e clicar em OK. 2.12 Executando um módulo form Pode-se executar um módulo sem sair do Form Builder: • Selecionando Program -> Run Form <CTRL + R> ou • Clicando no ícone Run. 19 Quando você termina a sua sessão Runform, retorna ao Oracle Forms Buider. 20 3. Relacionamento entre Blocos 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. Para suportar relacionamentos entre blocos e suas tabelas bases, pode ser definido um bloco com detalhe (detail) do outro. Isso permite usar valores de chave primária e chave estrangeira para conectar os blocos e sincronizar os dados que eles mostram. 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 Entidade Relacionamento. • Um bloco detalhe pode ser um bloco mestre em relação a outro bloco. • Um bloco mestre pode ter mais de um bloco detalhe. 3.1 Criando um relacionamento entre dois Blocos O Oracle Forms Application consiste em mais de um bloco. Isso pode ser para: • Separar o ciclo de navegação de um grupo de itens do outro. • Mapear cada bloco em uma tabela de banco de dados diferente (você pode ter uma tabela base por bloco). • Produzir um form master-detail, com um master block e blocos de detalhe correspondente que são relacionados com o master. Existem duas formas de criar relacionamentos: - Implícita: quando você cria um módulo form com blocos associados Mestre Detalhe o objeto tipo Relação (Relation) é criado implicitamente. - Explicita: se a relação não é estabelecida na criação dos blocos você pode criar a relação posteriormente. Alguns pontos a serem considerados quando agrupa-se blocos em uma aplicação: Blocos no mesmo Módulo Form Blocos em diferentes Módulos Forms Podem ser diretamente conectados em um relacionamento Máster-Detail Navegação entre blocos manuseada por funcionalidade padrão Não pode ser conectado por relações interbloco padrão Navegação entre blocos de diferentes forms são programadas pelo designer 3.2 Construindo um módulo form mestre detalhe • • Criar o bloco mestre normalmente. Criar o bloco detalhe setando as opções de relacionamento: o Clique no botão Create Relationship; 21 o Ao mostrar lista de blocos selecione o bloco mestre; o Se necessário corrija a condição de join. 3.3 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. 22 3.4 Propriedades de relacionamento Ao alterar as propriedades de uma relação o comportamento das deleções e das coordenações é afetado. Segue as principais propriedades: Master Deletes Propriedade Non Isolated Cascading Isolated 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. Coordenação de consultas Propriedade Uso Força a coordenação dos blocos de maneira à sempre que o registro mestre for trocado os correspondentes registros detalhes serão apresentados. Deferred with Auto Adia a consulta dos registros detalhes associados ao registro mestre Query de maneira que eles sejam consultados automaticamente no momento em que o cursor se posicionar no bloco detalhe. Deferred winhout Adia a consulta dos registros detalhes associados ao registro mestre Auto Query de maneira que eles sejam consultados no momento em que o cursor se posicionar no bloco detalhe e for executada uma consulta no bloco detalhe. Provent Masterless Garante que um bloco detalhe não pode ser consultado ou utilizado Operations para inserção de registros quando não existe um registro mestre. Default 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 23 4. Frames Frames é o dono lógico de um grupo de itens do bloco, no canvas, onde pode-se referenciar os itens deste bloco diretamente pelo frame, podendo assim dimensioná-los, e preenchê-los automaticamente na área do mesmo. Também é possível setar algumas propriedades comuns nos itens do mesmo, pelo frame. Frame 4.1 Propriedades de um frame Propriedade Descrição Name Nome do frame. Update Layout Forma de controle do frame com os itens englobados por ele: Automatically: dimensiona e controla os itens automaticamente, ao setar propriedades no frame, são repassadas 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; 24 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. Layout Style 5. Itens tipo Texto Um item de texto ou text item é um objeto de interface que permite consultar, inserir, atualizar e deletar dados. Um item de texto geralmente corresponde a uma coluna na tabela de banco de dados. O tipo de item determina as propriedades disponíveis na paleta de propriedades que é usada para definir, alterar ou examinar as características dos itens. 5.1 Criando um item tipo texto Pode-se criar um item do tipo texto de quatro formas: • Convertendo um item existente em Item de texto. • Usando a text item tool no editor de layout. • 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. Para criar um item tipo Text, deves seguir os passos seguintes: • Entre no Layout Editor. Selecione Tools/Layout Editor • Clique no ícone Text Item do Toolbar no 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. 5.2 Propriedades de um text item Propriedade Item Type Canvas Visible Visual Atribute Group Number of Itens Displayed 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 Especifica o nome de um atributo visual previamente definido Define o número de ocorrências de um item 25 5.3 Alterando cores e fontes Utilize a propriedade Visual Attribute Group para selecionar cores e fontes para o item de texto. Um atributo visual é uma seleção de propriedades de display que você pode aplicar a um objeto Oracle Forms. Há três diferentes tipos de atributos visuais: • Default • Custom • Named 5.4 Controlando os dados em um text item Use as seguintes propriedades de dados de um item de texto 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 pode ter dois itens em um bloco que simultaneamente representam o mesmo valor. Data Type Determina o tipo de dado Oracle permitido como entrada para este item. Maximum Length Define o número máximo de caracteres permitidos para este item. Geralmente corresponde a largura da coluna da tabela base. Required Determina se o item é obrigatório. Format Mask Define o formato da máscara para o item. Initial Value Especifica o valor default para o item a cada novo registro. 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. 5.5 Formatando itens A propriedade de formato de máscara permite especificar o formato no qual o usuário vê o valor do item. Utilize o formato de sintaxe padrão de SQL para datas e números, por exemplo DD/MM/YY e 99,999.99. Para definir um valor default para cada item utilize uma das seguintes opções: 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 26 $$DATETIME$$ - data do sistema operacional no formato DD-MON-YYYY 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-MON-YYYY hh:mi:[ss] $$DBTIME$$ - hora do Banco de dados no formato hh:mi:[ss] 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 Item do Form Sequence 5.6 Alterando o comportamento de navegação Pose-se 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 arrastálo para a posição desejada na seqüência de navegação. Propriedades: 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 Especifica o nome do item que é definido como “previous navigation item” a respeito do item atual. Por padrão esse é o item com a próxima menor seqüência no form como indicado pela ordem dos itens no objeto navegador. Entretanto pode definir essa propriedade para redefinir o item anterior para finalidades de navegação. Especifica o nome do item que é definido como “next navigation item” a respeito do item atual. Por padrão esse é o item com a próxima maior seqüência no form como indicado pela ordem dos itens no objeto navegador. Entretanto pode definir essa propriedade para redefinir o próximo item para finalidade de navegação. 5.7 Alterando o relacionamento do item com o banco de dados Pode-se 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 27 Database Item Column Name Primary Key Insert Allowed Query Allowed Update Only if NULL Indica o item corresponde a uma tabela do banco de dados Estabelece que um item corresponde a uma coluna na tabela associada ao data block. Indica que o item é um item de tabela base em um data block e que corresponde a uma coluna de chave primária na tabela base. Form Builder exige que os valores das chaves primárias sejam únicos. Determina se o item permite a inserção de valores. Esta propriedade se aplica somente para novos registros. Determina se o item permite a utilização de critérios de consulta sobre ele. Determina se o item permite atualização somente quando o valor corrente é nulo (NULL). Esta propriedade se aplica somente a registros já existentes. 5.8 Adicionando funcionalidades a um item Adicione à funcionalidade padrão de um item de texto, introduzindo algumas das características adicionais: Funcional Properties Descrição Justification Determina o critério de alinhamento do item Multi-Line Determina se o item pode armazenar mais de uma linha de texto. Utilizado para colunas VARCHAR2 e LONG Wrap Style Determina se um item multi-line continua na próxima linha. None: não continua Character: continua normalmente Word: continua sem truncar Cancel Data Determina se o valor do item digitado deve ser possível ao usuário Automatic Skip Determina se o cursor automaticamente pula para o próximo item ao completar o item 5.9 Adicionando funções de grupo e fórmulas a um item É possível adicionar funções e fórmulas a um item, usando as seguinte propriedades: Calculation Properties Calcalation Mode Descrição Especifica o que será adicionado ao item: 28 Formula Summary Function Summarized Block Summarized Item Fórmula: 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 Para sumarizar um item deve-se seguir o seguinte critério: • O item sumarizado deve estar no bloco do sumarizados • O item sumarizado deve estar em um bloco de controle, o qual deve possuir a propriedade Single Record para Yes, e o bloco sumarizado deve estar com a propriedade Query All Records como Yes 5.10 Labels associados do item Pronpt Properties Prompt Prompt Justification Descrição Descrição do label do item Estabelece que um item corresponde a uma coluna na tabela associada ao data block. 29 6. LOVs e Editores LOVs e Editores são objetos em um módulo form que cada um abre sua própria janela quando ativados no momento de execução. Eles são definidos em nível form, o que significa que podem ser usados para suportar itens em qualquer bloco do módulo form. 6.1 Conceito de Lista de Valores (LOV) Uma LOV oferece ao operador do form, uma LOV dinâmica. O operador pode reduzir as linhas exibidas na lista por simples técnicas de auto-redução ou por strings de busca. Cada linha em uma LOV pode apresentar vários valores de campo, com cabeçalhos de colunas acima. As 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; • Flexíveis – pode-se usar a mesma LOV para suportar vários itens, se apropriando; • Eficiente – pode-se definir LOVs que utilizem 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. 6.2 Utilizando uma LOV em momento de execução • • • • Posicione o cursor no item que possui a lista de valores associada. 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 Escolha um dos valores oferecidos pela lista. Pode-se digitar caracteres para auto-reduzir a lista ou entrar com um argumento de pesquisa no campo Find Clique em OK ou dê duplo clique na opção escolhida para recuperar o valor da lista 6.3 Definindo uma Lista de Valores (LOV) Existem três objetos envolvidos na criação de uma LOV: • 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. 30 • 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 à lista de valores (LOV), a partir do qual a lista de valores poderá ser chamada. 6.4 Criando uma Lista de Valores (LOV) Selecione a entrada LOVs no Object Navigation e clique no ícone Create. A janela de diálogo para a criação de um LOV deverá ser apresentada. Elemento Radio Gruop Select (Button) Query Text Descrição Indica a origem dos dados que comporão a lista de valores: Existing Record Group – se o Record Group base para este LOV já foi criado anteriormente. V2-Style TABLE COLUMN Values – raramente utilizado, esta opção existe para manter compatibilidade com SQL*Form V2. New Record Group based on the Query bellow – normalmente a mais utilizada, será criado um Record Group baseado no texto da Query definido para este LOV. Botão utilizado para ver a lista de record Groups, no caso de se optar por utilizar um Record Group já existente. Área multi-line onde se entra com o comando SQL (SELECT) para compor os valores do Record Group que será criado para este LOV. Utilize esta opção na criação de uma LOV baseada em um novo Record Group associado a uma consulta (SELECT). 31 6.5 Propriedades da LOV Após a criação da LOV é importante definir outras prioridades importantes. Propriedade Name Title Column Mapping Properties Automatic Select Automatic Display Automatic Refresh Automatic Skip Descrição Define um nome apropriado para a LOV Define um título Clicando no botão More é apresentada à janela Column Mapping 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 executa a consultas somente na primeira vez que a LOV é chamada No retorno da LOV o cursor se posiciona automaticamente no 32 Automatic Position Filter Before Display 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 6.6 Mapeamento colunas da LOV para itens do bloco Pode-se montar a 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 Name Return Item Display Width Column Title 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 () determina que a coluna fique invisível enquanto o valor fica disponível para ser retornado. Cabeçalho para a coluna na janela LOV. 6.7 Associando uma LOV a um item tipo texto Após a criação de 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: • Selecione o item no Object Navigator • No Properties Palette do item selecione a propriedade LOV • Escolha a LOV para este item a partir da lista apresentada • Para apresentar a LOV em coordenadas diferentes determine: • List X Position • List Y Position • Para não permitir valores digitados que não estejam na lista, deve-se setar a propriedade Validate from List como Yes. 33 6.8 Conceito de Editor Um Editor é um tipo de objeto utilizado para prover ao operador um editor customizado para itens multi-line, ou seja, um editor permite que o operador veja múltiplas linhas de um item de texto simultaneamente, search-and-replace (busca e modifica) texto no item, e geralmente, modifica um valor de um item a partir desta janela separada. Todo item de texto tem o editor padrão disponível, mas é possível desenhar o seu próprio editor para modificações para aqueles itens que tem requisitos especiais. Prevalecendo o editor padrão para um item de texto pode-se: • Prover uma janela de edição grande para itens com valores textuais potencialmente grandes; • Opcionalmente usar um sistema editor externo. 6.9 Utilizando um Editor em momento de execução Para acionar o Editor: • Posicione o cursor no item que possui o editor associado; • 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; • Edite o texto na janela do Editor; • Clique em OK para salvar suas mudanças no item tipo texto. 6.10 Associando um Editor a um item tipo texto Depois de criar um Editor pode associá-lo a um item especificando o nome do Editor nas propriedades do item. Passos para associar um Editor a um Item: • Selecione o item no Object Navigator; • Na properties Palette do item selecione a propriedade 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. • Para apresentar o Editor em coordenadas diferentes determine: • Editor X Position • Editor Y Position 34 35 7. Outros tipos de Itens 7.1 Check-box É um objeto de interface de dois estados que indica se um certo valor está ON ou OFF. O estado display de uma Check Box é sempre ou Checked ou Unchecked (checado ou não checado). Pode usar as Check Boxes para aumentar a interface com o usuário convertendo itens existentes que tem dois possíveis estados. 7.2 Passos para criar um item tipo Check-box no Layout Editor • • • • • • • • Acesse o Layout Editor; Clique no ícone Check Box na tool bar do Layout Editor; Clique no canvas na posição que deseja que o Check Box seja mostrado; Dê um duplo clique no item tipo Check Box que você criou para acessar o Property Pallete; 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. 7.3 Propriedades específicas de um item tipo Check-box 36 Propriedade Item Type Label/Prompt Value when Checked Descrição Determina o tipo de dado do item. Define o label e o Prompt adjacente ao item Check Box. Especifica o valor que está associado ao estado “checked” do item. O valor deve ser compatível com a Data Type especificado. Value when Especifica o valor que está associado ao estado “Unchecked” Unchecked do Item. O valor deve ser compatível com o Data Type especificado. Check Box Mapping of Determina como outros valores são processados em uma Other Values 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 convertidos para este valor. Unchecked – são associados a “Unchecked” e se forem salvos serão convertidos para este valor. 7.4 Tratando valores nulos em itens tipo Check-box Se a coluna em que o item está baseado permite nulo, podem ser tratados: • 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. 7.5 List Um List Item é um objeto de interface que exibe uma seleção de opções prédefinidas, cada uma correspondendo a um valor de dados específico. Usa-se o item da lista em tempo de execução para selecionar um valor simples. Escolha da Lista ou elementos são mutuamente exclusivos, um e somente um selecionado por vez. Os três estilos de List Itens são: Estilo Pop List T-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 37 Combo Box 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. 7.6 Criando um item tipo List Um List Item pode ser criado: • Convertendo um item existente; • Usando a ferramenta Check Box no editor de Layout; • Usando o ícone Create no Object Navigator. Para converter um item para List Item, basta seguir os passos: • Acesse o Property Pallete para o item que você deseja converter; • Altere o tipo de item para List Item; • Selecione a propriedade Elements in List. Clique em More..., o diálogo List Elements irá aparecer; • Entre com o primeiro elemento que deseja que apareça na lista; • Entre com o valor para o elemento corrente selecionado na lista de elementos na propriedade List Item Value; • Entre com um valor default para o Item; • Defina a propriedade Mapping of Other Values. Para criar um tipo List Item no Layout Editor, basta seguir os passos: • Acesse o Layuot Editor; • Clique no ícone List Item na tool bar do Layuot Editor; • Clique no canvas na posição que você deseja que o List Item seja mostrado; • Dê um duplo clique no item tipo List que você criou, para acessar o Property Pallete; • Selecione a propriedade Elements in List. Clique em More..., o diálogo List Elemensts irá aparecer; • Entre com o primeiro elemento que deseja que apareça na lista; • Na propriedade List Item Value, entre com o valor para o elemento corrente; • Entre com os outros elementos e valores repetindo os dois passos anteriores. • Entre com um valor default para o item; • Defina a propriedade Mapping of Other Values. 7.7 Propriedades específicas de um item tipo List 38 Propriedade Item Type List Style Descrição Determina o tipo de dado do item. Determina o estilo de interface da lista. Escolha entre PopList, T-List ou Combo-Box. Mapping of Other Determina como os outros valores são processados. Escolha Values 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 à 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. Elements in List 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. 7.8 Tratando valores nulos em itens tipo Lista Se a coluna em que o item está baseado permite nulos pode-se 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 vazio. • Combo-Box – mostra um elemento vazio. 7.9 Radio Groups Radio Groups são um conjunto de radio buttons. Cada radio button apresenta um valor diferente. Os radio buttons pertencentes a um Radio Group são mutuamente exclusivos. Os benefícios de um Radio Goup são: • Mostrar mais do que dois valores estáticos; • Prover uma alternativa aos itens tipo List com dois ou três escolhas; • Prover uma alternativa aos itens tipo Check Boxes diferentes de SIM/NÃO, ON/OFF, YES/NO, etc. 39 7.10 Propriedades específicas de um item tipo Radio Groups Miscellaneous Descrição Properties Data Type Determina o tipo de dado do item. Mapping of Other Determina como os outros valores são processados. Escolha Values 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 com o nome de um Radio Button ou definir um valor – no processamento de consultas, os registros com valores diferentes dos das lista são associados ao Radio Button especificado. Se forem salvos serão convertidos para o valor associado ao elemento da lista.. 40 7.11 Tratando valores nulos em um Radio Groups Se a coluna em que o item está baseado permite valores 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 Ignore Mapping of Other Values com um dos Radio Buttons pelo seu nome ou pelo valor especificado. 41 8. Itens tipo Não Input 8.1 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. Os itens tipo Display são usados para: • Mostrar informações adicionais baseadas em dados não existentes na tabela base do bloco; • Mostrar valores derivados; • Conservar valores em memória. 8.2 Itens tipo Button Button é um objeto de interfaces que é pressionado para iniciar uma ação. Um botão é geralmente apresentado como um retângulo com um label ou um ícone. 42 43 9. Windows, 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. Canvas – Similar a uma tela em branco sobre o qual um desenho será pintado. É a área sobre a qual são colocados itens, 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. 9.1 Propriedades de uma Window Physical Property Propriedade Width Heigth GUI Hint Property Propriedade Close Allowed Move Allowed Minimize Allowed Minimize Title Functional Property Propriedade Primary Canvas Window Style Modal Descrição Determina a largura da janela. Determina a altura da janela. Descrição Habilita o botão close da janela, mas, para executá-lo é necessário. Determina se o usuário pode mover a janela em momento de execução. Determina se o usuário pode minimizar a janela. Especifica o título da janela quando minimizadas. Descrição Especifica o nome do canvas a ser mostrado na janela quando esta é chamada por programa. 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. Determina se a janela é do tipo Modal, caso contrário este será do tipo Modeless. 9.2 Conceito de content canvas 44 Um Content Canvas é um canvas que é a 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. 9.3 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 é menos que a janela em que ele parece. 9.4 Canvas Toobar Um Toobar é 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. 9.5 Tab Canvas 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 tipo Tab é mostrado em cima de um canvas do tipo content 45 10. 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 Trigger 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 um Trigger. Componentes Trigger Type Trigger Code Trigger Scope Descrição Tipo de Triggers: especifica o evento que fará com que a trigger dispare. Corpo de Trigger: bloco PL/SQL que define a ação a ser executada pela trigger. Escopo da Trgger: determina o escopo sobre o qual os eventos serão detectados pela trigger. Nível em que a trigger está definida. 10.1 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 • PRE- : A trigger é disparada quando ocorre um evento antes de uma ação. • POST- : A trigger é disparada quando ocorre um evento depois de uma ação. • WHEN- : A trigger é disparado em edição ao processamento padrão, permite aumentar a funcionalidade. • ON- : A trigger é disparado em substituição ao processamento padrão, permite aumentar a funcionalidade. • KEY- : A trigger é dispara em substituição ao processamento padrão de uma tecla de função, permite aumentar a funcionalidade. 46 11. Produzindo Triggers 11.1 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 o menu Program -> SmartTriggers, deverá mostrar uma lista das triggers apropriadas para o objeto corrente. Escolha o tipo de Trigger de uma lista de valores. Para ajudar a selecionar o tipo de Trigger também pode utilizar além da LOV o recurso de auto redução teclando as letras iniciais dos nomes da trigger. Entre com o código PL/SQL da trigger no Source Pane do Editor. 11.2 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 Whem-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_ quanto 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 THEM : itens.quantidade : = v_quant; 47 MENSAGE (‘Não possui estoque !’); END IF; END; 48 13. Executando um Form no modo Debug Passo 1 Ligue o Debug Mode no Builder. Clique no ícone Debug Mode no Toolbar do Navigator ou selecione Porgram -> Debug Mode do Menu. Outra alternativa é setar Debug Mode em Runtime Options selecionando Tools -> Preferences -> Pasta Runtime. Passo 2 Gere o módulo form. Por Default a opção Built Before Running está setada, bastando executar o módulo. Clique em Run. Passo 2.1 Quando inicia o form PL/SQL Debugger é mostrado. Passo 2.2 Selecione a trigger que você deseja depurar e entre com as ações de Debug, definindo os pontos de Break (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 possa monitorar e interagir com o form, executando linha a linha a trigger depurada. 49 14. 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. Trigger Evento que dispara a trigger WHEN-BUTTONSeleção de um botão , através de um simples clique com o PRESSED mouse ou por uma tecla de função. WHEN-CHECKEDTroca do estado de um item tipo checkbox com o mouse CHANGED ou com uma tecla de função WHEN-RADIOSeleção de um botão diferente ou do corrente em um CHANGED Radio Group WHEN-IMAGE-PRESSED Um clique simples ou dublo clique em um item tipo Image WHEN-IMAGEExecução de um duplo clique em um item tipo Image. ACTIVATED 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 TList. 50 15. Triggers de Consulta 15.1 Trigger PRÉ-QUERY • Deve ser definida em nível de bloco ou superior. • É disparada para consultas irrestritas ou restritas. Em uma trigger PRE-QUERY 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 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 NAME_IN (‘PEDIDOS.CODIGO’) | | TO_CHAR (:pedidos.dta_do_pedido) | | TO_CHAR (:pedidos.data_previsao_da_entrega) IS NULL THEN MESSAGE (‘O número ou a data do pedido devem ser preenchidos’); RAISE FORM_TRIGGER_FAILURE; END IF; 15.2 Trigger POST-QUERY • Deve ser definida em 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 “ORDER”, seleciona a contagem do número de itens para o pedido consultando e mostra o número em um item não base table :Lineitem_count. 51 SELECT COUNT (*) INTO :pedidos.total_de_itens FROM itens WHERE codigo_do_pedido = :pedidos.código; 15.3 POST-QUERY e WHEN-VALIDATE-ITEM Quando a trigger POST-QUERY popula um 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.DESCRIÇÃO. 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 WHENVALIDATE-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 (porém 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’); 16.Validações 52 16.1 Utilizando LOVs para validações • • • Quando associa uma LOV a um item através da propriedade LOV, 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 uma string de pesquisa não sensitiva ao case para o conteúdo da LOV. É com certeza que na LOV criada tenha a coluna de validação como a primeira mostrada e com o Display Width maior que 0. Por motivos de performance não utilizar LOV for Validation em LOV’s muito grandes. 16.2 Utilizando Triggers para Validações WHEN-VALIDATE-ITEM Esta trigger é disparada quando o Oracle Forms valida um item que está 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. 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. 53 17. Aplicações Multi-Form 17.1 Buit-in OPEN_FORM • • Esta é uma built-in restrita e não pode ser chamada em 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 built-in é normalmente a maneira mais utilizada em aplicações Multi-Form. • 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 Descrição Nome_do_form Nome do arquivo executável do módulo (sem o sufixo .FMX). O Path default do Oracle Forms é utilizado, a menos que forneça como parte do string de caracteres. ACTIVE_MODE 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. SESSION_MODE NO SESSION (default): não inicia nova sessão. SESSION: inicia nova sessão. DATA_MODE NO_SHARE_LIBRARY_DATA: (default) não usa library do chamador. SHARE_LIBRARY_DATA: permite usar library do chamador Lista_de_parâmentros Nome do parâmetro entre aspas ou ID interno de um parâmetro de uma lista de parâmetros. 17.2 Built-in CALL_FORM • • Esta é uma built-in irrestrita e pode ser chamada em modo Normal ou Enter Query. A Built-in CALL_FORM passa o controle imediatamente o form chamador dica suspenso até que o form chamado seja fechado, neste momento o controle é retornado para o form chamador. 54 • A Built-in CALL_FORM emite um SAVEPOINT antes de passar o controle para o form chamado, de modo a preservar os Locks no form chamado causar um Rollback. • CALL_FORM é útil para iniciar outro form quando a ação tem que ser completada antes que o form chamador possa continuar. • Opcionalmente o form chamado pode ser iniciado em modo Query Only. Sintaxe: CALL_FORM (‘nome_do_form’, DISPLAY , SWITCH_MENU , QUERY_MODE , lista_de_parametros); Argumentos: Parâmetro Descrição Nome_do_form Nome do arquivo executável do módulo (sem o sufixo .FMX). O Path default do Oracle Forms é utilizado, a menos que forneça como parte do string de caracteres. DISPLAY HIDE: default, define que o form chamador deve ser escondido enquanto o form chamado estiver executando. NO_HIDE: define que o form chamador não deve ser escondido enquanto o form chamado estiver executando. QUERY_MODE NO_QUERY_ONLY: default. QUERY_ONLY: define que o form chamado deve executar em modo Query Only. SWITCH_MENU NO_REPLACE: o forms chamado deve usar o seu próprio menu. DO_REPLACE: o forms chamado deve usar o menu corrente. 55