[Home] [Help]
PACKAGE BODY: APPS.DOM_SECURITY_PUB
Source
1 PACKAGE BODY dom_security_pub AS
2 /* $Header: DOMDATASECB.pls 120.15 2006/11/08 14:01:40 ysireesh noship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30):= 'DOM_SECURITY_PUB' ;
5 G_CURRENT_LOGIN_ID NUMBER := FND_GLOBAL.Login_Id;
6 G_CURRENT_USER_ID NUMBER := FND_GLOBAL.User_Id;
7 G_OCS_ROLE VARCHAR2(30) := 'Reviewer';
8 TYPE DYNAMIC_CUR IS REF CURSOR;
9
10 /*
11 -- Test Debug
12 PROCEDURE Write_Debug
13 (
14 p_api_name IN VARCHAR2,
15 p_debug_message IN VARCHAR2
16 )
17 IS
18
19 BEGIN
20
21 IF ( DOM_LOG.CHECK_LOG_LEVEL) THEN
22 DOM_LOG.LOG_STR(G_PKG_NAME, p_api_name, null, p_debug_message);
23 END IF ;
24
25 EXCEPTION
26 WHEN OTHERS THEN
27 NULL:
28
29 END Write_Debug;
30 */
31
32 PROCEDURE Grant_Document_Role
33 (
34 p_api_version IN NUMBER,
35 p_init_msg_list IN VARCHAR2,
36 p_commit IN VARCHAR2 := FND_API.G_FALSE,
37 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
38 p_object_name IN VARCHAR2,
39 p_pk1_value IN VARCHAR2,
40 p_pk2_value IN VARCHAR2,
41 p_pk3_value IN VARCHAR2,
42 p_pk4_value IN VARCHAR2,
43 p_pk5_value IN VARCHAR2,
44 p_party_ids IN FND_TABLE_OF_NUMBER,
45 p_role_id IN NUMBER,
46 p_start_date IN DATE := SYSDATE,
47 p_end_date IN DATE := NULL,
48 p_api_caller IN VARCHAR2 := NULL,
49 x_msg_count OUT NOCOPY NUMBER,
50 x_msg_data OUT NOCOPY VARCHAR2,
51 x_return_status OUT NOCOPY VARCHAR2
52 )
53 IS
54
55 l_api_name CONSTANT VARCHAR2(50) := 'Grant_Document_Role';
56 l_grant_guid FND_GRANTS.GRANT_GUID%TYPE ;
57 l_grant_exist VARCHAR2(10);
58 l_return_status VARCHAR2(3) ;
59 l_role_name FND_MENUS.MENU_NAME%TYPE;
60 l_pk4_value VARCHAR2(50);
61 BEGIN
62
63 -- Initialize API return status to success
64 x_return_status := FND_API.G_RET_STS_SUCCESS;
65
66 SELECT menu_name
67 INTO l_role_name
68 FROM fnd_menus
69 WHERE menu_id = p_role_id;
70
71 FOR lcount in p_party_ids.first .. p_party_ids.last LOOP
72
73 IF p_pk1_value IS NOT NULL THEN
74
75 EGO_SECURITY_PUB.grant_role_guid
76 ( p_api_version => 1.0 ,
77 p_role_name => l_role_name ,
78 p_object_name => p_object_name ,
79 p_instance_type => 'INSTANCE' ,
80 p_instance_set_id => NULL ,
81 p_instance_pk1_value => p_pk1_value ,
82 p_instance_pk2_value => p_pk2_value ,
83 p_instance_pk3_value => '*NULL*' ,
84 p_instance_pk4_value => '*NULL*' ,
85 p_instance_pk5_value => '*NULL*' ,
86 p_party_id => p_party_ids(lcount) ,
87 p_start_date => NVL(p_start_date,SYSDATE) ,
88 p_end_date => p_end_date ,
89 x_return_status => l_return_status ,
90 x_errorcode => x_msg_data ,
91 x_grant_guid => l_grant_guid
92 );
93
94 if(l_grant_guid is not null) THEN
95 if(p_pk4_value is null OR p_pk4_value = '-1') THEN
96 l_pk4_value := '*NULL*';
97 else
98 l_pk4_value := p_pk4_value;
99 end if;
100
101 update FND_GRANTS
102 set parameter1 = p_pk3_value,
103 parameter2 = p_pk4_value
104 where grant_guid = l_grant_guid;
105 end if;
106
107 END IF;
108
109 END LOOP;
110
111 --Grant Access to Files of that document.
112 Grant_Attachments_OCSRole
113 (
114 p_api_version => 1.0,
115 p_init_msg_list => NULL,
116 p_commit => FND_API.G_TRUE,
117 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
118 p_entity_name => p_object_name,
119 p_pk1_value => p_pk1_value,
120 p_pk2_value => p_pk2_value,
121 p_pk3_value => NULL,
122 p_pk4_value => NULL,
123 p_pk5_value => NULL,
124 p_ocs_role => G_OCS_ROLE,
125 p_party_ids => p_party_ids,
126 p_api_caller => NULL,
127 x_msg_count => x_msg_count,
128 x_msg_data => x_msg_data,
129 x_return_status => x_return_status
130 );
131
132 -- Standard check of p_commit.
133 IF FND_API.To_Boolean( p_commit ) THEN
134 COMMIT WORK;
135 END IF;
136
137 --
138 -- returns T if the action is success
139 -- and F on failure
140 --
141 IF ( l_return_status = FND_API.G_TRUE OR l_return_status = FND_API.G_FALSE )
142 THEN
143 x_return_status := FND_API.G_RET_STS_SUCCESS;
144 ELSE
145 x_return_status := FND_API.G_RET_STS_ERROR ;
146 END IF ;
147
148 EXCEPTION
149 WHEN OTHERS THEN
150 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
151
152 IF FND_MSG_PUB.Check_Msg_Level
153 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
154 THEN
155 FND_MSG_PUB.Add_Exc_Msg
156 (
157 G_PKG_NAME,
158 l_api_name
159 );
160 END IF;
161
162 END Grant_Document_Role ;
163
164
165 PROCEDURE Revoke_Document_Role
166 (
167 p_api_version IN NUMBER,
168 p_init_msg_list IN VARCHAR2,
169 p_commit IN VARCHAR2 := FND_API.G_FALSE,
170 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
171 p_object_name IN VARCHAR2,
172 p_pk1_value IN VARCHAR2,
173 p_pk2_value IN VARCHAR2,
174 p_pk3_value IN VARCHAR2,
175 p_pk4_value IN VARCHAR2,
176 p_pk5_value IN VARCHAR2,
177 p_party_ids IN FND_TABLE_OF_NUMBER,
178 p_role_id IN NUMBER,
179 p_api_caller IN VARCHAR2 := NULL,
180 x_msg_count OUT NOCOPY NUMBER,
181 x_msg_data OUT NOCOPY VARCHAR2,
182 x_return_status OUT NOCOPY VARCHAR2
183 )
184 IS
185
186 l_api_name CONSTANT VARCHAR2(50) := 'Revoke_Document_Role';
187 l_return_status VARCHAR2(1) ;
188 l_error_code NUMBER(1) ;
189 l_role_name FND_MENUS.MENU_NAME%TYPE;
190 l_role_ids FND_ARRAY_OF_NUMBER_25;
191 l_object_id NUMBER ;
192 lcount1 NUMBER;
193 l_ocs_role_to_revoke VARCHAR2(30);
194 l_grantee_key fnd_grants.grantee_key%TYPE;
195 l_grantee_type fnd_grants.grantee_type%TYPE;
196
197 CURSOR get_party_type (cp_party_id NUMBER)
198 IS
199 SELECT party_type
200 FROM hz_parties
201 WHERE party_id=cp_party_id;
202
203 BEGIN
204
205 -- Initialize API return status to success
206 x_return_status := FND_API.G_RET_STS_SUCCESS;
207
208 SELECT object_id
209 INTO l_object_id
210 FROM fnd_objects
211 WHERE obj_name = p_object_name;
212
213 FOR lcount in p_party_ids.first .. p_party_ids.last LOOP
214
215 -- If Role is not passed, query up all the roles obtained to the user
216 -- for this pks.
217 OPEN get_party_type (cp_party_id => p_party_ids(lcount));
218 FETCH get_party_type INTO l_grantee_type;
219 CLOSE get_party_type;
220
221 IF (l_grantee_type = 'PERSON') THEN
222 l_grantee_type := 'USER';
223 l_grantee_key := 'HZ_PARTY:' || p_party_ids(lcount);
224 ELSIF (l_grantee_type = 'GROUP') THEN
225 l_grantee_type := 'GROUP';
226 l_grantee_key :='HZ_GROUP:' || p_party_ids(lcount);
227 END IF;
228
229 if p_role_id is not null then
230 SELECT menu_name
231 INTO l_role_name
232 FROM fnd_menus
233 WHERE menu_id = p_role_id;
234
235 FND_GRANTS_PKG.delete_grant(
236 p_grantee_type => l_grantee_type,
237 p_grantee_key => l_grantee_key,
238 p_object_name => p_object_name,
239 p_instance_type => 'INSTANCE',
240 p_instance_set_id => NULL,
241 p_instance_pk1_value => p_pk1_value,
242 p_instance_pk2_value => p_pk2_value,
243 p_instance_pk3_value => NULL,
244 p_instance_pk4_value => NULL,
245 p_instance_pk5_value => NULL,
246 p_menu_name => l_role_name,
247 p_program_name => NULL,
248 p_program_tag => NULL,
249 x_success => l_return_status,
250 x_errcode => l_error_code
251 );
252 end if;
253
254 if p_role_id is NULL THEN
255
256 -- Get all User Roles on this entity
257 Get_User_Roles
258 (
259 p_object_id => l_object_id,
260 p_document_id => p_pk1_value,
261 p_revision_id => p_pk2_value,
262 p_change_id => p_pk3_value,
263 p_change_line_id => p_pk4_value,
264 p_party_id => p_party_ids(lcount),
265 x_role_ids => l_role_ids
266 ) ;
267
268 FOR lcount1 in l_role_ids.first .. l_role_ids.last LOOP
269
270 if l_role_ids(lcount1) is not null then
271
272 SELECT menu_name
273 INTO l_role_name
274 FROM fnd_menus
275 WHERE menu_id = l_role_ids(lcount1);
276
277 FND_GRANTS_PKG.delete_grant(
278 p_grantee_type => l_grantee_type,
279 p_grantee_key => l_grantee_key,
280 p_object_name => p_object_name,
281 p_instance_type => 'INSTANCE',
282 p_instance_set_id => NULL,
283 p_instance_pk1_value => p_pk1_value,
284 p_instance_pk2_value => p_pk2_value,
285 p_instance_pk3_value => NULL,
286 p_instance_pk4_value => NULL,
287 p_instance_pk5_value => NULL,
288 p_menu_name => l_role_name,
289 p_program_name => NULL,
290 p_program_tag => NULL,
291 x_success => l_return_status,
292 x_errcode => l_error_code
293 );
294
295 end if;
296 END LOOP;
297
298 end if;
299
300 END LOOP;
301
302 --Revoke Access from the Files of that document.
303 Revoke_Attachments_OCSRole
304 (
305 p_api_version => 1.0,
306 p_init_msg_list => NULL,
307 p_commit => FND_API.G_TRUE,
308 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
309 p_entity_name => p_object_name,
310 p_pk1_value => p_pk1_value,
311 p_pk2_value => p_pk2_value,
312 p_pk3_value => NULL,
313 p_pk4_value => NULL,
314 p_pk5_value => NULL,
315 p_ocs_role => l_ocs_role_to_revoke,
316 p_party_ids => p_party_ids,
317 p_api_caller => NULL,
318 x_msg_count => x_msg_count,
319 x_msg_data => x_msg_data,
320 x_return_status => x_return_status
321 );
322
323
324 -- Standard check of p_commit.
325 IF FND_API.To_Boolean( p_commit ) THEN
326 COMMIT WORK;
327 END IF;
328
329 --
330 -- returns T if the action is success
331 -- and F on failure
332 --
333 IF ( l_return_status = FND_API.G_TRUE OR
334 l_return_status = FND_API.G_FALSE )
335 THEN
336 x_return_status := FND_API.G_RET_STS_SUCCESS;
337 ELSE
338 x_return_status := FND_API.G_RET_STS_ERROR ;
339 END IF ;
340
341 EXCEPTION
342 WHEN OTHERS THEN
343
344 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
345
346 IF FND_MSG_PUB.Check_Msg_Level
347 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
348 THEN
349 FND_MSG_PUB.Add_Exc_Msg
350 (
351 G_PKG_NAME,
352 l_api_name
353 );
354 END IF;
355
356 END Revoke_Document_Role ;
357
358
359 PROCEDURE Grant_Attachments_OCSRole
360 (
361 p_api_version IN NUMBER,
362 p_init_msg_list IN VARCHAR2,
363 p_commit IN VARCHAR2 := FND_API.G_FALSE,
364 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
365 p_entity_name IN VARCHAR2,
366 p_pk1_value IN VARCHAR2,
367 p_pk2_value IN VARCHAR2,
368 p_pk3_value IN VARCHAR2,
369 p_pk4_value IN VARCHAR2,
370 p_pk5_value IN VARCHAR2,
371 p_ocs_role IN VARCHAR2,
372 p_party_ids IN FND_TABLE_OF_NUMBER,
373 p_api_caller IN VARCHAR2 := NULL,
374 x_msg_count OUT NOCOPY NUMBER,
375 x_msg_data OUT NOCOPY VARCHAR2,
376 x_return_status OUT NOCOPY VARCHAR2
377 )
378 IS
379 l_api_name CONSTANT VARCHAR2(50) := 'Grant_Attachments_OCSRole';
380 l_return_status VARCHAR2(1) ;
381 l_error_code NUMBER(1) ;
382 l_role_name FND_MENUS.MENU_NAME%TYPE;
383 l_user_name VARCHAR2(30);
384 l_service_url VARCHAR2(100);
385 l_user_login VARCHAR2(30);
386 l_protocol VARCHAR2(30);
387 l_party_type hz_parties.party_type%TYPE;
388 get_attachments DYNAMIC_CUR;
389 l_dynamic_sql VARCHAR2(32767);
390 l_media_id NUMBER;
391 l_node_id NUMBER;
392 l_created_by NUMBER;
393 l_file_type VARCHAR2(10);
394 l_entity_name VARCHAR2(30);
395 l_rows NUMBER;
396
397 BEGIN
398
399 l_entity_name := p_entity_name;
400
401 l_dynamic_sql := ' SELECT media_id, dm_node, A.created_by, dm_type' ||
402 ' FROM FND_DOCUMENTS D, FND_ATTACHED_DOCUMENTS A' ||
403 ' WHERE A.DOCUMENT_ID = D.DOCUMENT_ID ' ||
404 ' AND A.ENTITY_NAME = :entity_name ' ||
405 ' AND A.PK1_VALUE = :pk1_value ';
406
407 IF (p_entity_name = 'DOM_DOCUMENT_REVISION') THEN
408
409 l_dynamic_sql := l_dynamic_sql || ' AND A.PK2_VALUE = :pk2_value';
410
411 l_entity_name := 'DOM_DOCUMENT_VERSION';
412
413 OPEN get_attachments FOR l_dynamic_sql
414 USING IN l_entity_name,
415 IN p_pk1_value,
416 IN p_pk2_value;
417
418 ELSE
419
420 OPEN get_attachments FOR l_dynamic_sql
421 USING IN l_entity_name,
422 IN p_pk1_value;
423
424 END IF;
425
426 LOOP
427
428 FETCH get_attachments INTO l_media_id, l_node_id, l_created_by, l_file_type;
429 EXIT WHEN get_attachments%NOTFOUND;
430
431 FOR lcount in p_party_ids.first .. p_party_ids.last
432 LOOP
433
434 SELECT service_url, protocol
435 INTO l_service_url, l_protocol
436 FROM DOM_REPOSITORIES WHERE id = l_node_id;
437
438 SELECT user_name INTO l_user_name
439 FROM FND_USER where person_party_id = p_party_ids(lcount);
440
441 SELECT party_type INTO l_party_type
442 FROM hz_parties
443 WHERE party_id = p_party_ids(lcount);
444
445 IF(l_party_type = 'PERSON') THEN
446 l_party_type := 'USER';
447 END IF;
448
449 --Get the Attachment created by user login.
450 -- This is required to make WS connection while trying to grant role to the user.
451 SELECT user_name INTO l_user_login
452 FROM fnd_user
453 WHERE user_id = l_created_by;
454
455 IF (l_protocol = 'WEBSERVICES') THEN
456
457 DOM_WS_INTERFACE_PUB.Grant_Attachments_OCSRole (
458 p_api_version => p_api_version,
459 p_service_url => l_service_url,
460 p_family_id => l_media_id,
461 p_role => p_ocs_role,
462 p_user_name => l_user_name,
463 p_user_login => l_user_login,
464 x_return_status => x_return_status,
465 x_msg_count => x_msg_count,
466 x_msg_data => x_msg_data
467 );
468
469 /*
470 l_rows := Check_For_Duplicate_Grant
471 (
472 p_entity_name => l_entity_name,
473 p_pk1_value => p_pk1_value,
474 p_pk2_value => p_pk2_value,
475 p_pk3_value => p_pk3_value,
476 p_pk4_value => p_pk4_value,
477 p_pk5_value => p_pk5_value,
478 p_file_id => l_media_id,
479 p_repos_id => l_node_id,
480 p_party_id => p_party_ids(lcount)
481 );
482 IF(l_rows = 0) THEN
483 */
484
485 -- Insert to DOM_FOLDER_FILE_MEMBERSHIPS
486 -- Required while revoking roles.
487 INSERT INTO DOM_FOLDER_FILE_MEMBERSHIPS
488 (
489 REPOSITORY_ID,
490 REPOSITORY_ITEM_ID,
491 REPOSITORY_ITEM_TYPE,
492 ENTITY_NAME,
493 PK1_VALUE,
494 PK2_VALUE,
495 PK3_VALUE,
496 PK4_VALUE,
497 PK5_VALUE,
498 PARTY_TYPE,
499 PARTY_ID,
500 OFO_ROLE,
501 CREATED_BY,
502 CREATION_DATE,
503 LAST_UPDATED_BY,
504 LAST_UPDATE_DATE,
505 LAST_UPDATE_LOGIN
506 )
507 VALUES
508 (
512 l_entity_name, --ENTITY_NAME
509 l_node_id, --REPOSITORY_ID
510 l_media_id, --REPOSITORY_ITEM_ID
511 l_file_type, --REPOSITORY_ITEM_TYPE
513 p_pk1_value, --PK1_VALUE
514 p_pk2_value, --PK2_VALUE
515 p_pk3_value, --PK3_VALUE
516 p_pk4_value, --PK4_VALUE
517 p_pk5_value, --PK5_VALUE
518 l_party_type, --PARTY_TYPE
519 p_party_ids(lcount), --PARTY_ID
520 p_ocs_role, --OFO_ROLE
521 NVL(p_api_caller, g_current_user_id), --CREATED_BY
522 SYSDATE, --CREATION_DATE
523 NVL(p_api_caller, g_current_user_id), --LAST_UPDATED_BY
524 SYSDATE, --LAST_UPDATE_DATE
525 g_current_login_id --LAST_UPDATE_LOGIN
526 );
527
528 -- END IF;
529
530 END IF;
531
532 END LOOP;
533
534 END LOOP;
535
536 CLOSE get_attachments;
537
538 -- Initialize API return status to success
539 x_return_status := FND_API.G_RET_STS_SUCCESS;
540
541 -- Standard check of p_commit.
542 IF FND_API.To_Boolean( p_commit ) THEN
543 COMMIT WORK;
544 END IF;
545
546 --
547 -- returns T if the action is success
548 -- and F on failure
549 --
550 IF ( l_return_status = FND_API.G_TRUE OR
551 l_return_status = FND_API.G_FALSE )
552 THEN
553 x_return_status := FND_API.G_RET_STS_SUCCESS;
554 ELSE
555 x_return_status := FND_API.G_RET_STS_ERROR ;
556 END IF ;
557
558 -- dbms_output.put_line('value: '||x_return_status);
559
560 EXCEPTION
561
562 WHEN OTHERS THEN
563
564 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
565
566 IF FND_MSG_PUB.Check_Msg_Level
567 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
568 THEN
569 FND_MSG_PUB.Add_Exc_Msg
570 (
571 G_PKG_NAME,
572 l_api_name
573 );
574 END IF;
575
576 END Grant_Attachments_OCSRole;
577
578 PROCEDURE Grant_Attachment_Access
579 (
580 p_api_version IN NUMBER,
581 p_attached_document_id IN NUMBER := NULL,
582 p_source_media_id IN NUMBER,
583 p_repository_id IN NUMBER,
584 p_ocs_role IN VARCHAR2,
585 p_party_ids IN FND_TABLE_OF_NUMBER,
586 p_submitted_by IN NUMBER,
587 x_msg_count OUT NOCOPY NUMBER,
588 x_msg_data OUT NOCOPY VARCHAR2,
589 x_return_status OUT NOCOPY VARCHAR2
590 )
591 IS
592 l_api_name CONSTANT VARCHAR2(50) := 'Grant_Attachment_Access';
593 l_return_status VARCHAR2(1) ;
594 l_user_name VARCHAR2(30);
595 l_service_url VARCHAR2(100);
596 l_user_login VARCHAR2(30);
597 l_protocol VARCHAR2(30);
598
599 cursor get_user_name(cp_user_id number)
600 IS
601 select user_name
602 from fnd_user
603 where user_id=cp_user_id;
604
605 cursor get_user_name_from_party(cp_party_id number)
606 IS
607 SELECT user_name
608 FROM FND_USER
609 where person_party_id = cp_party_id ;
610
611 BEGIN
612
613 open get_user_name(p_submitted_by);
614 fetch get_user_name into l_user_login;
615 close get_user_name;
616
617 FOR lcount in p_party_ids.first .. p_party_ids.last
618 LOOP
619
620 SELECT service_url, protocol
621 INTO l_service_url, l_protocol
622 FROM DOM_REPOSITORIES WHERE id = p_repository_id;
623
624 FOR rec IN get_user_name_from_party(p_party_ids(lcount))
625 LOOP
626 IF (l_protocol = 'WEBSERVICES') THEN
627
628 DOM_WS_INTERFACE_PUB.Grant_Attachments_OCSRole
629 (
630 p_api_version => p_api_version,
631 p_service_url => l_service_url,
632 p_family_id => p_source_media_id,
633 p_role => p_ocs_role,
634 p_user_name => rec.user_name,
635 p_user_login => l_user_login,
636 x_return_status => x_return_status,
637 x_msg_count => x_msg_count,
638 x_msg_data => x_msg_data
639 );
640 END IF;
641
642 END LOOP;
643
644 END LOOP;
645
646 -- Initialize API return status to success
647 x_return_status := FND_API.G_RET_STS_SUCCESS;
648
649
650 --
651 -- returns T if the action is success
652 -- and F on failure
656 THEN
653 --
654 IF ( l_return_status = FND_API.G_TRUE OR
655 l_return_status = FND_API.G_FALSE )
657 x_return_status := FND_API.G_RET_STS_SUCCESS;
658 ELSE
659 x_return_status := FND_API.G_RET_STS_ERROR ;
660 END IF ;
661
662 -- dbms_output.put_line('value: '||x_return_status);
663
664 EXCEPTION
665
666 WHEN OTHERS THEN
667
668 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
669
670 IF FND_MSG_PUB.Check_Msg_Level
671 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
672 THEN
673 FND_MSG_PUB.Add_Exc_Msg
674 (
675 G_PKG_NAME,
676 l_api_name
677 );
678 END IF;
679
680 END Grant_Attachment_Access;
681
682
683
684 PROCEDURE Revoke_Attachments_OCSRole
685 (
686 p_api_version IN NUMBER,
687 p_init_msg_list IN VARCHAR2,
688 p_commit IN VARCHAR2 := FND_API.G_FALSE,
689 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
690 p_entity_name IN VARCHAR2,
691 p_pk1_value IN VARCHAR2,
692 p_pk2_value IN VARCHAR2,
693 p_pk3_value IN VARCHAR2,
694 p_pk4_value IN VARCHAR2,
695 p_pk5_value IN VARCHAR2,
696 p_ocs_role IN VARCHAR2,
697 p_party_ids IN FND_TABLE_OF_NUMBER,
698 p_api_caller IN VARCHAR2 := NULL,
699 x_msg_count OUT NOCOPY NUMBER,
700 x_msg_data OUT NOCOPY VARCHAR2,
701 x_return_status OUT NOCOPY VARCHAR2
702 )
703 IS
704
705 l_api_name CONSTANT VARCHAR2(50) := 'Revoke_Attachments_OCSRole';
706 l_return_status VARCHAR2(1) ;
707 l_error_code NUMBER(1) ;
708 l_role_name FND_MENUS.MENU_NAME%TYPE;
709 l_user_name VARCHAR2(30);
710 l_service_url VARCHAR2(100);
711 l_user_login VARCHAR2(30);
712 l_protocol VARCHAR2(30);
713 get_attachments DYNAMIC_CUR;
714 l_dynamic_sql VARCHAR2(32767);
715 l_media_id NUMBER;
716 l_node_id NUMBER;
717 l_created_by NUMBER;
718 l_file_type VARCHAR2(10);
719 l_ocs_role_to_revoke VARCHAR2(30);
720 l_entity_name VARCHAR2(30);
721 l_party_type hz_parties.party_type%TYPE;
722 l_rows NUMBER := 0;
723
724 BEGIN
725
726 l_entity_name := p_entity_name;
727
728 l_dynamic_sql := ' SELECT media_id, dm_node, A.created_by, dm_type' ||
729 ' FROM FND_DOCUMENTS D, FND_ATTACHED_DOCUMENTS A' ||
730 ' WHERE A.DOCUMENT_ID = D.DOCUMENT_ID ' ||
731 ' AND A.ENTITY_NAME = :entity_name ' ||
732 ' AND A.PK1_VALUE = :pk1_value ';
733
734 IF (p_entity_name = 'DOM_DOCUMENT_REVISION') THEN
735
736 l_dynamic_sql := l_dynamic_sql || ' AND A.PK2_VALUE = :pk2_value';
737
738 l_entity_name := 'DOM_DOCUMENT_VERSION';
739
740 OPEN get_attachments FOR l_dynamic_sql
741 USING IN l_entity_name,
742 IN p_pk1_value,
743 IN p_pk2_value;
744
745 ELSE
746
747 OPEN get_attachments FOR l_dynamic_sql
748 USING IN l_entity_name,
749 IN p_pk1_value;
750
751 END IF;
752
753 LOOP
754
755 FETCH get_attachments INTO l_media_id, l_node_id, l_created_by, l_file_type;
756 EXIT WHEN get_attachments%NOTFOUND;
757
758 FOR lcount in p_party_ids.first .. p_party_ids.last
759 LOOP
760
761 l_rows := Check_For_Duplicate_Grant
762 (
763 p_entity_name => l_entity_name,
764 p_pk1_value => p_pk1_value,
765 p_pk2_value => p_pk2_value,
766 p_pk3_value => p_pk3_value,
767 p_pk4_value => p_pk4_value,
768 p_pk5_value => p_pk5_value,
769 p_file_id => l_media_id,
770 p_repos_id => l_node_id,
771 p_party_id => p_party_ids(lcount)
772 );
773
774 if( l_rows <= 1) then
775 l_ocs_role_to_revoke := G_OCS_ROLE;
776 end if;
777
778 SELECT service_url, protocol
779 INTO l_service_url, l_protocol
780 FROM DOM_REPOSITORIES WHERE id = l_node_id ;
781
782 SELECT user_name INTO l_user_name
783 FROM FND_USER where person_party_id = p_party_ids(lcount);
784
785 --Get the Attachment created by user login.
786 -- This is required to make WS connection while trying to grant role to the user.
787 SELECT user_name INTO l_user_login
788 FROM fnd_user
789 WHERE user_id = l_created_by ;
790
791 SELECT party_type INTO l_party_type
792 FROM hz_parties
793 WHERE party_id = p_party_ids(lcount);
794
795 IF(l_party_type = 'PERSON') THEN
796 l_party_type := 'USER';
797 END IF;
798
802
799 IF(l_ocs_role_to_revoke IS NOT NULL) THEN
800
801 IF (l_protocol = 'WEBSERVICES') THEN
803 DOM_WS_INTERFACE_PUB.Remove_Attachments_OCSRole
804 (
805 p_api_version => p_api_version,
806 p_service_url => l_service_url,
807 p_family_id => l_media_id,
808 p_role => l_ocs_role_to_revoke,
809 p_user_name => l_user_name,
810 p_user_login => l_user_login,
811 x_return_status => x_return_status,
812 x_msg_count => x_msg_count,
813 x_msg_data => x_msg_data
814 );
815
816 END IF;
817
818 END IF;
819
820 -- Delete from
821 DELETE FROM DOM_FOLDER_FILE_MEMBERSHIPS
822 WHERE REPOSITORY_ID = l_node_id
823 AND REPOSITORY_ITEM_ID = l_media_id
824 AND REPOSITORY_ITEM_TYPE = l_file_type
825 AND ENTITY_NAME = l_entity_name
826 AND ( (PK1_VALUE=p_pk1_value ) OR ( (PK1_VALUE IS NULL) AND (p_pk1_value IS NULL)) )
827 AND ( (PK2_VALUE=p_pk2_value ) OR ( (PK2_VALUE IS NULL) AND (p_pk2_value IS NULL)))
828 AND ( (PK3_VALUE=p_pk3_value ) OR ( (PK3_VALUE IS NULL) AND (p_pk3_value IS NULL)) )
829 AND ( (PK4_VALUE=p_pk4_value ) OR ( (PK4_VALUE IS NULL) AND (p_pk4_value IS NULL)))
830 AND ( (PK5_VALUE=p_pk5_value ) OR ( (PK5_VALUE IS NULL) AND (p_pk5_value IS NULL)) )
831 AND PARTY_TYPE = l_party_type
832 AND PARTY_ID = p_party_ids(lcount)
833 AND OFO_ROLE = G_OCS_ROLE ;
834
835 --
836 END LOOP;
837
838
839
840 END LOOP;
841
842 CLOSE get_attachments;
843
844 -- Initialize API return status to success
845 x_return_status := FND_API.G_RET_STS_SUCCESS;
846
847 -- Standard check of p_commit.
848 IF FND_API.To_Boolean( p_commit ) THEN
849 COMMIT WORK;
850 END IF;
851
852 --
853 -- returns T if the action is success
854 -- and F on failure
855 --
856 IF ( l_return_status = FND_API.G_TRUE OR
857 l_return_status = FND_API.G_FALSE )
858 THEN
859 x_return_status := FND_API.G_RET_STS_SUCCESS;
860 ELSE
861 x_return_status := FND_API.G_RET_STS_ERROR ;
862 END IF ;
863
864 EXCEPTION
865 WHEN OTHERS THEN
866
867 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
868
869 IF FND_MSG_PUB.Check_Msg_Level
870 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
871 THEN
872 FND_MSG_PUB.Add_Exc_Msg
873 (
874 G_PKG_NAME,
875 l_api_name
876 );
877 END IF;
878
879 END Revoke_Attachments_OCSRole;
880
881
882
883 PROCEDURE Get_User_Roles
884 (
885 p_object_id IN NUMBER,
886 p_document_id IN NUMBER,
887 p_revision_id IN NUMBER,
888 p_change_id IN NUMBER,
889 p_change_line_id IN NUMBER,
890 p_party_id IN NUMBER,
891 x_role_ids OUT NOCOPY FND_ARRAY_OF_NUMBER_25
892 )
893 IS
894 l_party_id NUMBER;
895
896 CURSOR get_user_roles (
897 cp_object_id NUMBER,
898 cp_document_id VARCHAR2,
899 cp_revision_id VARCHAR2,
900 cp_change_id VARCHAR2,
901 cp_change_line_id VARCHAR2) IS
902 SELECT grants.menu_id menu_id
903 FROM fnd_grants grants
904 WHERE grants.object_id = cp_object_id
905 AND ((grants.instance_pk1_value=cp_document_id )
906 OR((grants.instance_pk1_value = '*NULL*') AND (cp_document_id IS NULL)))
907 AND ((grants.instance_pk2_value=cp_revision_id )
908 OR((grants.instance_pk2_value = '*NULL*') AND (cp_revision_id IS NULL)))
909 AND ((grants.parameter1=cp_change_id )
910 OR((grants.parameter1 IS NULL) AND (cp_change_id IS NULL)))
911 AND ((grants.parameter2=cp_change_line_id )
912 OR((grants.parameter2 IS NULL) AND (cp_change_line_id IS NULL))
913 );
914
915 l_grantee_type hz_parties.party_type%TYPE;
916 l_grantee_key fnd_grants.grantee_key%TYPE;
917 l_instance_set_id fnd_grants.instance_set_id%TYPE;
918 l_instance_pk1_value fnd_grants.instance_pk1_value%TYPE;
919 l_dummy VARCHAR2(1);
920 l_index INTEGER;
921
922 CURSOR get_party_type (cp_party_id NUMBER)
923 IS
924 SELECT party_type
925 FROM hz_parties
926 WHERE party_id=cp_party_id;
927
928 BEGIN
929
930 l_index := 0;
931
932 OPEN get_party_type (cp_party_id =>p_party_id);
933 FETCH get_party_type INTO l_grantee_type;
934 CLOSE get_party_type;
935
936 x_role_ids := FND_ARRAY_OF_NUMBER_25();
937
938 FOR rec IN get_user_roles
939 (
940 cp_object_id => p_object_id,
941 cp_document_id => p_document_id,
942 cp_revision_id => p_revision_id,
943 cp_change_id => p_change_id,
944 cp_change_line_id => P_change_line_id
945 )
946 LOOP
947 x_role_ids.extend(l_index+1);
948 x_role_ids(l_index+1) := rec.menu_id;
949 l_index := l_index + 1;
950 END LOOP;
951
952 EXCEPTION
953 WHEN OTHERS THEN
954 NULL;
955
956 END get_user_roles;
957
958
959 FUNCTION Check_For_Duplicate_Grant
960 (
961 p_entity_name IN VARCHAR2,
962 p_pk1_value IN VARCHAR2,
963 p_pk2_value IN VARCHAR2,
964 p_pk3_value IN VARCHAR2,
965 p_pk4_value IN VARCHAR2,
966 p_pk5_value IN VARCHAR2,
967 p_file_id IN NUMBER,
968 p_repos_id IN NUMBER,
969 p_party_id IN NUMBER
970 )
971 RETURN NUMBER
972 IS
973
974 l_party_type hz_parties.party_type%TYPE;
975 l_count NUMBER := 0;
976
977 CURSOR get_party_type (cp_party_id NUMBER)
978 IS
979 SELECT party_type
980 FROM hz_parties
981 WHERE party_id=cp_party_id;
982
983 BEGIN
984
985 OPEN get_party_type (cp_party_id =>p_party_id);
986 FETCH get_party_type INTO l_party_type;
987 CLOSE get_party_type;
988
989 IF(l_party_type = 'PERSON') THEN
990 l_party_type := 'USER';
991 END IF;
992
993 SELECT count(*) INTO l_count
994 FROM DOM_FOLDER_FILE_MEMBERSHIPS
995 WHERE REPOSITORY_ITEM_ID = p_file_id
996 AND REPOSITORY_ID = p_repos_id
997 AND PARTY_ID = p_party_id
998 AND PARTY_TYPE = l_party_type
999 AND entity_name = p_entity_name;
1000 -- AND ( (pk1_value=p_pk1_value ) OR ( (pk1_value IS NULL) AND (p_pk1_value IS NULL)) )
1001 -- AND ( (pk2_value=p_pk2_value ) OR ( (pk2_value IS NULL) AND (p_pk2_value IS NULL)))
1002 -- AND ( (pk3_value=p_pk3_value ) OR ( (pk3_value IS NULL) AND (p_pk3_value IS NULL)) )
1003 -- AND ( (pk4_value=p_pk4_value ) OR ( (pk4_value IS NULL) AND (p_pk4_value IS NULL)))
1004 -- AND ( (pk5_value=p_pk5_value ) OR ( (pk5_value IS NULL) AND (p_pk5_value IS NULL)) );
1005
1006 RETURN l_count;
1007
1008 EXCEPTION
1009 WHEN OTHERS THEN
1010 RETURN l_count;
1011
1012 END Check_For_Duplicate_Grant;
1013
1014
1015 FUNCTION check_user_privilege
1016 (
1017 p_api_version IN NUMBER,
1018 p_privilege IN VARCHAR2,
1019 p_object_name IN VARCHAR2,
1020 p_instance_pk1_value IN VARCHAR2,
1021 p_instance_pk2_value IN VARCHAR2,
1022 p_instance_pk3_value IN VARCHAR2,
1023 p_instance_pk4_value IN VARCHAR2,
1024 p_instance_pk5_value IN VARCHAR2,
1025 p_party_id IN NUMBER
1026 )
1027 RETURN VARCHAR2
1028 IS
1029 -- Start OF comments
1030 -- API name : check_user_privilege
1031 -- TYPE : Public
1032 -- Pre-reqs : None
1033 -- FUNCTION : check a user's privilege on object instance(s)
1034 -- If this operation fails then the check is not
1035 -- done and error code is returned.
1036
1037 -- Version: Current Version 0.1
1038 -- Previous Version : None
1039 -- Notes :
1040 --
1041 -- END OF comments
1042
1043
1044 l_grantee_key fnd_grants.GRANTEE_KEY%TYPE;
1045 l_grantee_type fnd_grants.GRANTEE_TYPE%TYPE;
1046
1047 BEGIN
1048 l_grantee_key := 'HZ_PARTY:'||p_party_id;
1049
1050 RETURN EGO_DATA_SECURITY.check_function
1051 (
1052 p_api_version => p_api_version,
1053 p_function => p_privilege,
1054 p_object_name => p_object_name,
1055 p_instance_pk1_value => p_instance_pk1_value,
1056 p_instance_pk2_value => p_instance_pk2_value,
1057 p_instance_pk3_value => p_instance_pk3_value,
1058 p_instance_pk4_value => p_instance_pk4_value,
1059 p_instance_pk5_value => p_instance_pk5_value,
1060 p_user_name => l_grantee_key
1061 );
1062 END check_user_privilege;
1063
1064
1065 END DOM_SECURITY_PUB;