Como executar programas concorrentes de um bloco PL/SQL

executar programas concorrentes - capa

Já precisou executar programas concorrentes diretamente de um bloco PL/SQL?

As possibilidades de se utilizar um bloco PL/SQL são várias no universo Oracle, exemplo: Forms, packages, relatórios, personalizações, etc.

Em algumas situações é necessário iniciar um programa concorrente de um bloco PL/SQL, em vez de efetuar a chamada pelo procedimento padrão de dentro do EBS.

Para essa finalidade existe uma API que é a FND_REQUEST.SUBMIT_REQUEST.

Acompanhe esse artigo até o final para saber mais sobre:

  • Parâmetros da API
  • Retorno da API
  • Pontos Importantes

Parâmetros da API

Essa API possui uma série de parâmetros necessários para o seu funcionamento, veja a estrutura:

Executar programas concorrentes - Estrutura API

Agora vamos aos detalhes de cada parâmetro.

APPLICATION

Aqui deve ser informado o nome abreviado (short name) da aplicação associada com o programa concorrente, por exemplo: ONT, AR, PO.

PROGRAM

No parâmetro program devemos informar o nome do programa concorrente (short name) que será executado.

DESCRIPTION

No parâmetro description informamos um texto para descrever essa solicitação. Essa informação irá aparecer na janela de solicitações. (Opcional)

START_TIME

Nesse parâmetro deve ser informado quando o programa concorrente deve ser iniciado, no formato HH24:MI ou HH24:MI:SS. (Opcional)

SUB_REQUEST

Passar “TRUE” se a solicitação é submetida por outra solicitação e deve ser tratada como “sub-request”.

Esse parâmetro pode ser usado se você está submetendo solicitações de um programa concorrente baseado numa PL/SQL Stored Procedure.

ARGUMENT1..100

Até agora vimos os parâmetros da API, agora vamos falar dos argumentos (parâmetros) do programa concorrente que está sendo executado.

São permitidos até 100 argumentos.

Se a chamada estiver sendo feita de um Form, todos os 100 argumentos devem estar especificados.

Após o último argumento “não nulo” passar chr(0).

Exemplo:

FND_REQUEST.SUBMIT_REQUEST (
:blockname.appsname,
:blockname.program,
:blockname.description,
:blockname.start_time,
:blockname.sub_req = 'Y',
123, NAME_IN('ORDERS.ORDER_ID'), 'abc',
CHR(0), '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '');

Se a chamada não for de um Form, apenas os argumentos utilizados são necessários e também não tem a necessidade de inserir o chr(0):

Exemplo:

FND_REQUEST.SUBMIT_REQUEST ('FND',
'FNDPROG',
'Description of FNDPROG',
'01-FEB-01 00:00:00', FALSE,
'', 'arg2', '', NULL, arg5, '');

Retorno

Essa API tem um retorno do tipo NUMBER, então sempre é necessário tratar o que está sendo retornado.

Esse retorno identifica se a chamada do programa concorrente teve sucesso (retornando o ID da solicitação) ou não (retornando 0 “ZERO”).

Caso tenha retornado 0 (ZERO), você pode utilizar as APIs FND_MESSAGE.RETRIEVE e FND_MESSAGE.ERROR para retornar o erro.

Pontos Importantes

01. Dependendo de onde você está chamando essa API, pode ser necessário executar primeiramente a API FND_GLOBAL.APPS_INITIALIZE para setar os contextos da sessão.

02. A API FND_REQUEST.SUBMIT_REQUEST necessita de um comando COMMIT logo após a sua chamada.

Conclusão

A possibilidade de executar programas concorrentes diretamente de código PL/SQL abre um leque de oportunidades.

Podemos assim efetuar chamadas automaticamente, de acordo com regras de negócio.

Se tiver alguma dúvida ou sugestão é só deixar aqui abaixo nos comentários.

E se gostou do artigo e achou o conteúdo útil, não esqueça de compartilhar nas redes sociais.

Deixe uma resposta

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