Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2011, 21:33
scooby151
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 10 meses
Puntos: 4
Pregunta Fnd_Request.Submit_Request desde Trigger en R12

Buenas noches (se nota que me encuentro en colombia).

Les escribo por lo siguiente, tengo un problema con un desarrollo en una instancia Oracle R12, tengo todo el codigo en un trigger y veo que me obtiene la info necesaria para setear con la siguiente instruccion Fnd_Global.Apps_Initialize, pero siempre me genera un error al tratar de inicializar y por consiguiente, no me deja lanzar el Fnd_Request.Submit_Request.

Adjunto codigo del trigger, Funcion de Seteo y error q almaceno en una tabla.

Error:

Código SQL:
Ver original
  1. ORA-20001: Error de Oracle -20001: Se detectó ORA-20001: Error de Oracle -4092: Se detectó ORA-04092: no se puede SET NLS en un disparador
  2.  en fnd_global.set_nls.set_parameter('NLS_LANGUAGE','LATIN AMERICAN SPANISH').
  3.  en fnd_global.set_nls.

--Codigo del Trigger

Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER Xxcoo_Ap_Lanza_Concurrente
  2.   After UPDATE ON FND_CONCURRENT_REQUESTS
  3.   REFERENCING NEW AS NEW OLD AS OLD
  4.   FOR Each ROW  
  5. WHEN ((NEW.Phase_Code = 'C') AND (NEW.Status_Code = 'C') AND (NEW.Program_Application_Id = 673)  AND (NEW.Concurrent_Program_Id = 52355))
  6. DECLARE
  7.  
  8.   v_Org_Id    NUMBER;
  9.   Nrequest_Id NUMBER;
  10.   v_Resp_Id   NUMBER;
  11.  
  12.   v_User_Name      Varchar2(50);
  13.   v_Responsability Varchar2(200);
  14.   v_Context        Varchar2(100);
  15.   v_Context2       Varchar2(500);
  16.  
  17.   l_Boolean BOOLEAN;
  18.  
  19. BEGIN
  20.  
  21.  
  22.   SELECT Requestor,
  23.          Responsibility_Id
  24.     INTO v_User_Name,
  25.          v_Resp_Id
  26.     FROM Fnd_Conc_Req_Summary_v
  27.    WHERE Request_Id = :NEW.Request_Id
  28.    ORDER BY Request_Id DESC;
  29.  
  30.  
  31.   SELECT Responsibility_Name
  32.     INTO v_Responsability
  33.     FROM Fnd_Responsibility_Vl
  34.    WHERE Responsibility_Id = v_Resp_Id;
  35.  
  36.   SELECT To_Number(Substr(v.Profile_Option_Value, 1, 30))
  37.     INTO v_Org_Id
  38.     FROM Applsys.Fnd_Profile_Options       p,
  39.          Applsys.Fnd_Profile_Option_Values v,
  40.          Applsys.Fnd_Responsibility        Rsp,
  41.          Hr.Hr_All_Organization_Units      o,
  42.          Applsys.Fnd_Responsibility_Tl     r
  43.    WHERE p.Profile_Option_Id = v.Profile_Option_Id(+)
  44.      AND Rsp.Application_Id(+) = v.Level_Value_Application_Id
  45.      AND Rsp.Responsibility_Id(+) = v.Level_Value
  46.      AND Rsp.Responsibility_Id = r.Responsibility_Id
  47.      AND r.Responsibility_Name LIKE v_Responsability --'Coomeva AP Superuser Colombia'
  48.      AND r.LANGUAGE = 'ESA'
  49.      AND p.Profile_Option_Name = 'ORG_ID'
  50.      AND To_Char(o.Organization_Id) = Substr(v.Profile_Option_Value, 1, 30);
  51.  
  52.  
  53.   -- Setting the context ----
  54.   v_Context := Xxcoo_Ap_Utilitiescheq_Co_Pkg.Set_Context(v_User_Name,
  55.                                                          v_Responsability,
  56.                                                          v_Org_Id);
  57.  
  58.   --v_Context := Set_Context('&V_USER_NAME', '&V_RESPONSIBILITY', 82);
  59.  
  60.   v_Context2 := 'v_User_Name: ' || v_User_Name || ', v_Responsability: ' ||
  61.                 v_Responsability || ', v_Org_Id: ' || v_Org_Id ||
  62.                 ', v_Context: ' || v_Context;
  63.  
  64.   IF v_Context = 'F' THEN
  65.     Dbms_Output.Put_Line('Error while setting the context');
  66.   END IF;
  67.  
  68.  
  69.   l_Boolean := Fnd_Request.Set_Mode(TRUE);
  70.  
  71.   Nrequest_Id := Fnd_Request.Submit_Request(Application => 'XXCOO',
  72.                                             Program     => 'XXCOOAPMOVTEF2',
  73.                                             Start_Time  => Sysdate,
  74.                                             Sub_Request => FALSE,
  75.                                             Argument1   => :NEW.Request_Id);
  76.  
  77.   --Commit;
  78.   -- End If;
  79.  
  80.   INSERT INTO Cvj_Prueba_Trigger
  81.     (Request_Id_Eft, Request_Id_Mov, Fecha, Variables_Contex)
  82.   VALUES
  83.     (:NEW.Request_Id, Nrequest_Id, Sysdate, v_Context2);
  84.  
  85.   --Commit;
  86.  
  87. END;

-- Funcion Set_Context
Código SQL:
Ver original
  1. FUNCTION Set_Context(i_User_Name IN Varchar2,
  2.                        i_Resp_Name IN Varchar2,
  3.                        i_Org_Id    IN NUMBER) RETURN Varchar2 IS
  4.  
  5.     v_User_Id      NUMBER;
  6.     v_Resp_Id      NUMBER;
  7.     v_Resp_Appl_Id NUMBER;
  8.     v_Lang         Varchar2(100);
  9.     v_Session_Lang Varchar2(100) := Fnd_Global.Current_Language;
  10.     v_Return       Varchar2(10) := 'T';
  11.     v_Nls_Lang     Varchar2(100);
  12.     v_Org_Id       NUMBER := i_Org_Id;
  13.  
  14.     v_Mensaje Varchar2(4000) := NULL;
  15.     /* Cursor to get the user id information based on the input user name */
  16.     Cursor Cur_User IS
  17.       SELECT User_Id FROM Fnd_User WHERE User_Name = i_User_Name;
  18.     /* Cursor to get the responsibility information */
  19.     Cursor Cur_Resp IS
  20.       SELECT Responsibility_Id,
  21.              Application_Id,
  22.              LANGUAGE
  23.         FROM Fnd_Responsibility_Tl
  24.        WHERE Responsibility_Name = i_Resp_Name
  25.          AND LANGUAGE = 'ESA';
  26.  
  27.     /* Cursor to get the nls language information for setting the language context */
  28.     Cursor Cur_Lang(p_Lang_Code Varchar2) IS
  29.       SELECT Nls_Language
  30.         FROM Fnd_Languages
  31.        WHERE Language_Code = p_Lang_Code;
  32.   BEGIN
  33.     /* To get the user id details */
  34.     OPEN Cur_User;
  35.     Fetch Cur_User
  36.       INTO v_User_Id;
  37.     IF Cur_User%Notfound THEN
  38.    
  39.       v_Mensaje := Sqlerrm;
  40.    
  41.       INSERT INTO Cvj_Prueba_Trigger
  42.         (Request_Id_Eft, Request_Id_Mov, Fecha, Variables_Contex)
  43.       VALUES
  44.         (0,
  45.          0,
  46.          Sysdate,
  47.          'Error en el usuario: ' || i_User_Name || '. Problema: ' ||
  48.          v_Mensaje);
  49.    
  50.       v_Return := 'F';
  51.    
  52.     END IF; --IF cur_user%NOTFOUND
  53.     Close Cur_User;
  54.  
  55.     /* To get the responsibility and responsibility application id */
  56.     OPEN Cur_Resp;
  57.     Fetch Cur_Resp
  58.       INTO v_Resp_Id, v_Resp_Appl_Id, v_Lang;
  59.     IF Cur_Resp%Notfound THEN
  60.    
  61.       v_Mensaje := Sqlerrm;
  62.    
  63.       INSERT INTO Cvj_Prueba_Trigger
  64.         (Request_Id_Eft, Request_Id_Mov, Fecha, Variables_Contex)
  65.       VALUES
  66.         (0,
  67.          0,
  68.          Sysdate,
  69.          'Error en la responsabilidad: ' || i_Resp_Name || '. Problema: ' ||
  70.          v_Mensaje);
  71.    
  72.       v_Return := 'F';
  73.    
  74.     END IF; --IF cur_resp%NOTFOUND
  75.     Close Cur_Resp;
  76.  
  77.     /* Setting the oracle applications context for the particular session */
  78.     Fnd_Global.Apps_Initialize(User_Id      => v_User_Id,
  79.                                Resp_Id      => v_Resp_Id,
  80.                                Resp_Appl_Id => v_Resp_Appl_Id);
  81.  
  82.     /* Setting the org context for the particular session */
  83.     Mo_Global.Set_Policy_Context('S', v_Org_Id);
  84.  
  85.     /*    \* setting the nls context for the particular session *\
  86.     If v_Session_Lang != v_Lang Then
  87.       Open Cur_Lang(v_Lang);
  88.       Fetch Cur_Lang
  89.         Into v_Nls_Lang;
  90.       Close Cur_Lang;
  91.       Fnd_Global.Set_Nls_Context(v_Nls_Lang);
  92.     End If; --IF v_session_lang != v_lang*/
  93.  
  94.     Commit;
  95.  
  96.     RETURN v_Return;
  97.   Exception
  98.     WHEN Others THEN
  99.    
  100.       v_Mensaje := Sqlerrm;
  101.    
  102.       INSERT INTO Cvj_Prueba_Trigger
  103.         (Request_Id_Eft, Request_Id_Mov, Fecha, Variables_Contex)
  104.       VALUES
  105.         (0, 0, Sysdate, v_Mensaje);
  106.    
  107.    
  108.       RETURN 'F';
  109.    
  110.   END Set_Context;

Si alguien sabe que puedo hacer para solucionar el error se lo agradeceria, la verdad se necesita esto lo mas pronto posible para poder llevarlo a la instancia de producción.

Muchas gracias.

Scooby.