miércoles, 27 de agosto de 2014

API para Ejecutar concurrentes por SQL

FND_REQUEST es un API que permite enviar un programa concurrente en las aplicaciones de Oracle. Usando la función FND_REQUEST.SUBMIT_REQUEST y pasando los parámetros necesarios a ella podemos ejecutar un programa concurrente. Pero antes de hacerlo, tenemos que inicializar los siguientes parámetros podemos utilizar:


fnd_global.apps_initialize(user_id, resp_id, resp_appl_id);



User_id: ID del usuario de Oracle aplicaciones
Resp_id: ID de la Responsabilidad donde se ejecutara el reporte
Resp_appl_id: ID de la aplicación donde se ubica la responsabilidad



Luego podemos usar el API de la siguiente manera:


  vn_request_id := fnd_request.submit_request(Aplication,
                                              Program ,
                                              Description ,
                                              Start_time,
                                              Sub_request,
                                              argument1,
                                              argument2,
                                              .
                                              .
                                              .
                                              argument100);

Parámetros
Aplication: Nombre corto de la aplicación asociada al concurrente a ejecutar. 
Program: Nombre corto del programa concurrente
Description: Descripción de la solicitud (Opcional). 
Start_time: Hora que debe empezar, con el formato HH24:MI or HH24:MI:SS (Opcional). 
Sub_request: Establecer a TRUE si la solicitud  viene de otra solicitud sino FALSE 
Argument1 ... 100: Los parámetros para la solicitud del concurrente; Se permite un máximo de 100 argumentos. 

Normalmente para verificar y hacer unseguimiento de la solicitud ejecutada se crea una variable que lo reciba en este caso vn_request_id  es el ID  de la solicitud del concurrente al completar con éxito. si hubiera algún problema devuelve 0.

Podemos crear el siguiente código para demostrar y realizar pruebas de la ejecución de un concurrente por SQL: 

DECLARE
VN_REQUEST_ID   NUMBER;
USER_ID NUMBER :=10039;
RESP_ID NUMBER :=293;
RESP_APPL_ID NUMBER := 220;

BEGIN

  FND_GLOBAL.APPS_INITIALIZE(user_id, resp_id, resp_appl_id);

  VN_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('SQLAP',---APPLICATION
                                              'APXSUIMP',---PROGRAM
                                              '',---DESCRIPTION
                                              '',---START_TIME
                                              FALSE,---SUB_REQUEST
                                              'ALL',---ARGUMENT1
                                              1000,---ARGUMENT2
                                              'N',---ARGUMENT3
                                              'N',---ARGUMENT4
                                              'N');---ARGUMENT5

  COMMIT;
  IF VN_REQUEST_ID > 0 THEN
    DBMS_OUTPUT.PUT_LINE('Se ejecutó la solicitud de concurrente : ' ||
                         VN_REQUEST_ID);
    ELSE
      DBMS_OUTPUT.PUT_LINE('Error al ejecutar : ' || VN_REQUEST_ID);
                        
  END IF;

END;

2 comentarios: