1 PACKAGE body WF_SOA_CTX_PKG AS
2 /* $Header: WFSOACTXB.pls 120.0.12010000.9 2009/07/26 07:09:15 snellepa noship $ */
3
4
5 pAppsBaseLang fnd_languages.nls_language%type;
6
7 /* private function to get apps base Language Code */
8 function getAppsBaseLang
9 return varchar2
10 is
11 begin
12
13 IF WF_SOA_CTX_PKG.pAppsBaseLang IS NULL THEN
14 SELECT language_code
15 INTO WF_SOA_CTX_PKG.pAppsBaseLang
16 FROM fnd_languages
17 WHERE Installed_flag = 'B';
18 END IF;
19
20 return WF_SOA_CTX_PKG.pAppsBaseLang;
21
22 end;
23 /* private procedure to get User specific Language Details*/
24
25 procedure getUserLang( userId Number, lang_code OUT NOCOPY varchar2)
26 is
27 pTemp fnd_languages.nls_language%type;
28 begin
29 pTemp:=fnd_profile.value_specific('ICX_LANGUAGE',user_id=>userId);
30 SELECT language_code
31 INTO lang_code
32 FROM fnd_languages
33 WHERE nls_language = pTemp
34 and Installed_flag in ('B','I');
35 exception
36 WHEN No_Data_found THEN
37 lang_code :=WF_SOA_CTX_PKG.getAppsBaseLang;
38 end;
39
40
41
42 PROCEDURE setNLSContext(userId VARCHAR2,
43 languageCode VARCHAR2)
44 IS
45 L_LANGUAGE VARCHAR2(50);
46 L_LANGUAGE_CODE VARCHAR2(50);
47 L_DATE_FORMAT VARCHAR2(50);
48 L_DATE_LANGUAGE VARCHAR2(50);
49 L_NUMERIC_CHARACTERS VARCHAR2(50);
50 L_NLS_SORT VARCHAR2(50);
51 L_NLS_TERRITORY VARCHAR2(50);
52 L_LIMIT_TIME NUMBER(15);
53 L_LIMIT_CONNECTS NUMBER(15);
54 L_ORG_ID VARCHAR2(50);
55 L_TIMEOUT NUMBER(15);
56 BEGIN
57 -- get the parameters to be passed to fnd_global from fnd_session_management
58 FND_SESSION_MANAGEMENT.SETUSERNLS(userId, languageCode, L_LANGUAGE, L_LANGUAGE_CODE, L_DATE_FORMAT, L_DATE_LANGUAGE, L_NUMERIC_CHARACTERS, L_NLS_SORT, L_NLS_TERRITORY, L_LIMIT_TIME, L_LIMIT_CONNECTS, L_ORG_ID, L_TIMEOUT);
59 --- set the values through fnd_global
60 FND_GLOBAL.SET_NLS_CONTEXT( L_LANGUAGE, L_DATE_FORMAT, L_DATE_LANGUAGE, L_NUMERIC_CHARACTERS, L_NLS_SORT, L_NLS_TERRITORY);
61 END setNLSContext ;
62 /* */
63 PROCEDURE SETCONTEXT_ID(pUserID NUMBER,
64 pRespID NUMBER,
65 pRespAppID NUMBER,
66 pRespAppName VARCHAR2,
67 pSecGrpID NUMBER,
68 pLangCode VARCHAR2,
69 pOrgID NUMBER)
70 IS
71
72 pTemp VARCHAR2(1);
73 BEGIN
74
75 -- Initialize APPS
76 FND_GLOBAL.APPS_INITIALIZE(pUserID, pRespID, pRespAppID, pSecGrpID);
77 IF(pRespAppID <> -1) THEN
78 MO_GLOBAL.Init(pRespAppName);
79 -- Set MOAC Values
80 IF pOrgID IS NOT NULL THEN
81 BEGIN
82 SELECT 'X'
83 INTO pTemp
84 FROM hr_operating_units
85 WHERE usable_flag IS NULL
86 AND ORGANIZATION_ID =pOrgID;
87
88 MO_GLOBAL.set_policy_context('S',pOrgID);
89 EXCEPTION
90 WHEN NO_DATA_FOUND THEN
91 raise_application_error(-20001,'INVALID_ORGID');
92 END;
93 END IF;
94 END IF;
95 --Set NLS
96 setNLSContext(pUserID, pLangCode);
97 END SETCONTEXT_ID;
98 /* */
99 PROCEDURE GETCONTEXT_ID( pUserName VARCHAR2,
100 pResp VARCHAR2,
101 pRespApp VARCHAR2,
102 pSecurityGroup VARCHAR2,
103 pLang VARCHAR2,
104 pIsLangCode NUMBER default 0,
105 pUserID OUT NOCOPY NUMBER,
106 pRespID OUT NOCOPY NUMBER,
107 pRespAppID OUT NOCOPY NUMBER,
108 pSecurityGroupID OUT NOCOPY NUMBER,
109 pLangCode OUT NOCOPY VARCHAR2 ,
110 x_status_code OUT NOCOPY VARCHAR2,
111 x_error_code OUT NOCOPY VARCHAR2
112 )
113 IS
114 pStage NUMBER;
115 pTemp varchar2(100);
116 nTemp NUMBER;
117 BEGIN
118 --initialize to default values
119 pUserID:=-1;
120 pRespID:=-1;
121 pRespAppID:=-1;
122 pSecurityGroupID:=0;
123 pLangCode:='US';
124
125 x_status_code:='F'; -- Initially FAILURE
126 x_error_code:=NULL;
127 --Start Username->UserID
128 IF pUserName IS NULL THEN
129 raise_application_error(-20001,'INVALID_USER_NAME');
130 END IF;
131 pStage:=1;
132 SELECT user_id
133 INTO pUserID
134 FROM fnd_user
135 WHERE user_name = upper(pUserName);
136
137 --End Username->UserID
138 pStage:=2;
139 --Start LangCode
140 IF ( pLang IS NULL ) THEN
141 --No language specified get the details from profile, else default to US
142 WF_SOA_CTX_PKG.getUserLang( pUserID, pLangCode);
143 ELSE -- language is specifed
144 IF pIsLangCode=1 THEN -- and it has been specified as Code
145 SELECT language_code
146 INTO pLangCode
147 FROM fnd_languages
148 WHERE language_code = upper(pLang)
149 and Installed_flag in ('B','I');
150
151 ELSE -- it has been specied as Name ( in English !!)
152 SELECT language_code
153 INTO pLangCode
154 FROM fnd_languages
155 WHERE nls_language = upper(pLang)
156 and Installed_flag in ('B','I');
157
158
159 END IF;
160 END IF;
161 --To derive Resp Name , we need App Name also..
162
163 IF ( pRespApp IS NOT NULL ) THEN
164
165 pStage:=3;
166 SELECT B.APPLICATION_ID
167 INTO pRespAppID
168 FROM FND_APPLICATION B
169 WHERE B.APPLICATION_SHORT_NAME=Upper(pRespApp);
170 END IF;
171
172
173 If pResp is NOT NULL Then
174
175 IF pRespAppID <> -1 Then
176 pStage :=4;
177 IF ( InStr(pResp,'{key}')=1) THEN
178 --get from key
179 SELECT RESPONSIBILITY_ID
180 INTO pRespID
181 FROM fnd_responsibility
182 WHERE APPLICATION_ID =pRespAppID
183 AND RESPONSIBILITY_KEY=SUBSTR(pResp,6);
184
185 ELSE
186 --get from name
187 SELECT B.RESPONSIBILITY_ID
188 INTO pRespID
189 FROM FND_RESPONSIBILITY_TL T,
190 FND_RESPONSIBILITY B
191 WHERE B.RESPONSIBILITY_ID = T.RESPONSIBILITY_ID
192 AND B.APPLICATION_ID = T.APPLICATION_ID
193 AND T.LANGUAGE = pLangCode
194 AND b.application_id = pRespAppID
195 AND T.RESPONSIBILITY_NAME= pResp;
196
197 END IF;
198 ELSE
199
200 --Start Resp name->ID
201 pStage :=4;
202 IF ( InStr(pResp,'{key}')=1) THEN
203 --get from key
204 SELECT count(*)
205 INTO nTemp
206 FROM fnd_responsibility
207 WHERE RESPONSIBILITY_KEY=SUBSTR(pResp,6);
208 If nTemp =0 Then
209 Raise No_data_Found;
210 elsif nTemp=1 Then
211 SELECT RESPONSIBILITY_ID,APPLICATION_ID
212 INTO pRespID, pRespAppID
213 FROM fnd_responsibility
214 WHERE RESPONSIBILITY_KEY=SUBSTR(pResp,6);
215 else
216 pStage:=3;
217 Raise No_data_found;
218 End If;
219
220 ELSE
221
222 --SELECT B.RESPONSIBILITY_ID
223 SELECT COUNT(*)
224 INTO nTemp
225 FROM FND_RESPONSIBILITY_TL T,
226 FND_RESPONSIBILITY B
227 WHERE B.RESPONSIBILITY_ID = T.RESPONSIBILITY_ID
228 AND B.APPLICATION_ID = T.APPLICATION_ID
229 AND T.LANGUAGE = pLangCode
230 AND T.RESPONSIBILITY_NAME= pResp;
231
232 If nTemp =0 Then
233 Raise No_data_Found;
234 elsif nTemp=1 Then
235 SELECT B.RESPONSIBILITY_ID, B.APPLICATION_ID
236 INTO pRespID, pRespAppID
237 FROM FND_RESPONSIBILITY_TL T,
238 FND_RESPONSIBILITY B
239 WHERE B.RESPONSIBILITY_ID = T.RESPONSIBILITY_ID
240 AND B.APPLICATION_ID = T.APPLICATION_ID
241 AND T.LANGUAGE = pLangCode
242 AND T.RESPONSIBILITY_NAME= pResp;
243 else
244 pStage:=3;
245 Raise No_data_found;
246 End If;
247
248 END IF;
249
250 END IF;
251
252
253 END IF;
254
255 -- changing from security group name to security group key
256 -- based on comments from Abhishek.verma
257
258 pStage:=5;
259 SELECT SECURITY_GROUP_ID
260 INTO pSecurityGroupID
261 FROM FND_SECURITY_GROUPS
262 WHERE upper(SECURITY_GROUP_KEY) = upper(nvl(pSecurityGroup,'STANDARD'));
263
264 -- changes for bug 8492785
265 -- need to check for user-resp combination here
266 -- as SOA Java code calls only getcontext_id
267 pStage:=6;
268 IF pRespID <> -1 THEN
269 If fnd_profile.value_specific('ENABLE_SECURITY_GROUPS',RESPONSIBILITY_ID=> pRespID, APPLICATION_ID=>pRespAppID )='Y' Then
270 SELECT 1
271 INTO nTemp
272 FROM FND_USER_RESP_GROUPS
273 WHERE user_id=pUserID
274 AND RESPONSIBILITY_ID=pRespID
275 and SECURITY_GROUP_ID=pSecurityGroupID
276 AND rownum <2;
277 Else
278 SELECT 1
279 INTO nTemp
280 FROM FND_USER_RESP_GROUPS
281 WHERE user_id=pUserID
282 AND RESPONSIBILITY_ID=pRespID
283 AND rownum <2;
284 End if;
285
286 END IF;
287
288 If x_error_code is Null then
289 x_status_code:='S';
290 End If;
291
292 EXCEPTION
293 WHEN No_Data_found THEN
294 IF pStage=1 THEN
295 x_error_code:='INVALID_USER_NAME';
296 ELSIF pStage=2 THEN
297 x_error_code:='INVALID_LANGCODE';
298 WF_SOA_CTX_PKG.getUserLang( pUserID, pLangCode);
299 ELSIF pStage=3 THEN
300 x_error_code:='INVALID_RESP_APP_NAME';
301 ELSIF pStage=4 THEN
302 x_error_code:='INVALID_RESP_NAME';
303 ELSIF pStage=5 THEN
304 x_error_code:='INVALID_SECGRP';
305 ELSIF pStage=6 THEN
306 x_error_code:='RESP_NOT_ASSIGNED_TO_USER';
307 END IF;
308 END GETCONTEXT_ID;
309
310 /* */
311 PROCEDURE setContext(pUserName VARCHAR2,
312 pResp VARCHAR2,
313 pRespApp VARCHAR2,
314 pSecurityGroup VARCHAR2,
315 pnlslanguage VARCHAR2,
316 pIsLangCode NUMBER default 0,
317 pOrgId NUMBER)
318 IS
319 pLangCode fnd_languages.language_code%TYPE;
320 pUserId fnd_user.user_id%TYPE;
321 pAppId fnd_application.application_id%TYPE;
322 pRespId fnd_responsibility.responsibility_id%TYPE;
323 pSecGrpId fnd_security_groups.security_group_id%TYPE;
324 x_status_code VARCHAR2(1);
325 x_error_code varchar2(50);
326 BEGIN
327 GETCONTEXT_ID(pUserName, pResp,pRespApp,pSecurityGroup, pnlslanguage,pIsLangCode, pUserId,pRespId,pAppId,pSecGrpId,pLangCode,x_status_code,x_error_code);
328 IF x_status_code ='S' THEN
329 SETCONTEXT_ID(pUserId, pRespID, pAppId ,pRespApp, pSecGrpId , pLangCode , pOrgId);
330 ELSE
331 RAISE_APPLICATION_ERROR(-20001, x_error_code);
332 END IF;
333 END setContext;
334
335
336
337
338
339 END WF_SOA_CTX_PKG;