Banco de Dados

25 fev, 2013

Criando listas de valores encadeadas no APEX

Publicidade

Olá, pessoal! Dando continuidade a série de artigos sobre APEX, hoje vamos ver como criar uma lista de valores encadeadas no APEX, denominado “Select List” no APEX e popularmente conhecidas como LOV.

As LOVs encadeadas são aquelas que dependem da seleção de um registro em uma outra LOV para exibição de seus registros vinculados à LOV alterada. Por exemplo, em um cadastro de funcionários, temos o departamento  e o sub-departamento ao qual o funcionário pertence. Os sub-departamentos existentes são listados com base em um departamento previamente selecionado.

Para esse artigo, utilizarei a aplicação de demonstração que criamos no artigo anterior. Inicialmente, vou explicar um pouco mais sobre as listas de vlores no APEX.

Para criação de uma lista de valores em uma página, devemos incluir/alterar um item de página, para o tipo “Select List”:

111

Existem propriedades expecíficas para cada tipo de item. No caso de um item “Select List”, é habilitado a seção “List of Values”:

112Nesta seção, podemos ver as seguintes propriedades:

  • Named LOV: Podemos selecionar uma LOV previamente criada e compartilhada para todas as páginas da aplicação;
  • Display Extra Values: Define se a LOV permite a exibição de valores extras, que não existem na lista de valores. Por exemplo, é feito uma LOV sobre o campo TIPO_FUNCIONARIO da tabela FUNCIONARIO. Os tipos de funcionários previstos são CLT e PJ, mas por algum motivo não identificado existe um registro que contém o valor CLT-Flex nessa coluna. Com a opção Display Extra Values ativada, a LOV irá exibir CLT-Flex, caso contrário a LOV será exibida somente com CLT e PJ;
  • Null Display Value: Define quais são os valores para o conteúdo nulo. Por exemplo, quando é criado um novo registro na tabela FUNCIONARIO, o campo TIPO_FUNCIONARIO é nulo. Podemos fazer um tratamento para essas condições, exibindo a opção “Selecione”;
  • Cascading LOV Parent Item(s): Define que a LOV sera atualizada em tempo de execução quando o item informado for alterado. Por exemplo, quando essa for uma LOV encadeada, quando selecionado um registro da LOV de departamento, a LOV sub-departamento deverá ser atualizada;
  • List of Values Definition: Deve ser informado uma query ou a definição estática dos elementos que serão exibidos na LOV.

Por exemplo:

  • Query: ”SELECT DESC_DEPARTAMENTO, ID_DEPARTAMENTO FROM TB_DEPARTAMENTO”, onde o primeiro campo será o valor de exibição da LOV e o segundo o valor de retorno.
  • Estática:”STATIC:Funcionário;CLT,Terceiro;PJ”, onde o STATIC define que é uma LOV de conteúdo fixo, seguido por valor de exibição da LOV e valor de retorno.

Para visualizar mais exemplos de como criar a LOV, clique em “List Of Values Examples”:

113

Agora que sabem quais são as principais propriedades de uma LOV, vamos criar uma LOV encadeada. Para isso, vamos criar as tabelas TB_DEPARTAMENTO e TB_SUBDEPARTAMENTO, com o relacionamento 1:N da tabela TB_DEPARTAMENTO para a tabela TB_SUBDEPARTAMENTO:

114Também será necessário incluir as colunas ID_DEPTO e ID_SUBDEPTO na tabela TB_FUNCIONARIO para podermos referenciar a qual departamento e sub-departamento um funcionário pertence.

Após criar as tabelas e as colunas, vamos criar os campos na página de cadastro de funcionários. Clique com o botão direito sobre o nome da região onde deseja colocar a LOV e selecione a opção “Create Page Item”:

115

Selecione o tipo “Select List”:

116

O campo departamento será chamado P2_DEPARTAMENTO, pois ele está sendo criado na página 2. Vamos defini-lo como preenchimento obrigatório, assim sempre será requirido que o campo contenha valor.

Na seção “List Of Values”, vamos colocar a query que lista os departamentos do funcionário:

117Neste momento também vamos colocar o texto “Selecione”, que torna mais agradável para quando o usuário estiver criando um novo funcionário e o campo estiver nulo.

Na seção SOURCE, devemos informar ao APEX sobre qual campo da tabela TB_FUNCIONARIO esse item é referente. Isso permitirá que o APEX automaticamente insira, atualize e leia as informações desse novo campo:

118Deve-se mudar a propriedade “SOURCE TYPE” para “Database Column” e informar o nome da coluna referente ao id do departamento na tabela, no caso ID_DEPTO. Deve-se criar o Item P2_SUBDEPARTAMENTO da mesma forma que o item acima.

Na seção “List of Values”,  informe a query conforme abaixo:

119

Na query, o campo ID_DEPTO, da tabela TB_SUBDEPARTAMENTO, está sendo filtrado pelo conteúdo do campo P2_DEPARTAMENTO. Veja que na propriedade “Cascading LOV Parent Item(s)”, foi informado o campo P2_DEPARTAMENTO à LOV dos departamentos, ou seja, quando for escolhido um departamento a LOV de sub-departamentos sofrerá uma atualização e será filtrado os sub-departamentos do departamento escolhido anteriormente. Isso irá demonstrar o efeito de encadeamento.

Por questões meramente estéticas, vamos deixar a largura da LOV sempre fixa. Para isso vamos colocar o texto style=”width:120px” na propriedade HTML Form Element Attributes da seção Element.

Agora, vejamos o resultado:

120

Pessoal, nesse artigo vimos como criar uma LOV encadeada – é muito comum sua utilização e outras tecnologias. E hoje vimos como é simples sua criação no APEX. Para acessar aplicação demo utilize o link http://apex.oracle.com/pls/apex/f?p=30361.

  • Usuário: DEMO
  • Senha: imasters