DBA Data[Home] [Help]

PACKAGE BODY: APPS.BOM_ALT_DESIGS_POLICY

Source


1 PACKAGE BODY Bom_alt_desigs_policy AS
2 /* $Header: BOMSPOLB.pls 120.0 2005/05/25 06:08:48 appldev noship $*/
3 --
4 --  Copyright (c) 2000 Oracle Corporation, Redwood Shores, CA, USA
5 --  All rights reserved.
6 --
7 --  FILENAME
8 --
9 --    BOMSPOLB.pls
10 --
11 --  DESCRIPTION
12 --
13 --      Package Bom_alt_desigs_policy
14 --	This is the package used to set the fine-grained security
15 --	policy for bom_alternate_designators table
16 --
17 --  NOTES
18 --
19 --  HISTORY
20 --
21 --  24-SEP-2003 Deepak Jebar      Initial Creation
22 --  31-MAR-2004 Deepu             Corrected cursor to include policy_owner
23 --  03-SEP-2004 Hari Gelli        Modified the get_alt_predicate function to handle the structures of
24 --                                'Packaging Hierarchy'. Structures of this type can be viewed from the product
25 --                                'Advanced Product Catalog'
26 --  23-DEC-2004 Hari Gelli        Modifed the ADD/DROP policy functions to pass object schema name as BOM
27 --
28    PROCEDURE  add_policy IS
29    p_policy_owner   FND_ORACLE_USERID.ORACLE_USERNAME%TYPE;
30    l_status          VARCHAR2(1);
31    l_industry        VARCHAR2(1);
32    l_Prod_Schema     VARCHAR2(30);
33 
34    cursor c1 is
35    select 1
36    from   all_policies
37    where  object_owner = p_policy_owner
38    and    object_name  = 'BOM_ALTERNATE_DESIGNATORS'
39    and    policy_name  = 'STRUCT_TYPE_ALTS';
40 
41    CURSOR prod_policy IS
42    SELECT 1   FROM   All_Policies
43    WHERE  Object_Owner = l_Prod_Schema
44    AND    Object_Name  = 'BOM_ALTERNATE_DESIGNATORS'
45    AND    Policy_Name  = 'STRUCT_TYPE_ALTS';
46 
47    BEGIN
48       SELECT oracle_username
49       into p_policy_owner
50       from fnd_oracle_userid
51       where read_only_flag = 'U';
52 
53       -- Checking whether policy is already defined under universal schema. (APPS)
54       FOR crec IN C1 LOOP
55           RETURN;
56       END LOOP;
57 
58       IF NOT FND_INSTALLATION.GET_APP_INFO('BOM', l_status, l_industry, l_Prod_Schema) THEN
59         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
60       END IF;
61 
62       -- Checking whether policy is already defined under product schema.
63       FOR pprec IN prod_policy LOOP
64           RETURN;
65       END LOOP;
66 
67       DBMS_RLS.ADD_POLICY(OBJECT_SCHEMA   => l_Prod_Schema, -- We will add the policy to the BOM schema
68 			  OBJECT_NAME     => 'BOM_ALTERNATE_DESIGNATORS',
69 			  POLICY_NAME     => 'STRUCT_TYPE_ALTS',
70 			  --FUNCTION_SCHEMA => 'APPS',
71 			  POLICY_FUNCTION => 'Bom_alt_desigs_policy.get_alt_predicate',
72 			  STATEMENT_TYPES => 'SELECT');
73       EXCEPTION
74          WHEN OTHERS THEN
75 	    NULL;
76    END add_policy;
77 
78    PROCEDURE drop_policy IS
79    l_status          VARCHAR2(1);
80    l_industry        VARCHAR2(1);
81    l_Prod_Schema     VARCHAR2(30);
82    BEGIN
83 
84       IF NOT FND_INSTALLATION.GET_APP_INFO('BOM', l_status, l_industry, l_Prod_Schema) THEN
85         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
86       END IF;
87 
88       BEGIN
89             DBMS_RLS.DROP_POLICY(--OBJECT_SCHEMA   => l_Prod_Schema, -- We will drop the policy from the universal schema
90 			   OBJECT_NAME     => 'BOM_ALTERNATE_DESIGNATORS',
91 			   POLICY_NAME     => 'STRUCT_TYPE_ALTS');
92       EXCEPTION
93          WHEN OTHERS THEN
94 	    NULL;
95       END;
96       DBMS_RLS.DROP_POLICY(OBJECT_SCHEMA   => l_Prod_Schema, -- We will drop the policy from the BOM schema
97 			   OBJECT_NAME     => 'BOM_ALTERNATE_DESIGNATORS',
98 			   POLICY_NAME     => 'STRUCT_TYPE_ALTS');
99       EXCEPTION
100          WHEN OTHERS THEN
101 	    NULL;
102    END drop_policy;
103 
104    FUNCTION get_alt_predicate( p_namespace in varchar2
105 			     , p_object in varchar2)
106    RETURN VARCHAR2 IS
107       l_return VARCHAR2(100);
108       l_current_appl_id varchar2(10);
109       l_pkghier_type_id VARCHAR2(100);
110    BEGIN
111 	select sys_context('Struct_Type_Ctx', 'appl_id')
112 	into l_current_appl_id
113 	from dual;
114 	if (l_current_appl_id = to_char(G_EAM_APPLICATION)) then
115 		l_return := 'structure_type_id = SYS_CONTEXT(''Struct_Type_Ctx'',''struct_type_id'')';
116     elsif (l_current_appl_id <> to_char(G_EGO_APPLICATION)) then
117 		l_pkghier_type_id := SYS_CONTEXT('Struct_Type_Ctx','pkg_struct_type_id');
118 		if(l_pkghier_type_id IS NULL) THEN
119 		  l_return := '1 = 1';
120 		else
121 		  l_return := 'structure_type_id <> ' || l_pkghier_type_id;
122 		end if;
123 	else
124 		l_return := '1 = 1';
125 	end if;
126 	RETURN (l_return);
127    EXCEPTION
128    WHEN OTHERS THEN
129 	l_return := '1 = 1';
130 	RETURN (l_return);
131    END get_alt_predicate;
132 
133 END Bom_alt_desigs_policy;