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