sábado, 27 de março de 2010

Configurando Informações de Impressão para um Concurrent (EBS) em Tempo de Execução

Opa!

Às vezes acontece a seguinte necessidade, temos um concorrente que chama um programa, por exemplo, uma PACKAGE, e esta, por sua vez, além de processar determinados dados, chama um ou mais concorrentes. Entretanto, algumas informações como, por exemplo, número de cópias para impressão, estilo de impressão e a própria impressora, podem ser mudados quando executamos um concorrente. Quando isto acontece precisamos levar estas novas configurações, escolhidas no momento da execução, para os concorrentes que serão executados pela PACKAGE. Abaixo segue um exemplo de como isto pode ser feito. Pense neste exemplo como sendo parte de um programa, que está sendo chamado através de um concorrente, onde este mesmo programa chamará outro concorrente.  Neste caso, precisamos passar as configurações escolhidas para ele, caso contrário ele utilizará as informações padrões, configuradas em seu cadastro. Fazemos isto através da função: FND_REQUEST.SET_PRINT_OPTIONS.

...
begin
  --
  -- Recuperando informações de impressão do concorrente corrente.
  --
  select printer
        ,number_of_copies
        ,print_style
  into   w_impressora
        ,w_num_copias
        ,w_estilo
  from   fnd_concurrent_requests
  where  request_id = fnd_global.conc_request_id;
  -- =======================================================================================
  -- Chamando função para configurar impressora, estilo e número de cópias.
  --
  w_conf_impres := fnd_request.set_print_options( printer   => w_impressora
                                                 ,style     => w_estilo
                                                 ,copies    => w_num_copias
                                                 );
  -- =======================================================================================
  --
  --
  -- Chamando Concurrent.
  wid_solicitacao := fnd_request.submit_request( 'ABC' -- short name da aplicação.
                                                ,'DEF' -- short name do programa.
                                                ,''
                                                ,''
                                                ,false
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0) ,chr(0)
                                                );
  --
  if wid_solicitacao = 0 then
    --
    fnd_file.put_line(fnd_file.log,'Não foi possível executar o concorrente DEF.');
    --
  else
    --
    fnd_file.put_line(fnd_file.log,'Concorrente DEF executado: '||wid_solicitacao);
    --
  end if;
  --
exception
  when others then
    fnd_file.put_line(fnd_file.log,'Erro ao executar concorrente DEF: '||sqlerrm);
end;
...


Forte abraço!

Nenhum comentário:

Postar um comentário