segunda-feira, 3 de fevereiro de 2014

Flexfield - Conjunto de Validações Oracle R12

Flexfield - Conjunto de Validações Oracle R12

Tipos de validações especiais e emparelhamento

Muitas pessoas parecem pensar que  nos tipos de validações ESPECIAL e PAR só podem ser usados  em conjuntos de validação. No entanto, você também pode criar seus próprios conjuntos de validação. E essas opções são muito boas.

Validação ESPECIAL

Validação especial é utilizado para fornecer a funcionalidade FlexField para um único valor. O que isto significa é que você pode ter, por exemplo, um parâmetro para um programa concorrente que será preenchido com um valor FlexField chave , ou um intervalo de valores de FlexField.


Vamos voltar para a chave Flexfield. Sabemos que eles são combinações de valores de segmento diferentes que são armazenadas em uma tabela de combinação separada.

Quando você quiser enviar uma combinação de teclas – FlexField, como um parâmetro para um programa concorrente, você pode codificar sua própria validação para os valores separados. Mas estará faltando a funcionalidade legal que lhe dá pop-ups, uma validação sobre a combinação resultante e, se necessário o valor de ID para a combinação FlexField .

Isso é possível com um tipo de validação 'Especial'.

Com a validação Especial , você será  capaz de entrar em um ou mais valores de segmento para um FlexField chave. Para inserir esses valores de segmento, 3 saídas de usuário poderão ser utilizadas: . São eles: ' POPID ' , 'VALID' e ' LOADID '.

POPID é usado para permitir que o usuário digite o valor no segmento FlexField . É chamado quando o usuário entra no campo de valor do segmento . Com este usuário saída, você decide quais valores de segmento deverão ser exibidos, e como eles devem ser exibidos.
VALID é chamado quando o usuário sai do valor do segmento , ou confirma a combinação do FlexField escolhido. É validado o valor inserido contra os valores existentes na tabela de chave FlexField .
LOADID é opcional, e pode ser usado para escolher quais informações serão retornadas como valor no FlexField. Isso pode ser os segmentos concatenados, ou o valor de ID para a combinação FlexField ou valores de segmento.

A estas 3 saídas de usuário pode ser atribuído a três "eventos" . Há mais eventos possíveis, mas eles ainda não estão em uso, ou a sua utilização ainda não é suportada. Por isso, só vai usar 'Validar', 'Editar' e 'Load'.

Parece complicado, até agora? Não se preocupe isso não é uma validação fácil. Mas nós vamos construir alguns exemplos para dar uma ideia. Primeiro vamos começar com a construção de uma validação muito fácil. Essa combinação de código será construída em nosso FlexField Chave.  

Nós usaremos um programa concorrente Test Flex Validation para ver nossas diferentes opções.
Este programa baseia-se no seguinte procedimento:

CREATE OR REPLACE PROCEDURE XXX_TEST_FLEXFIELD_PARAMS
( errbuf   out varchar2
, retcode  out varchar2
, p_flex   in  varchar2
, p_flex2  in  varchar2 := ‘XXX’
, p_flex3  in  varchar2 := ‘XXX’
, p_flex4  in  varchar2 := ‘XXX’
, p_flex5  in  varchar2 := ‘XXX’
) IS
BEGIN
   FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_flex);
   FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_flex2);
   FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_flex3);
   FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_flex4);
   FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_flex5);
END;

Isso só vai demonstrar o valor do parâmetro para a saída do pedido. Para usar Flexfield como parâmetros para programas concorrentes, é preciso definir um valor definido com base neles.

Vamos começar com as configurações mais básicas para introduzir uma combinação de FlexField.  Para este artigo, usamos o FlexField contábil, com o código 'GL #' e ID-num '101 '.


Neste caso, temos a seguinte definição:


Então o que isso significa?

A primeira caixa é para o evento de edição. Este será acionado quando o usuário insere o cursor no campo com este conjunto de valores.

