terça-feira, 11 de março de 2008

ADF: Duas maneiras de popular valores por Sequence

Oi Pessoal! Aqui estamos novamente!

Esta semana tivemos a idéia de demonstrar um dos requisitos mais frequentes dentro dos aplicativos ADF: Popular códigos ou chaves primárias baseados em uma SEQUENCE do banco Oracle.

Neste caso, temos duas situações distintas: quando o próprio aplicativo popula o valor derivado da SEQUENCE, ou quando um programa externo (trigger, PL/SQL) popula o valor no momento da inserção do registro, sem a interferência da aplicação.

Na primeira situação, como o valor da PK é um atributo que deve ser populado logo na criação do registro na tabela (mapeado para um Entity Object), devemos popular no método create(AttributeList) que é o método onde fazemos o defaulting dos valores para entidades novas. Desta maneira:


public void create(AttributeList attr) {

SequenceImpl seq = new SequenceImpl("SEQ_NOME");
this.setAtributoChavePrimaria(seq.getSequenceValue()); //SEQ_NOME.NEXTVAL
}


No segundo caso, como o valor só é populado APÓS o ADF ter passado o controle para o PL/SQL, usamos uma outra funcionalidade dos Entity Objects. Ao abrirmos um Entity Object e selecionarmos o atributo em questão, podemos dizer que seu tipo é DBSequence. Ao fazê-lo, a propriedade "Refresh After Insert" é marcada. Esta propriedade diz para o Entity Object que algum agente externo vai modificar esta entidade após o INSERT na tabela, forçando os View Objects que utilizam esta entidade a reconsultar o estado da mesma logo após o comando de INSERT ser emitido contra o BD. Ou seja, o Entity Object faz o INSERT, a trigger popula a PK, o View Object detecta este "Refresh After Insert" e faz o SELECT novamente.
Abraços, e até!

Nenhum comentário: