Olá Rafael, tudo bem?

Já fiz isso. O que exatamente você precisa?


Aqui um exemplo do que foi feito nessa procedure.
O nome do programa na p_programs_list precisar ser o short_name do concurrent.
Quando executar, vai inicializar uma concurrent para cada item na program_list.
Espero ter ajudado, qualquer coisa pode me escrever.
Abraço,
Helder Costa Amaral
   –This procedure is the Concurrent Parent Program
   –which in turn submits other payment programs as
   –child requests.
   –Called from the procedure Submit of XXMV_AP_PAYMENT_PROCESSOR package.

   PROCEDURE submit_program(errbuf               OUT NOCOPY VARCHAR2
                           ,retcode              OUT NOCOPY NUMBER
                           ,p_progs_params_list1 IN VARCHAR2
                           ,p_progs_params_list2 IN VARCHAR2
                           ,p_progs_params_list3 IN VARCHAR2
                           ,p_progs_params_list4 IN VARCHAR2
                           ,p_progs_params_list5 IN VARCHAR2
                           ,p_progs_params_list6 IN VARCHAR2
                           ,p_progs_params_list7 IN VARCHAR2
                           ,p_progs_params_list8 IN VARCHAR2
                           ,p_progs_params_list9 IN VARCHAR2
                           ,p_payment_batch      IN VARCHAR2
                           ,p_programs_list      IN VARCHAR2
                           ,p_org_id             IN NUMBER
                           ,p_event              IN VARCHAR2
                           ,p_calling_sequence   IN VARCHAR2) IS

      l_current_calling_sequence VARCHAR2(2000);
      l_debug_info               VARCHAR2(100);
      l_req_data                 VARCHAR2(240); — Bug2828863 Changing length to 240.
      l_program_index            NUMBER;
      l_request_id               NUMBER;
      l_sqlerrm                  VARCHAR2(200);
      l_error_mesg               VARCHAR2(2000);
      no_of_parameters           NUMBER;
      p_progs_params_list        VARCHAR2(2000);
      TYPE programs_table IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
      l_programs_list      programs_table;
      l_prev_program_index NUMBER;
      l_prev_request_id    NUMBER;
      dstatus              VARCHAR2(30) := ‘SUCCESS’;
      dphase               VARCHAR2(30);
      rstatus              VARCHAR2(80);
      rphase               VARCHAR2(80);
      message              VARCHAR2(240);
      l_call_status        BOOLEAN;
      –l_complete           BOOLEAN;
      l_debug_index        NUMBER := 1;
      l_length             NUMBER := 0;
      l_start              NUMBER := 0;
      l_program_name       VARCHAR2(80) := NULL;
   BEGIN

      — Update the calling sequence
      —
      l_current_calling_sequence := p_calling_sequence || ‘->’ || ‘XXMV_AP_PAYMENT_PROCESSOR.submit_program’;

      l_debug_info := ‘Building back the global list .’;

      ————————————————————————
      –Concatenate back the split progs_params_list into a single list again.
      ————————————————————————
      p_progs_params_list := p_progs_params_list1 || p_progs_params_list2 ||
                             p_progs_params_list3 || p_progs_params_list4 ||
                             p_progs_params_list5 || p_progs_params_list6 ||
                             p_progs_params_list7 || p_progs_params_list8 ||
                             p_progs_params_list9;

      ————————————————————
      — Programs defined in the order they should run
      ————————————————————

      l_debug_info := ‘Antes da atribuição do XXMVAUTOSELECT’;

      IF instr(p_programs_list, ‘XXMVAUTOSELECT’) <> 0 THEN
         l_programs_list(1) := ‘XXMVAUTOSELECT’; — Programa customizado para o Autoselect. –MV
      END IF;

      l_debug_info := ‘Depois da atribuição do XXMVAUTOSELECT’;

      l_programs_list(2) := ‘BUILD’;
      –Bug 2353651 Added for Calling Federal’s Report
      l_programs_list(3) := ‘CASH_POSITION’;
      l_programs_list(4) := ‘PRELIM_REGISTER’;
      –Bug:2637430  Added for Federal Financials
      l_programs_list(5) := ‘THIRD_PARTY_PAYMENT’;
      –Bug:2025932 Added for AP-AR Netting
      l_programs_list(6) := ‘NETTING’;
      l_programs_list(7) := ‘FORMAT’;
      l_programs_list(8) := ‘CONFIRM’;
      l_programs_list(9) := ‘ACCOUNT’;
      l_programs_list(10) := ‘POPAY’;
      l_programs_list(11) := ‘FINAL_REGISTER’;
      l_programs_list(12) := ‘REMITTANCE’;
      l_programs_list(13) := ‘CANCEL’;
      l_programs_list(14) := ‘ADDCONSOL’;
      l_programs_list(15) := ‘IMPORT’;

      ————————————————————
      –Print to Log file all the programs that will be submitted
      ————————————————————
      l_req_data := fnd_conc_global.request_data;

      IF (p_programs_list IS NOT NULL AND l_req_data IS NULL) THEN

         l_debug_info := ‘Payment Process Manager will submit ‘;
         fnd_file.put_line(fnd_file.log, l_debug_info);

         LOOP
            EXIT WHEN(l_debug_index > 15);

            l_start  := instr(p_programs_list
                             ,l_programs_list(l_debug_index));
            l_length := length(l_programs_list(l_debug_index));

            IF (l_start <> 0) THEN
               l_program_name := ‘……..’ ||
                                 substr(p_programs_list, l_start, l_length);
            ELSE
               l_program_name := NULL;
            END IF;

            IF (l_program_name IS NOT NULL) THEN
               fnd_file.put_line(fnd_file.log, l_program_name);
            END IF;
            l_debug_index := l_debug_index + 1;

         END LOOP;

      END IF;

      ————————————————————
      — Read the value from REQUEST_DATA.  If this is the
      — first run of the program, then this value will be null.
      — Otherwise, this will be the value that we passed to
      — SET_REQ_GLOBALS on the previous run.
      ————————————————————

      l_req_data := fnd_conc_global.request_data;
      IF (l_req_data IS NOT NULL) THEN

         l_prev_program_index := substr(l_req_data
                                       ,1
                                       ,instr(l_req_data, ‘:’) – 1);
         l_prev_request_id    := substr(l_req_data
                                       ,instr(l_req_data, ‘:’) + 1);

         IF (l_prev_request_id IS NOT NULL) THEN
            l_call_status := fnd_concurrent.get_request_status(l_prev_request_id
                                                              ,”
                                                              ,”
                                                              ,rphase
                                                              ,rstatus
                                                              ,dphase
                                                              ,dstatus
                                                              ,message);
         END IF;

      END IF;

      IF (dstatus <> ‘ERROR’) THEN



         ————————————————————
         — If this is the first run, we’ll set l_program_index 1.
         — Otherwise, we’ll set l_program_index request_data + 1.
         ————————————————————
         IF (l_req_data IS NOT NULL) THEN

            l_program_index := to_number(l_prev_program_index) + 1;

            l_debug_info := l_programs_list(l_prev_program_index) ||
                            ‘ completed successfully.’;
            fnd_file.put_line(fnd_file.log, l_debug_info);

            IF (l_program_index > 15) THEN
               errbuf  := ‘Successful Completion…’;
               retcode := 0;
               RETURN;
            END IF;

         ELSE

            l_program_index := 1;

         END IF;

         <<next_program>>
      ————————————————————–
         — If the Programs List passed to the parent process includes
         — this program, then submit a request for it.
         ————————————————————–

         IF (l_program_index <= 15) THEN

            IF instr(p_programs_list, l_programs_list(l_program_index)) <> 0 THEN

               l_debug_info := ‘Get the parameters for the subprogram . ‘;
               get_parameters(l_programs_list(l_program_index)
                             ,p_progs_params_list
                             ,p_param_name_list
                             ,p_param_value_list
                             ,no_of_parameters);


               l_debug_info := ‘Submitting ‘ ||
                               l_programs_list(l_program_index) || ‘…’;

               fnd_file.put_line(fnd_file.log, l_debug_info);

               submit_sub_program(l_request_id
                                 ,l_programs_list(l_program_index)
                                 ,p_payment_batch
                                 ,p_param_name_list
                                 ,p_param_value_list
                                 ,no_of_parameters
                                 ,p_org_id
                                 ,p_event);

               IF l_request_id = 0 THEN

                  RAISE request_submission_failure;

               ELSE

                  — Here we set the globals to put the program into the
                  — PAUSED status on exit, and to save the state in
                  — request_data.

                  fnd_conc_global.set_req_globals(conc_status  => ‘PAUSED’
                                                 ,request_data => to_char(l_program_index) || ‘:’ ||
                                                                  to_char(l_request_id));
                  l_debug_info := l_programs_list(l_program_index) ||
                                  ‘ Submitted…Request id : ‘ ||
                                  to_char(l_request_id);
                  fnd_file.put_line(fnd_file.log, l_debug_info);

                  l_debug_info := ‘Wait for ‘ ||
                                  l_programs_list(l_program_index) ||
                                  ‘ to complete…’ ||
                                  ‘ enter Paused mode.’;
                  fnd_file.put_line(fnd_file.log, l_debug_info);

               END IF;

               RETURN;

            ELSE

               l_program_index := l_program_index + 1;
               GOTO next_program;

            END IF; –INSTR

         END IF; –l_program_index


         l_debug_info := ‘Payment Process Manager Completed Successfully .’;
         fnd_file.put_line(fnd_file.log, l_debug_info);

      ELSE
         RAISE request_failed;
      END IF; –dstatus

   EXCEPTION

      WHEN request_submission_failure THEN
         errbuf       := ‘Request Submission Failed’;
         retcode      := 2;
         l_error_mesg := fnd_message.get ||
                         ‘ occurred when trying to submit the payment batch ‘ ||
                         p_payment_batch || ‘ with the parameters ‘ ||
                         p_param_value_list(0) || ‘ ,’ ||
                         p_param_value_list(1) || ‘…’;
         fnd_file.put_line(fnd_file.log, l_error_mesg);

         RETURN;

      WHEN request_failed THEN
         l_error_mesg := l_programs_list(l_prev_program_index) ||
                         ‘ Failed.’ || ‘ Refer to the log file of request ‘ ||
                         to_char(l_prev_request_id) ||
                         ‘ for error information.’;
         fnd_file.put_line(fnd_file.log, l_error_mesg);

         l_error_mesg := ‘Payment Process Manager Aborted with error.’;
         fnd_file.put_line(fnd_file.log, l_error_mesg);

         –l_complete := fnd_concurrent.set_completion_status(‘ERROR’,’One of the child requests for this program’ ||’ has errored .’);
         RETURN;


      WHEN cannot_set_printer THEN
         errbuf  := ‘Cannot Set Printer’;
         retcode := 3;
         RETURN;

      WHEN no_data_found THEN
         NULL;
         –l_debug_info := SQLERRM;

      WHEN OTHERS THEN
         l_debug_info := SQLERRM;
         IF (SQLCODE <> -20001) THEN

            fnd_message.set_name(‘SQLAP’, ‘AP_DEBUG’);
            fnd_message.set_token(‘ERROR’, SQLERRM);
            fnd_message.set_token(‘CALLING_SEQUENCE’
                                 ,l_current_calling_sequence);
            fnd_message.set_token(‘PARAMETERS’
                                 ,’Program index = ‘ ||
                                  to_char(l_program_index));
            fnd_message.set_token(‘CALLING_SEQUENCE’
                                 ,l_current_calling_sequence);
            fnd_message.set_token(‘DEBUG_INFO’, l_debug_info);

            l_sqlerrm    := SQLERRM;
            l_error_mesg := ‘The following error has occurred : ‘ ||
                            l_sqlerrm || ‘while performing the ‘ ||
                            l_debug_info;

            fnd_file.put_line(fnd_file.log, l_error_mesg);
            RETURN;


         END IF;
         app_exception.raise_exception;

   END submit_program;





De: “Rafael Terzoni Tardelli tardellirafael@yahoo.com ” <>
Para: <>
Enviadas: Quarta-feira, 11 de Novembro de 2015 17:25
Assunto: Baixa automática Lote do AP (CONFIRMAÇÃO)
Boa tarde.

Alguém já precisou invocar a package / procedure por tras da ação de
CONFIRMAÇÃO do Lote de Pagamento do AP?

É a package AP_PAYMENT_PROCESSOR.submit_program.

Procurei algum exemplo de chamada na net e no metalink mas não encontrei
nada.

Obrigado.
Abraço.
Rafael

————————————

————————————

————————————

Yahoo Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group//

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group//join
    (Yahoo! ID required)

<*> To change settings via email:
    -digest
    -fullfeatured

<*> To unsubscribe from this group, send an email to:
    -unsubscribe

<*> Your use of Yahoo Groups is subject to:
    https://info.yahoo.com/legal/us/yahoo/utos/terms/

Deixe uma resposta

Pular para a barra de ferramentas