FND POPID Esta é a saída de usuário para abrir uma tela FlexField , e permitir que o usuário insira os valores FlexField .
CODE = " GL #" Este é o código para o FlexField chave que iremos utilizar .
APPL_SHORT_NAME = " SQLGL " O nome abreviado também pertence à aplicação do FlexField.  Junto com 'Código ' , este irá identificar o próprio FlexField .
NUM = "101" - Número de identificação para a estrutura FlexField . Se você tiver apenas uma única estrutura FlexField , é opcional . Para flexfields habilitados para várias estruturas , você precisa digitar o id.
VALIDATE="PARTIAL"  - A validação pode ser ' Nenhum',  ' Parcial '  ou  ' Completa ' . Nenhum significa que a combinação não é válida. Parcial significa que os segmentos separados são validados, a validação não existe se a combinação não existir. Completa significa que os segmentos e combinação serão verificados, e se um novo valor é inserido, ele será inserido na tabela do FlexField Chave.
SEG = " : ! VALUE " Este é o campo do forms que será utilizado para armazenar o valor de um dos segmentos.

A segunda caixa é para o evento 'Validação‘. Este código será chamado quando o usuário navega para fora do campo, ou quando apresentar toda a combinação.


Agora, vamos definir este valor como um parâmetro para o nosso programa concorrente, podemos ver como a validação funciona:


Agora, quando executar o programa, temos esse pop-up:


Temos toda a funcionalidade do FlexField Chave. Podemos usar o botão 'Combination' para procurar combinações existentes. Todos os segmentos separados serão validados, de acordo com a combinação final.

Quando apresentar um valor para o nosso programa, ele mostrará os segmentos concatenados como o valor do nosso parâmetro:


Agora vamos ver mais algumas características desta validação. Por exemplo, se quisermos ter o valor do id dessa combinação. (CODE_COMBINATION_ID no nosso caso, uma vez que usamos a Flexfield contábil).

Para conseguir isso, precisamos adicionar a saída do usuário, LOADID:


O evento 'Load' terá a combinação-id da tabela FlexField. Isso só é possível para o 'VALIDATE = "FULL"’, uma vez que irá validar toda a combinação. Também precisamos definir o ID = ": ID". Isto irá preencher a: coluna ID com o valor ID da combinação.

Finalmente, foi adicionado o 'DINSERT = "N"', porque nós não queremos permitir a inserção de novas combinações de código a partir deste conjunto de valores. (E VALIDATE = "FULL" por padrão insere novas combinações na coluna DO FlexField).

Agora, quando rodamos o concorrente, vemos que o valor do parâmetro é o code_combination_id em vez dos segmentos concatenados:


Com estas saídas de usuário, é também possível selecionar apenas certo número de segmentos, em vez de todo o conjunto. Para isso, retire o 'Load' 'LOADID' novamente.

Então, nós adicionamos um 'DISPLAY = "x" "para" Editar "e saídas de usuário' Validate '. O parâmetro "display" é inadimplente para 'todos'. Mas você também pode especificar segmentos separados pelo seu número de sequência ou nomes. Em nosso caso, apresentar os dois primeiros segmentos:


Agora, quando executar o programa concorrente, temos um pop-up para apenas os primeiros dois valores:


Uma característica muito interessante é o uso de uma cláusula WHERE com os valores combinados. Considere o seguinte 'Enter' código:

FND POPID
CODE="GL#"
NUM="101"
APPL_SHORT_NAME="SQLGL"
VALIDATE="FULL"
TITLE="Special Validation Key"
ID=":!ID"
SEG=":!VALUE"
DESC=":!MEANING"
WHERE="segment2 not like '1%' "

A cláusula "where" nos impede de escolher combinações que têm um segment2 começando com '1 '. Quando executar o nosso programa concorrente com isso, e escolher as combinações:


Não há Dpt começando com 1.
Quando acrescentamos a cláusula "where" para o evento de validação, ele nos impede de entrar com os valores manualmente:


O último recurso que vamos olhar é o uso de uma validação PL/SQL através das rotinas de validação especiais. Ao utilizar o PLSQL user-exit, podemos chamar um bloco PL / SQL anônimo em evento nosso 'Validação'. Eu criei um valor definido com a seguinte função para o evento 'Validação':


FND PLSQL " declare
  v_value varchar2( 10 ) := :!value ;
  v_sum number;
  v_valid boolean;
begin
   v_sum:=0;
   for i in 1..length(v_value) loop
    v_sum :=v_sum+(length(v_value)+1-i)*substr(v_value,i,1);
  end loop;
  if mod(v_sum,11)=0 then
     v_valid := TRUE;
  else
     v_valid:=FALSE;
  end if;
  if not v_valid then
      fnd_message.set_name('FND','FND_GENERIC_MESSAGE' );
      fnd_message.set_token('MESSAGE','This is not a valid bank account');
      fnd_message.raise_error;
 end if;
END; "

Este procedimento PL/SQL valida um (holandês) número de conta bancária. Se ele precisa passar no teste, uma mensagem será exibida. Isso lhe dá possibilidades quase ilimitadas para a validação dos dados introduzidos.

Como você pode ver, é apenas um evento de 'Validar'. Porque nós não precisamos de nenhuma funcionalidade especial para inserir os dados. Podemos limitar a entrada de números somente na página principal 'conjunto de validação.

Agora, quando usamos esse valor definido para o nosso programa concorrente, só podemos entrar contas bancárias holandesas válidos:


E


A lista de parâmetros para o usuário sair é mais do que isso . Portanto, não vamos estar passando por todas as possibilidades . Você pode verificar o Guia Developers eo guia Flexfield para uma lista completa de opções. ( Você notou o título FlexField que eu furtivamente no pop -up ? Tente encontrar a opção para isso! ).

Por favor, tente as diferentes opções para si mesmo, e perceber as possibilidades de validação especial.
Par Validação.

Enquanto isso, vamos continuar com a validação "par" . A validação par é muito parecido com a validação "especial" . Ele utiliza o mesmo tipo de saídas de utilizador , mas desta vez , uma gama de valores de segmento ou combinações é selecionado.

Vamos primeiro criar uma gama do segmento de conta. Em vez de usar POPID e válido , usamos POPIDR e VALIDAR . A versão R de o usuário sai - criar automaticamente um intervalo.
Claro que precisamos de dois parâmetros para definir o intervalo . No entanto , precisamos de apenas um conjunto de validação.

Eu criei o conjunto de validação ' XXX_PAIR_VAL ' . Entrei apenas a edição e validar os eventos :



O próximo passo é definir os parâmetros para tanto o valor de baixa e alta. Ambos os parâmetros têm o conjunto de validação 'XXX_PAIR_VAL'.



Agora, quando executar o programa, podemos introduzir um intervalo. Isto inclui a validação de que o valor elevado é efetivamente maior ou igual ao valor baixo.


Claro que o programa concorrente receberá os valores para dois parâmetros.

Quando usamos a validação completa, podemos introduzir um intervalo da combinação conta todo. Note-se que não podemos usar a validação COMPLETO para o par-validação. Porque isso significaria o uso da combinação-id da tabela FlexField e com base na combinação-id você não pode construir um intervalo.

Então, só podemos usar PARCIAL e NONE para a validação. Por essa mesma razão, eu ainda não tinha um motivo para usar um evento de carregamento para validação PAIR. No entanto, é permitido o uso de um.

Eu criei uma validação PAIR para toda a gama de contabilidade da seguinte forma:


Quando usado no programa concorrente, ele vai realmente permitir-nos introduzir um intervalo de todos os segmentos:


É isso aí pessoal... até o próximo post!



Postar um comentário