DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_AW_ADAPTER

Source


1 package body BSC_AW_ADAPTER AS
2 /*$Header: BSCAWAPB.pls 120.14 2006/04/20 11:49 vsurendr noship $*/
3 
4 /*
5 implement_kpi_aw is the top procedure. optimizer calls this api, passes a list of kpi to be implemented
6 in aw. also is passed options like debug log or any other parameter
7 
8 p_options:
9 RECREATE DIM : will recreate dim except std dim
10 RECREATE STD DIM : will recreate std dim
11 RECREATE KPI : will recreate kpi
12 DEBUG LOG : turns on logging
13 TABLESPACE : which tablespace to create aw workspace
14 SEGMENTSIZE : segment size to use
15 */
16 procedure implement_kpi_aw(
17 p_kpi_list dbms_sql.varchar2_table,
18 p_options varchar2
19 ) is
20 --
21 l_affected_kpi dbms_sql.varchar2_table;
22 Begin
23   implement_kpi_aw(p_kpi_list,p_options,l_affected_kpi);
24 Exception when others then
25   log_n('Exception in implement_kpi_aw '||sqlerrm);
26   raise;
27 End;
28 
29 procedure implement_kpi_aw(
30 p_kpi_list dbms_sql.varchar2_table,
31 p_options varchar2,
32 p_affected_kpi out nocopy dbms_sql.varchar2_table
33 ) is
34 l_options varchar2(8000);
35 Begin
36   l_options:='create workspace,'||p_options;
37   upgrade(l_options);
38   set_up(l_options);
39   bsc_aw_management.get_workspace_lock('rw',l_options);
40   implement_kpi_aw(p_kpi_list,p_affected_kpi);
41   bsc_aw_management.commit_aw;
42   bsc_aw_md_api.analyze_md_tables;
43   commit;
44   bsc_aw_management.detach_workspace;
45 Exception when others then
46   bsc_aw_management.detach_workspace;
47   rollback;
48   log_n('Exception in implement_kpi_aw '||sqlerrm);
49   raise;
50 End;
51 
52 procedure implement_kpi_aw(
53 p_kpi_list dbms_sql.varchar2_table,
54 p_affected_kpi out nocopy dbms_sql.varchar2_table
55 ) is
56 --
57 l_dim_list dbms_sql.varchar2_table;
58 l_calendar number;
59 l_affected_kpi dbms_sql.varchar2_table;
60 l_calendar_processed dbms_sql.number_table;
61 Begin
62   --drop the kpi that are going to be processed
63   drop_kpi(p_kpi_list);
64   --for the list of kpi, get the dim list...then call the dim adapter
65   --l_dim_list will be the BSC dim levels
66   bsc_aw_bsc_metadata.get_dims_for_kpis(p_kpi_list,l_dim_list);
67   bsc_aw_adapter_dim.create_dim(l_dim_list,p_affected_kpi);
68   --check to see if we need to create calendar
69   --create calendar will only create if needed
70   if bsc_aw_utility.g_debug then
71     bsc_aw_calendar.g_debug:=true;
72   end if;
73   for i in 1..p_kpi_list.count loop
74     bsc_metadata.get_kpi_calendar(p_kpi_list(i),l_calendar);
75     l_affected_kpi.delete;
76     if bsc_aw_utility.in_array(l_calendar_processed,l_calendar)=false then
77       bsc_aw_calendar.create_calendar(l_calendar,l_affected_kpi);
78       bsc_aw_utility.merge_array(p_affected_kpi,l_affected_kpi);
79       l_calendar_processed(l_calendar_processed.count+1):=l_calendar;
80     end if;
81   end loop;
82   --
83   bsc_aw_adapter_kpi.create_kpi(p_kpi_list);
84   bsc_aw_utility.subtract_array(p_affected_kpi,p_kpi_list);
85   bsc_aw_utility.dmp_values(p_affected_kpi,'Affected KPIs');
86 Exception when others then
87   rollback;
88   log_n('Exception in implement_kpi_aw '||sqlerrm);
89   raise;
90 End;
91 
92 /*
93 this procedure drops the kpi objects from aw, relational and also cleans up the olap metadata
94 should not error if the kpi does not exist
95 when we drop kpi, we must also process the dim. we can have a case like
96 city,state, country. one kpi on all three. this kpi is dropped. we have to correct the existing dim to city
97 state. if the kpi is dropped and we do not correct the dim, we can have issues later when country is deleted.
98 */
99 procedure drop_kpi(p_kpi_list dbms_sql.varchar2_table,p_options varchar2) is
100 --
101 l_dim_list dbms_sql.varchar2_table;
102 Begin
103   set_up(p_options);
104   bsc_aw_management.get_workspace_lock('rw',p_options);
105   bsc_aw_bsc_metadata.get_dims_for_kpis(p_kpi_list,l_dim_list);
106   bsc_aw_adapter_dim.create_dim(l_dim_list);
107   drop_kpi(p_kpi_list);
108   bsc_aw_management.commit_aw;
109   bsc_aw_management.detach_workspace;
110   commit;
111 Exception when others then
112   bsc_aw_management.detach_workspace;
113   rollback;
114   log_n('Exception in drop_kpi '||sqlerrm);
115   raise;
116 End;
117 
118 procedure drop_kpi(p_kpi_list dbms_sql.varchar2_table) is
119 Begin
120   for i in 1..p_kpi_list.count loop
121     bsc_aw_adapter_kpi.drop_kpi_objects(p_kpi_list(i));
122   end loop;
123 Exception when others then
124   log_n('Exception in drop_kpi '||sqlerrm);
125   raise;
126 End;
127 
128 /*
129 this procedure lets anyone create a dim or recreate a dim
130 */
131 procedure create_dim(
132 p_dim_level_list dbms_sql.varchar2_table,
133 p_options varchar2
134 ) is
135 l_options varchar2(8000);
136 Begin
137   l_options:='create workspace,'||p_options;
138   upgrade(l_options);
139   set_up(l_options);
140   bsc_aw_management.get_workspace_lock('rw',l_options);
141   bsc_aw_adapter_dim.create_dim(p_dim_level_list);
142   bsc_aw_management.commit_aw;
143   commit;
144   bsc_aw_management.detach_workspace;
145 Exception when others then
146   bsc_aw_management.detach_workspace;
147   rollback;
148   log_n('Exception in create_dim '||sqlerrm);
149   raise;
150 End;
151 
152 /*handles cal, dim and kpi upgrade
153 process is serial
154 must be careful with cache. once the upgrade version is updated back in the system, then only must other process read
155 olap metadata*/
156 procedure upgrade(p_options varchar2) is  /*call from upgrade script etc */
157 l_old_upgrade_version number;
158 Begin
159   bsc_aw_utility.get_db_lock('bsc_aw_system_upgrade');
160   set_up(p_options);
161   bsc_aw_md_api.clear_all_cache;
162   l_old_upgrade_version:=bsc_aw_md_api.get_upgrade_version;
163   log('System Upgrade, New version='||bsc_aw_utility.g_upgrade_version||', Old version='||l_old_upgrade_version);
164   if bsc_aw_utility.g_upgrade_version>l_old_upgrade_version then
165     bsc_aw_management.get_workspace_lock('rw',p_options);
166     upgrade(bsc_aw_utility.g_upgrade_version,l_old_upgrade_version);
167     bsc_aw_management.commit_aw;
168     commit;
169     bsc_aw_management.detach_workspace;
170   end if;
171   bsc_aw_utility.release_db_lock('bsc_aw_system_upgrade');
172 Exception when others then
173   rollback;
174   bsc_aw_utility.release_db_lock('bsc_aw_system_upgrade');
175   bsc_aw_management.detach_workspace;
176   log_n('Exception in upgrade '||sqlerrm);
177   raise;
178 End;
179 
180 procedure upgrade(p_new_version number,p_old_version number) is
181 Begin
182   /*cal upgrade*/
183   bsc_aw_calendar.upgrade(p_new_version,p_old_version);
184   /*dim upgrade*/
188   /*update the latest upgrade version */
185   bsc_aw_adapter_dim.upgrade(p_new_version,p_old_version);
186   /*kpi upgrade*/
187   bsc_aw_adapter_kpi.upgrade(p_new_version,p_old_version);
189   bsc_aw_md_api.set_upgrade_version(p_new_version);
190 Exception when others then
191   log_n('Exception in upgrade '||sqlerrm);
192   raise;
193 End;
194 
195 --------------------------------------------
196 
197 procedure set_up(p_options varchar2) is
198 Begin
199   bsc_aw_utility.open_file('TEST');
200   bsc_aw_utility.g_options.delete;
201   bsc_aw_utility.parse_parameter_values(p_options,',',bsc_aw_utility.g_options);
202   bsc_aw_utility.dmp_g_options(bsc_aw_utility.g_options);
203   init_all;
204 Exception when others then
205   rollback;
206   log_n('Exception in set_up '||sqlerrm);
207   raise;
208 End;
209 
210 procedure init_all is
211 Begin
212   --set g_adv_sum_profile
213     g_adv_sum_profile:=0;
214     /*serialize entry here */
215     bsc_aw_utility.get_db_lock('bsc_aw_table_create_lock');
216     bsc_aw_utility.create_temp_tables;
217     bsc_aw_utility.create_perm_tables;
218     bsc_aw_utility.release_db_lock('bsc_aw_table_create_lock');
219     /* */
220     if bsc_aw_utility.get_parameter_value(bsc_aw_utility.g_options,'DEBUG LOG')='Y'
221     or bsc_aw_utility.g_log_level>=FND_LOG.G_CURRENT_RUNTIME_LEVEL then
222       g_debug:=true;
223     else
224       g_debug:=false;
225     end if;
226     /* */
227     bsc_aw_utility.init_all(g_debug);
228     bsc_aw_adapter_dim.init_all;
229     bsc_aw_adapter_kpi.init_all;
230     bsc_aw_load_dim.init_all;
231     bsc_aw_load_kpi.init_all;
232     bsc_aw_dbms_aw.init_all;
233     bsc_aw_md_api.init_all;
234     bsc_aw_md_wrapper.init_all;
235     bsc_aw_bsc_metadata.init_all;
236     bsc_metadata.init_all;
237     bsc_aw_management.init_all;
238     g_init:=true;
239 Exception when others then
240   rollback;
241   log_n('Exception in init_all '||sqlerrm);
242   raise;
243 End;
244 
245 procedure log(p_message varchar2) is
246 Begin
247   bsc_aw_utility.log(p_message);
248 Exception when others then
249   null;
250 End;
251 
252 procedure log_n(p_message varchar2) is
253 Begin
254   log('  ');
255   log(p_message);
256 Exception when others then
257   null;
258 End;
259 
260 END BSC_AW_ADAPTER;