segunda-feira, 5 de abril de 2010

Parâmetros tipo Data e Numérico vindos do EBS

Opa!


Quando trabalhamos com datas e números, sempre temos que prestar a atenção como estes dados estão chegando ao programa. É comum acontecer os famosos erros de formato referentes a números ou datas inválidas, principalmente, quando estamos construindo um determinado programa onde temos que passar estes valores para outros programas através de parâmetros.  Um problema muito comum acontece quando estamos trabalhando com concorrentes no EBS passando parâmetros para programas armazenados no banco. Segue abaixo os passos para solucionar estes problemas:


1) O primeiro passo é, quando for definir os parâmetros de um programa concorrente, colocar como listas de valores, as nativas do Oracle, FND_NUMBER e FND_STANDARD_DATE para os tipos NUMBER e DATE, respectivamente.

2) No seu programa armazenado em banco, numa PROCEDURE, por exemplo, crie os parâmetros que receberão os dados, declarando-os com o tipo VARCHAR2.

3) Dentro do seu programa utilize as funções abaixo para a conversão:


Exemplo 1 (utilização no corpo do programa):
...
  wvl_item number;
  wdt_hoje date;
  --
begin
  -- No caso de conversão para números.
  wvl_item := fnd_number.canonical_to_number(pvl_item); -- pvl_item: parâmetro do tipo varchar2.
  --
  -- No caso de conversão para data.
  wdt_hoje := fnd_date.canonical_to_date(pdt_entrega); -- pdt_entrega: parâmetro do tipo VARCHAR2.
end;


Exemplo 2 (utilização na área de declaração de variáveis):
...
  wvl_item number default fnd_number.canonical_to_number(pvl_item);
  wdt_hoje date   :=      fnd_date.canonical_to_date(pdt_entrega);
  --
begin
  ...
  ...
  ...
end;


O contrário também pode ser feito com a mesma função. Converter um numérico ou data para string:
...
  wvl_item varchar2(38);
  wdt_hoje varchar2(20);
  --
begin
  -- No caso de conversão para caracter.
  wvl_item := fnd_number.number_to_canonical(vl_item);
  --
  -- No caso de conversão para caracter.
  wdt_hoje := fnd_date.date_to_canonical(sysdate);
end;


O segredo destas funções é que as mesmas são específicas para o EBS, logo elas “sabem”, digamos assim, qual o formato que a suíte está trabalhando. Se você quiser saber quais são estes formatos, uma dica é verificar no LOG do concorrente as informações a respeito dos parâmetros passados para o concorrente no momento da execução, lá ele mostra cada parâmetro com seu respectivo valor informado. Note que ele não passa os valores no formato que escolhemos na janela de parâmetros do concorrente e sim no formato que ele está trabalhando em background.


Forte abraço!

Nenhum comentário:

Postar um comentário