Pular para o conteúdo

Criando um novo Concurrent no EBS

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 é:

Criando um novo Concurrent

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;
pOdfE86rpZpwqXfeAmEyboxZBHU0DrcyQr6uk03qwgQ95TFzQx6GZPHVKsdQMDaBTaqO0MPdpMdqHRJS1dXde76K6BNQsc7bqGq11Sc2l5swG5hqhM7GRjl 8HbW6sab4147c8jt6dRN5iEv

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

  • O primeiro será um List of Values com os tipos de relatórios a serem processados;
  • O segundo será um SQL Statement que retornará uma data;
  • 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:

image 53

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

87Xbbp4qaVCaefINxOjBzIUy QKKsvaKX2JYRhfEnl2SxJN hOqFL mDzSaaYTaXm0qFG4A2w6VHux4rejv5BZ8XXo QMlUuUHJ AS2jPEWS2KSUU7yAGBpj1LM52ycftr8fKkRLzkneY Sn

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

aVJOJo17V8ad5qMz9igP7HmFtM93mbkQsOAVREvT4HMiZw67bl9TwMoIELJIAl79lhrT9Kqln2lEn

b) SQL Statement

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

image 54

c) Profile

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

image 55

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:

image 56

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á:

image 57

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

image 58

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

image 59

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:

s1HJZ1XvlyRRAMJCtq6qol3fqCdDxDcTxXTRJ9J v5snjGezvP6

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

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Deixe um comentário

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

Marcações:
plugins premium WordPress