[Home] [Help]
PACKAGE BODY: APPS.JTF_CAL_GRANTS_PVT
Source
1 PACKAGE BODY JTF_CAL_GRANTS_PVT AS
2 /* $Header: jtfvcgtb.pls 120.2 2006/07/28 10:36:02 sankgupt ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'JTF_CAL_GRANTS';
5
6 FUNCTION get_username
7 ( resourceId IN VARCHAR2
8 ) RETURN VARCHAR2
9 IS
10 l_username fnd_user.user_name%TYPE;
11 CURSOR C_USERNAME IS
12 select user_name from jtf_rs_resource_extns
13 where resource_id = TO_NUMBER(resourceId);
14 BEGIN
15 OPEN C_USERNAME;
16 FETCH C_USERNAME INTO l_username;
17 IF (C_USERNAME %NOTFOUND) THEN
18 CLOSE C_USERNAME;
19 --RAISE NO_DATA_FOUND;
20 RETURN -1;
21 END IF;
22 CLOSE C_USERNAME;
23 RETURN l_username;
24 END get_username;
25
26 FUNCTION get_instance_set_id
27 ( instance_set_name IN VARCHAR2
28 ) RETURN NUMBER
29 IS
30 l_instance_set_id NUMBER;
31 CURSOR C_INSTANCE_SET_ID IS
32 select instance_set_id from fnd_object_instance_sets
33 where instance_set_name = jtf_task_security_pvt.RESOURCE_TASKS_SET;
34 BEGIN
35 OPEN C_INSTANCE_SET_ID;
36 FETCH C_INSTANCE_SET_ID INTO l_instance_set_id;
37 IF (C_INSTANCE_SET_ID %NOTFOUND) THEN
38 CLOSE C_INSTANCE_SET_ID;
39 --RAISE NO_DATA_FOUND;
40 RETURN -1;
41 END IF;
42 CLOSE C_INSTANCE_SET_ID;
43 RETURN l_instance_set_id;
44 END get_instance_set_id;
45
46 PROCEDURE doRevoke
47 ( api_version IN NUMBER
48 , grant_guid IN RAW
49 )
50 IS
51 l_success VARCHAR2(1);
52 l_error NUMBER;
53 BEGIN
54 fnd_grants_pkg.revoke_grant
55 ( p_api_version => api_version
56 ,p_grant_guid => grant_guid
57 ,x_success => l_success
58 ,x_errorcode => l_error
59 );
60 /** Add error check **/
61 IF (l_success <> 'T') THEN
62 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
63 END IF;
64 END doRevoke;
65
66 PROCEDURE doCalGrant
67 ( api_version IN NUMBER
68 ,menu_name IN VARCHAR2
69 ,p_GranterID IN VARCHAR2
70 ,grantee_key IN VARCHAR2
71 )
72 IS
73 l_grant_guid RAW(16);
74 l_success VARCHAR2(1);
75 l_error NUMBER;
76 BEGIN
77 fnd_grants_pkg.grant_function( p_api_version => api_version
78 , p_menu_name => menu_name
79 , p_instance_type => CALENDAR_INSTANCE_TYPE
80 , p_object_name => CALENDAR_OBJECT
81 , p_instance_pk1_value => p_GranterID
82 , p_instance_pk2_value => CALENDAR_RESOURCE_TYPE
83 , p_grantee_type => GRANTEE_TYPE
84 , p_grantee_key => grantee_key
85 , p_start_date => SYSDATE
86 , p_end_date => NULL
87 , p_program_name => PROGRAM_NAME
88 , p_program_tag => PROGRAM_TAG
89 , x_grant_guid => l_grant_guid
90 , x_success => l_success
91 , x_errorcode => l_error
92 );
93 /** Add error check **/
94 IF (l_success <> 'T') THEN
95 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
96 END IF;
97 END doCalGrant;
98
99 PROCEDURE doTasksGrant
100 ( api_version IN NUMBER
101 ,menu_name IN VARCHAR2
102 ,l_instance_set_id IN NUMBER
103 ,p_GranterID IN VARCHAR2
104 ,grantee_key IN VARCHAR2
105 )
106 IS
107 l_grant_guid RAW(16);
108 l_success VARCHAR2(1);
109 l_error NUMBER;
110 BEGIN
111 fnd_grants_pkg.grant_function( p_api_version => api_version
112 , p_menu_name => menu_name
113 , p_instance_type => TASK_INSTANCE_TYPE
114 , p_instance_set_id => l_instance_set_id
115 , p_object_name => jtf_task_security_pvt.TASK_OBJECT
116 , p_grantee_type => GRANTEE_TYPE
117 , p_grantee_key => grantee_key
118 , p_start_date => SYSDATE
119 , p_end_date => NULL
120 , p_program_name => PROGRAM_NAME
121 , p_program_tag => PROGRAM_TAG
122 , x_grant_guid => l_grant_guid
123 , x_success => l_success
124 , x_errorcode => l_error
125 , p_parameter1 => p_GranterID
126 );
127 /** Add error check **/
128 IF (l_success <> 'T') THEN
129 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
130 END IF;
131 END doTasksGrant;
132
133 PROCEDURE UpdateGrants
134 /*******************************************************************************
135 ** Given:
136 ** - the Granter
137 ** - a list of Read Only Grantees
138 ** - a list of Full Access Grantees
139 ** This API will make sure that the proper grants are create/deleted
140 *******************************************************************************/
141 ( p_api_version IN NUMBER
142 , p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false
143 , p_commit IN VARCHAR2 DEFAULT fnd_api.g_false
144 , p_validation_level IN NUMBER DEFAULT fnd_api.g_valid_level_full
145 , x_return_status OUT NOCOPY VARCHAR2
146 , x_msg_count OUT NOCOPY NUMBER
147 , x_msg_data OUT NOCOPY VARCHAR2
148 , p_GranterID IN VARCHAR2
149 , p_ReadAccess IN VARCHAR2
150 , p_FullAccess IN VARCHAR2
151 )
152 IS
153 l_api_name CONSTANT VARCHAR2(30) := 'UpdateGrants';
154 l_api_version CONSTANT NUMBER := 1.0;
155 l_api_name_full CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
156 l_grant_guid RAW(16);
157 l_success VARCHAR2(1);
158 l_error NUMBER;
159
160 l_instance_set_id NUMBER;
161
162 l_CalAccessTbl GranteeTbl;
163 l_TaskAccessTbl GranteeTbl;
164
165 l_index1 NUMBER;
166 l_index2 NUMBER;
167 i BINARY_INTEGER;
168 j BINARY_INTEGER;
169
170 revoke_cal_found BOOLEAN:=true;
171 revoke_tasks_found BOOLEAN:=true;
172
173 /** Define a cursor C_CAL to fetch Calendar Read and Full Access for the given p_GranterID **/
174 CURSOR C_CAL IS
175 SELECT fgs.grant_guid, fgs.grantee_key, fmu.menu_name
176 FROM FND_GRANTS fgs, FND_MENUS fmu, FND_OBJECTS fos
177 WHERE fgs.object_id = fos.object_id
178 AND fos.obj_name = CALENDAR_OBJECT
179 AND fgs.menu_id = fmu.menu_id
180 AND fmu.menu_name IN (CALENDAR_READ_PRIVILEGE
181 ,CALENDAR_FULL_PRIVILEGE
182 ) -- Calendar Read and Full Access
183 AND instance_pk1_value = p_GranterID
184 AND instance_pk2_value = CALENDAR_RESOURCE_TYPE
185 AND instance_type = CALENDAR_INSTANCE_TYPE
186 AND grantee_type = GRANTEE_TYPE
187 AND program_name = PROGRAM_NAME
188 AND program_tag = 'ACCESS LEVEL';
189
190 /** Define a cursor C_CAL to fetch Tasks Read and Full Access for the given p_GranterID **/
191 CURSOR C_TASKS IS
192 SELECT fgs.grant_guid, fgs.grantee_key, fmu.menu_name
193 FROM FND_GRANTS fgs, FND_MENUS fmu, FND_OBJECTS fos
194 WHERE fgs.object_id = fos.object_id
195 AND fos.obj_name = jtf_task_security_pvt.TASK_OBJECT
196 AND fgs.menu_id = fmu.menu_id
197 AND fmu.menu_name IN (jtf_task_security_pvt.READ_PRIVILEGE
198 ,jtf_task_security_pvt.FULL_PRIVILEGE
199 ) -- Task Read and Full Access
200 AND instance_type = TASK_INSTANCE_TYPE
201 AND instance_set_id = l_instance_set_id
202 AND parameter1 = p_GranterID
203 AND grantee_type = GRANTEE_TYPE
204 AND program_name = PROGRAM_NAME
205 AND program_tag = 'ACCESS LEVEL';
206
207 BEGIN
208 /*****************************************************************************
209 ** Standard call to check for call compatibility
210 *****************************************************************************/
211 IF NOT FND_API.Compatible_API_Call( l_api_version
212 , p_api_version
213 , l_api_name
214 , G_PKG_NAME
215 )
216 THEN
217 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
218 END IF;
219
220 /*****************************************************************************
221 ** Initialize message list if p_init_msg_list is set to TRUE
222 *****************************************************************************/
223 IF FND_API.To_Boolean(p_init_msg_list)
224 THEN
225 FND_MSG_PUB.Initialize;
226 END IF;
227
228 /*****************************************************************************
229 ** Initialize API return status to success
230 *****************************************************************************/
231 x_return_status := FND_API.G_RET_STS_SUCCESS;
232
233 /*****************************************************************************
234 ** Submit JSP will return a comma delimited string, need to break it up
235 ** Merge p_ReadAccess and p_FullAccess into one table of records
236 ** l_CalAccessTbl for Calendar, l_TaskAccessTbl for Tasks
237 *****************************************************************************/
238 i := 1;
239 l_index1 := 1;
240 l_index2 := 1;
241
242 WHILE length(p_ReadAccess) <> 0
243 LOOP <<READ_ACCESS>>
244 l_index2 := instr(p_ReadAccess
245 ,','
246 ,l_index1
247 ,1
248 );
249 IF (l_index2 = 0)
250 THEN
251 l_index2 := length(p_ReadAccess)+1;
252 END IF;
253
254 l_CalAccessTbl(i).GranteeKey := substr( p_ReadAccess
255 , l_index1
256 ,(l_index2-l_index1)
257 );
258 l_CalAccessTbl(i).AccessLevel := CALENDAR_READ_PRIVILEGE;
259
260 /** Get the username for a given resource id **/
261 l_TaskAccessTbl(i).GranteeKey := get_username(l_CalAccessTbl(i).GranteeKey);
262 IF (l_TaskAccessTbl(i).GranteeKey = '-1') THEN
263 fnd_message.set_name('JTF', 'JTF_CAL_USERNAME_NOT_FOUND');
264 fnd_msg_pub.add;
265 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
266 END IF;
267
268 l_TaskAccessTbl(i).AccessLevel := jtf_task_security_pvt.READ_PRIVILEGE;
269
270 i := i + 1;
271 l_index1 := l_index2 + 1;
272 IF (l_index2 > length(p_ReadAccess))
273 THEN
274 EXIT;
275 END IF;
276 END LOOP READ_ACCESS;
277
278 j := 1;
279 l_index1 := 1;
280 l_index2 := 1;
281 WHILE length(p_FullAccess) <> 0
282 LOOP <<FULL_ACCESS>>
283 l_index2 := instr(p_FullAccess
284 ,','
285 ,l_index1
286 ,1
287 );
288 IF (l_index2 = 0)
289 THEN
290 l_index2 := length(p_FullAccess)+1;
291 END IF;
292
293 l_CalAccessTbl(i).GranteeKey := substr( p_FullAccess
294 , l_index1
295 ,(l_index2-l_index1)
296 );
297 l_CalAccessTbl(i).AccessLevel := CALENDAR_FULL_PRIVILEGE;
298 /** Get the username for a given resource id **/
299 l_TaskAccessTbl(i).GranteeKey := get_username(l_CalAccessTbl(i).GranteeKey);
300 IF (l_TaskAccessTbl(i).GranteeKey = '-1') THEN
301 fnd_message.set_name('JTF', 'JTF_CAL_USERNAME_NOT_FOUND');
302 fnd_msg_pub.add;
303 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
304 END IF;
305
306 l_TaskAccessTbl(i).AccessLevel := jtf_task_security_pvt.FULL_PRIVILEGE;
307
308 i := i + 1;
309 j := j + 1;
310 l_index1 := l_index2 + 1;
311 IF (l_index2 > length(p_FullAccess))
312 THEN
313 EXIT;
314 END IF;
315 END LOOP FULL_ACCESS;
316
317 /** Get the instance_set_id for instance_name RESOURCE_TASKS_SET **/
318 /** It is required in fnd_grants function **/
319 l_instance_set_id := get_instance_set_id(jtf_task_security_pvt.RESOURCE_TASKS_SET);
320 IF ( l_instance_set_id = -1) THEN
321 fnd_message.set_name('JTF', 'JTF_CAL_INST_SET_ID_NOT_FOUND');
322 fnd_msg_pub.add;
323 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
324 END IF;
325
326 /** Grant and Revoke Calendar Read and Full Access **/
327 FOR r_cal IN C_CAL LOOP
328 revoke_cal_found := true;
329 FOR j IN 1 .. NVL(l_CalAccessTbl.LAST,0)
330 LOOP <<ADD_CAL_ACCESS>>
331 IF ((r_cal.grantee_key = l_CalAccessTbl(j).GranteeKey) AND (r_cal.menu_name = l_CalAccessTbl(j).AccessLevel)) THEN
332 /** The resource is already in the database **/
333 /** And the acccess level is the same for the resource **/
334 l_CalAccessTbl(j).GrantType:=0;
335 revoke_cal_found := false;
336 EXIT;
337 END IF;
338 END LOOP ADD_CAL_ACCESS;
339
340 /** The resource is not in the new list, revoke Calendar Read or Full Access **/
341 IF (revoke_cal_found) THEN
342 doRevoke(l_api_version, r_cal.grant_guid);
343 END IF;
344 END LOOP;
345
346
347 /** Loop the l_CalAccessTbl table to grant Read or Full Access **/
348 FOR k IN 1 .. NVL(l_CalAccessTbl.LAST,0)
349 LOOP <<ADD_CAL_ACCESS>>
350 IF ((l_CalAccessTbl(k).GrantType = 1) AND (l_CalAccessTbl(k).AccessLevel=CALENDAR_READ_PRIVILEGE)) THEN
351 /** Grant Calendar READ Access **/
352 doCalGrant(l_api_version, CALENDAR_READ_PRIVILEGE, p_GranterID, l_CalAccessTbl(k).GranteeKey);
353 ELSIF ((l_CalAccessTbl(k).GrantType = 1) AND (l_CalAccessTbl(k).AccessLevel=CALENDAR_FULL_PRIVILEGE)) THEN
354 /** Grant Calendar Full Access **/
355 doCalGrant(l_api_version, CALENDAR_FULL_PRIVILEGE, p_GranterID,l_CalAccessTbl(k).GranteeKey);
356 END IF;
357 END LOOP ADD_CAL_ACCESS;
358
359 /** Grant and Revoke Task Read Access **/
360 FOR r_tasks IN C_TASKS LOOP
361 revoke_tasks_found := true;
362 FOR m IN 1 .. NVL(l_TaskAccessTbl.LAST,0)
363 LOOP <<ADD_TASKS_ACCESS>>
364 IF ((r_tasks.grantee_key = l_TaskAccessTbl(m).GranteeKey) AND (r_tasks.menu_name = l_TaskAccessTbl(m).AccessLevel)) THEN
365 /** The resource is already in the database **/
366 /** The acccess level is the same for the resource **/
367 l_TaskAccessTbl(m).GrantType:=0;
368 revoke_tasks_found := false;
369 EXIT;
370 END IF;
371 END LOOP ADD_TASKS_ACCESS;
372
373 /** The resource is not in the new list, revoke Task Read or Full Access **/
374 IF (revoke_tasks_found) THEN
375 doRevoke(l_api_version, r_tasks.grant_guid);
376 END IF;
377 END LOOP;
378
379
380 FOR n IN 1 .. NVL(l_TaskAccessTbl.LAST,0)
381 LOOP <<ADD_TASKS_ACCESS>>
382 IF ((l_TaskAccessTbl(n).GrantType = 1) AND (l_TaskAccessTbl(n).AccessLevel= jtf_task_security_pvt.READ_PRIVILEGE) ) THEN
383 /** Grant Tasks Read Access **/
384 doTasksGrant(l_api_version,jtf_task_security_pvt.READ_PRIVILEGE,l_instance_set_id, p_GranterID,l_TaskAccessTbl(n).GranteeKey);
385 ELSIF ((l_TaskAccessTbl(n).GrantType = 1) AND (l_TaskAccessTbl(n).AccessLevel=jtf_task_security_pvt.FULL_PRIVILEGE) ) THEN
386 /** Grant Tasks Full Access **/
387 doTasksGrant(l_api_version,jtf_task_security_pvt.FULL_PRIVILEGE,l_instance_set_id, p_GranterID,l_TaskAccessTbl(n).GranteeKey);
388 END IF;
389 END LOOP ADD_TASKS_ACCESS;
390
391 /*****************************************************************************
392 ** Standard check of p_commit
393 *****************************************************************************/
394 IF FND_API.To_Boolean(p_commit)
395 THEN
396 COMMIT WORK;
397 END IF;
398
399 /*****************************************************************************
400 ** Standard call to get message count and if count is > 1, get message info
401 *****************************************************************************/
402 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
403 , p_data => x_msg_data
404 );
405
406 EXCEPTION
407 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
408 THEN
409 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
410 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
411 , p_data => x_msg_data
412 );
413 WHEN OTHERS
414 THEN
415 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
416 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
417 THEN
418 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME
419 , l_api_name
420 );
421 END IF;
422 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
423 , p_data => x_msg_data
424 );
425
426 END UpdateGrants;
427
428 PROCEDURE RevokeGrants
429 ( p_api_version IN NUMBER
430 , p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false
431 , p_commit IN VARCHAR2 DEFAULT fnd_api.g_false
432 , x_return_status OUT NOCOPY VARCHAR2
433 , x_msg_count OUT NOCOPY NUMBER
434 , x_msg_data OUT NOCOPY VARCHAR2
435 , p_resourceId IN VARCHAR2
436 , p_groupId IN VARCHAR2
437 )
438 IS
439 l_api_name CONSTANT VARCHAR2(30) := 'RevokeGrants';
440 l_api_version CONSTANT NUMBER := 1.0;
441 l_api_name_full CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
442 l_return_status VARCHAR2(1);
443 l_msg_count NUMBER;
444 l_msg_data VARCHAR2(2000);
445 l_grant_guid RAW(16);
446
447 BEGIN
448 x_return_status := FND_API.G_RET_STS_SUCCESS;
449
450 l_grant_guid := get_grant_guid(p_resourceId => p_resourceId,
451 p_groupId => p_groupId);
452 IF (l_grant_guid IS NOT NULL) THEN
453 fnd_grants_pkg.revoke_grant
454 (
455 p_api_version => l_api_version,
456 p_grant_guid => l_grant_guid,
457 x_success => l_return_status,
458 x_errorcode => x_msg_data
459 );
460
461 IF (l_return_status <> FND_API.G_TRUE)
462 THEN
463 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
464 END IF;
465 END IF;
466
467 /*****************************************************************************
468 ** Standard call to get message count and if count is > 1, get message info
469 *****************************************************************************/
470 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
471 , p_data => x_msg_data
472 );
473 EXCEPTION
474 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
475 THEN
476 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
477 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
478 , p_data => x_msg_data
479 );
480 WHEN OTHERS
481 THEN
482 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
483 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
484 THEN
485 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME
486 , l_api_name
487 );
488 END IF;
489 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
490 , p_data => x_msg_data
491 );
492
493 END RevokeGrants;
494
495 PROCEDURE InvokeGrants
496 ( p_api_version IN NUMBER
497 , p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false
498 , p_commit IN VARCHAR2 DEFAULT fnd_api.g_false
499 , x_return_status OUT NOCOPY VARCHAR2
500 , x_msg_count OUT NOCOPY NUMBER
501 , x_msg_data OUT NOCOPY VARCHAR2
502 , p_resourceId IN VARCHAR2
503 , p_groupId IN VARCHAR2
504 , p_accesslevel IN VARCHAR2
505 )
506 IS
507 l_api_name CONSTANT VARCHAR2(30) := 'InvokeGrants';
508 l_api_version CONSTANT NUMBER := 1.0;
509 l_api_name_full CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
510 l_return_status VARCHAR2(1);
514 l_read_access CONSTANT VARCHAR2(30) := 'JTF_CAL_READ_ACCESS';
511 l_msg_count NUMBER;
512 l_msg_data VARCHAR2(2000);
513 l_grant_guid RAW(16);
515 l_full_access CONSTANT VARCHAR2(30) := 'JTF_CAL_FULL_ACCESS';
516 l_return BOOLEAN;
517
518 BEGIN
519 x_return_status := FND_API.G_RET_STS_SUCCESS;
520 l_return := has_access_level( p_resourceId => p_resourceId
521 , p_groupId => p_groupId
522 );
523
524 /** Check whether the requstor already has an access level -- Full or Readonly
525 ** If yes, do not grant Readonly Access to the requestor.
526 ** If not, grant Readonly Access to the requestor first */
527
528 IF (l_return = false)
529 THEN
530 fnd_grants_pkg.grant_function( p_api_version => 1.0
531 , p_menu_name => l_read_access
532 , p_instance_type => 'INSTANCE'
533 , p_object_name => 'JTF_TASK_RESOURCE'
534 , p_instance_pk1_value => nvl(p_groupId,1)
535 , p_instance_pk2_value => 'RS_GROUP'
536 , p_grantee_type => 'USER'
537 , p_grantee_key => p_resourceId
538 , p_start_date => SYSDATE
539 , p_end_date => NULL
540 , p_program_name => 'CALENDAR'
541 , p_program_tag => 'ACCESS LEVEL'
542 , x_grant_guid => l_grant_guid
543 , x_success => l_return_status
544 , x_errorcode => l_msg_data
545 );
546 END IF;
547
548 /*****************************************************************************
549 ** Grant Administrator privs to the requestor
550 *****************************************************************************/
551 fnd_grants_pkg.grant_function( p_api_version => 1.0
552 , p_menu_name => p_accesslevel
553 , p_instance_type => 'INSTANCE'
554 , p_object_name => 'JTF_TASK_RESOURCE'
555 , p_instance_pk1_value => nvl(p_groupId,1)
556 , p_instance_pk2_value => 'RS_GROUP'
557 , p_grantee_type => 'USER'
558 , p_grantee_key => p_resourceId
559 , p_start_date => SYSDATE
560 , p_end_date => NULL
561 , p_program_name => 'CALENDAR'
562 , p_program_tag => 'ACCESS LEVEL'
563 , x_grant_guid => l_grant_guid
564 , x_success => l_return_status
565 , x_errorcode => l_msg_data
566 );
567 IF (l_return_status <> FND_API.G_TRUE)
568 THEN
569 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
570 END IF;
571
572 /*****************************************************************************
573 ** Standard call to get message count and if count is > 1, get message info
574 *****************************************************************************/
575 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
576 , p_data => x_msg_data
577 );
578
579 EXCEPTION
580 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
581 THEN
582 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
583 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
584 , p_data => x_msg_data
585 );
586 WHEN OTHERS
587 THEN
588 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
589 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
590 THEN
591 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME
592 , l_api_name
593 );
594 END IF;
595 FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
596 , p_data => x_msg_data
597 );
598
599 END InvokeGrants;
600
601
602 FUNCTION get_grant_guid
603 ( p_resourceId IN VARCHAR2
604 , p_groupId IN VARCHAR2
605 ) RETURN RAW
606 IS
607 l_grant_guid RAW(16);
608
609 /*cursor C is
610 SELECT grant_guid FROM FND_GRANTS
611 WHERE grantee_key = p_resourceId
612 AND instance_pk1_value = p_groupId
613 AND instance_pk2_value = 'RS_GROUP'
614 AND program_name = 'CALENDAR'; */
615
616 cursor C is
617 SELECT fgs.grant_guid
618 FROM FND_GRANTS fgs, FND_MENUS fmu
619 WHERE grantee_key = p_resourceId
620 AND instance_pk1_value = p_groupId
621 AND instance_pk2_value = 'RS_GROUP'
622 AND program_name = 'CALENDAR'
623 AND fgs.menu_id = fmu.menu_id
624 AND fmu.menu_name = 'JTF_CAL_ADMIN_ACCESS';
625
626 BEGIN
627 open C;
628 fetch C into l_grant_guid;
629 if (C%NOTFOUND) then
630 close C;
631 raise NO_DATA_FOUND;
632 return NULL;
633 end if;
634 close C;
635 return l_grant_guid;
636 END get_grant_guid;
637
638 FUNCTION has_access_level
639 ( p_resourceId IN VARCHAR2
640 , p_groupId IN VARCHAR2
641 ) RETURN BOOLEAN
642 IS
643 l_count NUMBER;
644 l_return BOOLEAN;
645 cursor c_Count is
646 SELECT 1 FROM FND_GRANTS
647 WHERE grantee_key = p_resourceId
648 AND instance_pk1_value = p_groupId
649 AND instance_pk2_value = 'RS_GROUP'
650 AND program_name = 'CALENDAR';
651
652 BEGIN
653 l_return := false;
654
655 IF (c_Count%ISOPEN)
656 THEN CLOSE c_Count;
657 END IF;
658
659 open c_Count;
660 fetch c_Count into l_count;
661 IF(c_Count%NOTFOUND) then
662 return false;
663 END IF;
664
665 IF (l_count >= 1) THEN
666 l_return := true;
667 END IF;
668
669 IF (c_Count%ISOPEN)
670 THEN CLOSE c_Count;
671 END IF;
672
673 RETURN l_return;
674 END has_access_level;
675
676 END JTF_CAL_GRANTS_PVT;