Tuesday, 24 February 2015

Submit a Concurrent Request from backend

/*********************************************************
*PURPOSE: To Submit a Concurrent Request from backend    *
*AUTHOR: Dilli Subramani                              *
*Date : 24/02/2015                        *
**********************************************************/
--
DECLARE
l_responsibility_id     NUMBER;
l_application_id        NUMBER;
l_user_id               NUMBER;
l_request_id            NUMBER;
BEGIN
  --
  SELECT DISTINCT fr.responsibility_id,
    frx.application_id
     INTO l_responsibility_id,
    l_application_id
     FROM apps.fnd_responsibility frx,
    apps.fnd_responsibility_tl fr
    WHERE fr.responsibility_id = frx.responsibility_id
  AND LOWER (fr.responsibility_name) LIKE LOWER('XXTest Resp');
  --
   SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = 'STHALLAM';
  --
  --To set environment context.
  --
  apps.fnd_global.apps_initialize (l_user_id,l_responsibility_id,l_application_id);
  --
  --Submitting Concurrent Request
  --
  l_request_id := fnd_request.submit_request (
                            application   => 'XXCUST',
                            program       => 'XXEMP',
                            description   => 'XXTest Employee Details',
                            start_time    => sysdate,
                            sub_request   => FALSE,
                argument1     => 'Smith'
  );
  --
  COMMIT;
  --
  IF l_request_id = 0
  THEN
     dbms_output.put_line ('Concurrent request failed to submit');
  ELSE
     dbms_output.put_line('Successfully Submitted the Concurrent Request');
  END IF;
  --
EXCEPTION
WHEN OTHERS THEN
  dbms_output.put_line('Error While Submitting Concurrent Request '||TO_CHAR(SQLCODE)||'-'||sqlerrm);
END;
/









========================================



Pre-requisites :
Step1: Data Definition and Template to be created
Step2: Concurrent program needs to be created

Steps To Create the PL/SQL package:

1. Initialize the  Session Specific variable using fnd_global.APPS_INITIALIZE
2. Set The BI publisher report layout Before submitting the concurrent program
3. Submit the Concurrent Program

Code: (Tested in R12.1.1 )

DECLARE
   l_user_id              fnd_user.user_id%TYPE;
   l_resp_id              fnd_responsibility.responsibility_id%TYPE;
   l_resp_appl_id         fnd_application.application_id%TYPE;
   l_set_layout           boolean;
   l_request_id           NUMBER;
   l_phase                VARCHAR2 (100);
   l_status               VARCHAR2 (100);
   l_dev_phase            VARCHAR2 (100);
   l_dev_status           VARCHAR2 (100);
   l_wait_for_request     boolean := FALSE;
   l_get_request_status   boolean := FALSE;
   Output_layout_failed EXCEPTION;
   request_submission_failed EXCEPTION;
   request_completion_abnormal EXCEPTION;
BEGIN
   l_request_id := NULL;

   --
   -- Get the Apps Intilization Variables
   --
   SELECT   fnd.user_id, fresp.responsibility_id, fresp.application_id
     INTO   l_user_id, l_resp_id, l_resp_appl_id
     FROM   fnd_user fnd, fnd_responsibility_tl fresp
    WHERE   fnd.user_name = 'OEAG'
            AND fresp.responsibility_name = 'Custom XML Reports';

   --
   --Initialize the Apps Variables
   --
   fnd_global.APPS_INITIALIZE (user_id        => l_user_id,
                               resp_id        => l_resp_id,
                               resp_appl_id   => l_resp_appl_id);

   COMMIT;

   --
   -- Set the Layout  for BI Publisher Report
   --

   l_set_layout :=
      fnd_request.add_layout (template_appl_name   => 'XXERP',
                              template_code        => 'XXORACLEERPAPPSGUIDE',
                              --Data Template Code
                              template_language    => 'en',
                              template_territory   => 'US',
                              output_format        => 'PDF');

   IF l_set_layout
   THEN
      -- Submit the Request

      l_request_id :=
         fnd_request.submit_request (application   => 'XXERP',
                                     program       => 'XXOEAG_PG',
                                     description   => '',
                                     start_time    => SYSDATE,
                                     sub_request   => FALSE,
                                     argument1     => l_person_id);

      COMMIT;

      IF l_request_id > 0
      THEN
         --
         --waits for the request completion
         --

         l_wait_for_request :=
            fnd_concurrent.wait_for_request (request_id   => l_request_id,
                                             interval     => 60,
                                             max_wait     => 0,
                                             phase        => l_phase,
                                             status       => l_status,
                                             dev_phase    => l_dev_phase,
                                             dev_status   => l_dev_status,
                                             MESSAGE      => l_messase);

         COMMIT;

         --
         -- Get the Request Completion Status.
         --
         l_get_request_status :=
            fnd_concurrent.get_request_status (
               request_id       => l_request_id,
               appl_shortname   => NULL,
               program          => NULL,
               phase            => l_phase,
               status           => l_status,
               dev_phase        => l_dev_phase,
               dev_status       => l_dev_status,
               MESSAGE          => l_messase
            );

         --
         --Check the status if It IS completed Normal Or Not
         --
         IF UPPER (l_dev_phase) != 'COMPLETED'
            AND UPPER (l_dev_status) != 'NORMAL'
         THEN
            RAISE request_completion_abnormal;
         END IF;
      ELSE
         RAISE request_submission_failed;
      END IF;
   ELSE
      RAISE Output_layout_failed;
   END IF;

   p_request_id := l_request_id;
EXCEPTION
   WHEN Output_layout_failed
   THEN
      DBMS_OUTPUT.put_line ('Out put Layout failed');
   WHEN request_submission_failed
   THEN
      DBMS_OUTPUT.put_line ('Concurrent request submission failed');
   WHEN request_completion_abnormal
   THEN
      DBMS_OUTPUT.put_line (
         'Submitted request completed with error' || l_request_id
      );
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('ERROR:' || SUBSTR (SQLERRM, 0, 240));
END;

/

You can Create this as PL/SQL Procedure and register into Concurrent Program also.



No comments:

Post a Comment