Submeter um concurrent no Oracle EBS de dentro de um código PL/SQL com data de execução dinâmica (FND_REQUEST.SUBMIT_REQUEST)
Autor: Rique | Publicado: 2009-05-13T11:10:00-03:00

E ai pessoal!!!! Blz???Hoje vou mostrar uma solução simples para um problema que tive, talvez alguém não conheça essa função e suas opções...A situação é seguinte, precisamos executar um concurrent todo último dia do mês e não pode ser sábado ou domingo.Na minha primeira visão da solução, imaginei o próprio schedule do concurrent, colocando na opção "Em dias específicos", porém, lá só tem a opção de ultimo dia, ele não vai se importar se o dia é sábado ou domingo...Minha idéia é submeter o concurrent de dentro do meu PL/SQL, pega o último dia do mês seria simples, verificar se é sábado ou domingo também é simples, só não sabia se conseguiria colocar uma data para iniciar a execução do concurrent usando o FND_REQUEST.SUBMIT_REQUEST.Pra quem não conhece o FND_REQUEST.SUBMIT_REQUEST, ela é um API da Oracle que irá submeter o concurrent do seu PL/SQL... guarda esse nome, que com certeza irá usar algum dia.Depois de uma pesquisada... descobri um parâmetro do FND_REQUEST.SUBMIT_REQUEST que se coloca a data de execução, é somente preencher o parâmetro START_TIME.Sempre que utilizava o FND_REQUEST.SUBMIT_REQUEST colocava somente os parâmetros obrigatórios e argumentos, não conhecia o START_TIME.Assim, a solução ficou simples, montei o meu código da seguinte maneira, peguei o ultimo dia do mês com a query abaixo e verifiquei se é sábado ou domingo:SELECT DECODE( TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1)),'D')             , '1', TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1))-2,'DD-MON-RRRR ')             , '7', TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1))-1,'DD-MON-RRRR ')             , TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,1)),'DD-MON-RRRR ')             )  '14:00:00'  INTO v_date_submit  FROM dual;Com o resultado executei a FND_REQUEST.SUBMIT_REQUEST passando a data que select acima retornou no parâmetro START_TIME.v_request_id := fnd_request.submit_request( application => 'XXFND'          -- Aplicação do concurrent                                          , program     => 'XXCONCURRENT'   -- Nome do concurrent                                          , description => 'Meu Concurrent' -- Descrição do concurrent                                          , start_time  => v_date_submit    -- Data de Execução do concurrent                                          , argument1   => 'S'              -- Parâmetro do concurrent                                          , argument2   => '1060'           -- Parâmetro do concurrent                                          );Ai é só sair para o abraço!!!!!!Um exemplo de como o programa ira funcionar: Hoje é dia 30/04/2009, o usuário submete o concurrent. O programa vai fazer todo o processo, buscar o ultima dia do mês seguinte 29/05/2009 e submeter o concurrent para rodar nesta data. Quando chegar no dia 29/05/2009 ele vai fazer processo, buscar o ultima dia do mês seguinte 30/06/2009 e submter o concurrent para rodar nesta data... e assim vai longe... até alguém cancelar o concurrent schedulado.Espero que a dica acima ajude algum profissional necessitado... heheheheeeeeeeeeeAbsss