GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

E-Business Suite R12 – Criando um novo Concurrent

Olá pessoal !

Nesse artigo eu vou mostrar como se cria um novo Concurrent no E-Business Suite R12. Consequentemente, esse processo passa pelo cadastro do executável, do programa até a criação do Request.

1) Executável (System Administrator > Concurrent > Program > Executable)

Você pode criar o executável através de um script ou mesmo pela tela Concurrent Program Executable. Para criar via script, execute o código abaixo:

BEGIN
   fnd_program.executable
      (
       'SLAAGING'                -- Nome do executavel
      ,'Receivables'             -- Aplicacao
      ,'SLAAGING'                -- Short_name
      ,'AR - Aging Reports'      -- Descricao
      ,'PL/SQL Stored Procedure' -- Metodo de execucao
      ,'SLA_AR_AGING.MAIN'       -- Nome para execucao
      ,''                        -- Sub Rotina
      ,''                        -- File Path   
      ,'US'                      -- Idioma
      ,'');

   COMMIT;
END;
/

O Resultado é:



2) Concurrent Program (System Administrator > Concurrent > Program > Define)

O próximo passo é criar o Concurrent Program. Também é possível fazer isso tanto pelo código PL/SQL quanto pela tela:

BEGIN
   fnd_program.register
      (
       'SLAAGING'           -- Programa
      ,'Receivables'        -- Aplicacao
      ,'Y'                  -- Enabled
      ,'SLAAGING'           -- Short_name
      ,'AR - Aging Reports'-- Descricao
      ,'SLAAGING'           -- Executavel
      ,'Receivables'        -- Aplicacao
      ,''                   -- Opcoes de Execucao
      ,''                   -- Prioridade
      ,'Y'                  -- Salvar Output
      ,'Y'                  -- Impressao 
      ,''                   -- Colunas
      ,''                   -- Linhas
      ,''                   -- Estilo
      ,'N'                  -- Estilo Obrigatorio
      ,''                   -- Impressora
      ,''                   -- Tipo de Request
      ,''                   -- Aplicacao do tipo de request
      ,'Y'                  -- Usar em SRS  
      ,'N'                  -- Permitir desabilitar valores
      ,'N'                  -- Executar Sozinho
      ,'TEXT'               -- Tipo de Output
      ,'N'                  -- Habilitar Trace
      ,'Y'                  -- Restart
      ,'Y'                  -- Nls_compliant
      ,''                   -- Nome do icone
      ,'US'                 -- Codigo do Idioma

     );

   COMMIT; 

END;



O Concurrent program que estou criando terá 3 parâmetros nos quais:

    1. O primeiro será um List of Values com os tipos de relatórios a serem processados;

    1. O segundo será um SQL Statement que retornará uma data;

    1. O terceiro e último um Profile que retornará o ORG ID corrente;

3) Criando os parâmetros do Concurrent Program

a) List of Values (System Administrator > Application > Validation > Set)

Para o primeiro parâmetro eu vou criar a lista de Valores XX_CUSTOM_AGING_REPORT com as características da tela abaixo:



O próximo passo é criar as Values (System Administrator > Application > Validation > Values) da minha LoV:


Agora faremos a atribuição do meu parâmetro Report Type com a LoV criada:


b) SQL Statement

O parâmetro period será do tipo SQL Statement. Um SQL retornará o último dia do mês anterior como resultado:



c) Profile

O terceiro e último parâmetro será do tipo Profile e eu utilizarei o resultado da ORG ID setada em sessão:



Parâmetros criados, agora é só salvar !
Não se esqueça de setar o campo Required, caso os parâmetros sejam obrigatórios !

4) Request Groups (System Administrator > Security > Responsibility > Request )

Agora vamos atrelar o nosso programa a um Request Group para que ele fique disponível nas Responsibilities que os acessam:



5) Submeter o Request

Agora chegou a hora que tanto esperamos, que é submeter o Request de execução do Concurrent. Se todos os passos acima foram seguidos corretamente, a seguinte window com os parâmetros aparecerá:



Basta dar OK e Submit para que a execução se inicie. No meu caso, eu obtive o seguinte resultado:



Fiquei me perguntando o porquê desse erro…Tinha completado todos os passos corretamente, mas a seguinte mensagem aparecia no LOG:


PLS-00306: wrong number or types of arguments in call to ‘MAIN’

A primeira reação é verificar os parâmetros IN da procedure. Só que nesse caso, um detalhe mais importante foi esquecido. Os parâmetros OUT.

Para executar uma procedure via Concurrent, é obrigatório a criação de dois parâmetros OUT:
– errbuff   VARCHAR2;
– retcode VARCHAR2;

A chamada da minha procedure teve que ser modificada para contemplar os seguintes argumentos:

  PROCEDURE main                (                 errbuf   OUT VARCHAR2,                 retcode OUT VARCHAR2,                                  p_aging IN  VARCHAR2 DEFAULT 'ALL_REPORTS',                p_period IN  DATE     DEFAULT SYSDATE,                 p_orgID IN  NUMBER   DEFAULT NULL                );

Após a correção, submeti um novo request e abaixo o resultado do log:


Dessa vez, executado com sucesso !

Dica: Para que as mensagens sejam exibidas no log, é preciso utilizar a package fnd_file. Abaixo uma sugestão de como criar uma procedure que exiba tanto no log como no output de uma IDE SQL:

   --
   -- Show messages (DBMS and FND)
   -- 
   PROCEDURE message
      (
       p_message IN VARCHAR2,
       p_raise   IN BOOLEAN DEFAULT FALSE
      )
   IS
   BEGIN
      fnd_file.put_line
         (
          fnd_file.log
         ,p_message
         );
   
      DBMS_OUTPUT.PUT_LINE
         (
          p_message
         );

      IF p_raise THEN
         RAISE_APPLICATION_ERROR 
            (
             -20000
            ,p_message
            );

      ENDIF;

   END MESSAGE;

Referências

  • 73492.1 (Creating a PL/SQL Concurrent Program in Oracle Applications)
  • 1016543.102 (Custom Stored Procedure Run as Concurrent Request Fails w/ PLS-306 AND ORA-6550)

Abraço

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *