[Home] [Help]
PACKAGE BODY: APPS.BSC_BIS_KPI_MEAS_PUB
Source
1 PACKAGE BODY BSC_BIS_KPI_MEAS_PUB AS
2 /* $Header: BSCKPMDB.pls 120.15 2007/06/08 08:48:59 akoduri ship $ */
3 /*
4 REM +=======================================================================+
5 REM | Copyright (c) 2002 Oracle Corporation, Redwood Shores, CA, USA |
6 REM | All rights reserved. |
7 REM +=======================================================================+
8 REM | FILENAME |
9 REM | BSCKPMDB.pls |
10 REM | |
11 REM | DESCRIPTION |
12 REM | Module: Wrapper for Dimension, part of PMD APIs |
13 REM | |
14 REM | NOTES |
15 REM | 20-MAR-2003 PAJOHRI Created. |
16 REM | 15-MAY-2003 ADRAO Added Incremental changes to APIs |
17 REM | 24-JUL-2003 ASHANKAR Fix for the bug 3060555 |
18 REM | 24-JUL-2003 ADRAO Fixed Bug #3067265 |
19 REM | 25-JUL-2003 ASHANKAR Fix for the bug#3067854 |
20 REM | 26-AUG-2003 ADRAO Fixed for Bug#3112912 modified procedures |
21 REM | Create_KPI_Analysis_Options & Update_KPI |
22 REM | 28-Aug-2003 Adeulgao fixed bug#3108877 |
23 REM | 02-Sep-2003 ADRAO fixed bug#3123858 |
24 REM | 10-Sep-2003 ADEULGAO fixed bug#3126401 |
25 REM | 11-Sep-2003 ADEULGAO fixed bug#3136397 |
26 REM | 11-Sep-2003 ADEULGAO fixed bug#3139925 |
27 REM | 13-Sep-2003 mahrao fixed bug#3099977, used p_create_view flag in impo.|
28 REM | 20-OCT-2003 PAJOHRI Bug#3180374, and modularization of the code |
29 REM | 20-OCT-2003 PAJOHRI Bug#3179995, added two new procedures |
30 REM | Delete_Dim_Objs_In_DSet, Create_Dim_Objs_In_DSet |
31 REM | 20-OCT-2003 PAJOHRI Bug #3179995 |
32 REM | 04-NOV-2003 PAJOHRI Bug #3152258 |
33 REM | 14-NOV-2003 PAJOHRI Bug #3248729 |
34 REM | 08-DEC-2003 KYADAMAK Bug #3225685 |
35 REM | 07-JAN-2004 PAJOHRI Bug #3343860, created two new procudures |
36 REM | Create_Default_Kpi_Dim_Object & Delete_Default_Kpi_Dim_Object|
37 REM | to create and delete default row in BSC_KPI_DIM_LEVELS_VL |
38 REM | 16-JAN-2004 PAJOHRI Bug #3372305 |
39 REM | 29-JAN-2004 PAJOHRI Bug #3404081 |
40 REM | 15-MAR-2004 PAJOHRI Bug #3504996, Assign_DSet_Analysis_Options |
41 REM | procedure is modified, to flag stuct. changes. |
42 REM | 30-Mar-2004 ADEULGAO fixed DBI Report Issues |
43 REM | added apis 1. Is_Pmv_Viewby_Report() |
44 REM | 2. is_Abstract_Pmv_Dimension() |
45 REM | removed condition IF (l_view_by = 'Y') |
46 REM | in Get_Default_Viewby_For_Measure() |
47 REM | 12-APR-2004 PAJOHRI Bug #3426566, added conditions to filter those |
48 REM | Dimension whose Short_Name = 'UNASSIGNED' |
49 REM | 13-APR-2004 ASHANKAR BUG#3565772 Modified the fucntions |
50 REM | Is_Time_In_Dim_Object,Is_Time_With_Measure |
51 REM | 16-APR-2004 ASHANKAR BUG#3550054 added the validate_list_button |
52 REM | function |
53 REM | 23-APR-2004 ASHANKAR Bug #3518610,Added the fucntion Validate |
54 REM | listbutton |
55 REM | 01-JUN-2004 ADRAO Fixed for Bug#3663301, initiated an Action Flag |
56 REM | Change when Default Measure is changed for KPI |
57 REM | Changed Update_Kpi API |
58 REM | 14-JUN-2004 ADRAO added Short_Name to Analysis Option for |
59 REM | Enh#3540302 (ADMINISTRATOR TO ADD KPI TO KPI REGION)|
60 REM | 17-AUG-2004 WLEUNG added function Remove_Empty_Dims_For_DimSet |
61 REM | Bug #3784852 |
62 REM | 29-SEP-2004 ashankar added modules is_Period_Circular, |
63 REM | Parse_Base_Periods and Find_Period_CircularRef |
64 REM | for bug#3908204 |
65 REM | 10-OCT-2004 ashankar Moved Parse_Base_Periods to BSC_UTILITY package |
66 REM | and renamed it to Parse_String to make it Generic|
67 REM | enough.This was done as per the review comment |
68 REM | 18-JAN-2005 WLEUNG bug 4036171 fix Get_Default_Viewby_For_Measure |
69 REM | 21-FEB-2005 ankagarw enh# 3862703 |
70 REM | 11-APR-2005 kyadamak bug#4290070 Not validation views for rolling dims|
71 REM | 18-Jul-2005 ppandey Enh #4417483, Restrict Internal/Calendar Dims |
72 REM | 22-AUG-2005 ashankar Bug#4220400 Modifed the UPDATE_KPI API |
73 REM | 19-SEP-2005 adrao fixed Bug#4615361 modified API Update_Dim_Set |
74 REM | 06-Jan-2006 akoduri Enh#4739401 - Hide Dimensions/Dim Objects |
75 REM | 24-Jan-2006 akoduri Bug#4958055 Dgrp dimension not getting deleted |
76 REM | while disassociating from objective |
77 REM | 15-FEB-2006 akoduri Bug#4305536 Support new attribute type in |
78 REM | Objective designer |
79 REM | 11-APR-2006 visuri Bug#5151997 Report not going in Prototype after |
80 REM | adding PMF Dim Obj |
81 REM | 19-APR-2006 visuri Bug#5080308 Commented view by validation |
82 REM | 31-Jan-2007 akoduri Enh #5679096 Migration of multibar functionality |
83 REM | from VB to Html |
84 REM | 13-APR-2007 ankgoel Bug#5943068 Impact on common dimension by dim |
85 REM | reorder in a dim set |
86 REM | 09-Mar-2007 akoduri Bug#5925299 Key Items are not retained in update |
87 REM | and in reordering of dim objects in dimension set|
88 REM | 20-APR-2007 vtulasi Warning and caching issue |
89 REM | 07-JUN-2007 vtulasi Prototype Flag issue |
90 REM | 06-JUN-2007 akoduri Bug 5958688 Enable YTD as default at KPI |
91 REM +=======================================================================+
92 */
93 --PMV abastract dimension type
94 TIME_COMP_TYPE CONSTANT VARCHAR2(100) := 'TIME_COMPARISON_TYPE';
95
96 /*********************************************************************************/
97 TYPE Dim_Index_Type IS Record
98 ( p_dim_group_id BSC_SYS_DIM_GROUPS_TL.Dim_Group_Id%TYPE
99 , p_dim_short_name BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE
100 , p_dim_old_index BSC_KPI_DIM_GROUPS.Dim_Group_Index%TYPE
101 );
102 TYPE Dim_Index_Table_Type IS TABLE OF Dim_Index_Type INDEX BY BINARY_INTEGER;
103
104 /*******************************************************************/
105 FUNCTION Is_Time_In_Dim_Object
106 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
107 , p_dim_obj_name IN VARCHAR2
108 )RETURN BOOLEAN;
109 /***********************************************************************/
110 FUNCTION Is_View_By
111 (
112 p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
113 , p_dim_obj_name IN VARCHAR2
114 )RETURN BOOLEAN;
115 /*******************************************************************/
116 FUNCTION Is_Time_With_Measure
117 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
118 , x_return_status OUT NOCOPY VARCHAR2
119 , x_msg_count OUT NOCOPY NUMBER
120 , x_msg_data OUT NOCOPY VARCHAR2
121 )RETURN BOOLEAN;
122 /*******************************************************************/
123 PROCEDURE Create_Dim_Grp_Lev_In_Dset
124 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
125 , p_kpi_id IN NUMBER
126 , p_dim_set_id IN NUMBER
127 , p_dim_short_names IN VARCHAR2
128 , x_return_status OUT NOCOPY VARCHAR2
129 , x_msg_count OUT NOCOPY NUMBER
130 , x_msg_data OUT NOCOPY VARCHAR2
131 );
132 /************************************************************************************
133 -- API name : Set_Key_Item_Value
134 -- Type : Private
135 -- Function :
136 -- This API is used to set the key item values. This API is used in dimension
137 -- set page to retain the key item values while updating a dimension set
138 -- or reordering dimension objects within a dimension set.
139 -- For normal key item setting purpose BSC_DEFAULT_KEY_ITEM_PUB.Set_Key_Item_Value
140 -- should be used
141 ************************************************************************************/
142
143 PROCEDURE Set_Key_Item_Value
144 (
145 p_indicator IN BSC_KPIS_B.indicator%TYPE
146 , p_dim_set_id IN BSC_KPI_DIM_SETS_VL.dim_set_id%TYPE
147 , p_level_table_name IN BSC_SYS_DIM_LEVELS_VL.level_table_name%TYPE
148 , p_key_value IN BSC_KPI_DIM_LEVEL_PROPERTIES.default_key_value%TYPE
149 , x_return_status OUT NOCOPY VARCHAR2
150 , x_msg_count OUT NOCOPY NUMBER
151 , x_msg_data OUT NOCOPY VARCHAR2
152 )IS
153 l_Dim_Set_Rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
154 l_dim_level_id bsc_sys_dim_levels_b.dim_level_id%TYPE;
155 BEGIN
156 SELECT
157 d.dim_level_id
158 INTO
159 l_dim_level_id
160 FROM
161 bsc_kpi_dim_levels_b kd,
162 bsc_sys_dim_levels_b d
163 WHERE
164 kd.indicator = p_indicator
165 AND kd.level_table_name = d.level_table_name
166 AND kd.dim_set_id = p_dim_set_id
167 AND kd.level_table_name = p_level_table_name;
168
169 l_Dim_Set_Rec.Bsc_Kpi_Id := p_indicator;
170 l_Dim_Set_Rec.Bsc_Dim_Set_Id := p_dim_set_id;
171 l_Dim_Set_Rec.Bsc_Level_Name := p_level_table_name;
172 l_Dim_Set_Rec.Bsc_Level_Id := l_dim_level_id;
173
174 --Update bsc_kpi_dim_levels_b with the default_key_value
175 BSC_DIMENSION_SETS_PUB.Retrieve_Dim_Levels (
176 p_Dim_Set_Rec => l_Dim_Set_Rec
177 ,x_Dim_Set_Rec => l_Dim_Set_Rec
178 ,x_return_status => x_return_status
179 ,x_msg_count => x_msg_count
180 ,x_msg_data => x_msg_data
181 );
182 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
183 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
184 END IF;
185
186 l_Dim_Set_Rec.Bsc_Dset_Default_Key_Value := p_key_value;
187 BSC_DIMENSION_SETS_PUB.Update_Dim_Levels (
188 p_commit => FND_API.G_FALSE
189 ,p_Dim_Set_Rec => l_Dim_Set_Rec
190 ,x_return_status => x_return_status
191 ,x_msg_count => x_msg_count
192 ,x_msg_data => x_msg_data
193 );
194 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
195 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
196 END IF;
197
198 --Update bsc_kpi_dim_level_properties with the default_key_value
199 BSC_DIMENSION_SETS_PUB.Retrieve_Dim_Level_Properties (
200 p_Dim_Set_Rec => l_Dim_Set_Rec
201 ,x_Dim_Set_Rec => l_Dim_Set_Rec
202 ,x_return_status => x_return_status
203 ,x_msg_count => x_msg_count
204 ,x_msg_data => x_msg_data
205 );
206 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
207 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
208 END IF;
209 l_Dim_Set_Rec.Bsc_Dset_Default_Key_Value := p_key_value;
210 BSC_DIMENSION_SETS_PUB.Update_Dim_Level_Properties (
211 p_commit => FND_API.G_FALSE
212 ,p_Dim_Set_Rec => l_Dim_Set_Rec
213 ,x_return_status => x_return_status
214 ,x_msg_count => x_msg_count
215 ,x_msg_data => x_msg_data
216 );
217 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
218 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
219 END IF;
220
221 EXCEPTION
222 WHEN FND_API.G_EXC_ERROR THEN
223 FND_MSG_PUB.Count_And_Get
224 ( p_encoded => FND_API.G_FALSE
225 , p_count => x_msg_count
226 , p_data => x_msg_data
227 );
228 x_return_status := FND_API.G_RET_STS_ERROR;
229 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
230 FND_MSG_PUB.Count_And_Get
231 ( p_encoded => FND_API.G_FALSE
232 , p_count => x_msg_count
233 , p_data => x_msg_data
234 );
235 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
236 WHEN NO_DATA_FOUND THEN
237 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
238 IF (x_msg_data IS NOT NULL) THEN
239 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Set_Key_Item_Value ';
240 ELSE
241 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Set_Key_Item_Value ';
242 END IF;
243 WHEN OTHERS THEN
244 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
245 IF (x_msg_data IS NOT NULL) THEN
246 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Set_Key_Item_Value ';
247 ELSE
248 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Set_Key_Item_Value ';
249 END IF;
250 END Set_Key_Item_Value;
251
252
253 /*****************************************************************
254 Name :- get_KPI_Type
255 Description :- This function will return the Type of indicator
256 Creaor :-Ashankar
257 /*****************************************************************/
258 FUNCTION get_KPI_Type
259 ( p_Kpi_ID IN NUMBER
260 ) RETURN NUMBER IS
261 l_Indic_Type BSC_KPIS_B.Indicator_Type%TYPE;
262 BEGIN
263 SELECT Indicator_Type
264 INTO l_Indic_Type
265 FROM BSC_KPIS_B
266 WHERE Indicator = p_Kpi_ID;
267
268 RETURN l_Indic_Type;
269 END get_KPI_Type;
270 /*************************************************************************/
271 /*****************************************************************/
272 PROCEDURE Get_Valid_Analysis_Option_Ids
273 ( p_Kpi_Id IN NUMBER
274 , p_Analysis_Group_ID IN NUMBER
275 , p_Option_ID IN NUMBER
276 , p_Parent_Option_ID IN NUMBER
277 , p_GrandParent_Option_ID IN NUMBER
278 , x_Parent_Option_ID OUT NOCOPY NUMBER
279 , x_GrandParent_Option_ID OUT NOCOPY NUMBER
280 , x_return_status OUT NOCOPY VARCHAR2
281 , x_msg_count OUT NOCOPY NUMBER
282 , x_msg_data OUT NOCOPY VARCHAR2
283 ) IS
284 l_Count NUMBER := -1;
285 BEGIN
286 FND_MSG_PUB.Initialize;
287 x_return_status := FND_API.G_RET_STS_SUCCESS;
288 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids Procedure');
289 x_Parent_Option_ID := p_Parent_Option_ID;
290 x_GrandParent_Option_ID := p_GrandParent_Option_ID;
291
292 IF (x_Parent_Option_ID IS NULL) THEN
293 x_Parent_Option_ID := 0;
294 END IF;
295 IF (x_GrandParent_Option_ID IS NULL) THEN
296 x_GrandParent_Option_ID := 0;
297 END IF;
298 IF (p_Analysis_Group_ID = 1) THEN
299 l_Count := 0;
300 WHILE (l_Count = 0) LOOP
301 SELECT COUNT(*) INTO l_Count
302 FROM BSC_KPI_ANALYSIS_OPTIONS_B
303 WHERE Indicator = p_Kpi_Id
304 AND Analysis_Group_Id = p_Analysis_Group_ID
305 AND Option_Id = p_Option_ID
306 AND Parent_Option_Id = x_Parent_Option_ID;
307 IF (l_Count = 0) THEN
308 IF (x_Parent_Option_ID <> 0) THEN
309 x_Parent_Option_ID := 0;
310 ELSE
311 l_Count := -1;
312 EXIT;
313 END IF;
314 END IF;
315 END LOOP;
316 ELSIF (p_Analysis_Group_ID = 2) THEN
317 l_Count := 0;
318 WHILE (l_Count = 0) LOOP
319 SELECT COUNT(*) INTO l_Count
320 FROM BSC_KPI_ANALYSIS_OPTIONS_B
321 WHERE Indicator = p_Kpi_Id
322 AND Analysis_Group_Id = p_Analysis_Group_ID
323 AND Option_Id = p_Option_ID
324 AND Parent_Option_Id = x_Parent_Option_ID
325 AND Grandparent_Option_Id = x_GrandParent_Option_ID;
326 IF (l_Count = 0) THEN
327 IF (x_GrandParent_Option_ID <> 0) THEN
328 x_GrandParent_Option_ID := 0;
329 ELSIF (x_Parent_Option_ID <> 0) THEN
330 x_Parent_Option_ID := 0;
331 ELSE
332 l_Count := -1;
333 EXIT;
334 END IF;
335 END IF;
336 END LOOP;
337 END IF;
338 IF (l_Count = -1) THEN
339 FND_MESSAGE.SET_NAME('BSC','BSC_V_NO_ANLSIS_DEF_FOR_COMB');
340 FND_MESSAGE.SET_TOKEN('ANLSIS_OPT1', p_Option_ID);
341 FND_MESSAGE.SET_TOKEN('ANLSIS_OPT2', p_Parent_Option_ID);
342 FND_MESSAGE.SET_TOKEN('ANLSIS_OPT3', p_GrandParent_Option_ID);
343 FND_MSG_PUB.ADD;
344 RAISE FND_API.G_EXC_ERROR;
345 END IF;
346 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Get_Default_Viewby_For_Measure Procedure');
347 EXCEPTION
348 WHEN FND_API.G_EXC_ERROR THEN
349 IF (x_msg_data IS NULL) THEN
350 FND_MSG_PUB.Count_And_Get
351 ( p_encoded => FND_API.G_FALSE
352 , p_count => x_msg_count
353 , p_data => x_msg_data
354 );
355 END IF;
356 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
357 x_return_status := FND_API.G_RET_STS_ERROR;
358 WHEN OTHERS THEN
359 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
360 IF (x_msg_data IS NOT NULL) THEN
361 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids ';
362 ELSE
363 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids ';
364 END IF;
365 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
366 END Get_Valid_Analysis_Option_Ids;
367 /************************************************************************************/
368 PROCEDURE store_kpi_anal_group
369 ( p_kpi_id IN NUMBER
370 , x_Anal_Opt_Tbl IN OUT NOCOPY BSC_ANALYSIS_OPTION_PUB.Bsc_Anal_Opt_Tbl_Type
371 ) IS
372 CURSOR c_kpi_anal_group IS
373 SELECT Analysis_Group_Id
374 , Num_Of_Options
375 , Dependency_Flag
376 FROM BSC_KPI_ANALYSIS_GROUPS
377 WHERE Indicator = p_kpi_id
378 ORDER BY Analysis_Group_Id;
379
380 l_Count NUMBER := 0;
381 BEGIN
382 FOR cd IN c_kpi_anal_group LOOP
383 x_Anal_Opt_Tbl(l_count).Bsc_analysis_group_id := cd.analysis_group_id;
384 x_Anal_Opt_Tbl(l_count).Bsc_no_option_id := cd.num_of_options;
385 x_Anal_Opt_Tbl(l_count).Bsc_dependency_flag := cd.dependency_flag;
386 l_count := l_count +1;
387 END LOOP;
388 END store_kpi_anal_group;
389 /*******************************************************************/
390 PROCEDURE Create_Default_Kpi_Dim_Object
391 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
392 , p_kpi_id IN NUMBER
393 , p_dim_set_id IN NUMBER
394 , x_return_status OUT NOCOPY VARCHAR2
395 , x_msg_count OUT NOCOPY NUMBER
396 , x_msg_data OUT NOCOPY VARCHAR2
397 ) IS
398 l_Count NUMBER;
399 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
400
401 CURSOR c_kpi_ids IS
402 SELECT indicator
403 FROM BSC_KPIS_B
404 WHERE Source_Indicator = p_kpi_id
405 AND Prototype_Flag <> 2;
406 BEGIN
407 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object procedure');
408 SAVEPOINT CreateBSCDefDimObjectsPMD;
409
410 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
411 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
412
413 SELECT COUNT(*) INTO l_Count
414 FROM BSC_KPI_DIM_LEVELS_B
415 WHERE Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
416 AND Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
417 IF (l_Count = 0) THEN
418 -- Bug #3343860 if l_Count = 0, it means create default entry in BSC_KPI_DIM_LEVELS_B
419 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
420 ( p_commit => FND_API.G_FALSE
421 , p_kpi_id => l_bsc_dimset_rec.Bsc_Kpi_Id
422 , p_dim_set_id => l_bsc_dimset_rec.Bsc_Dim_Set_Id
423 , p_dim_short_names => NULL
424 , x_return_status => x_return_status
425 , x_msg_count => x_msg_count
426 , x_msg_data => x_msg_data
427 );
428 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
429 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
430 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
431 END IF;
432 --repeat the same steps for all the shared indicators
433 FOR cd IN c_kpi_ids LOOP
434 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
435 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
436 ( p_commit => FND_API.G_FALSE
437 , p_kpi_id => l_bsc_dimset_rec.Bsc_Kpi_Id
438 , p_dim_set_id => l_bsc_dimset_rec.Bsc_Dim_Set_Id
439 , p_dim_short_names => NULL
440 , x_return_status => x_return_status
441 , x_msg_count => x_msg_count
442 , x_msg_data => x_msg_data
443 );
444 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
445 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
446 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
447 END IF;
448 END LOOP;
449 END IF;
450 IF (p_commit = FND_API.G_TRUE) THEN
451 COMMIT;
452 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
453 END IF;
454 x_return_status := FND_API.G_RET_STS_SUCCESS;
455 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object procedure');
456 EXCEPTION
457 WHEN FND_API.G_EXC_ERROR THEN
458 ROLLBACK TO CreateBSCDefDimObjectsPMD;
459 IF (x_msg_data IS NULL) THEN
460 FND_MSG_PUB.Count_And_Get
461 ( p_encoded => FND_API.G_FALSE
462 , p_count => x_msg_count
463 , p_data => x_msg_data
464 );
465 END IF;
466 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
467 x_return_status := FND_API.G_RET_STS_ERROR;
468 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
469 ROLLBACK TO CreateBSCDefDimObjectsPMD;
470 IF (x_msg_data IS NULL) THEN
471 FND_MSG_PUB.Count_And_Get
472 ( p_encoded => FND_API.G_FALSE
473 , p_count => x_msg_count
474 , p_data => x_msg_data
475 );
476 END IF;
477 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
478 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
479 WHEN NO_DATA_FOUND THEN
480 ROLLBACK TO CreateBSCDefDimObjectsPMD;
481 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
482 IF (x_msg_data IS NOT NULL) THEN
483 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object ';
484 ELSE
485 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object ';
486 END IF;
487 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
488 WHEN OTHERS THEN
489 ROLLBACK TO CreateBSCDefDimObjectsPMD;
490 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
491 IF (x_msg_data IS NOT NULL) THEN
492 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object ';
493 ELSE
494 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object ';
495 END IF;
496 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
497 END Create_Default_Kpi_Dim_Object;
498 /*******************************************************************/
499 PROCEDURE Delete_Default_Kpi_Dim_Object
500 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
501 , p_kpi_id IN NUMBER
502 , p_dim_set_id IN NUMBER
503 , x_return_status OUT NOCOPY VARCHAR2
504 , x_msg_count OUT NOCOPY NUMBER
505 , x_msg_data OUT NOCOPY VARCHAR2
506 ) IS
507 l_Count NUMBER;
508 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
509
510 CURSOR c_kpi_ids IS
511 SELECT indicator
512 FROM BSC_KPIS_B
513 WHERE Source_Indicator = p_kpi_id
514 AND Prototype_Flag <> 2;
515 BEGIN
516 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object procedure');
517 SAVEPOINT CreateBSCDefDimObjectsPMD;
518
519 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
520 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
521
522 --remove the default entry 'XXX' from BSC_KPI_DIM_LEVELS_B if exists
523 BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels
524 ( p_commit => FND_API.G_FALSE
525 , p_Dim_Set_Rec => l_bsc_dimset_rec
526 , x_return_status => x_return_status
527 , x_msg_count => x_msg_count
528 , x_msg_data => x_msg_data
529 );
530 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
531 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object Failed: at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Group_In_Dset');
532 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
533 END IF;
534
535 --repeat the same steps for all the shared indicators
536 FOR cd IN c_kpi_ids LOOP
537 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
538 BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels
539 ( p_commit => FND_API.G_FALSE
540 , p_Dim_Set_Rec => l_bsc_dimset_rec
541 , x_return_status => x_return_status
542 , x_msg_count => x_msg_count
543 , x_msg_data => x_msg_data
544 );
545 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
546 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
547 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
548 END IF;
549 END LOOP;
550 IF (p_commit = FND_API.G_TRUE) THEN
551 COMMIT;
552 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
553 END IF;
554 x_return_status := FND_API.G_RET_STS_SUCCESS;
555 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object procedure');
556 EXCEPTION
557 WHEN FND_API.G_EXC_ERROR THEN
558 ROLLBACK TO CreateBSCDefDimObjectsPMD;
559 IF (x_msg_data IS NULL) THEN
560 FND_MSG_PUB.Count_And_Get
561 ( p_encoded => FND_API.G_FALSE
562 , p_count => x_msg_count
563 , p_data => x_msg_data
564 );
565 END IF;
566 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
567 x_return_status := FND_API.G_RET_STS_ERROR;
568 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
569 ROLLBACK TO CreateBSCDefDimObjectsPMD;
570 IF (x_msg_data IS NULL) THEN
571 FND_MSG_PUB.Count_And_Get
572 ( p_encoded => FND_API.G_FALSE
573 , p_count => x_msg_count
574 , p_data => x_msg_data
575 );
576 END IF;
577 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
578 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
579 WHEN NO_DATA_FOUND THEN
580 ROLLBACK TO CreateBSCDefDimObjectsPMD;
581 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
582 IF (x_msg_data IS NOT NULL) THEN
583 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object ';
584 ELSE
585 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object ';
586 END IF;
587 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
588 WHEN OTHERS THEN
589 ROLLBACK TO CreateBSCDefDimObjectsPMD;
590 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
591 IF (x_msg_data IS NOT NULL) THEN
592 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object ';
593 ELSE
594 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object ';
595 END IF;
596 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
597 END Delete_Default_Kpi_Dim_Object;
598 /*******************************************************************
599 PROCEUDRE to Orders Dimensions in Dimension Sets
600 *******************************************************************/
601 PROCEDURE Order_Dims_In_DSets
602 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
603 , p_kpi_id IN NUMBER
604 , p_dim_set_id IN NUMBER
605 , p_dim_short_names IN VARCHAR2
606 , p_kpi_flag_change IN BOOLEAN
607 , x_return_status OUT NOCOPY VARCHAR2
608 , x_msg_count OUT NOCOPY NUMBER
609 , x_msg_data OUT NOCOPY VARCHAR2
610 ) IS
611 l_current_index NUMBER;
612 l_dim_index NUMBER;
613 l_count1 NUMBER;
614 l_tab_index NUMBER;
615 l_count_new NUMBER;
616 l_count_old NUMBER := 0;
617 l_MTab_New_Count NUMBER;
618 l_flag BOOLEAN;
619 l_refresh BOOLEAN := FALSE;
620 l_assigns VARCHAR2(32000);
621 l_assign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
622 l_MTab_DimInx_Old BSC_BIS_KPI_MEAS_PUB.Dim_Index_Table_Type;
623 l_MTab_DimInx_New BSC_BIS_KPI_MEAS_PUB.Dim_Index_Table_Type;
624 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
625
626 CURSOR c_dim_index IS
627 SELECT A.Dim_Group_Id
628 , A.Dim_Group_Index
629 , B.Short_Name
630 FROM BSC_KPI_DIM_GROUPS A
631 , BSC_SYS_DIM_GROUPS_VL B
632 WHERE A.Indicator = p_kpi_id
633 AND A.Dim_Set_Id = p_dim_set_id
634 AND A.Dim_Group_ID = B.Dim_Group_ID
635 ORDER BY A.Dim_Group_Index;
636
637 --get shared indicators also
638 CURSOR c_kpi_ids IS
639 SELECT indicator
640 FROM BSC_KPIS_B
641 WHERE Source_Indicator = p_kpi_id
642 AND Prototype_Flag <> 2;
643 BEGIN
644 SAVEPOINT OrderBSCDimsInDSetPMD;
645 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets procedure');
646 FND_MSG_PUB.Initialize;
647 x_return_status := FND_API.G_RET_STS_SUCCESS;
648 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
649 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
650
651 FOR cd IN c_dim_index LOOP
652 l_flag := TRUE;
653 l_assigns := p_dim_short_names;
654 l_count_new := 0;
655 WHILE (is_more(p_dim_short_names => l_assigns
656 , p_dim_short_name => l_assign)
657 ) LOOP
658 IF(cd.Short_Name = l_assign) THEN
659 l_flag := FALSE;
660 l_MTab_DimInx_New(l_count_new).p_dim_group_id := cd.Dim_Group_ID;
661 l_MTab_DimInx_New(l_count_new).p_dim_short_name := cd.Short_Name;
662 l_MTab_DimInx_New(l_count_new).p_dim_old_index := cd.Dim_Group_Index;
663 EXIT;
664 END IF;
665 l_count_new := l_count_new + 1;
666 END LOOP;
667 IF(l_flag) THEN
668 l_MTab_DimInx_Old(l_count_old).p_dim_group_id := cd.Dim_Group_ID;
669 l_MTab_DimInx_Old(l_count_old).p_dim_short_name := cd.Short_Name;
670 l_MTab_DimInx_Old(l_count_old).p_dim_old_index := cd.Dim_Group_Index;
671 l_count_old := l_count_old + 1;
672 END IF;
673 END LOOP;
674 l_current_index := 0;
675 FOR i IN 0..(l_MTab_DimInx_Old.COUNT-1) LOOP
676 IF (l_current_index <> l_MTab_DimInx_Old(i).p_dim_old_index) THEN
677 l_refresh := TRUE;
678 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := l_MTab_DimInx_Old(i).p_dim_group_id;
679 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Index := l_current_index;
680 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
681 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
682 BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset
683 ( p_commit => FND_API.G_FALSE
684 , p_Dim_Set_Rec => l_bsc_dimset_rec
685 , p_create_Dim_Lev_Grp => FALSE
686 , x_return_status => x_return_status
687 , x_msg_count => x_msg_count
688 , x_msg_data => x_msg_data
689 );
690 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
691 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset');
692 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
693 END IF;
694 --for shared KPIs
695 FOR cd IN c_kpi_ids LOOP
696 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.Indicator;
697 BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset
698 ( p_commit => FND_API.G_FALSE
699 , p_Dim_Set_Rec => l_bsc_dimset_rec
700 , p_create_Dim_Lev_Grp => FALSE
701 , x_return_status => x_return_status
702 , x_msg_count => x_msg_count
703 , x_msg_data => x_msg_data
704 );
705 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
706 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset');
707 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
708 END IF;
709 END LOOP;
710 END IF;
711 l_current_index := l_current_index + 1;
712 END LOOP;
713 l_MTab_New_Count := l_MTab_DimInx_New.COUNT -1;
714 l_tab_index := 0;
715 WHILE (l_tab_index <= l_MTab_New_Count) LOOP
716 IF (l_MTab_DimInx_New.EXISTS(l_tab_index)) THEN
717 IF (l_current_index <> l_MTab_DimInx_New(l_tab_index).p_dim_old_index) THEN
718 l_refresh := TRUE;
719 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := l_MTab_DimInx_New(l_tab_index).p_dim_group_id;
720 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Index := l_current_index;
721 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
722 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
723 BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset
724 ( p_commit => FND_API.G_FALSE
725 , p_Dim_Set_Rec => l_bsc_dimset_rec
726 , p_create_Dim_Lev_Grp => FALSE
727 , x_return_status => x_return_status
728 , x_msg_count => x_msg_count
729 , x_msg_data => x_msg_data
730 );
731 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
732 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset');
733 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
734 END IF;
735 --for shared KPIs
736 FOR cd IN c_kpi_ids LOOP
737 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.Indicator;
738 BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset
739 ( p_commit => FND_API.G_FALSE
740 , p_Dim_Set_Rec => l_bsc_dimset_rec
741 , p_create_Dim_Lev_Grp => FALSE
742 , x_return_status => x_return_status
743 , x_msg_count => x_msg_count
744 , x_msg_data => x_msg_data
745 );
746 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
747 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Group_In_Dset');
748 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
749 END IF;
750 END LOOP;
751 END IF;
752 l_current_index := l_current_index + 1;
753 END IF;
754 l_tab_index := l_tab_index + 1;
755 END LOOP;
756 IF ((p_kpi_flag_change) OR (l_refresh)) THEN
757 --dbms_output.PUT_LINE('p_kpi_flag_change is TRUE, it means flag structural changes also');
758 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet
759 ( p_commit => FND_API.G_FALSE
760 , p_kpi_id => p_kpi_id
761 , p_dim_set_id => p_dim_set_id
762 , p_delete => TRUE
763 , x_return_status => x_return_status
764 , x_msg_count => x_msg_count
765 , x_msg_data => x_msg_data
766 );
767 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
768 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet');
769 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
770 END IF;
771 /* ELSIF (l_refresh) THEN
772 --dbms_output.PUT_LINE('Refresh is TRUE');
773 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet
774 ( p_commit => FND_API.G_FALSE
775 , p_kpi_id => p_kpi_id
776 , p_dim_set_id => p_dim_set_id
777 , p_kpi_flag_change => BSC_DESIGNER_PVT.G_ActionFlag.Normal
778 , p_delete => TRUE
779 , x_return_status => x_return_status
780 , x_msg_count => x_msg_count
781 , x_msg_data => x_msg_data
782 );
783 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
784 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets Failed: at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet');
785 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
786 END IF; */
787 END IF;
788 IF (p_commit = FND_API.G_TRUE) THEN
789 COMMIT;
790 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
791 END IF;
792 x_return_status := FND_API.G_RET_STS_SUCCESS;
793 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets procedure');
794 EXCEPTION
795 WHEN FND_API.G_EXC_ERROR THEN
796 ROLLBACK TO OrderBSCDimsInDSetPMD;
797 IF (x_msg_data IS NULL) THEN
798 FND_MSG_PUB.Count_And_Get
799 ( p_encoded => FND_API.G_FALSE
800 , p_count => x_msg_count
801 , p_data => x_msg_data
802 );
803 END IF;
804 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
805 x_return_status := FND_API.G_RET_STS_ERROR;
806 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
807 ROLLBACK TO OrderBSCDimsInDSetPMD;
808 IF (x_msg_data IS NULL) THEN
809 FND_MSG_PUB.Count_And_Get
810 ( p_encoded => FND_API.G_FALSE
811 , p_count => x_msg_count
812 , p_data => x_msg_data
813 );
814 END IF;
815 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
816 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
817 WHEN NO_DATA_FOUND THEN
818 ROLLBACK TO OrderBSCDimsInDSetPMD;
819 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
820 IF (x_msg_data IS NOT NULL) THEN
821 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets ';
822 ELSE
823 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets ';
824 END IF;
825 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
826 WHEN OTHERS THEN
827 ROLLBACK TO OrderBSCDimsInDSetPMD;
828 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
829 IF (x_msg_data IS NOT NULL) THEN
830 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets ';
831 ELSE
832 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets ';
833 END IF;
834 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
835 END Order_Dims_In_DSets;
836
837 -- function to get if report is view by or no
838 FUNCTION Is_Pmv_Viewby_Report
839 (
840 p_Measure_Short_Name IN OUT NOCOPY VARCHAR2
841 ) RETURN BOOLEAN
842 IS
843 l_view_applicable BOOLEAN := FALSE;
844 l_view_disabled VARCHAR2(1);
845 l_function_code VARCHAR2(100);
846 l_Region_Code VARCHAR2(100);
847
848 CURSOR c_Report_ViewBy(c_region_code VARCHAR2) IS
849 SELECT Attribute1
850 FROM AK_REGIONS
851 WHERE Region_Code = c_region_code;
852 BEGIN
853 BSC_JV_PMF.get_Pmf_Measure
854 ( p_Measure_ShortName => p_Measure_Short_Name
855 , x_function_name => l_function_code
856 , x_region_code => l_Region_Code
857 );
858 IF (c_Report_ViewBy%ISOPEN) THEN
859 CLOSE c_Report_ViewBy;
860 END IF;
861
862 OPEN c_Report_ViewBy(l_Region_Code);
863 FETCH c_Report_ViewBy INTO l_view_disabled;
864 CLOSE c_Report_ViewBy;
865
866 --dbms_output.PUT_LINE('l_view_disabled -' || l_view_disabled);
867 IF ((l_view_disabled IS NULL) OR (l_view_disabled = 'N')) THEN
868 l_view_applicable := TRUE;
869 ELSE
870 l_view_applicable := FALSE;
871 END IF;
872
873 RETURN l_view_applicable;
874 EXCEPTION
875 WHEN OTHERS THEN
876 IF (c_Report_ViewBy%ISOPEN) THEN
877 CLOSE c_Report_ViewBy;
878 END IF;
879 RAISE;
880 END Is_Pmv_Viewby_Report;
881
882 /*******************************************************************
883 Adeulgao changed this
884 ***************************************************************/
885 FUNCTION Is_More
886 ( x_dim_objects IN OUT NOCOPY VARCHAR2
887 , x_View_Bys IN OUT NOCOPY VARCHAR2
888 , x_dim_object OUT NOCOPY VARCHAR2
889 , x_View_By OUT NOCOPY VARCHAR2
890 ) RETURN BOOLEAN
891 IS
892 l_pos_ids NUMBER;
893 l_pos_rel_types NUMBER;
894 BEGIN
895 IF (x_dim_objects IS NOT NULL) THEN
896 l_pos_ids := INSTR(x_dim_objects, ',');
897 l_pos_rel_types := INSTR(x_View_Bys, ',');
898 IF (l_pos_ids > 0) THEN
899 x_dim_object := TRIM(SUBSTR(x_dim_objects, 1, l_pos_ids - 1));
900 x_View_By := TRIM(SUBSTR(x_View_Bys, 1, l_pos_rel_types - 1));
901
902 x_dim_objects := TRIM(SUBSTR(x_dim_objects, l_pos_ids + 1));
903 x_View_Bys := TRIM(SUBSTR(x_View_Bys, l_pos_rel_types + 1));
904 ELSE
905 x_dim_object := TRIM(x_dim_objects);
906 x_View_By := TRIM(x_View_Bys);
907
908 x_dim_objects := NULL;
909 x_View_Bys := NULL;
910 END IF;
911 RETURN TRUE;
912 ELSE
913 RETURN FALSE;
914 END IF;
915 END Is_More;
916 /*******************************************************************
917 This API gets all the defualt level and views for a measure
918 from the table fetched from get_DimObj_ViewBy_Tbl API
919 this is called from both create and update KPI Analysis options
920 *******************************************************************/
921 PROCEDURE Get_Default_Viewby_For_Measure
922 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
923 , x_dim_objects OUT NOCOPY VARCHAR
924 , x_defaults OUT NOCOPY VARCHAR
925 , x_view_bys OUT NOCOPY VARCHAR
926 , x_return_status OUT NOCOPY VARCHAR2
927 , x_msg_count OUT NOCOPY NUMBER
928 , x_msg_data OUT NOCOPY VARCHAR2
929 )IS
930 l_default_level_set BOOLEAN := FALSE;
931 l_default VARCHAR2(100);
932 l_view_by VARCHAR2(100);
933 l_DimObj_ViewBy_Tbl BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type;
934 BEGIN
935 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Get_Default_Viewby_For_Measure Procedure');
936 l_DimObj_ViewBy_Tbl := p_DimObj_ViewBy_Tbl;
937
938 FOR i IN 0..(p_DimObj_ViewBy_Tbl.COUNT-1) LOOP
939 IF (x_dim_objects IS NULL) THEN -- bug 4036171 fix the way to contruct x_dim_objects
940 x_dim_objects := l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names;
941 ELSE
942 x_dim_objects := x_dim_objects||', '||l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names;
943 END IF;
944
945 l_default_level_set := FALSE;
946 WHILE (is_more( x_dim_objects => l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names
947 , x_View_Bys => l_DimObj_ViewBy_Tbl(i).p_View_By_There
948 , x_dim_object => l_default
949 , x_View_By => l_view_by
950 )) LOOP
951 --dbms_output.PUT_LINE('*** l_default <'||l_default||'>');
952 --dbms_output.PUT_LINE('*** l_view_by <'||l_view_by||'>');
953 IF (NOT l_default_level_set) THEN
954 IF (x_defaults IS NULL) THEN
955 x_defaults := l_default;
956 ELSE
957 x_defaults := x_defaults||', '||l_default;
958 END IF;
959 l_default_level_set := TRUE;
960 END IF;
961 IF ((x_view_bys IS NULL) AND (l_view_by = 'Y')) THEN
962 x_view_bys := l_default;
963 EXIT;
964 END IF;
965 END LOOP;
966 END LOOP;
967 --dbms_output.PUT_LINE('*** l_view_by <'||x_view_bys||'>');
968 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Get_Default_Viewby_For_Measure Procedure');
969 EXCEPTION
970 WHEN OTHERS THEN
971 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
972 IF (x_msg_data IS NOT NULL) THEN
973 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.get_Default_ViewBy_For_Measure ';
974 ELSE
975 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.get_Default_ViewBy_For_Measure ';
976 END IF;
977 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
978 END Get_Default_Viewby_For_Measure;
979
980 /*******************************************************************/
981
982 FUNCTION is_Abstract_Pmv_Dimension
983 ( p_dimension IN VARCHAR2
984 ) RETURN BOOLEAN IS
985 BEGIN
986 -- TIME_COMPARISON_TYPE is special dimension
987 -- if dimension is null then the parameter is AS_OF_DATE
988 -- we should not be returning these in the PMV table, as we do not have this in the table
989 IF ((p_dimension IS NULL) OR (UPPER(TRIM(p_dimension)) = BSC_BIS_KPI_MEAS_PUB.Time_Comp_Type)) THEN
990 RETURN TRUE;
991 ELSE
992 RETURN FALSE;
993 END IF;
994 END is_Abstract_Pmv_Dimension;
995
996 /*******************************************************************/
997
998 PROCEDURE get_DimObj_ViewBy_Tbl
999 ( p_Measure_Short_Name IN VARCHAR2
1000 , p_Region_Code IN VARCHAR2
1001 , x_DimObj_ViewBy_Tbl OUT NOCOPY BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
1002 , x_return_status OUT NOCOPY VARCHAR2
1003 , x_msg_count OUT NOCOPY NUMBER
1004 , x_msg_data OUT NOCOPY VARCHAR2
1005 ) IS
1006 l_Region_Code VARCHAR2(30);
1007 l_Function_Code VARCHAR2(30);
1008 l_DimObj_ViewBy_Tbl BIS_PMV_BSC_API_PUB.DimLevel_Viewby_Tbl_Type;
1009 l_count NUMBER := 0;
1010 l_table_index NUMBER := 0;
1011
1012 l_dimension VARCHAR2(100);
1013 l_dim_object VARCHAR2(100);
1014 l_flag BOOLEAN;
1015 BEGIN
1016 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl Procedure');
1017 FND_MSG_PUB.Initialize;
1018 x_return_status := FND_API.G_RET_STS_SUCCESS;
1019 l_Region_Code := p_Region_Code;
1020 IF (p_Region_Code IS NULL) THEN
1021 BSC_JV_PMF.get_Pmf_Measure
1022 ( p_Measure_ShortName => p_Measure_Short_Name
1023 , x_function_name => l_function_code
1024 , x_region_code => l_Region_Code
1025 );
1026 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
1027 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.get_Dimensions_In_Meas Failed: at BSC_JV_PMF.get_Pmf_Measure');
1028 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1029 END IF;
1030 END IF;
1031 BIS_PMV_BSC_API_PUB.Get_Dimlevel_Viewby
1032 ( p_api_version => 1
1033 , p_Region_Code => l_Region_Code
1034 , p_Measure_Short_Name => p_measure_short_name
1035 , x_DimLevel_Viewby_Tbl => l_DimObj_ViewBy_Tbl
1036 , x_return_status => x_return_status
1037 , x_msg_count => x_msg_count
1038 , x_msg_data => x_msg_data
1039 );
1040 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
1041 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl Failed: at BIS_PMV_BSC_API_PUB.Get_Dimlevel_Viewby');
1042 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1043 END IF;
1044 FOR i IN 1..l_DimObj_ViewBy_Tbl.COUNT LOOP
1045 l_flag := TRUE;
1046 l_dimension := TRIM(SUBSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, 1, (INSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, '+') - 1)));
1047
1048 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Abstract_Pmv_Dimension(l_dimension)) THEN
1049 l_table_index := 0;
1050 WHILE ( l_table_index < x_DimObj_ViewBy_Tbl.COUNT) LOOP
1051 IF (l_dimension = x_DimObj_ViewBy_Tbl(l_table_index).p_Dimension_Name) THEN
1052 l_flag := FALSE;
1053 EXIT;
1054 END IF;
1055 l_table_index := l_table_index+1;
1056 END LOOP;
1057 IF (l_flag) THEN
1058 l_table_index := x_DimObj_ViewBy_Tbl.COUNT;
1059 IF (l_table_index > 6) THEN
1060 EXIT;
1061 END IF;
1062 x_DimObj_ViewBy_Tbl(l_table_index).p_Measure_Short_Name:= p_Measure_Short_Name;
1063 x_DimObj_ViewBy_Tbl(l_table_index).p_Region_Code := l_Region_Code;
1064 x_DimObj_ViewBy_Tbl(l_table_index).p_Function_Code := l_function_code;
1065 x_DimObj_ViewBy_Tbl(l_table_index).p_Measure_Short_Name:= p_Measure_Short_Name;
1066 x_DimObj_ViewBy_Tbl(l_table_index).p_Dimension_Name := l_dimension;
1067 x_DimObj_ViewBy_Tbl(l_table_index).p_Is_Time_There := FALSE;
1068 x_DimObj_ViewBy_Tbl(l_table_index).p_Dim_Object_Names := SUBSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, (INSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, '+')+1));
1069 x_DimObj_ViewBy_Tbl(l_table_index).p_View_By_There := l_DimObj_ViewBy_Tbl(i).Viewby_Applicable;
1070 x_DimObj_ViewBy_Tbl(l_table_index).p_All_There := l_DimObj_ViewBy_Tbl(i).All_Applicable;
1071 ELSE
1072 x_DimObj_ViewBy_Tbl(l_table_index).p_Dim_Object_Names := x_DimObj_ViewBy_Tbl(l_table_index).p_Dim_Object_Names||', '||
1073 SUBSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, (INSTR(l_DimObj_ViewBy_Tbl(i).Dim_DimLevel, '+')+1));
1074 x_DimObj_ViewBy_Tbl(l_table_index).p_View_By_There := x_DimObj_ViewBy_Tbl(l_table_index).p_View_By_There||', '||
1075 l_DimObj_ViewBy_Tbl(i).Viewby_Applicable;
1076 x_DimObj_ViewBy_Tbl(l_table_index).p_All_There := x_DimObj_ViewBy_Tbl(l_table_index).p_All_There||', '||
1077 l_DimObj_ViewBy_Tbl(i).All_Applicable;
1078 END IF;
1079 IF ((NOT x_DimObj_ViewBy_Tbl(l_table_index).p_Is_Time_There) AND
1080 (INSTR(x_DimObj_ViewBy_Tbl(l_table_index).p_Dimension_Name , 'TIME') > 0)) THEN
1081 x_DimObj_ViewBy_Tbl(l_table_index).p_Is_Time_There := TRUE;
1082 END IF;
1083 END IF;
1084 END LOOP;
1085 /*--dbms_output.PUT_LINE(' --- INITIAL TABLE ---- '||x_DimObj_ViewBy_Tbl.COUNT);
1086 FOR i IN 0..(x_DimObj_ViewBy_Tbl.COUNT-1) LOOP
1087 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Measure_Short_Name '||x_DimObj_ViewBy_Tbl(i).p_Measure_Short_Name);
1088 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Region_Code '||x_DimObj_ViewBy_Tbl(i).p_Region_Code);
1089 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Function_Code '||x_DimObj_ViewBy_Tbl(i).p_Function_Code);
1090 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Dimension_Name '||x_DimObj_ViewBy_Tbl(i).p_Dimension_Name);
1091 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Dim_Object_Names '||x_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names);
1092 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Dim_Object_Names '||x_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names);
1093 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_View_By_There '||x_DimObj_ViewBy_Tbl(i).p_View_By_There);
1094 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_All_There '||x_DimObj_ViewBy_Tbl(i).p_All_There);
1095 IF (x_DimObj_ViewBy_Tbl(i).p_Is_Time_There) THEN
1096 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Is_Time_There TRUE');
1097 ELSE
1098 --dbms_output.PUT_LINE('x_DimObj_ViewBy_Tbl('||i||').p_Is_Time_There FALSE');
1099 END IF;
1100 END LOOP;*/
1101 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl Procedure');
1102 EXCEPTION
1103 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1104 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1105 IF (x_msg_data IS NULL) THEN
1106 FND_MSG_PUB.Count_And_Get
1107 ( p_encoded => FND_API.G_FALSE
1108 , p_count => x_msg_count
1109 , p_data => x_msg_data
1110 );
1111 END IF;
1112 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1113 WHEN OTHERS THEN
1114 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1115 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1116 IF (x_msg_data IS NOT NULL) THEN
1117 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl ';
1118 ELSE
1119 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl ';
1120 END IF;
1121 END get_DimObj_ViewBy_Tbl;
1122 /*******************************************************************/
1123 FUNCTION get_Next_Alias
1124 (
1125 p_Alias IN VARCHAR2
1126 ) RETURN VARCHAR2
1127 IS
1128 l_alias VARCHAR2(3);
1129 l_return VARCHAR2(3);
1130 l_count NUMBER;
1131 BEGIN
1132 IF (p_Alias IS NULL) THEN
1133 l_return := 'A';
1134 ELSE
1135 l_count := LENGTH(p_Alias);
1136 IF (l_count = 1) THEN
1137 l_return := 'A0';
1138 ELSIF (l_count > 1) THEN
1139 l_alias := SUBSTR(p_Alias, 2);
1140 l_count := TO_NUMBER(l_alias)+1;
1141 l_return := SUBSTR(p_Alias, 1, 1)||TO_CHAR(l_count);
1142 END IF;
1143 END IF;
1144 RETURN l_return;
1145 END get_Next_Alias;
1146 /*******************************************************************
1147 PROCEUDRE TO REMOVE THE UNUSED PMF DIMENSION
1148 *******************************************************************/
1149 PROCEDURE Remove_Unused_PMF_Dimenison
1150 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1151 , p_Kpi_Id IN NUMBER
1152 , p_dim_set_id IN NUMBER
1153 , x_return_status OUT NOCOPY VARCHAR2
1154 , x_msg_count OUT NOCOPY NUMBER
1155 , x_msg_data OUT NOCOPY VARCHAR2
1156 ) IS
1157 l_dimension_id BSC_SYS_DIM_GROUPS_TL.Dim_Group_Id%TYPE;
1158 l_flag BOOLEAN;
1159 l_temp_var VARCHAR2(32000);
1160
1161 CURSOR c_dim_set_ind IS
1162 SELECT DISTINCT dim_group_id
1163 FROM BSC_KPI_DIM_GROUPS
1164 WHERE Dim_Set_Id = p_dim_set_id
1165 AND Indicator = p_Kpi_Id;
1166
1167 CURSOR cr_bsc_dim IS
1168 SELECT C.Source Source
1169 FROM BSC_SYS_DIM_GROUPS_VL A
1170 , BSC_SYS_DIM_LEVELS_BY_GROUP B
1171 , BSC_SYS_DIM_LEVELS_B C
1172 WHERE A.Dim_Group_ID = B.Dim_Group_ID
1173 AND C.Dim_Level_ID = B.Dim_Level_ID
1174 AND A.Short_Name <> BSC_BIS_DIMENSION_PUB.Unassigned_Dim
1175 AND A.Dim_Group_ID = l_dimension_id;
1176 BEGIN
1177 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison procedure');
1178 FND_MSG_PUB.Initialize;
1179 x_return_status := FND_API.G_RET_STS_SUCCESS;
1180 IF (p_dim_set_id IS NOT NULL) THEN
1181 --dbms_output.PUT_LINE('dim set id is not NULL should not be here ..... ');
1182 FOR cd IN c_dim_set_ind LOOP
1183 l_dimension_id := cd.Dim_Group_Id;
1184 FOR cn_bsc IN cr_bsc_dim LOOP
1185 IF (cn_bsc.Source = 'PMF') THEN
1186 l_flag := TRUE;
1187 EXIT;
1188 ELSE
1189 l_flag := FALSE;
1190 EXIT;
1191 END IF;
1192 END LOOP;
1193 IF (l_flag) THEN
1194 --first delete the remove dimension from dimension set and indicator combination
1195 SELECT short_name INTO l_temp_var
1196 FROM BSC_SYS_DIM_GROUPS_VL
1197 WHERE dim_group_id = l_dimension_id;
1198 -- START Granular Locking
1199 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
1200 ( p_Kpi_Id => p_Kpi_Id
1201 , p_Dim_Set_Id => p_dim_set_id
1202 , p_time_stamp => NULL
1203 , x_return_status => x_return_status
1204 , x_msg_count => x_msg_count
1205 , x_msg_data => x_msg_data
1206 );
1207 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1208 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Failed');
1209 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1210 END IF;
1211 -- END Granular Locking
1212 BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set
1213 ( p_commit => FND_API.G_FALSE
1214 , p_kpi_id => p_Kpi_Id
1215 , p_dim_set_id => p_dim_set_id
1216 , p_dim_short_names => l_temp_var
1217 , p_time_stamp => NULL
1218 , x_return_status => x_return_status
1219 , x_msg_count => x_msg_count
1220 , x_msg_data => x_msg_data
1221 );
1222 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1223 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set');
1224 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1225 END IF;
1226 --now delete the dimension from system level, ie from BSC_SYS_DIM_GROUPS_TL table
1227 BSC_BIS_DIMENSION_PUB.Delete_Dimension
1228 ( p_commit => FND_API.G_FALSE
1229 , p_dim_short_name => l_temp_var
1230 , x_return_status => x_return_status
1231 , x_msg_count => x_msg_count
1232 , x_msg_data => x_msg_data
1233 );
1234 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1235 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_DIMENSION_PUB.Delete_Dimension');
1236 x_return_status := FND_API.G_RET_STS_SUCCESS;
1237 x_msg_data := NULL;
1238 END IF;
1239 END IF;
1240 END LOOP;
1241 END IF;
1242 IF (p_commit = FND_API.G_TRUE) THEN
1243 COMMIT;
1244 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
1245 END IF;
1246 x_return_status := FND_API.G_RET_STS_SUCCESS;
1247 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison procedure');
1248 EXCEPTION
1249 WHEN FND_API.G_EXC_ERROR THEN
1250 IF (x_msg_data IS NULL) THEN
1251 FND_MSG_PUB.Count_And_Get
1252 ( p_encoded => FND_API.G_FALSE
1253 , p_count => x_msg_count
1254 , p_data => x_msg_data
1255 );
1256 END IF;
1257 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1258 x_return_status := FND_API.G_RET_STS_ERROR;
1259 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1260 IF (x_msg_data IS NULL) THEN
1261 FND_MSG_PUB.Count_And_Get
1262 ( p_encoded => FND_API.G_FALSE
1263 , p_count => x_msg_count
1264 , p_data => x_msg_data
1265 );
1266 END IF;
1267 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1268 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1269 WHEN NO_DATA_FOUND THEN
1270 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1271 IF (x_msg_data IS NOT NULL) THEN
1272 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison ';
1273 ELSE
1274 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison ';
1275 END IF;
1276 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1277 WHEN OTHERS THEN
1278 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1279 IF (x_msg_data IS NOT NULL) THEN
1280 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison ';
1281 ELSE
1282 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison ';
1283 END IF;
1284 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1285 END Remove_Unused_PMF_Dimenison;
1286
1287 /*******************************************************************
1288 PROCEUDRE to SET Defaults for PMF Dimension Levels
1289 *******************************************************************/
1290 PROCEDURE Get_PMF_Defaults
1291 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1292 , p_data_set_id IN NUMBER
1293 , p_measure_short_name IN VARCHAR2
1294 , p_dim_obj_short_names IN VARCHAR2
1295 , p_default_short_names IN VARCHAR2
1296 , p_view_by_name IN VARCHAR2
1297 , x_dim_obj_short_names OUT NOCOPY VARCHAR2
1298 , x_default_short_names OUT NOCOPY VARCHAR2
1299 , x_view_by_name OUT NOCOPY VARCHAR2
1300 , x_measure_short_name OUT NOCOPY VARCHAR2
1301 , x_return_status OUT NOCOPY VARCHAR2
1302 , x_msg_count OUT NOCOPY NUMBER
1303 , x_msg_data OUT NOCOPY VARCHAR2
1304 ) IS
1305 l_DimObj_ViewBy_Tbl BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type;
1306 l_flag BOOLEAN;
1307 l_temp_var VARCHAR2(32000);
1308 l_dim_obj_name BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE;
1309 BEGIN
1310 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults procedure');
1311 FND_MSG_PUB.Initialize;
1312 x_return_status := FND_API.G_RET_STS_SUCCESS;
1313 x_dim_obj_short_names := p_dim_obj_short_names;
1314 x_default_short_names := p_default_short_names;
1315 x_view_by_name := p_view_by_name;
1316 x_measure_short_name := p_measure_short_name;
1317 --dbms_output.PUT_LINE('into the PMF area <'||p_dim_obj_short_names||'>');
1318 --dbms_output.PUT_LINE('p_default_short_names <'||p_default_short_names||'>');
1319 --dbms_output.PUT_LINE('p_view_by_name <'||p_view_by_name||'>');
1320 --dbms_output.PUT_LINE('p_measure_short_name <'||p_measure_short_name||'>');
1321 IF (x_measure_short_name IS NULL) THEN
1322 SELECT Short_Name
1323 INTO x_measure_short_name
1324 FROM BSC_SYS_MEASURES
1325 , BSC_SYS_DATASETS_VL
1326 WHERE MEASURE_ID = MEASURE_ID1
1327 AND DATASET_ID = p_data_set_id;
1328 END IF;
1329 BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl
1330 ( p_Measure_Short_Name => x_measure_short_name
1331 , p_Region_Code => NULL
1332 , x_DimObj_ViewBy_Tbl => l_DimObj_ViewBy_Tbl
1333 , x_return_status => x_return_status
1334 , x_msg_count => x_msg_count
1335 , x_msg_data => x_msg_data
1336 );
1337 --dbms_output.PUT_LINE(' fetched the PMV table .....!');
1338 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1339 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults Failed: at BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl');
1340 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1341 END IF;
1342 IF (x_dim_obj_short_names IS NULL) THEN
1343 BSC_BIS_KPI_MEAS_PUB.get_Default_ViewBy_For_Measure
1344 ( p_DimObj_ViewBy_Tbl => l_DimObj_ViewBy_Tbl
1345 , x_dim_objects => x_dim_obj_short_names
1346 , x_defaults => x_default_short_names
1347 , x_view_bys => x_view_by_name
1348 , x_return_status => x_return_status
1349 , x_msg_count => x_msg_count
1350 , x_msg_data => x_msg_data
1351 );
1352 --dbms_output.PUT_LINE(' fetched the default and view by .....!');
1353 --dbms_output.PUT_LINE('-* Defaults *- '||x_default_short_names);
1354 --dbms_output.PUT_LINE('-* view by *- '||x_view_by_name);
1355 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1356 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults Failed: at BSC_BIS_KPI_MEAS_PUB.get_Default_ViewBy_For_Measure');
1357 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1358 END IF;
1359 END IF;
1360 IF (x_view_by_name IS NULL) THEN
1361 l_flag := FALSE;
1362 IF (x_default_short_names IS NOT NULL) THEN
1363 -- 2nd page submit
1364 l_temp_var := x_default_short_names;
1365 WHILE (is_more( p_dim_short_names => l_temp_var
1366 , p_dim_short_name => l_dim_obj_name)
1367 )LOOP
1368 IF (BSC_BIS_KPI_MEAS_PUB.is_View_By(l_DimObj_ViewBy_Tbl, l_dim_obj_name)) THEN
1369 l_flag := TRUE;
1370 x_view_by_name := l_dim_obj_name;
1371 EXIT WHEN l_flag;
1372 END IF;
1373 END LOOP;
1374 ELSE
1375 -- first page commit
1376 l_temp_var := x_dim_obj_short_names;
1377 WHILE (is_more( p_dim_short_names => l_temp_var
1378 , p_dim_short_name => l_dim_obj_name)
1379 )LOOP
1380 --dbms_output.PUT_LINE('l_dim_obj_name '||l_dim_obj_name);
1381 IF (BSC_BIS_KPI_MEAS_PUB.is_View_By(l_DimObj_ViewBy_Tbl, l_dim_obj_name)) THEN
1382 --dbms_output.PUT_LINE('SETTING VIEW BY');
1383 l_flag := TRUE;
1384 x_view_by_name := l_dim_obj_name;
1385 EXIT WHEN l_flag;
1386 END IF;
1387 END LOOP;
1388 END IF;
1389 IF (NOT l_flag) THEN -- BSC model need to have at least one view by for color calculation
1390 l_temp_var := x_default_short_names;
1391
1392 IF (is_more( p_dim_short_names => l_temp_var
1393 , p_dim_short_name => l_dim_obj_name)) THEN
1394 x_view_by_name := l_dim_obj_name;
1395 --dbms_output.PUT_LINE('pick default x_view_by_name <'||x_view_by_name||'>');
1396 -- visuri commented this validation for bug 5080308
1397 /*ELSE
1398 --dbms_output.PUT_LINE('view by problem');
1399 FND_MESSAGE.SET_NAME('BSC','BSC_VIEW_BY_REQUIRED');
1400 FND_MSG_PUB.ADD;
1401 RAISE FND_API.G_EXC_ERROR;*/
1402 END IF;
1403 END IF;
1404 END IF;
1405 -- WHY IS THIS REQUIRED ** ask Pankaj
1406 IF (x_measure_short_name IS NULL) THEN
1407 SELECT Short_Name
1408 INTO x_measure_short_name
1409 FROM BSC_SYS_MEASURES
1410 , BSC_SYS_DATASETS_VL
1411 WHERE MEASURE_ID = MEASURE_ID1
1412 AND DATASET_ID = p_data_set_id;
1413 END IF;
1414 l_flag := BSC_BIS_KPI_MEAS_PUB.is_Time_With_Measure
1415 ( p_DimObj_ViewBy_Tbl => l_DimObj_ViewBy_Tbl
1416 , x_return_status => x_return_status
1417 , x_msg_count => x_msg_count
1418 , x_msg_data => x_msg_data
1419 );
1420 IF (l_flag) THEN
1421 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Time_In_Dim_Object(l_DimObj_ViewBy_Tbl, x_view_by_name)) THEN
1422 l_flag := FALSE;
1423 IF (x_default_short_names IS NOT NULL) THEN
1424 l_temp_var := x_default_short_names;
1425 WHILE (is_more( p_dim_short_names => l_temp_var
1426 , p_dim_short_name => l_dim_obj_name)
1427 )LOOP
1428 IF (BSC_BIS_KPI_MEAS_PUB.is_Time_In_Dim_Object(l_DimObj_ViewBy_Tbl, l_dim_obj_name)) THEN
1429 l_flag := TRUE;
1430 EXIT WHEN l_flag;
1431 END IF;
1432 END LOOP;
1433 ELSE
1434 l_temp_var := x_dim_obj_short_names;
1435 WHILE (is_more( p_dim_short_names => l_temp_var
1436 , p_dim_short_name => l_dim_obj_name)
1437 )LOOP
1438 IF(BSC_BIS_KPI_MEAS_PUB.is_Time_In_Dim_Object(l_DimObj_ViewBy_Tbl, l_dim_obj_name)) THEN
1439 l_flag := TRUE;
1440 x_default_short_names := l_dim_obj_name;
1441 EXIT WHEN l_flag;
1442 END IF;
1443 END LOOP;
1444 END IF;
1445 END IF;
1446 IF(NOT l_flag) THEN
1447 FND_MESSAGE.SET_NAME('BSC','BSC_TIME_DIM_REQUIRED');
1448 FND_MSG_PUB.ADD;
1449 RAISE FND_API.G_EXC_ERROR;
1450 END IF;
1451 END IF;
1452 -- changed this code so that view by and default dimension are
1453 -- set properly when finish pressed on 1,2 page in 3 step process
1454 --
1455 IF (x_default_short_names IS NULL) THEN
1456 x_default_short_names := x_view_by_name;
1457 ELSE
1458 IF (INSTR(x_default_short_names, x_view_by_name) = 0 ) THEN
1459 x_default_short_names := x_default_short_names||', '||x_view_by_name;
1460 END IF;
1461 END IF;
1462 l_temp_var := x_default_short_names;
1463 WHILE (is_more( p_dim_short_names => l_temp_var
1464 , p_dim_short_name => l_dim_obj_name)
1465 )LOOP
1466 IF (INSTR(x_dim_obj_short_names, l_dim_obj_name) = 0 ) THEN
1467 x_dim_obj_short_names := x_dim_obj_short_names||', '||l_dim_obj_name;
1468 END IF;
1469 END LOOP;
1470 IF (p_commit = FND_API.G_TRUE) THEN
1471 COMMIT;
1472 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
1473 END IF;
1474 x_return_status := FND_API.G_RET_STS_SUCCESS;
1475 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults procedure');
1476 EXCEPTION
1477 WHEN FND_API.G_EXC_ERROR THEN
1478 IF (x_msg_data IS NULL) THEN
1479 FND_MSG_PUB.Count_And_Get
1480 ( p_encoded => FND_API.G_FALSE
1481 , p_count => x_msg_count
1482 , p_data => x_msg_data
1483 );
1484 END IF;
1485 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1486 x_return_status := FND_API.G_RET_STS_ERROR;
1487 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1488 IF (x_msg_data IS NULL) THEN
1489 FND_MSG_PUB.Count_And_Get
1490 ( p_encoded => FND_API.G_FALSE
1491 , p_count => x_msg_count
1492 , p_data => x_msg_data
1493 );
1494 END IF;
1495 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1496 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1497 WHEN NO_DATA_FOUND THEN
1498 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1499 IF (x_msg_data IS NOT NULL) THEN
1500 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
1501 ELSE
1502 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
1503 END IF;
1504 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1505 WHEN OTHERS THEN
1506 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1507 IF (x_msg_data IS NOT NULL) THEN
1508 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
1509 ELSE
1510 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
1511 END IF;
1512 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1513 END Get_PMF_Defaults;
1514 /*********************************************************************************
1515 CREATE DIMENSION-SETS
1516 *********************************************************************************/
1517 PROCEDURE Create_Dim_Set
1518 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1519 , p_kpi_id IN NUMBER
1520 , p_display_name IN VARCHAR2
1521 , p_dim_short_names IN VARCHAR2
1522 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
1523 , p_dim_set_short_name IN VARCHAR2 := NULL
1524 , x_return_status OUT NOCOPY VARCHAR2 -- Send the KPI Time Stamp
1525 , x_msg_count OUT NOCOPY NUMBER
1526 , x_msg_data OUT NOCOPY VARCHAR2
1527 )IS
1528 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
1529 l_index NUMBER := 0;
1530 l_count NUMBER;
1531 l_count_independent_dim_obj NUMBER;
1532 l_kpi_name VARCHAR2(32000);
1533
1534 CURSOR c_kpi_ids IS
1535 SELECT indicator
1536 FROM BSC_KPIS_B
1537 WHERE Source_Indicator = p_kpi_id
1538 AND Prototype_Flag <> 2;
1539 BEGIN
1540 FND_MSG_PUB.Initialize;
1541 x_return_status := FND_API.G_RET_STS_SUCCESS;
1542 SAVEPOINT CreateBSCDimSetPMD;
1543 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set procedure');
1544 IF (p_kpi_id IS NULL) THEN
1545 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1546 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
1547 FND_MSG_PUB.ADD;
1548 RAISE FND_API.G_EXC_ERROR;
1549 END IF;
1550 SELECT COUNT(*) INTO l_count
1551 FROM BSC_KPIS_B
1552 WHERE indicator = p_kpi_id;
1553 IF (l_count = 0) THEN
1554 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
1555 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
1556 FND_MSG_PUB.ADD;
1557 RAISE FND_API.G_EXC_ERROR;
1558 END IF;
1559 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --varchar2(10)
1560 l_bsc_dimset_rec.Bsc_Dim_Set_Short_Name := p_dim_set_short_name;
1561 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
1562 -- Verify that this is not a Shared KPI.
1563 SELECT share_flag
1564 INTO l_count
1565 FROM BSC_KPIS_B
1566 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id ;
1567 IF (l_count = 2) THEN
1568 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
1569 --FND_MESSAGE.SET_TOKEN('BSC_KPI', l_bsc_dimset_rec.Bsc_Kpi_Id);
1570 FND_MSG_PUB.ADD;
1571 RAISE FND_API.G_EXC_ERROR;
1572 END IF;
1573
1574 BSC_UTILITY.Enable_Dimensions_Entity(
1575 p_Entity_Type => BSC_UTILITY.c_DIMENSION
1576 , p_Entity_Short_Names => p_dim_short_names
1577 , p_Entity_Action_Type => BSC_UTILITY.c_UPDATE
1578 , x_Return_Status => x_return_status
1579 , x_Msg_Count => x_msg_count
1580 , x_Msg_Data => x_msg_data
1581 );
1582 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1583 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1584 END IF;
1585
1586 l_bsc_dimset_rec.Bsc_New_Dset := 'N'; --varchar2(45)
1587 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_New_Dset <'||l_bsc_dimset_rec.Bsc_New_Dset||'>');
1588 l_bsc_dimset_rec.Bsc_Dim_Set_Name := p_display_name; --varchar2(45)
1589 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Name <'||l_bsc_dimset_rec.Bsc_Dim_Set_Name||'>');
1590 l_bsc_dimset_rec.Bsc_Action := 'RESET';
1591 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Action <'||l_bsc_dimset_rec.Bsc_Action||'>');
1592
1593 SELECT NVL(MAX(dim_set_id) + 1, 0)
1594 INTO l_bsc_dimset_rec.bsc_dim_set_id
1595 FROM BSC_KPI_DIM_SETS_VL
1596 WHERE indicator = l_bsc_dimset_rec.bsc_kpi_id;
1597 --dbms_output.PUT_LINE('l_bsc_dimset_rec.bsc_dim_set_id <'||l_bsc_dimset_rec.bsc_dim_set_id||'>');
1598
1599 -- START Granular Locking
1600 -- Lock the underlying KPI, so that it is not deleted when assignment is being done.
1601 BSC_BIS_LOCKS_PUB.LOCK_KPI
1602 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
1603 , p_time_stamp => p_time_stamp
1604 , p_Full_Lock_Flag => FND_API.G_FALSE
1605 , x_return_status => x_return_status
1606 , x_msg_count => x_msg_count
1607 , x_msg_data => x_msg_data
1608 );
1609 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1610 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_BIS_LOCKS_PUB.LOCK_KPI');
1611 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1612 END IF;
1613 -- END Granular Locking
1614 BSC_DIMENSION_SETS_PUB.Create_Bsc_Kpi_Dim_Sets_Tl--INSERT INTO BSC_KPI_DIM_SETS_TL
1615 ( p_commit => FND_API.G_FALSE
1616 , p_Dim_Set_Rec => l_bsc_dimset_rec
1617 , x_return_status => x_return_status
1618 , x_msg_count => x_msg_count
1619 , x_msg_data => x_msg_data
1620 );
1621 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1622 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Create_Bsc_Kpi_Dim_Sets_Tl');
1623 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1624 END IF;
1625 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
1626 ( p_commit => FND_API.G_FALSE
1627 , p_kpi_id => l_bsc_dimset_rec.Bsc_Kpi_Id
1628 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
1629 , p_dim_short_names => p_dim_short_names
1630 , x_return_status => x_return_status
1631 , x_msg_count => x_msg_count
1632 , x_msg_data => x_msg_data
1633 );
1634 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1635 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
1636 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1637 END IF;
1638 -- START: Granular Locking, Change time stamp of Dim Set & KPI
1639 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
1640 ( p_Kpi_Id => p_Kpi_Id
1641 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
1642 , x_return_status => x_return_status
1643 , x_msg_count => x_msg_count
1644 , x_msg_data => x_msg_data
1645 );
1646 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1647 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET Failed: SET_TIME_STAMP_DIM_SET');
1648 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1649 END IF;
1650 -- END: Granular Locking, Change time stamp of Dim Set & KPI
1651 --for all shared indicator, repeat the steps above
1652 FOR cd IN c_kpi_ids LOOP
1653 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
1654 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
1655 -- Lock the underlying KPI, so that it is not deleted when assignment is being done.
1656 BSC_BIS_LOCKS_PUB.LOCK_KPI
1657 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
1658 , p_time_stamp => NULL
1659 , p_Full_Lock_Flag => FND_API.G_FALSE
1660 , x_return_status => x_return_status
1661 , x_msg_count => x_msg_count
1662 , x_msg_data => x_msg_data
1663 );
1664 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1665 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_BIS_LOCKS_PUB.LOCK_KPI');
1666 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1667 END IF;
1668
1669 SELECT NVL(MAX(dim_set_id) + 1, 0)
1670 INTO l_bsc_dimset_rec.bsc_dim_set_id
1671 FROM BSC_KPI_DIM_SETS_VL
1672 WHERE indicator = l_bsc_dimset_rec.bsc_kpi_id;
1673 BSC_DIMENSION_SETS_PUB.Create_Bsc_Kpi_Dim_Sets_Tl--INSERT INTO BSC_KPI_DIM_SETS_TL
1674 ( p_commit => FND_API.G_FALSE
1675 , p_Dim_Set_Rec => l_bsc_dimset_rec
1676 , x_return_status => x_return_status
1677 , x_msg_count => x_msg_count
1678 , x_msg_data => x_msg_data
1679 );
1680 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1681 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Create_Bsc_Kpi_Dim_Sets_Tl');
1682 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1683 END IF;
1684 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
1685 ( p_commit => FND_API.G_FALSE
1686 , p_kpi_id => l_bsc_dimset_rec.Bsc_Kpi_Id
1687 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
1688 , p_dim_short_names => p_dim_short_names
1689 , x_return_status => x_return_status
1690 , x_msg_count => x_msg_count
1691 , x_msg_data => x_msg_data
1692 );
1693 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1694 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
1695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1696 END IF;
1697 -- START: Granular Locking, Change time stamp of Dim Set & KPI
1698 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
1699 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
1700 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
1701 , x_return_status => x_return_status
1702 , x_msg_count => x_msg_count
1703 , x_msg_data => x_msg_data
1704 );
1705 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1706 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET Failed: SET_TIME_STAMP_DIM_SET');
1707 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1708 END IF;
1709 -- END: Granular Locking, Change time stamp of Dim Set & KPI
1710 END LOOP;
1711 /*************************************************************
1712 List Button validation.For a list button the condition is that
1713 all the dimesnion sets within the tab (irrespective of whether they are
1714 in the same KPI or different KPIs) the dimesnion objects should be the same
1715 So we have to check for the validity of the List Button while creating a new Dimesnion set.
1716 This API will internally take care of Shared indiactors also.So don't need to call for
1717 Shared indiactors.
1718 /************************************************************/
1719 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
1720 (
1721 p_Kpi_Id => p_kpi_id
1722 , p_Dim_Level_Id => NULL
1723 , x_return_status => x_return_status
1724 , x_msg_count => x_msg_count
1725 , x_msg_data => x_msg_data
1726 );
1727 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1728 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set procedure Failed:at BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button');
1729 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1730 END IF;
1731
1732 /********************************************************
1733 Check no of independent dimension objects in dimension set
1734 ********************************************************/
1735
1736 SELECT COUNT(0) INTO l_count_independent_dim_obj
1737 FROM BSC_KPI_DIM_LEVELS_B
1738 WHERE INDICATOR = p_kpi_id
1739 AND DIM_SET_ID = l_bsc_dimset_rec.bsc_dim_set_id;
1740
1741 IF(l_count_independent_dim_obj > bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
1742
1743 l_count_independent_dim_obj := 0;
1744 l_count_independent_dim_obj := bsc_utility.get_nof_independent_dimobj
1745 ( p_Kpi_Id => p_Kpi_Id
1746 , p_Dim_Set_Id => l_bsc_dimset_rec.bsc_dim_set_id
1747 );
1748 IF(l_count_independent_dim_obj >bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
1749 SELECT NAME INTO l_kpi_name
1750 FROM BSC_KPIS_VL
1751 WHERE INDICATOR = p_Kpi_Id;
1752
1753 l_kpi_name := '['||l_kpi_name||']';
1754
1755 FND_MESSAGE.SET_NAME('BSC','BSC_IND_DIMOBJ_LIMIT');
1756 FND_MESSAGE.SET_TOKEN('NAME_LIST',l_kpi_name);
1757 FND_MSG_PUB.ADD;
1758 RAISE FND_API.G_EXC_ERROR;
1759 END IF;
1760
1761
1762 END IF;
1763
1764 /********************************************************/
1765 IF (p_commit = FND_API.G_TRUE) THEN
1766 COMMIT;
1767 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
1768 END IF;
1769 x_return_status := FND_API.G_RET_STS_SUCCESS;
1770 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set procedure');
1771 EXCEPTION
1772 WHEN FND_API.G_EXC_ERROR THEN
1773 ROLLBACK TO CreateBSCDimSetPMD;
1774 IF (x_msg_data IS NULL) THEN
1775 FND_MSG_PUB.Count_And_Get
1776 ( p_encoded => FND_API.G_FALSE
1777 , p_count => x_msg_count
1778 , p_data => x_msg_data
1779 );
1780 END IF;
1781 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1782 x_return_status := FND_API.G_RET_STS_ERROR;
1783 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1784 ROLLBACK TO CreateBSCDimSetPMD;
1785 IF (x_msg_data IS NULL) THEN
1786 FND_MSG_PUB.Count_And_Get
1787 ( p_encoded => FND_API.G_FALSE
1788 , p_count => x_msg_count
1789 , p_data => x_msg_data
1790 );
1791 END IF;
1792 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1793 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1794 WHEN NO_DATA_FOUND THEN
1795 ROLLBACK TO CreateBSCDimSetPMD;
1796 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1797 IF (x_msg_data IS NOT NULL) THEN
1798 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set ';
1799 ELSE
1800 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set ';
1801 END IF;
1802 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1803 WHEN OTHERS THEN
1804 ROLLBACK TO CreateBSCDimSetPMD;
1805 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1806 IF (x_msg_data IS NOT NULL) THEN
1807 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set ';
1808 ELSE
1809 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set ';
1810 END IF;
1811 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1812 END Create_Dim_Set;
1813 /*********************************************************************************
1814 UPDATE DIMENSION-SETS
1815 *********************************************************************************/
1816 PROCEDURE Update_Dim_Set
1817 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1818 , p_kpi_id IN NUMBER
1819 , p_dim_set_id IN NUMBER
1820 , p_display_name IN VARCHAR2
1821 , p_assign_dim_names IN VARCHAR2
1822 , p_unassign_dim_names IN VARCHAR2
1823 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
1824 , x_return_status OUT NOCOPY VARCHAR2
1825 , x_msg_count OUT NOCOPY NUMBER
1826 , x_msg_data OUT NOCOPY VARCHAR2
1827 )IS
1828 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
1829 l_count NUMBER := 0;
1830 l_count_independent_dim_obj NUMBER;
1831 l_kpi_name VARCHAR2(32000);
1832 BEGIN
1833 FND_MSG_PUB.Initialize;
1834 x_return_status := FND_API.G_RET_STS_SUCCESS;
1835 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
1836 IF (p_kpi_id IS NULL) THEN
1837 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1838 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
1839 FND_MSG_PUB.ADD;
1840 RAISE FND_API.G_EXC_ERROR;
1841 END IF;
1842
1843 -- added for Bug#4615361
1844 BSC_UTILITY.Enable_Dimensions_Entity(
1845 p_Entity_Type => BSC_UTILITY.c_DIMENSION
1846 , p_Entity_Short_Names => p_assign_dim_names
1847 , p_Entity_Action_Type => BSC_UTILITY.c_UPDATE
1848 , x_Return_Status => x_return_status
1849 , x_Msg_Count => x_msg_count
1850 , x_Msg_Data => x_msg_data
1851 );
1852 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1853 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1854 END IF;
1855
1856
1857 BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set
1858 ( p_commit => FND_API.G_FALSE
1859 , p_kpi_id => p_kpi_id
1860 , p_dim_set_id => p_dim_set_id
1861 , p_display_name => p_display_name
1862 , p_time_stamp => p_time_stamp
1863 , x_return_status => x_return_status
1864 , x_msg_count => x_msg_count
1865 , x_msg_data => x_msg_data
1866 );
1867 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1868 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set');
1869 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1870 END IF;
1871 BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions
1872 ( p_commit => FND_API.G_FALSE
1873 , p_kpi_id => p_kpi_id
1874 , p_dim_set_id => p_dim_set_id
1875 , p_assign_dim_names => p_assign_dim_names
1876 , p_unassign_dim_names => p_unassign_dim_names
1877 , p_time_stamp => NULL
1878 , x_return_status => x_return_status
1879 , x_msg_count => x_msg_count
1880 , x_msg_data => x_msg_data
1881 );
1882 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1883 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Assign_Unassign_Dimensions <'||x_msg_data||'>');
1884 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1885 END IF;
1886
1887 /********************************************************
1888 Check no of independent dimension objects in dimension set
1889 ********************************************************/
1890
1891 SELECT COUNT(0) INTO l_count_independent_dim_obj
1892 FROM BSC_KPI_DIM_LEVELS_B
1893 WHERE INDICATOR = p_kpi_id
1894 AND DIM_SET_ID = p_dim_set_id;
1895
1896 IF(l_count_independent_dim_obj > bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
1897
1898 l_count_independent_dim_obj := 0;
1899 l_count_independent_dim_obj := bsc_utility.get_nof_independent_dimobj
1900 ( p_Kpi_Id => p_kpi_id
1901 , p_Dim_Set_Id => p_dim_set_id
1902 );
1903
1904 IF(l_count_independent_dim_obj >bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
1905 SELECT NAME INTO l_kpi_name
1906 FROM BSC_KPIS_VL
1907 WHERE INDICATOR = p_Kpi_Id;
1908
1909 l_kpi_name := '['||l_kpi_name||']';
1910
1911 FND_MESSAGE.SET_NAME('BSC','BSC_IND_DIMOBJ_LIMIT');
1912 FND_MESSAGE.SET_TOKEN('NAME_LIST',l_kpi_name);
1913 FND_MSG_PUB.ADD;
1914 RAISE FND_API.G_EXC_ERROR;
1915 END IF;
1916
1917 END IF;
1918
1919 /********************************************************/
1920
1921 IF (p_commit = FND_API.G_TRUE) THEN
1922 COMMIT;
1923 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
1924 END IF;
1925 x_return_status := FND_API.G_RET_STS_SUCCESS;
1926 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
1927 EXCEPTION
1928 WHEN FND_API.G_EXC_ERROR THEN
1929 IF (x_msg_data IS NULL) THEN
1930 FND_MSG_PUB.Count_And_Get
1931 ( p_encoded => FND_API.G_FALSE
1932 , p_count => x_msg_count
1933 , p_data => x_msg_data
1934 );
1935 END IF;
1936 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1937 x_return_status := FND_API.G_RET_STS_ERROR;
1938 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1939 IF (x_msg_data IS NULL) THEN
1940 FND_MSG_PUB.Count_And_Get
1941 ( p_encoded => FND_API.G_FALSE
1942 , p_count => x_msg_count
1943 , p_data => x_msg_data
1944 );
1945 END IF;
1946 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1947 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1948 WHEN NO_DATA_FOUND THEN
1949 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1950 IF (x_msg_data IS NOT NULL) THEN
1951 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
1952 ELSE
1953 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
1954 END IF;
1955 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1956 WHEN OTHERS THEN
1957 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1958 IF (x_msg_data IS NOT NULL) THEN
1959 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
1960 ELSE
1961 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
1962 END IF;
1963 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1964 END Update_Dim_Set;
1965
1966 /*********************************************************************************
1967 UPDATE DIMENSION-SETS
1968 *********************************************************************************/
1969 PROCEDURE Update_Dim_Set
1970 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1971 , p_kpi_id IN NUMBER
1972 , p_dim_set_id IN NUMBER
1973 , p_display_name IN VARCHAR2
1974 , p_dim_short_names IN VARCHAR2
1975 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
1976 , x_return_status OUT NOCOPY VARCHAR2
1977 , x_msg_count OUT NOCOPY NUMBER
1978 , x_msg_data OUT NOCOPY VARCHAR2
1979 )IS
1980 l_unassign_dim_names VARCHAR2(32000);
1981 l_count NUMBER := 0;
1982 l_meaning VARCHAR(60);
1983
1984 CURSOR p_unassign_dim_names IS
1985 SELECT short_name FROM BSC_SYS_DIM_GROUPS_VL
1986 WHERE dim_group_id IN (SELECT dim_group_id
1987 FROM BSC_KPI_DIM_GROUPS
1988 WHERE dim_set_id = p_dim_set_id
1989 AND indicator = p_kpi_id);
1990 BEGIN
1991 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
1992 FND_MSG_PUB.Initialize;
1993 x_return_status := FND_API.G_RET_STS_SUCCESS;
1994 IF (p_kpi_id IS NULL) THEN
1995 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1996 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
1997 FND_MSG_PUB.ADD;
1998 RAISE FND_API.G_EXC_ERROR;
1999 END IF;
2000 IF (p_dim_set_id IS NULL) THEN
2001 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2002 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
2003 FND_MSG_PUB.ADD;
2004 RAISE FND_API.G_EXC_ERROR;
2005 END IF;
2006 SELECT COUNT(DIM_SET_ID)
2007 INTO l_count
2008 FROM BSC_KPI_DIM_SETS_VL
2009 WHERE DIM_SET_ID = p_dim_set_id AND INDICATOR = p_kpi_id;
2010
2011 IF (l_count = 0) THEN
2012 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
2013
2014 SELECT MEANING
2015 INTO l_meaning
2016 FROM BSC_LOOKUPS
2017 WHERE LOOKUP_TYPE = 'BSC_UI_COMMON' AND LOOKUP_CODE = 'DIM_SET' ;
2018
2019 FND_MESSAGE.SET_TOKEN('TYPE', l_meaning, TRUE);
2020 FND_MSG_PUB.ADD;
2021 RAISE FND_API.G_EXC_ERROR;
2022 END IF;
2023 FOR cd IN p_unassign_dim_names LOOP
2024 IF (cd.short_name IS NOT NULL) THEN
2025 IF (l_unassign_dim_names IS NULL) THEN
2026 l_unassign_dim_names := cd.short_name;
2027 ELSE
2028 l_unassign_dim_names := l_unassign_dim_names||', '||cd.short_name;
2029 END IF;
2030 END IF;
2031 END LOOP;
2032
2033 BSC_UTILITY.Enable_Dimensions_Entity(
2034 p_Entity_Type => BSC_UTILITY.c_DIMENSION
2035 , p_Entity_Short_Names => p_dim_short_names
2036 , p_Entity_Action_Type => BSC_UTILITY.c_UPDATE
2037 , x_Return_Status => x_return_status
2038 , x_Msg_Count => x_msg_count
2039 , x_Msg_Data => x_msg_data
2040 );
2041 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2042 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2043 END IF;
2044
2045
2046 BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set
2047 ( p_commit => FND_API.G_FALSE
2048 , p_kpi_id => p_kpi_id
2049 , p_dim_set_id => p_dim_set_id
2050 , p_display_name => p_display_name
2051 , p_assign_dim_names => p_dim_short_names
2052 , p_unassign_dim_names => l_unassign_dim_names
2053 , p_time_stamp => p_time_stamp
2054 , x_return_status => x_return_status
2055 , x_msg_count => x_msg_count
2056 , x_msg_data => x_msg_data
2057 );
2058 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2059 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set <'||x_msg_data||'>');
2060 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2061 END IF;
2062 IF (p_commit = FND_API.G_TRUE) THEN
2063 COMMIT;
2064 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
2065 END IF;
2066 x_return_status := FND_API.G_RET_STS_SUCCESS;
2067 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
2068 EXCEPTION
2069 WHEN FND_API.G_EXC_ERROR THEN
2070 IF (x_msg_data IS NULL) THEN
2071 FND_MSG_PUB.Count_And_Get
2072 ( p_encoded => FND_API.G_FALSE
2073 , p_count => x_msg_count
2074 , p_data => x_msg_data
2075 );
2076 END IF;
2077 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
2078 x_return_status := FND_API.G_RET_STS_ERROR;
2079 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2080 IF (x_msg_data IS NULL) THEN
2081 FND_MSG_PUB.Count_And_Get
2082 ( p_encoded => FND_API.G_FALSE
2083 , p_count => x_msg_count
2084 , p_data => x_msg_data
2085 );
2086 END IF;
2087 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2088 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
2089 WHEN NO_DATA_FOUND THEN
2090 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2091 IF (x_msg_data IS NOT NULL) THEN
2092 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2093 ELSE
2094 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2095 END IF;
2096 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
2097 WHEN OTHERS THEN
2098 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2099 IF (x_msg_data IS NOT NULL) THEN
2100 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2101 ELSE
2102 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2103 END IF;
2104 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
2105 END Update_Dim_Set;
2106 /*********************************************************************************
2107 UPDATE DIMENSION-SET
2108 *********************************************************************************/
2109 PROCEDURE Update_Dim_Set
2110 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2111 , p_kpi_id IN NUMBER
2112 , p_dim_set_id IN NUMBER
2113 , p_display_name IN VARCHAR2
2114 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
2115 , x_return_status OUT NOCOPY VARCHAR2
2116 , x_msg_count OUT NOCOPY NUMBER
2117 , x_msg_data OUT NOCOPY VARCHAR2
2118 )IS
2119
2120 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
2121 l_count NUMBER := 0;
2122
2123
2124 CURSOR c_kpi_ids IS
2125 SELECT indicator
2126 FROM BSC_KPIS_B
2127 WHERE Source_Indicator = p_kpi_id
2128 AND Prototype_Flag <> 2;
2129 BEGIN
2130 SAVEPOINT UpdateBSCDimSetPMD;
2131 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
2132 FND_MSG_PUB.Initialize;
2133 x_return_status := FND_API.G_RET_STS_SUCCESS;
2134 IF (p_kpi_id IS NULL) THEN
2135 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2136 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
2137 FND_MSG_PUB.ADD;
2138 RAISE FND_API.G_EXC_ERROR;
2139 END IF;
2140 IF (p_dim_set_id IS NULL) THEN
2141 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2142 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
2143 FND_MSG_PUB.ADD;
2144 RAISE FND_API.G_EXC_ERROR;
2145 END IF;
2146 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --number
2147 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2148 -- Verify that this is not a Shared KPI.
2149 SELECT share_flag
2150 INTO l_count
2151 FROM BSC_KPIS_B
2152 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id ;
2153 IF (l_count = 2) THEN
2154 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
2155 --FND_MESSAGE.SET_TOKEN('BSC_KPI', l_bsc_dimset_rec.Bsc_Kpi_Id);
2156 FND_MSG_PUB.ADD;
2157 RAISE FND_API.G_EXC_ERROR;
2158 END IF;
2159 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id; --number
2160 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Id <'||l_bsc_dimset_rec.Bsc_Dim_Set_Id||'>');
2161 l_bsc_dimset_rec.Bsc_Dim_Set_Name := p_display_name;
2162 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Name <'||l_bsc_dimset_rec.Bsc_Dim_Set_Name||'>');
2163
2164 SELECT COUNT(*) INTO l_count
2165 FROM BSC_KPI_DIM_SETS_VL
2166 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
2167 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
2168 IF (l_count = 0) THEN
2169 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
2170 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
2171 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
2172 FND_MSG_PUB.ADD;
2173 RAISE FND_API.G_EXC_ERROR;
2174 END IF;
2175
2176 -- START Granular Locking
2177 -- We need to call locking only in this API, since this is the lowermost API
2178 -- and all Update APIs will call this API eventually.
2179 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2180 ( p_Kpi_Id => p_Kpi_Id
2181 , p_Dim_Set_Id => p_dim_set_id
2182 , p_time_stamp => p_time_stamp
2183 , x_return_status => x_return_status
2184 , x_msg_count => x_msg_count
2185 , x_msg_data => x_msg_data
2186 );
2187 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2188 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET');
2189 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2190 END IF;
2191 -- END Granular Locking
2192 BSC_DIMENSION_SETS_PUB.Update_Bsc_Kpi_Dim_Sets_Tl
2193 ( p_commit => FND_API.G_FALSE
2194 , p_Dim_Set_Rec => l_bsc_dimset_rec
2195 , x_return_status => x_return_status
2196 , x_msg_count => x_msg_count
2197 , x_msg_data => x_msg_data
2198 );
2199 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2200 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Update_Bsc_Kpi_Dim_Sets_Tl');
2201 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2202 END IF;
2203 -- START: Granular Locking, Change time stamp of Dim Set & KPI
2204 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
2205 ( p_Kpi_Id => p_Kpi_Id
2206 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2207 , x_return_status => x_return_status
2208 , x_msg_count => x_msg_count
2209 , x_msg_data => x_msg_data
2210 );
2211 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2212 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET');
2213 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2214 END IF;
2215 -- END: Granular Locking, Change time stamp of Dim Set & KPI
2216 --for shared inidicators repeat the steps above
2217 FOR cd IN c_kpi_ids LOOP
2218 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
2219 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2220 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
2221 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
2222 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
2223 IF (l_count = 0) THEN
2224 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
2225 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
2226 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
2227 FND_MSG_PUB.ADD;
2228 RAISE FND_API.G_EXC_ERROR;
2229 END IF;
2230 -- START Granular Locking
2231 -- We need to call locking only in this API, since this is the lowermost API
2232 -- and all Update APIs will call this API eventually.
2233 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2234 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2235 , p_Dim_Set_Id => p_dim_set_id
2236 , p_time_stamp => NULL
2237 , x_return_status => x_return_status
2238 , x_msg_count => x_msg_count
2239 , x_msg_data => x_msg_data
2240 );
2241 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2242 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET');
2243 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2244 END IF;
2245 -- END Granular Locking
2246 BSC_DIMENSION_SETS_PUB.Update_Bsc_Kpi_Dim_Sets_Tl
2247 ( p_commit => FND_API.G_FALSE
2248 , p_Dim_Set_Rec => l_bsc_dimset_rec
2249 , x_return_status => x_return_status
2250 , x_msg_count => x_msg_count
2251 , x_msg_data => x_msg_data
2252 );
2253 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2254 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Update_Bsc_Kpi_Dim_Sets_Tl');
2255 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2256 END IF;
2257 -- START: Granular Locking, Change time stamp of Dim Set & KPI
2258 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
2259 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2260 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2261 , x_return_status => x_return_status
2262 , x_msg_count => x_msg_count
2263 , x_msg_data => x_msg_data
2264 );
2265 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2266 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET');
2267 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2268 END IF;
2269 -- END: Granular Locking, Change time stamp of Dim Set & KPI
2270 END LOOP;
2271
2272 IF (p_commit = FND_API.G_TRUE) THEN
2273 COMMIT;
2274 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
2275 END IF;
2276 x_return_status := FND_API.G_RET_STS_SUCCESS;
2277 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set procedure');
2278 EXCEPTION
2279 WHEN FND_API.G_EXC_ERROR THEN
2280 ROLLBACK TO UpdateBSCDimSetPMD;
2281 IF (x_msg_data IS NULL) THEN
2282 FND_MSG_PUB.Count_And_Get
2283 ( p_encoded => FND_API.G_FALSE
2284 , p_count => x_msg_count
2285 , p_data => x_msg_data
2286 );
2287 END IF;
2288 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
2289 x_return_status := FND_API.G_RET_STS_ERROR;
2290 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2291 ROLLBACK TO UpdateBSCDimSetPMD;
2292 IF (x_msg_data IS NULL) THEN
2293 FND_MSG_PUB.Count_And_Get
2294 ( p_encoded => FND_API.G_FALSE
2295 , p_count => x_msg_count
2296 , p_data => x_msg_data
2297 );
2298 END IF;
2299 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2300 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
2301 WHEN NO_DATA_FOUND THEN
2302 ROLLBACK TO UpdateBSCDimSetPMD;
2303 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2304 IF (x_msg_data IS NOT NULL) THEN
2305 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2306 ELSE
2307 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2308 END IF;
2309 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
2310 WHEN OTHERS THEN
2311 ROLLBACK TO UpdateBSCDimSetPMD;
2312 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2313 IF (x_msg_data IS NOT NULL) THEN
2314 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2315 ELSE
2316 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
2317 END IF;
2318 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
2319 END Update_Dim_Set;
2320
2321 /*********************************************************************************
2322 API to find out pure PMF Dim Groups, i.e. Indicator not created for
2323 AG Report, and containing only PMF type Dim Objects, imported from
2324 measures. Added for bug 5151997
2325 *********************************************************************************/
2326
2327 FUNCTION is_Pure_Pmf_Dim_Grp
2328 (
2329 p_Indicator IN NUMBER
2330 , p_DimSetId IN NUMBER
2331
2332 )
2333 RETURN BOOLEAN IS
2334
2335 l_count NUMBER;
2336 l_kpi_sname BSC_KPIS_B.SHORT_NAME%TYPE;
2337
2338 CURSOR c_ind_type IS
2339 SELECT short_name
2340 FROM bsc_kpis_b
2341 WHERE indicator = p_Indicator;
2342
2343 BEGIN
2344
2345 --Source of Dim Levels present in this Dim Set should not be BSC
2346
2347 SELECT count(1)
2348 INTO l_count
2349 FROM BSC_KPI_DIM_LEVELS_VL
2350 WHERE INDICATOR = p_Indicator
2351 AND DIM_SET_ID = p_DimSetId
2352 AND LEVEL_SOURCE = BSC_BIS_MEASURE_PUB.c_BSC;
2353
2354 IF (c_ind_type%ISOPEN) THEN
2355 CLOSE c_ind_type;
2356 END IF;
2357
2358 /*
2359 Short name in BSC_KPIS_B should be null for Objectives created in Objective Designer, This
2360 filters Objectives for AG report.
2361 */
2362 OPEN c_ind_type;
2363 FETCH c_ind_type INTO l_kpi_sname;
2364 CLOSE c_ind_type;
2365
2366 IF ((l_count = 0) AND (l_kpi_sname IS NULL)) THEN
2367 RETURN TRUE;
2368 END IF;
2369
2370 RETURN FALSE;
2371
2372 EXCEPTION
2373 WHEN OTHERS THEN
2374 IF (c_ind_type%ISOPEN) THEN
2375 CLOSE c_ind_type;
2376 END IF;
2377 RETURN FALSE;
2378
2379 END is_Pure_Pmf_Dim_Grp;
2380
2381 /*********************************************************************************
2382 DELETE DIMENSION-SETS
2383 *********************************************************************************/
2384 PROCEDURE Delete_Dim_Set
2385 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2386 , p_kpi_id IN NUMBER
2387 , p_dim_set_id IN NUMBER
2388 , x_return_status OUT NOCOPY VARCHAR2
2389 , x_msg_count OUT NOCOPY NUMBER
2390 , x_msg_data OUT NOCOPY VARCHAR2
2391 )IS
2392 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
2393 l_count NUMBER := 0;
2394
2395 CURSOR c_kpi_ids IS
2396 SELECT indicator
2397 FROM BSC_KPIS_B
2398 WHERE Source_Indicator = p_kpi_id
2399 AND Prototype_Flag <> 2;
2400 BEGIN
2401 SAVEPOINT DeleteBSCDimSetPMD;
2402 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set procedure');
2403 FND_MSG_PUB.Initialize;
2404 x_return_status := FND_API.G_RET_STS_SUCCESS;
2405 IF (p_kpi_id IS NULL) THEN
2406 FND_MESSAGE.SET_NAME('BSC', 'BSC_REQ_FIELD_MISSING');
2407 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
2408 FND_MSG_PUB.ADD;
2409 RAISE FND_API.G_EXC_ERROR;
2410 END IF;
2411 IF (p_dim_set_id IS NULL) THEN
2412 FND_MESSAGE.SET_NAME('BSC', 'BSC_REQ_FIELD_MISSING');
2413 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
2414 FND_MSG_PUB.ADD;
2415 RAISE FND_API.G_EXC_ERROR;
2416 END IF;
2417 IF (p_dim_set_id = 0) THEN
2418 FND_MESSAGE.SET_NAME('BSC', 'BSC_DIM_SET_0_NO_DELETE');
2419 FND_MSG_PUB.ADD;
2420 RAISE FND_API.G_EXC_ERROR;
2421 END IF;
2422 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --number
2423 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2424 -- Verify that this is not a Shared KPI.
2425 SELECT share_flag
2426 INTO l_count
2427 FROM BSC_KPIS_B
2428 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id ;
2429 IF (l_count = 2) THEN
2430 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
2431 --FND_MESSAGE.SET_TOKEN('BSC_KPI', l_bsc_dimset_rec.Bsc_Kpi_Id);
2432 FND_MSG_PUB.ADD;
2433 RAISE FND_API.G_EXC_ERROR;
2434 END IF;
2435 SELECT COUNT(*) INTO l_count
2436 FROM BSC_KPI_DIM_SETS_VL
2437 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id;
2438 IF (l_count = 1) THEN
2439 FND_MESSAGE.SET_NAME('BSC','BSC_D_KPI_AT_LEAST_1_DS');
2440 FND_MSG_PUB.ADD;
2441 RAISE FND_API.G_EXC_ERROR;
2442 END IF;
2443 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id; --number
2444 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Id <'||l_bsc_dimset_rec.Bsc_Dim_Set_Id||'>');
2445 -- START Granular Locking
2446 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2447 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2448 , p_Dim_Set_Id => p_dim_set_id
2449 , p_time_stamp => NULL
2450 , x_return_status => x_return_status
2451 , x_msg_count => x_msg_count
2452 , x_msg_data => x_msg_data
2453 );
2454 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2455 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Delete_Dim_Set');
2456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2457 END IF;
2458 -- END Granular Locking
2459 -- Aditya added for Incremental Changes
2460 -- Deleting the Dimension set involves a structural change to be captured by Optimizer.
2461 -- The following changes the action_flag for the currently affected KPI only
2462 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
2463 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
2464 BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
2465 END IF;
2466 BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset
2467 ( p_commit => FND_API.G_FALSE
2468 , p_Dim_Set_Rec => l_bsc_dimset_rec
2469 , x_return_status => x_return_status
2470 , x_msg_count => x_msg_count
2471 , x_msg_data => x_msg_data
2472 );
2473 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2474 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.DELETE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset <'||x_msg_data||'>');
2475 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2476 END IF;
2477 --repeat the steps above for all the shared indicators
2478 FOR cd IN c_kpi_ids LOOP
2479 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
2480 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2481 SELECT COUNT(*) INTO l_count
2482 FROM BSC_KPI_DIM_GROUPS
2483 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
2484 AND dim_set_id = p_dim_set_id;
2485 IF (l_count <> 0) THEN
2486 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2487 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2488 , p_Dim_Set_Id => p_dim_set_id
2489 , p_time_stamp => NULL
2490 , x_return_status => x_return_status
2491 , x_msg_count => x_msg_count
2492 , x_msg_data => x_msg_data
2493 );
2494 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2495 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Delete_Dim_Set');
2496 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2497 END IF;
2498 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
2499 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
2500 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
2501 END IF;
2502 BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset
2503 ( p_commit => FND_API.G_FALSE
2504 , p_Dim_Set_Rec => l_bsc_dimset_rec
2505 , x_return_status => x_return_status
2506 , x_msg_count => x_msg_count
2507 , x_msg_data => x_msg_data
2508 );
2509 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2510 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.DELETE_DIM_SET Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset <'||x_msg_data||'>');
2511 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2512 END IF;
2513 END IF;
2514 END LOOP;
2515 IF (p_commit = FND_API.G_TRUE) THEN
2516 COMMIT;
2517 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
2518 END IF;
2519 x_return_status := FND_API.G_RET_STS_SUCCESS;
2520 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set procedure');
2521 EXCEPTION
2522 WHEN FND_API.G_EXC_ERROR THEN
2523 ROLLBACK TO DeleteBSCDimSetPMD;
2524 IF (x_msg_data IS NULL) THEN
2525 FND_MSG_PUB.Count_And_Get
2526 ( p_encoded => FND_API.G_FALSE
2527 , p_count => x_msg_count
2528 , p_data => x_msg_data
2529 );
2530 END IF;
2531 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
2532 x_return_status := FND_API.G_RET_STS_ERROR;
2533 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2534 ROLLBACK TO DeleteBSCDimSetPMD;
2535 IF (x_msg_data IS NULL) THEN
2536 FND_MSG_PUB.Count_And_Get
2537 ( p_encoded => FND_API.G_FALSE
2538 , p_count => x_msg_count
2539 , p_data => x_msg_data
2540 );
2541 END IF;
2542 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2543 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
2544 WHEN NO_DATA_FOUND THEN
2545 ROLLBACK TO DeleteBSCDimSetPMD;
2546 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2547 IF (x_msg_data IS NOT NULL) THEN
2548 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set ';
2549 ELSE
2550 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set ';
2551 END IF;
2552 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
2553 WHEN OTHERS THEN
2554 ROLLBACK TO DeleteBSCDimSetPMD;
2555 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2556 IF (x_msg_data IS NOT NULL) THEN
2557 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set ';
2558 ELSE
2559 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set ';
2560 END IF;
2561 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
2562 END Delete_Dim_Set;
2563 /*********************************************************************************
2564 ASSIGN DIMENSION TO DIMENSION-SETS
2565 *********************************************************************************/
2566 PROCEDURE Assign_Dims_To_Dim_Set
2567 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2568 , p_kpi_id IN NUMBER
2569 , p_dim_set_id IN NUMBER
2570 , p_dim_short_names IN VARCHAR2
2571 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
2572 , x_return_status OUT NOCOPY VARCHAR2
2573 , x_msg_count OUT NOCOPY NUMBER
2574 , x_msg_data OUT NOCOPY VARCHAR2
2575 )IS
2576 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
2577 l_index NUMBER := 0;
2578 l_count NUMBER := 0;
2579 l_dim_short_names VARCHAR2(32000);
2580 l_dim_short_name BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
2581 l_temp_var VARCHAR2(32000);
2582 l_kpi_flag_change BOOLEAN := FALSE;
2583 l_level_table_names BSC_EDIT_VLIST;
2584 l_key_item_values FND_TABLE_OF_NUMBER;
2585 l_key_item NUMBER;
2586
2587 CURSOR c_kpi_ids IS
2588 SELECT indicator
2589 FROM BSC_KPIS_B
2590 WHERE Source_Indicator = p_kpi_id
2591 AND Prototype_Flag <> 2;
2592
2593 CURSOR c_Dim_Levels IS
2594 SELECT
2595 level_table_name
2596 FROM
2597 bsc_kpi_dim_levels_b
2598 WHERE
2599 indicator = p_kpi_id
2600 AND dim_set_id = p_dim_set_id
2601 INTERSECT
2602 SELECT
2603 column_value level_table_name
2604 FROM
2605 TABLE(CAST(l_level_table_names AS BSC_EDIT_VLIST));
2606 BEGIN
2607 SAVEPOINT AssBSCDimToDSetPMD;
2608 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set procedure');
2609 FND_MSG_PUB.Initialize;
2610 x_return_status := FND_API.G_RET_STS_SUCCESS;
2611 IF (p_kpi_id IS NULL) THEN
2612 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2613 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
2614 FND_MSG_PUB.ADD;
2615 RAISE FND_API.G_EXC_ERROR;
2616 END IF;
2617 IF (p_dim_set_id IS NULL) THEN
2618 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2619 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
2620 FND_MSG_PUB.ADD;
2621 RAISE FND_API.G_EXC_ERROR;
2622 END IF;
2623 SELECT
2624 level_table_name
2625 ,default_key_value
2626 BULK COLLECT INTO
2627 l_level_table_names,
2628 l_key_item_values
2629 FROM
2630 bsc_kpi_dim_levels_b
2631 WHERE
2632 indicator = p_kpi_id
2633 AND dim_set_id = p_dim_set_id
2634 AND default_key_value IS NOT NULL;
2635
2636 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --varchar2(10)
2637 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2638 -- Verify that this is not a Shared KPI.
2639 SELECT share_flag
2640 INTO l_count
2641 FROM BSC_KPIS_B
2642 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id ;
2643 IF (l_count <> 2) THEN
2644 --BSC_KPI_DIM_LEVELS_B.indicator
2645 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id; --number
2646 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Id <'||l_bsc_dimset_rec.Bsc_Dim_Set_Id||'>');
2647 -- BSC_KPI_DIM_LEVELS_TL.total_disp_name
2648 l_bsc_dimset_rec.Bsc_New_Dset := 'N'; --varchar2(45)
2649 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_New_Dset <'||l_bsc_dimset_rec.Bsc_New_Dset||'>');
2650 l_bsc_dimset_rec.Bsc_Action := 'RESET';
2651 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Action <'||l_bsc_dimset_rec.Bsc_Action||'>');
2652 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
2653 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
2654 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
2655 IF (l_count = 0) THEN
2656 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
2657 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
2658 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
2659 FND_MSG_PUB.ADD;
2660 RAISE FND_API.G_EXC_ERROR;
2661 END IF;
2662
2663 --remove the default entry 'XXX' from BSC_KPI_DIM_LEVELS_B if exists
2664 BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object
2665 ( p_commit => FND_API.G_FALSE
2666 , p_kpi_id => p_kpi_id
2667 , p_dim_set_id => p_dim_set_id
2668 , x_return_status => x_return_status
2669 , x_msg_count => x_msg_count
2670 , x_msg_data => x_msg_data
2671 );
2672 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2673 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object');
2674 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2675 END IF;
2676
2677 l_temp_var := p_dim_short_names;
2678 l_dim_short_names := NULL;
2679 WHILE (is_more( p_dim_short_names => l_temp_var
2680 , p_dim_short_name => l_dim_short_name)
2681 ) LOOP
2682 SELECT COUNT(*) INTO l_count
2683 FROM BSC_SYS_DIM_GROUPS_VL
2684 WHERE short_name = l_dim_short_name;
2685 IF (l_count = 0) THEN
2686 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
2687 FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME', l_dim_short_name);
2688 FND_MSG_PUB.ADD;
2689 RAISE FND_API.G_EXC_ERROR;
2690 END IF;
2691
2692 SELECT COUNT(*) INTO l_count
2693 FROM BSC_KPI_DIM_GROUPS
2694 WHERE dim_group_id = (SELECT dim_group_id FROM BSC_SYS_DIM_GROUPS_VL WHERE Short_Name = l_dim_short_name)
2695 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
2696 AND indicator = l_bsc_dimset_rec.Bsc_Kpi_Id;
2697 IF (l_count = 0) THEN
2698 IF (l_dim_short_names IS NULL) THEN
2699 l_dim_short_names := l_dim_short_name;
2700 l_kpi_flag_change := TRUE;
2701 ELSE
2702 l_dim_short_names := l_dim_short_names||', '||l_dim_short_name;
2703 END IF;
2704 END IF;
2705 END LOOP;
2706
2707 IF (l_dim_short_names IS NOT NULL) THEN
2708 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2709 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2710 , p_Dim_Set_Id => l_bsc_dimset_rec.bsc_dim_set_id
2711 , p_time_stamp => p_time_stamp
2712 , x_return_status => x_return_status
2713 , x_msg_count => x_msg_count
2714 , x_msg_data => x_msg_data
2715 );
2716 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2717 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Assign_Dims_To_Dim_Set');
2718 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2719 END IF;
2720 -- BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
2721 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
2722 ( p_commit => FND_API.G_FALSE
2723 , p_kpi_id => p_kpi_id
2724 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2725 , p_dim_short_names => l_dim_short_names
2726 , x_return_status => x_return_status
2727 , x_msg_count => x_msg_count
2728 , x_msg_data => x_msg_data
2729 );
2730 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2731 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
2732 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2733 END IF;
2734 -- START: Granular Locking, Change time stamp of Dim Set & KPI
2735 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
2736 ( p_Kpi_Id => p_Kpi_Id
2737 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2738 , x_return_status => x_return_status
2739 , x_msg_count => x_msg_count
2740 , x_msg_data => x_msg_data
2741 );
2742 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2743 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET - Assign_Dims_To_Dim_Set');
2744 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2745 END IF;
2746 -- END: Granular Locking, Change time stamp of Dim Set & KPI
2747 --repeat the steps above for all the shared indicators
2748 FOR cd IN c_kpi_ids LOOP
2749 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
2750 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
2751 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
2752 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
2753 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
2754 IF (l_count = 0) THEN
2755 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
2756 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
2757 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
2758 FND_MSG_PUB.ADD;
2759 RAISE FND_API.G_EXC_ERROR;
2760 END IF;
2761 -- START Granular Locking
2762 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
2763 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2764 , p_Dim_Set_Id => l_bsc_dimset_rec.bsc_dim_set_id
2765 , p_time_stamp => NULL -- Should not pass time_stamp here
2766 , x_return_status => x_return_status
2767 , x_msg_count => x_msg_count
2768 , x_msg_data => x_msg_data
2769 );
2770 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2771 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Assign_Dims_To_Dim_Set');
2772 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2773 END IF;
2774 --BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
2775 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset
2776 ( p_commit => FND_API.G_FALSE
2777 , p_kpi_id => l_bsc_dimset_rec.Bsc_Kpi_Id
2778 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2779 , p_dim_short_names => l_dim_short_names
2780 , x_return_status => x_return_status
2781 , x_msg_count => x_msg_count
2782 , x_msg_data => x_msg_data
2783 );
2784 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2785 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
2786 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2787 END IF;
2788 -- START: Granular Locking, Change time stamp of Dim Set & KPI
2789 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
2790 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
2791 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
2792 , x_return_status => x_return_status
2793 , x_msg_count => x_msg_count
2794 , x_msg_data => x_msg_data
2795 );
2796 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2797 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET - Assign_Dims_To_Dim_Set');
2798 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2799 END IF;
2800 END LOOP;
2801 END IF;
2802 BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets
2803 ( p_commit => FND_API.G_FALSE
2804 , p_kpi_id => p_kpi_id
2805 , p_dim_set_id => p_dim_set_id
2806 , p_dim_short_names => p_dim_short_names
2807 , p_kpi_flag_change => l_kpi_flag_change
2808 , x_return_status => x_return_status
2809 , x_msg_count => x_msg_count
2810 , x_msg_data => x_msg_data
2811 );
2812 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2813 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets');
2814 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2815 END IF;
2816 BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object
2817 ( p_commit => FND_API.G_FALSE
2818 , p_kpi_id => p_kpi_id
2819 , p_dim_set_id => p_dim_set_id
2820 , x_return_status => x_return_status
2821 , x_msg_count => x_msg_count
2822 , x_msg_data => x_msg_data
2823 );
2824 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2825 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Create_Default_Kpi_Dim_Object');
2826 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2827 END IF;
2828 END IF;
2829
2830 FOR cd IN c_Dim_Levels LOOP
2831 l_key_item := NULL;
2832 FOR i IN 1..l_level_table_names.COUNT LOOP
2833 IF cd.level_table_name = l_level_table_names(i) THEN
2834 l_key_item := l_key_item_values(i);
2835 EXIT;
2836 END IF;
2837 END LOOP;
2838 IF l_key_item IS NOT NULL THEN
2839 Set_Key_Item_Value (
2840 p_indicator => p_kpi_id
2841 , p_dim_set_id => p_dim_set_id
2842 , p_level_table_name => cd.level_table_name
2843 , p_key_value => l_key_item
2844 , x_return_status => x_return_status
2845 , x_msg_count => x_msg_count
2846 , x_msg_data => x_msg_data
2847 );
2848 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2849 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2850 END IF;
2851 END IF;
2852 END LOOP;
2853
2854 IF (p_commit = FND_API.G_TRUE) THEN
2855 COMMIT;
2856 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
2857 END IF;
2858 x_return_status := FND_API.G_RET_STS_SUCCESS;
2859 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set procedure');
2860 EXCEPTION
2861 WHEN FND_API.G_EXC_ERROR THEN
2862 IF (x_msg_data IS NULL) THEN
2863 FND_MSG_PUB.Count_And_Get
2864 ( p_encoded => FND_API.G_FALSE
2865 , p_count => x_msg_count
2866 , p_data => x_msg_data
2867 );
2868 END IF;
2869 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
2870 x_return_status := FND_API.G_RET_STS_ERROR;
2871 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2872 IF (x_msg_data IS NULL) THEN
2873 FND_MSG_PUB.Count_And_Get
2874 ( p_encoded => FND_API.G_FALSE
2875 , p_count => x_msg_count
2876 , p_data => x_msg_data
2877 );
2878 END IF;
2879 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2880 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
2881 WHEN NO_DATA_FOUND THEN
2882 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2883 IF (x_msg_data IS NOT NULL) THEN
2884 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set ';
2885 ELSE
2886 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set ';
2887 END IF;
2888 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
2889 WHEN OTHERS THEN
2890 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2891 IF (x_msg_data IS NOT NULL) THEN
2892 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set ';
2893 ELSE
2894 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set ';
2895 END IF;
2896 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
2897 END Assign_Dims_To_Dim_Set;
2898
2899 /*********************************************************************************
2900 ASSIGN DIMENSION TO DIMENSION-SETS
2901 *********************************************************************************/
2902 PROCEDURE Assign_Unassign_Dimensions
2903 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2904 , p_kpi_id IN NUMBER
2905 , p_dim_set_id IN NUMBER
2906 , p_assign_dim_names IN VARCHAR2
2907 , p_unassign_dim_names IN VARCHAR2
2908 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
2909 , x_return_status OUT NOCOPY VARCHAR2
2910 , x_msg_count OUT NOCOPY NUMBER
2911 , x_msg_data OUT NOCOPY VARCHAR2
2912 )IS
2913 l_unassigns VARCHAR2(32000);
2914 l_assigns VARCHAR2(32000);
2915 l_unassign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
2916 l_assign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
2917
2918 l_unassign_dim_objs VARCHAR2(32000);
2919 l_temp VARCHAR2(32000);
2920
2921 l_flag BOOLEAN;
2922 l_level_table_names BSC_EDIT_VLIST;
2923 l_key_item_values FND_TABLE_OF_NUMBER;
2924 l_key_item NUMBER;
2925
2926 CURSOR c_Dim_Levels IS
2927 SELECT
2928 level_table_name
2929 FROM
2930 bsc_kpi_dim_levels_b
2931 WHERE
2932 indicator = p_kpi_id
2933 AND dim_set_id = p_dim_set_id
2934 INTERSECT
2935 SELECT
2936 column_value level_table_name
2937 FROM
2938 TABLE(CAST(l_level_table_names AS BSC_EDIT_VLIST));
2939
2940
2941 BEGIN
2942 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions procedure');
2943 FND_MSG_PUB.Initialize;
2944 x_return_status := FND_API.G_RET_STS_SUCCESS;
2945 IF (p_kpi_id IS NULL) THEN
2946 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2947 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
2948 FND_MSG_PUB.ADD;
2949 RAISE FND_API.G_EXC_ERROR;
2950 END IF;
2951 IF (p_dim_set_id IS NULL) THEN
2952 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2953 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
2954 FND_MSG_PUB.ADD;
2955 RAISE FND_API.G_EXC_ERROR;
2956 END IF;
2957
2958 SELECT
2959 level_table_name
2960 ,default_key_value
2961 BULK COLLECT INTO
2962 l_level_table_names,
2963 l_key_item_values
2964 FROM
2965 bsc_kpi_dim_levels_b
2966 WHERE
2967 indicator = p_kpi_id
2968 AND dim_set_id = p_dim_set_id
2969 AND default_key_value IS NOT NULL;
2970
2971 IF (p_unassign_dim_names IS NOT NULL) THEN
2972 l_unassigns := p_unassign_dim_names;
2973 WHILE (is_more( p_dim_short_names => l_unassigns
2974 , p_dim_short_name => l_unassign)
2975 ) LOOP
2976 l_assigns := p_assign_dim_names;
2977 l_flag := TRUE;
2978 WHILE (is_more( p_dim_short_names => l_assigns
2979 , p_dim_short_name => l_assign)
2980 ) LOOP
2981 IF(l_unassign = l_assign) THEN
2982 l_flag := FALSE;
2983 EXIT;
2984 END IF;
2985 END LOOP;
2986 IF(l_flag) THEN
2987 IF (l_unassign_dim_objs IS NULL) THEN
2988 l_unassign_dim_objs := l_unassign;
2989 ELSE
2990 l_unassign_dim_objs := l_unassign_dim_objs||', '||l_unassign;
2991 END IF;
2992 END IF;
2993 END LOOP;
2994 IF (l_unassign_dim_objs IS NOT NULL) THEN
2995 BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set
2996 ( p_commit => FND_API.G_FALSE
2997 , p_kpi_id => p_kpi_id
2998 , p_dim_set_id => p_dim_set_id
2999 , p_dim_short_names => l_unassign_dim_objs
3000 , p_time_stamp => p_time_stamp
3001 , x_return_status => x_return_status
3002 , x_msg_count => x_msg_count
3003 , x_msg_data => x_msg_data
3004 );
3005 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3006 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions Failed: at BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set');
3007 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3008 END IF;
3009 END IF;
3010 END IF;
3011 BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set
3012 ( p_commit => FND_API.G_FALSE
3013 , p_kpi_id => p_kpi_id
3014 , p_dim_set_id => p_dim_set_id
3015 , p_dim_short_names => p_assign_dim_names
3016 , p_time_stamp => p_time_stamp
3017 , x_return_status => x_return_status
3018 , x_msg_count => x_msg_count
3019 , x_msg_data => x_msg_data
3020 );
3021 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3022 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions Failed: at BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set');
3023 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3024 END IF;
3025 --Restore old key item values if any are set
3026 FOR cd IN c_Dim_Levels LOOP
3027 l_key_item := NULL;
3028 FOR i IN 1..l_level_table_names.COUNT LOOP
3029 IF cd.level_table_name = l_level_table_names(i) THEN
3030 l_key_item := l_key_item_values(i);
3031 EXIT;
3032 END IF;
3033 END LOOP;
3034 IF l_key_item IS NOT NULL THEN
3035 Set_Key_Item_Value (
3036 p_indicator => p_kpi_id
3037 , p_dim_set_id => p_dim_set_id
3038 , p_level_table_name => cd.level_table_name
3039 , p_key_value => l_key_item
3040 , x_return_status => x_return_status
3041 , x_msg_count => x_msg_count
3042 , x_msg_data => x_msg_data
3043 );
3044 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3045 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3046 END IF;
3047 END IF;
3048 END LOOP;
3049 /*************************************************************
3050 List Button validation.For a list button the condition is that
3051 all the dimesnion sets within the tab (irrespective of whether they are
3052 in the same KPI or different KPIs) the dimesnion objects should be the same
3053 So when a dimension set is being updated it has to be validate that
3054 it contains all the common dimension objects.
3055 The validation is done for shared kpis also internally.
3056 /************************************************************/
3057 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
3058 (
3059 p_Kpi_Id => p_kpi_id
3060 , p_Dim_Level_Id => NULL
3061 , x_return_status => x_return_status
3062 , x_msg_count => x_msg_count
3063 , x_msg_data => x_msg_data
3064 );
3065 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3066 --dbms_output.PUT_LINE('BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button Failed: BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set');
3067 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3068 END IF;
3069
3070 IF (p_commit = FND_API.G_TRUE) THEN
3071 COMMIT;
3072 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
3073 END IF;
3074 x_return_status := FND_API.G_RET_STS_SUCCESS;
3075 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions procedure');
3076 EXCEPTION
3077 WHEN FND_API.G_EXC_ERROR THEN
3078 IF (x_msg_data IS NULL) THEN
3079 FND_MSG_PUB.Count_And_Get
3080 ( p_encoded => FND_API.G_FALSE
3081 , p_count => x_msg_count
3082 , p_data => x_msg_data
3083 );
3084 END IF;
3085 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
3086 x_return_status := FND_API.G_RET_STS_ERROR;
3087 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3088 IF (x_msg_data IS NULL) THEN
3089 FND_MSG_PUB.Count_And_Get
3090 ( p_encoded => FND_API.G_FALSE
3091 , p_count => x_msg_count
3092 , p_data => x_msg_data
3093 );
3094 END IF;
3095 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3096 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
3097 WHEN NO_DATA_FOUND THEN
3098 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3099 IF (x_msg_data IS NOT NULL) THEN
3100 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions ';
3101 ELSE
3102 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions ';
3103 END IF;
3104 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
3105 WHEN OTHERS THEN
3106 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3107 IF (x_msg_data IS NOT NULL) THEN
3108 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions ';
3109 ELSE
3110 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_Unassign_Dimensions ';
3111 END IF;
3112 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
3113 END Assign_Unassign_Dimensions;
3114
3115 /*********************************************************************************
3116 REMOVE DIMENSION FROM DIMENSION-SETS
3117 *********************************************************************************/
3118 PROCEDURE Unassign_Dims_From_Dim_Set
3119 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
3120 , p_kpi_id IN NUMBER
3121 , p_dim_set_id IN NUMBER
3122 , p_dim_short_names IN VARCHAR2
3123 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
3124 , x_return_status OUT NOCOPY VARCHAR2
3125 , x_msg_count OUT NOCOPY NUMBER
3126 , x_msg_data OUT NOCOPY VARCHAR2
3127 )IS
3128 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
3129 l_count NUMBER := 0;
3130 l_dim_short_names VARCHAR2(32000);
3131 l_dim_short_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
3132 l_kpi_flag_change BOOLEAN := FALSE;
3133
3134 CURSOR c_kpi_ids IS
3135 SELECT indicator
3136 FROM BSC_KPIS_B
3137 WHERE Source_Indicator = p_kpi_id
3138 AND Prototype_Flag <> 2;
3139
3140 CURSOR c_dim_index IS
3141 SELECT B.Short_Name
3142 FROM BSC_KPI_DIM_GROUPS A
3143 , BSC_SYS_DIM_GROUPS_VL B
3144 WHERE A.Indicator = p_kpi_id
3145 AND A.Dim_Set_Id = p_dim_set_id
3146 AND A.Dim_Group_ID = B.Dim_Group_ID
3147 ORDER BY A.Dim_Group_Index;
3148 BEGIN
3149 SAVEPOINT UnAssBSCDimToDSetPMD;
3150 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set procedure');
3151 FND_MSG_PUB.Initialize;
3152 x_return_status := FND_API.G_RET_STS_SUCCESS;
3153 IF (p_kpi_id IS NULL) THEN
3154 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3155 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
3156 FND_MSG_PUB.ADD;
3157 RAISE FND_API.G_EXC_ERROR;
3158 END IF;
3159 IF (p_dim_set_id IS NULL) THEN
3160 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3161 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
3162 FND_MSG_PUB.ADD;
3163 RAISE FND_API.G_EXC_ERROR;
3164 END IF;
3165 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --number
3166 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
3167
3168 -- Verify that this is not a Shared KPI.
3169 SELECT share_flag
3170 INTO l_count
3171 FROM BSC_KPIS_B
3172 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id;
3173 IF (l_count = 2) THEN
3174 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
3175 FND_MSG_PUB.ADD;
3176 RAISE FND_API.G_EXC_ERROR;
3177 END IF;
3178 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id; --number
3179 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Id <'||l_bsc_dimset_rec.Bsc_Dim_Set_Id||'>');
3180
3181 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
3182 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3183 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
3184 IF (l_count = 0) THEN
3185 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
3186 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
3187 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
3188 FND_MSG_PUB.ADD;
3189 RAISE FND_API.G_EXC_ERROR;
3190 END IF;
3191 -- START Granular Locking
3192 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
3193 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
3194 , p_Dim_Set_Id => p_dim_set_id
3195 , p_time_stamp => p_time_stamp
3196 , x_return_status => x_return_status
3197 , x_msg_count => x_msg_count
3198 , x_msg_data => x_msg_data
3199 );
3200 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3201 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Unassign_Dims_From_Dim_Set');
3202 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3203 END IF;
3204 -- END Granular Locking
3205 IF(p_dim_short_names IS NOT NULL) THEN
3206 l_count := 0;
3207 l_dim_short_names := p_dim_short_names;
3208 -- Aditya added for Incremental Changes
3209 -- Deleting a Dimension from a Dimension Set should be flagged as a Strucutural change
3210 -- for the KPI under consideration only.
3211 --BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
3212 WHILE (Is_More( p_dim_short_names => l_dim_short_names
3213 , p_dim_short_name => l_dim_short_name)
3214 ) LOOP
3215 SELECT COUNT(*) INTO l_count
3216 FROM BSC_SYS_DIM_GROUPS_VL A
3217 , BSC_KPI_DIM_GROUPS B
3218 WHERE A.short_name = l_dim_short_name
3219 AND A.Dim_Group_Id = B.Dim_Group_Id
3220 AND B.Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3221 AND B.Dim_Set_Id = p_dim_set_id;
3222 IF (l_count <> 0) THEN
3223 SELECT dim_group_id
3224 INTO l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id
3225 FROM BSC_SYS_DIM_GROUPS_VL
3226 WHERE short_name = l_dim_short_name;
3227 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id <'||l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id||'>');
3228 l_kpi_flag_change := TRUE;
3229 BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset
3230 ( p_commit => FND_API.G_FALSE
3231 , p_Dim_Set_Rec => l_bsc_dimset_rec
3232 , p_create_Dim_Lev_Grp => FALSE
3233 , x_return_status => x_return_status
3234 , x_msg_count => x_msg_count
3235 , x_msg_data => x_msg_data
3236 );
3237 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3238 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset <'||x_msg_data||'>');
3239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3240 END IF;
3241 END IF;
3242 END LOOP;
3243 END IF;
3244
3245 -- START: Granular Locking, Change time stamp of Dim Set & KPI
3246 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
3247 ( p_Kpi_Id => p_Kpi_Id
3248 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
3249 , x_return_status => x_return_status
3250 , x_msg_count => x_msg_count
3251 , x_msg_data => x_msg_data
3252 );
3253 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3254 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set Failed: at BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET');
3255 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3256 END IF;
3257 --repeat the steps above for all the shared indicators
3258 FOR cd IN c_kpi_ids LOOP
3259 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
3260 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
3261 IF(p_dim_short_names IS NOT NULL) THEN
3262 l_count := 0;
3263 l_dim_short_names := p_dim_short_names;
3264 -- Aditya added for Incremental Changes
3265 --BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
3266 WHILE (Is_More( p_dim_short_names => l_dim_short_names
3267 , p_dim_short_name => l_dim_short_name)
3268 ) LOOP
3269 SELECT COUNT(*) INTO l_count
3270 FROM BSC_SYS_DIM_GROUPS_VL A
3271 , BSC_KPI_DIM_GROUPS B
3272 WHERE A.short_name = l_dim_short_name
3273 AND A.Dim_Group_Id = B.Dim_Group_Id
3274 AND B.Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3275 AND B.Dim_Set_Id = p_dim_set_id;
3276 IF (l_count <> 0) THEN
3277 SELECT dim_group_id
3278 INTO l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id
3279 FROM BSC_SYS_DIM_GROUPS_VL
3280 WHERE short_name = l_dim_short_name;
3281 -- START Granular Locking
3282 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
3283 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
3284 , p_Dim_Set_Id => p_dim_set_id
3285 , p_time_stamp => NULL -- should not pass time_stamp here
3286 , x_return_status => x_return_status
3287 , x_msg_count => x_msg_count
3288 , x_msg_data => x_msg_data
3289 );
3290 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3291 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Unassign_Dims_From_Dim_Set');
3292 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3293 END IF;
3294 -- END Granular Locking
3295 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id <'||l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id||'>');
3296 BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset
3297 ( p_commit => FND_API.G_FALSE
3298 , p_Dim_Set_Rec => l_bsc_dimset_rec
3299 , p_create_Dim_Lev_Grp => FALSE
3300 , x_return_status => x_return_status
3301 , x_msg_count => x_msg_count
3302 , x_msg_data => x_msg_data
3303 );
3304 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3305 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Group_In_Dset <'||x_msg_data||'>');
3306 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3307 END IF;
3308 END IF;
3309 END LOOP;
3310 -- START: Granular Locking, Change time stamp of Dim Set & KPI
3311 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
3312 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
3313 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
3314 , x_return_status => x_return_status
3315 , x_msg_count => x_msg_count
3316 , x_msg_data => x_msg_data
3317 );
3318 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3319 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET - Unassign_Dims_From_Dim_Set');
3320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3321 END IF;
3322 -- END: Granular Locking, Change time stamp of Dim Set & KPI
3323 END IF;
3324 END LOOP;
3325 IF (p_dim_short_names IS NOT NULL) THEN
3326 FOR cd IN c_dim_index LOOP
3327 IF (l_dim_short_names IS NULL) THEN
3328 l_dim_short_names := cd.Short_Name;
3329 ELSE
3330 l_dim_short_names := l_dim_short_names||', '||cd.Short_Name;
3331 END IF;
3332 END LOOP;
3333 BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets
3334 ( p_commit => FND_API.G_FALSE
3335 , p_kpi_id => p_kpi_id
3336 , p_dim_set_id => p_dim_set_id
3337 , p_dim_short_names => l_dim_short_names
3338 , p_kpi_flag_change => l_kpi_flag_change
3339 , x_return_status => x_return_status
3340 , x_msg_count => x_msg_count
3341 , x_msg_data => x_msg_data
3342 );
3343 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3344 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Order_Dims_In_DSets');
3345 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3346 END IF;
3347 END IF;
3348 BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object
3349 ( p_commit => FND_API.G_FALSE
3350 , p_kpi_id => p_kpi_id
3351 , p_dim_set_id => p_dim_set_id
3352 , x_return_status => x_return_status
3353 , x_msg_count => x_msg_count
3354 , x_msg_data => x_msg_data
3355 );
3356
3357 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3358 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set Failed: at BSC_DIMENSION_SETS_PUB.Create_Default_Kpi_Dim_Object');
3359 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3360 END IF;
3361 IF (p_dim_short_names IS NOT NULL) THEN
3362 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
3363 (
3364 p_Kpi_Id => p_kpi_id
3365 , p_Dim_Level_Id => NULL
3366 , x_return_status => x_return_status
3367 , x_msg_count => x_msg_count
3368 , x_msg_data => x_msg_data
3369 );
3370 BSC_DIM_FILTERS_PUB.Check_Filters_Not_Apply_By_KPI
3371 ( p_Kpi_Id => p_kpi_id
3372 , x_return_status => x_return_status
3373 , x_msg_count => x_msg_count
3374 , x_msg_data => x_msg_data
3375 );
3376 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3377 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set failed at BSC_BIS_KPI_MEAS_PUB.Check_Filters_Not_Apply');
3378 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3379 END IF;
3380 END IF;
3381
3382 IF (p_commit = FND_API.G_TRUE) THEN
3383 COMMIT;
3384 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
3385 END IF;
3386 x_return_status := FND_API.G_RET_STS_SUCCESS;
3387 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set procedure');
3388 EXCEPTION
3389 WHEN FND_API.G_EXC_ERROR THEN
3390 IF (x_msg_data IS NULL) THEN
3391 FND_MSG_PUB.Count_And_Get
3392 ( p_encoded => FND_API.G_FALSE
3393 , p_count => x_msg_count
3394 , p_data => x_msg_data
3395 );
3396 END IF;
3397 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
3398 x_return_status := FND_API.G_RET_STS_ERROR;
3399 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3400 IF (x_msg_data IS NULL) THEN
3401 FND_MSG_PUB.Count_And_Get
3402 ( p_encoded => FND_API.G_FALSE
3403 , p_count => x_msg_count
3404 , p_data => x_msg_data
3405 );
3406 END IF;
3407 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3408 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
3409 WHEN NO_DATA_FOUND THEN
3410 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3411 IF (x_msg_data IS NOT NULL) THEN
3412 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set ';
3413 ELSE
3414 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set ';
3415 END IF;
3416 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
3417 WHEN OTHERS THEN
3418 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3419 IF (x_msg_data IS NOT NULL) THEN
3420 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set ';
3421 ELSE
3422 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_From_Dim_Set ';
3423 END IF;
3424 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
3425 END Unassign_Dims_From_Dim_Set;
3426 /*********************************************************************************
3427 UPDATE DIMENSION LEVEL SELECTIONS
3428 *********************************************************************************/
3429 PROCEDURE Create_Dim_Grp_Lev_In_Dset
3430 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
3431 , p_kpi_id IN NUMBER
3432 , p_dim_set_id IN NUMBER
3433 , p_dim_short_names IN VARCHAR2
3434 , x_return_status OUT NOCOPY VARCHAR2
3435 , x_msg_count OUT NOCOPY NUMBER
3436 , x_msg_data OUT NOCOPY VARCHAR2
3437 )IS
3438 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
3439 l_index NUMBER := 0;
3440 l_count NUMBER;
3441 l_dim_short_names VARCHAR2(32000);
3442 l_dim_short_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
3443 BEGIN
3444 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset procedure');
3445 FND_MSG_PUB.Initialize;
3446 x_return_status := FND_API.G_RET_STS_SUCCESS;
3447
3448 l_bsc_dimset_rec.Bsc_Dim_Level_Help := 'XXX';
3449 l_bsc_dimset_rec.Bsc_Dim_Level_Long_Name := 'XXX';
3450 l_bsc_dimset_rec.Bsc_Dim_Tot_Disp_Name := 'XXX';
3451 l_bsc_dimset_rec.Bsc_Dim_Comp_Disp_Name := 'XXX';
3452 l_bsc_dimset_rec.Bsc_Dset_Comp_Order := 0;
3453 l_bsc_dimset_rec.Bsc_Dset_Dim_Level_Index := 1;
3454 l_bsc_dimset_rec.Bsc_Dset_Parent_Level_Rel := 'XXX';
3455 l_bsc_dimset_rec.Bsc_Dset_Position := 0;
3456 l_bsc_dimset_rec.Bsc_Dset_Status := 0;
3457 l_bsc_dimset_rec.Bsc_Dset_Target_Level := 1;
3458 l_bsc_dimset_rec.Bsc_Dset_User_Level0 := 0;
3459 l_bsc_dimset_rec.Bsc_Dset_User_Level1 := 0;
3460 l_bsc_dimset_rec.Bsc_Dset_User_Level1_Default := 0;
3461 l_bsc_dimset_rec.Bsc_Dset_User_Level2 := 0;
3462 l_bsc_dimset_rec.Bsc_Dset_User_Level2_Default := 0;
3463 l_bsc_dimset_rec.Bsc_Dset_Value_Order := 0;
3464 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
3465 l_bsc_dimset_rec.Bsc_Level_Name := 'XXX';
3466 l_bsc_dimset_rec.Bsc_View_Name := 'XXX';
3467 l_bsc_dimset_rec.Bsc_New_Dset := 'Y';
3468 l_bsc_dimset_rec.Bsc_Option_Id := 0;
3469 l_bsc_dimset_rec.Bsc_Pk_Col := 'XXX';
3470 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
3471 IF (p_dim_short_names IS NOT NULL) THEN
3472 l_bsc_dimset_rec.Bsc_Dset_Parent_Level_Rel := NULL;
3473 l_bsc_dimset_rec.Bsc_Dset_No_Items := 0;
3474 l_bsc_dimset_rec.Bsc_Dset_Level_Display := 0;
3475 l_bsc_dimset_rec.Bsc_Dset_Default_Type := 0;
3476 l_bsc_dimset_rec.Bsc_Dset_Default_Value := 'T';
3477 l_bsc_dimset_rec.Bsc_Dset_Parent_In_Total := 2;
3478 l_bsc_dimset_rec.Bsc_Dset_Total0 := 0;
3479 l_bsc_dimset_rec.Bsc_Dset_Status := 2;
3480 l_bsc_dimset_rec.Bsc_Dset_User_Level0 := 2;
3481 l_bsc_dimset_rec.Bsc_Dset_Filter_Value := 0;
3482 l_bsc_dimset_rec.Bsc_Dset_User_Level1 := 2;
3483 l_bsc_dimset_rec.Bsc_Dset_User_Level1_Default := 2;
3484 l_bsc_dimset_rec.Bsc_Dset_User_Level2 := NULL;
3485 l_bsc_dimset_rec.Bsc_Dset_User_Level2_Default := NULL;
3486 l_bsc_dimset_rec.Bsc_Dim_Tot_Disp_Name := 'ALL';
3487 l_bsc_dimset_rec.Bsc_Dim_Comp_Disp_Name := 'COMPARISON';
3488 l_bsc_dimset_rec.Bsc_New_Dset := 'N';
3489 l_dim_short_names := p_dim_short_names;
3490 WHILE (Is_More( p_dim_short_names => l_dim_short_names
3491 , p_dim_short_name => l_dim_short_name)
3492 ) LOOP
3493 SELECT COUNT(*) INTO l_count
3494 FROM BSC_KPI_DIM_GROUPS A
3495 , BSC_SYS_DIM_GROUPS_VL B
3496 WHERE A.Dim_Group_Id = B.Dim_Group_Id
3497 AND A.Indicator = l_bsc_dimset_rec.bsc_kpi_id
3498 AND A.Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
3499 AND B.Short_Name = l_dim_short_name;
3500 IF (l_count = 0) THEN
3501 --dbms_output.PUT_LINE('l_dim_short_name <'||l_dim_short_name||'>');
3502 --l_bsc_dimset_rec.Bsc_Level_Name := BSC_PMF_UI_API_PUB.get_Dim_Level_View_Name(cd.short_name);
3503 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Level_Name <'||l_bsc_dimset_rec.Bsc_Level_Name||'>');
3504 SELECT NVL(MAX(Dim_Group_Index) + 1, 0)
3505 INTO l_bsc_dimset_rec.Bsc_Dim_Level_Group_Index
3506 FROM BSC_KPI_DIM_GROUPS
3507 WHERE indicator = l_bsc_dimset_rec.bsc_kpi_id
3508 AND dim_set_id = l_bsc_dimset_rec.bsc_dim_set_id;
3509
3510 SELECT dim_group_id
3511 INTO l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id
3512 FROM BSC_SYS_DIM_GROUPS_VL
3513 WHERE short_name = l_dim_short_name;
3514 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id <'||l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id||'>');
3515 -- START : Granular Locking
3516 BSC_BIS_LOCKS_PUB.LOCK_DIM_GROUP
3517 ( p_dim_group_id => l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id
3518 , p_time_stamp => NULL
3519 , x_return_status => x_return_status
3520 , x_msg_count => x_msg_count
3521 , x_msg_data => x_msg_data
3522 );
3523 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3524 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_GROUP Failed: at Create_Dim_Grp_Lev_In_Dset');
3525 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3526 END IF;
3527 -- END : Granular Locking
3528 BSC_DIMENSION_SETS_PUB.Create_Dim_Group_In_Dset--insert into BSC_KPI_DIM_GROUPS
3529 ( p_commit => FND_API.G_FALSE
3530 , p_Dim_Set_Rec => l_bsc_dimset_rec
3531 , p_create_Dim_Lev_Grp => FALSE
3532 , x_return_status => x_return_status
3533 , x_msg_count => x_msg_count
3534 , x_msg_data => x_msg_data
3535 );
3536 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3537 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Group_In_Dset <'||x_msg_data||'>');
3538 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3539 END IF;
3540 BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties--insert into BSC_KPI_DIM_LEVEL_PROPERTIES
3541 ( p_commit => FND_API.G_FALSE
3542 , p_Dim_Set_Rec => l_bsc_dimset_rec
3543 , x_return_status => x_return_status
3544 , x_msg_count => x_msg_count
3545 , x_msg_data => x_msg_data
3546 );
3547 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3548 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties <'||x_msg_data||'>');
3549 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3550 END IF;
3551 BSC_DIMENSION_SETS_PUB.Create_Dim_Levels
3552 ( p_commit => FND_API.G_FALSE
3553 , p_Dim_Set_Rec => l_bsc_dimset_rec
3554 , x_return_status => x_return_status
3555 , x_msg_count => x_msg_count
3556 , x_msg_data => x_msg_data
3557 );
3558 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3559 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Levels <'||x_msg_data||'>');
3560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3561 END IF;
3562 END IF;
3563 END LOOP;
3564 ELSE
3565 IF (l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id IS NULL) THEN
3566 SELECT COUNT(*)
3567 INTO l_count
3568 FROM BSC_KPI_DIM_LEVELS_B
3569 WHERE INDICATOR = l_bsc_dimset_rec.Bsc_Kpi_Id
3570 AND DIM_SET_ID = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
3571 l_bsc_dimset_rec.Bsc_Dset_Dim_Level_Index := l_count + 1;
3572 END IF;
3573 BSC_DIMENSION_SETS_PUB.Create_Dim_Levels
3574 ( p_commit => FND_API.G_FALSE
3575 , p_Dim_Set_Rec => l_bsc_dimset_rec
3576 , x_return_status => x_return_status
3577 , x_msg_count => x_msg_count
3578 , x_msg_data => x_msg_data
3579 );
3580 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3581 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Levels <'||x_msg_data||'>');
3582 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3583 END IF;
3584 END IF;
3585 -- START: Granular Locking, Change time stamp of Dim Set & KPI
3586 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
3587 ( p_Kpi_Id => p_Kpi_Id
3588 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
3589 , x_return_status => x_return_status
3590 , x_msg_count => x_msg_count
3591 , x_msg_data => x_msg_data
3592 );
3593 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3594 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET: at BSC_DIMENSION_SETS_PUB.Create_Dim_Grp_Lev_In_Dset');
3595 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3596 END IF;
3597 --dbms_output.PUT_LINE('END Setting TIME STAMP');
3598 -- END: Granular Locking, Change time stamp of Dim Set & KPI
3599 IF (p_commit = FND_API.G_TRUE) THEN
3600 COMMIT;
3601 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
3602 END IF;
3603 x_return_status := FND_API.G_RET_STS_SUCCESS;
3604 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset procedure');
3605 EXCEPTION
3606 WHEN FND_API.G_EXC_ERROR THEN
3607 IF (x_msg_data IS NULL) THEN
3608 FND_MSG_PUB.Count_And_Get
3609 ( p_encoded => FND_API.G_FALSE
3610 , p_count => x_msg_count
3611 , p_data => x_msg_data
3612 );
3613 END IF;
3614 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
3615 x_return_status := FND_API.G_RET_STS_ERROR;
3616 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3617 IF (x_msg_data IS NULL) THEN
3618 FND_MSG_PUB.Count_And_Get
3619 ( p_encoded => FND_API.G_FALSE
3620 , p_count => x_msg_count
3621 , p_data => x_msg_data
3622 );
3623 END IF;
3624 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3625 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
3626 WHEN NO_DATA_FOUND THEN
3627 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3628 IF (x_msg_data IS NOT NULL) THEN
3629 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset ';
3630 ELSE
3631 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset ';
3632 END IF;
3633 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
3634 WHEN OTHERS THEN
3635 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3636 IF (x_msg_data IS NOT NULL) THEN
3637 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset ';
3638 ELSE
3639 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Grp_Lev_In_Dset ';
3640 END IF;
3641 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
3642 END Create_Dim_Grp_Lev_In_Dset;
3643 /*********************************************************************************
3644 ASSIGN DIMENSION-SETS
3645 *********************************************************************************/
3646 PROCEDURE Assign_DSet_Analysis_Options
3647 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
3648 , p_kpi_id IN NUMBER
3649 , p_dim_set_id IN NUMBER
3650 , p_analysis_grp_id IN NUMBER
3651 , p_option_id IN NUMBER
3652 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
3653 , x_return_status OUT NOCOPY VARCHAR2
3654 , x_msg_count OUT NOCOPY NUMBER
3655 , x_msg_data OUT NOCOPY VARCHAR2
3656 )IS
3657
3658 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
3659 l_count NUMBER := 0;
3660
3661 CURSOR c_kpi_ids IS
3662 SELECT indicator
3663 FROM BSC_KPIS_B
3664 WHERE Source_Indicator = p_kpi_id
3665 AND Prototype_Flag <> 2;
3666 BEGIN
3667 SAVEPOINT AssBSCDSetPMD;
3668 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options procedure');
3669 FND_MSG_PUB.Initialize;
3670 x_return_status := FND_API.G_RET_STS_SUCCESS;
3671 IF (p_kpi_id IS NULL) THEN
3672 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3673 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
3674 FND_MSG_PUB.ADD;
3675 RAISE FND_API.G_EXC_ERROR;
3676 END IF;
3677 IF (p_dim_set_id IS NULL) THEN
3678 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3679 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_SET_ID'), TRUE);
3680 FND_MSG_PUB.ADD;
3681 RAISE FND_API.G_EXC_ERROR;
3682 END IF;
3683 IF (p_analysis_grp_id IS NULL) THEN
3684 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3685 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'Analysis Group ID');
3686 FND_MSG_PUB.ADD;
3687 RAISE FND_API.G_EXC_ERROR;
3688 END IF;
3689 IF (p_option_id IS NULL) THEN
3690 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3691 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'Option ID');
3692 FND_MSG_PUB.ADD;
3693 RAISE FND_API.G_EXC_ERROR;
3694 END IF;
3695 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id; --number
3696 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Kpi_Id <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
3697 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id; --number
3698 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Dim_Set_Id <'||l_bsc_dimset_rec.Bsc_Dim_Set_Id||'>');
3699 l_bsc_dimset_rec.Bsc_Analysis_Id := p_analysis_grp_id;
3700 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Analysis_Id <'||l_bsc_dimset_rec.Bsc_Analysis_Id||'>');
3701 l_bsc_dimset_rec.Bsc_Option_Id := p_option_id;
3702 --dbms_output.PUT_LINE('l_bsc_dimset_rec.Bsc_Option_Id <'||l_bsc_dimset_rec.Bsc_Option_Id||'>');
3703
3704
3705 SELECT COUNT(Indicator) INTO l_Count
3706 FROM BSC_KPI_ANALYSIS_OPTIONS_B
3707 WHERE Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
3708 AND Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3709 AND Analysis_Group_Id = l_bsc_dimset_rec.Bsc_Analysis_Id
3710 AND Option_Id = l_bsc_dimset_rec.Bsc_Option_Id;
3711
3712 IF (l_Count = 0) THEN
3713 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
3714 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3715 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
3716 IF (l_count = 0) THEN
3717 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
3718 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
3719 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
3720 FND_MSG_PUB.ADD;
3721 RAISE FND_API.G_EXC_ERROR;
3722 END IF;
3723 BSC_DIMENSION_SETS_PUB.Update_Kpi_Analysis_Options_B
3724 ( p_commit => FND_API.G_FALSE
3725 , p_Dim_Set_Rec => l_bsc_dimset_rec
3726 , x_return_status => x_return_status
3727 , x_msg_count => x_msg_count
3728 , x_msg_data => x_msg_data
3729 );
3730 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3731 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options Failed: at BSC_DIMENSION_SETS_PUB.Update_Kpi_Analysis_Options_B <'||x_msg_data||'>');
3732 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3733 END IF;
3734 --copied from VB Code
3735 BSC_DESIGNER_PVT.Deflt_Update_AOPTS(l_bsc_dimset_rec.Bsc_Kpi_Id);
3736 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
3737 --repeat the steps above for all the shared indicators
3738 FOR cd IN c_kpi_ids LOOP
3739 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
3740 --dbms_output.PUT_LINE('Within Shared Indicator Loop KPI_ID is <'||l_bsc_dimset_rec.Bsc_Kpi_Id||'>');
3741 SELECT COUNT(*) INTO l_count FROM BSC_KPI_DIM_SETS_VL
3742 WHERE indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
3743 AND dim_set_id = l_bsc_dimset_rec.Bsc_Dim_Set_Id;
3744 IF (l_count = 0) THEN
3745 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
3746 FND_MESSAGE.SET_TOKEN('KPI_ID', l_bsc_dimset_rec.Bsc_Kpi_Id);
3747 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_bsc_dimset_rec.Bsc_Dim_Set_Id);
3748 FND_MSG_PUB.ADD;
3749 RAISE FND_API.G_EXC_ERROR;
3750 END IF;
3751 BSC_DIMENSION_SETS_PUB.Update_Kpi_Analysis_Options_B
3752 ( p_commit => FND_API.G_FALSE
3753 , p_Dim_Set_Rec => l_bsc_dimset_rec
3754 , x_return_status => x_return_status
3755 , x_msg_count => x_msg_count
3756 , x_msg_data => x_msg_data
3757 );
3758 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3759 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options Failed: at BSC_DIMENSION_SETS_PUB.Update_Kpi_Analysis_Options_B <'||x_msg_data||'>');
3760 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3761 END IF;
3762 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
3763 END LOOP;
3764 END IF;
3765 IF (p_commit = FND_API.G_TRUE) THEN
3766 COMMIT;
3767 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
3768 END IF;
3769 x_return_status := FND_API.G_RET_STS_SUCCESS;
3770 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options procedure');
3771 EXCEPTION
3772 WHEN FND_API.G_EXC_ERROR THEN
3773 ROLLBACK TO AssBSCDSetPMD;
3774 IF (x_msg_data IS NULL) THEN
3775 FND_MSG_PUB.Count_And_Get
3776 ( p_encoded => FND_API.G_FALSE
3777 , p_count => x_msg_count
3778 , p_data => x_msg_data
3779 );
3780 END IF;
3781 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
3782 x_return_status := FND_API.G_RET_STS_ERROR;
3783 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3784 ROLLBACK TO AssBSCDSetPMD;
3785 IF (x_msg_data IS NULL) THEN
3786 FND_MSG_PUB.Count_And_Get
3787 ( p_encoded => FND_API.G_FALSE
3788 , p_count => x_msg_count
3789 , p_data => x_msg_data
3790 );
3791 END IF;
3792 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3793 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
3794 WHEN NO_DATA_FOUND THEN
3795 ROLLBACK TO AssBSCDSetPMD;
3796 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3797 IF (x_msg_data IS NOT NULL) THEN
3798 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options ';
3799 ELSE
3800 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options ';
3801 END IF;
3802 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
3803 WHEN OTHERS THEN
3804 ROLLBACK TO AssBSCDSetPMD;
3805 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3806 IF (x_msg_data IS NOT NULL) THEN
3807 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options ';
3808 ELSE
3809 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Assign_DSet_Analysis_Options ';
3810 END IF;
3811 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
3812 END Assign_DSet_Analysis_Options;
3813
3814 /*********************************************************************************
3815 *********************************************************************************/
3816 FUNCTION Is_More
3817 ( p_dim_short_names IN OUT NOCOPY VARCHAR2
3818 , p_dim_short_name OUT NOCOPY VARCHAR2
3819 ) RETURN BOOLEAN
3820 IS
3821 l_pos_ids NUMBER;
3822 l_pos_rel_types NUMBER;
3823 l_pos_rel_columns NUMBER;
3824 BEGIN
3825 IF (p_dim_short_names IS NOT NULL) THEN
3826 l_pos_ids := INSTR(p_dim_short_names, ',');
3827 IF (l_pos_ids > 0) THEN
3828 p_dim_short_name := TRIM(SUBSTR(p_dim_short_names, 1, l_pos_ids - 1));
3829 p_dim_short_names := TRIM(SUBSTR(p_dim_short_names, l_pos_ids + 1));
3830 ELSE
3831 p_dim_short_name := TRIM(p_dim_short_names);
3832 p_dim_short_names := NULL;
3833 END IF;
3834 RETURN TRUE;
3835 ELSE
3836 RETURN FALSE;
3837 END IF;
3838 END Is_More;
3839 /*********************************************************************************
3840 *********************************************************************************/
3841 PROCEDURE get_Dim_Set_Source_Info
3842 ( p_Indicator IN NUMBER
3843 , p_DimSetId IN NUMBER
3844 , x_Source OUT NOCOPY VARCHAR2
3845 , x_Data_Set_Id OUT NOCOPY NUMBER
3846 ) IS
3847 CURSOR c_dimSetSource IS
3848 SELECT LEVEL_SOURCE
3849 FROM BSC_KPI_DIM_LEVELS_VL
3850 WHERE INDICATOR = p_Indicator
3851 AND DIM_SET_ID = p_DimSetId
3852 AND LEVEL_SOURCE IS NOT NULL;
3853
3854 CURSOR c_source IS
3855 SELECT D.SOURCE
3856 , D.DataSet_ID
3857 FROM BSC_SYS_DATASETS_VL D
3858 , BSC_DB_DATASET_DIM_SETS_V B
3859 WHERE D.DATASET_ID = B.DATASET_ID
3860 AND B.INDICATOR = p_Indicator
3861 AND B.DIM_SET_ID = p_DimSetId;
3862 BEGIN
3863 IF (c_dimSetSource%ISOPEN) THEN
3864 CLOSE c_dimSetSource;
3865 END IF;
3866 OPEN c_dimSetSource;
3867 FETCH c_dimSetSource INTO x_Source;
3868 CLOSE c_dimSetSource;
3869 IF (x_Source IS NULL) THEN
3870 IF (c_source%ISOPEN) THEN
3871 CLOSE c_source;
3872 END IF;
3873 OPEN c_source;
3874 FETCH c_source INTO x_Source, x_Data_Set_Id;
3875 CLOSE c_source;
3876 END IF;
3877 EXCEPTION
3878 WHEN OTHERS THEN
3879 IF (c_dimSetSource%ISOPEN) THEN
3880 CLOSE c_dimSetSource;
3881 END IF;
3882 IF (c_source%ISOPEN) THEN
3883 CLOSE c_source;
3884 END IF;
3885 END get_Dim_Set_Source_Info;
3886
3887 /*********************************************************************************
3888 *********************************************************************************/
3889 FUNCTION get_DimensionSetSource
3890 ( p_Indicator IN NUMBER
3891 , p_DimSetId IN NUMBER
3892 ) RETURN VARCHAR2
3893 IS
3894 l_source BSC_SYS_DIM_LEVELS_B.SOURCE%TYPE;
3895 l_data_set_id BSC_SYS_DATASETS_B.Dataset_Id%TYPE;
3896 BEGIN
3897 BSC_BIS_KPI_MEAS_PUB.get_Dim_Set_Source_Info
3898 ( p_Indicator => p_Indicator
3899 , p_DimSetId => p_DimSetId
3900 , x_Source => l_source
3901 , x_Data_Set_Id => l_data_set_id
3902 );
3903 RETURN l_source;
3904 EXCEPTION
3905 WHEN OTHERS THEN
3906 RETURN 'BSC';
3907 END get_DimensionSetSource;
3908
3909 /*********************************************************************************/
3910 FUNCTION GET_AO_NAME
3911 ( p_indicator in NUMBER
3912 , p_a0 in NUMBER
3913 , p_a1 in NUMBER
3914 , p_a2 in NUMBER
3915 , p_group_id in NUMBER
3916 ) RETURN VARCHAR2 IS
3917 l_group_id NUMBER;
3918
3919 h_ag_count NUMBER;
3920 l_anal_name bsc_kpi_analysis_options_tl.name%TYPE := NULL;
3921 h_ag1_depend NUMBER;
3922 h_ag2_depend NUMBER;
3923 h_ag_depend NUMBER;
3924 BEGIN
3925 l_group_id := p_group_id;
3926 SELECT MAX( ANALYSIS_GROUP_ID)
3927 INTO h_ag_count
3928 FROM BSC_KPI_ANALYSIS_GROUPS
3929 WHERE INDICATOR = p_indicator;
3930 IF (l_group_id= 0) THEN
3931 SELECT NAME INTO l_anal_name
3932 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3933 WHERE ANALYSIS_GROUP_ID =0
3934 AND OPTION_ID = p_a0
3935 AND INDICATOR = p_indicator;
3936 ELSIF(l_group_id =1 AND h_ag_count >0) THEN
3937 SELECT DEPENDENCY_FLAG INTO h_ag_depend
3938 FROM BSC_KPI_ANALYSIS_GROUPS
3939 WHERE ANALYSIS_GROUP_ID =1
3940 AND INDICATOR = p_indicator;
3941 IF h_ag_depend = 0 THEN
3942 SELECT NAME INTO l_anal_name
3943 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3944 WHERE ANALYSIS_GROUP_ID = 1
3945 AND OPTION_ID = p_a1
3946 AND INDICATOR = p_indicator;
3947 ELSE
3948 BEGIN
3949 SELECT NAME INTO l_anal_name
3950 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3951 WHERE ANALYSIS_GROUP_ID =1
3952 AND OPTION_ID = p_a1
3953 AND PARENT_OPTION_ID = p_a0
3954 AND INDICATOR = p_indicator;
3955 EXCEPTION
3956 WHEN OTHERS THEN
3957 NULL;
3958 END;
3959 END IF;
3960 ELSIF((l_group_id =2 AND h_ag_count >1)) THEN
3961 SELECT DEPENDENCY_FLAG
3962 INTO h_ag1_depend
3963 FROM BSC_KPI_ANALYSIS_GROUPS
3964 WHERE ANALYSIS_GROUP_ID =1
3965 AND INDICATOR = p_indicator;
3966
3967 SELECT DEPENDENCY_FLAG
3968 INTO h_ag2_depend
3969 FROM BSC_KPI_ANALYSIS_GROUPS
3970 WHERE ANALYSIS_GROUP_ID = 2
3971 AND INDICATOR = p_indicator;
3972 IF h_ag2_depend = 0 THEN
3973 SELECT NAME
3974 INTO l_anal_name
3975 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3976 WHERE ANALYSIS_GROUP_ID =2
3977 AND OPTION_ID=p_a2
3978 AND INDICATOR=p_indicator;
3979 ELSE
3980 IF h_ag2_depend = 1 AND h_ag1_depend = 0 THEN
3981 BEGIN
3982 SELECT NAME
3983 INTO l_anal_name
3984 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3985 WHERE ANALYSIS_GROUP_ID = 2
3986 AND OPTION_ID = p_a2
3987 AND PARENT_OPTION_ID = p_a1
3988 AND INDICATOR = p_indicator;
3989 EXCEPTION
3990 WHEN OTHERS
3991 THEN NULL;
3992 END;
3993 ELSE
3994 BEGIN
3995 SELECT NAME
3996 INTO l_anal_name
3997 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
3998 WHERE ANALYSIS_GROUP_ID = 2
3999 AND OPTION_ID = p_a2
4000 AND PARENT_OPTION_ID = p_a1
4001 AND GRANDPARENT_OPTION_ID = p_a0
4002 AND INDICATOR = p_indicator;
4003 EXCEPTION
4004 WHEN OTHERS THEN
4005 NULL;
4006 END;
4007 END IF;
4008 END IF;
4009 END IF;
4010 RETURN l_anal_name;
4011 EXCEPTION
4012 WHEN OTHERS THEN
4013 RETURN NULL;
4014 END GET_AO_NAME;
4015
4016 /*********************************************************************************/
4017 FUNCTION GET_SERIES_COUNT
4018 ( p_indicator IN NUMBER
4019 , p_a0 IN NUMBER
4020 , p_a1 IN NUMBER
4021 , p_a2 IN NUMBER
4022 ) RETURN NUMBER IS
4023
4024 l_count NUMBER := 0;
4025
4026 CURSOR c_SeriesCount IS
4027 SELECT COUNT(SERIES_ID)
4028 FROM BSC_KPI_ANALYSIS_MEASURES_VL
4029 WHERE INDICATOR = p_indicator
4030 AND ANALYSIS_OPTION0 = p_a0
4031 AND ANALYSIS_OPTION1 = p_a1
4032 AND ANALYSIS_OPTION2 = p_a2;
4033 BEGIN
4034 IF (c_SeriesCount%ISOPEN)THEN
4035 CLOSE c_SeriesCount;
4036 END IF;
4037
4038 OPEN c_SeriesCount;
4039 FETCH c_SeriesCount INTO l_count;
4040 CLOSE c_SeriesCount;
4041
4042 RETURN l_count;
4043 EXCEPTION
4044 WHEN OTHERS THEN
4045 RETURN 0;
4046 END GET_SERIES_COUNT;
4047
4048 /*********************************************************************************
4049 API TO UPDATE PMF/BSC MEASURES/ANALYSIS OPTIONS WITHIN AN INDICATOR
4050 *********************************************************************************/
4051 PROCEDURE Update_KPI_Analysis_Options
4052 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
4053 , p_kpi_id IN NUMBER
4054 , p_data_source IN VARCHAR2 --this parameter is not needed and can be removed from the API
4055 , p_analysis_group_id IN NUMBER
4056 , p_analysis_option_id0 IN NUMBER
4057 , p_analysis_option_id1 IN NUMBER
4058 , p_analysis_option_id2 IN NUMBER
4059 , p_series_id IN NUMBER
4060 , p_data_set_id IN NUMBER
4061 , p_dim_set_id IN NUMBER
4062 , p_option0_Name IN VARCHAR2
4063 , p_option1_Name IN VARCHAR2
4064 , p_option2_Name IN VARCHAR2
4065 , p_measure_short_name IN VARCHAR2
4066 , p_dim_obj_short_names IN VARCHAR2 --comma seperated dimension objects needed for PMF Measures
4067 , p_default_short_names IN VARCHAR2 := NULL
4068 , p_view_by_name IN VARCHAR2 := NULL
4069 , p_measure_name IN VARCHAR2 --BSC_KPI_ANALYSIS_MEASURES_VL.name
4070 , p_measure_help IN VARCHAR2 --BSC_KPI_ANALYSIS_MEASURES_VL.help
4071 , p_default_value IN NUMBER
4072 , p_time_stamp IN VARCHAR2 := NULL
4073 , p_update_ana_opt IN BOOLEAN := FALSE
4074 , x_return_status OUT NOCOPY VARCHAR2
4075 , x_msg_count OUT NOCOPY NUMBER
4076 , x_msg_data OUT NOCOPY VARCHAR2
4077 ) IS
4078 l_Bsc_Anal_Opt_Rec BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type;
4079 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
4080 l_measure_short_name BSC_SYS_MEASURES.Short_Name%TYPE;
4081 l_dim_short_name BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE := 'DGRP_';
4082 l_temp_var VARCHAR2(32000);
4083 l_count NUMBER;
4084 l_alias VARCHAR2(4);
4085
4086 l_data_source BSC_SYS_DIM_LEVELS_B.Source%TYPE;
4087 l_temp_data_source BSC_SYS_DIM_LEVELS_B.Source%TYPE;
4088 l_data_set_id BSC_SYS_DATASETS_B.Dataset_Id%TYPE;
4089 l_dim_obj_short_names VARCHAR2(32000);
4090 l_default_short_names VARCHAR2(32000);
4091 l_view_by_name BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE;
4092 l_dim_set_id BSC_KPI_DIM_SETS_TL.dim_set_id%TYPE;
4093
4094 l_dim_obj_names VARCHAR2(32000);
4095 l_dim_obj_name VARCHAR2(30);
4096 l_index NUMBER := 0;
4097 l_namecount NUMBER;
4098
4099 l_dim_obj_tmp_short_names VARCHAR2(32000);
4100
4101 --START ADEED BY PETER
4102 -- Need the following to keep track of whether data set has changed (3169904)
4103 l_old_data_set_id BSC_SYS_DATASETS_B.Dataset_Id%TYPE;
4104 l_indic_type NUMBER;
4105 l_config_type NUMBER;
4106 l_def_calc_id bsc_kpi_measure_props.default_calculation%TYPE;
4107 CURSOR c_old_data_set_id IS
4108 SELECT dataset_id
4109 FROM BSC_KPI_ANALYSIS_MEASURES_B
4110 WHERE indicator = p_kpi_id
4111 AND analysis_option0 = NVL(p_analysis_option_id0, 0)
4112 AND analysis_option1 = NVL(p_analysis_option_id1, 0)
4113 AND analysis_option2 = NVL(p_analysis_option_id2, 0)
4114 AND series_id = NVL(p_series_id, 0);
4115 -- Need the above to keep track of whether data set has changed
4116 --END ADEED BY PETER
4117
4118 CURSOR c_data_set_id IS
4119 SELECT DISTINCT a.dataset_id DataSet_Id
4120 FROM BSC_SYS_DATASETS_B a
4121 , BSC_SYS_MEASURES b
4122 WHERE UPPER(b.short_name) = UPPER(p_measure_short_name)
4123 AND a.measure_id1 = b.measure_id
4124 AND ROWNUM < 2;
4125
4126 CURSOR c_kpi_ids IS
4127 SELECT indicator
4128 FROM BSC_KPIS_B
4129 WHERE Source_Indicator = p_kpi_id
4130 AND Prototype_Flag <> 2;
4131
4132 CURSOR C_OPTIONZERO_SOURCE IS
4133 SELECT D.SOURCE,D.DATASET_ID
4134 FROM BSC_SYS_DATASETS_B D,
4135 BSC_KPI_ANALYSIS_MEASURES_B K
4136 WHERE D.DATASET_ID = K.DATASET_ID
4137 AND k.indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4138 AND analysis_option0 = 0
4139 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
4140 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2
4141 AND series_id = 0;
4142
4143 CURSOR c_stack_series_id IS
4144 SELECT
4145 stack_series_id
4146 FROM
4147 bsc_kpi_analysis_measures_b
4148 WHERE
4149 indicator = p_kpi_id AND
4150 analysis_option0 = p_analysis_option_id0 AND
4151 analysis_option1 = p_analysis_option_id1 AND
4152 analysis_option2 = p_analysis_option_id2 AND
4153 series_id = p_series_id;
4154
4155 CURSOR c_default_calculation IS
4156 SELECT
4157 default_calculation
4158 FROM
4159 bsc_kpi_measure_props kp,
4160 bsc_kpi_analysis_measures_b km
4161 WHERE
4162 km.indicator = p_kpi_id AND
4163 km.indicator = kp.indicator AND
4164 km.kpi_measure_id = kp.kpi_measure_id AND
4165 km.analysis_option0 = p_analysis_option_id0 AND
4166 km.analysis_option1 = p_analysis_option_id1 AND
4167 km.analysis_option2 = p_analysis_option_id2 AND
4168 km.series_id = p_series_id;
4169
4170 BEGIN
4171 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options procedure');
4172 FND_MSG_PUB.Initialize;
4173 x_return_status := FND_API.G_RET_STS_SUCCESS;
4174 SAVEPOINT UpdateBSCKPIAnaOpts;
4175 --Initialize record for BSC_KPI_ANALYSIS_MEASURES_B/TL &BSC_KPI_ANALYSIS_OPTIONS_B/TL
4176 l_dim_set_id := p_dim_set_id;
4177 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := p_option0_Name;
4178 l_Bsc_Anal_Opt_Rec.Bsc_Option_Help := p_measure_help;
4179 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := p_analysis_option_id2;
4180 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := p_analysis_option_id1;
4181 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := p_analysis_option_id0;
4182 l_Bsc_Anal_Opt_Rec.Bsc_Measure_Prototype_Flag := NULL;
4183 l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name := p_measure_name;
4184 l_Bsc_Anal_Opt_Rec.Bsc_Measure_Help := p_measure_help;
4185 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := p_kpi_id;
4186 l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id := l_dim_set_id;
4187 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Stack_Series_Id := NULL;
4188 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Type := NULL;
4189 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Id := p_series_id;
4190 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Color := NULL;
4191 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id := p_data_set_id;
4192 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Budget_Flag := NULL;
4193 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Bm_Flag := NULL;
4194 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Bm_Color := NULL;
4195 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Axis := NULL;
4196 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := p_analysis_group_id;
4197 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Default_Value := p_default_value;
4198 IF p_series_id IS NOT NULL THEN
4199 OPEN c_stack_series_id;
4200 FETCH c_stack_series_id INTO l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Stack_Series_Id;
4201 CLOSE c_stack_series_id;
4202 END IF;
4203 IF (l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id IS NULL) THEN
4204 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4205 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
4206 FND_MSG_PUB.ADD;
4207 RAISE FND_API.G_EXC_ERROR;
4208 END IF;
4209 IF (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NULL) THEN
4210 IF (c_data_set_id%ISOPEN) THEN
4211 CLOSE c_data_set_id;
4212 END IF;
4213 OPEN c_data_set_id;
4214 FETCH c_data_set_id INTO l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id;
4215 CLOSE c_data_set_id;
4216 END IF;
4217 IF (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NULL) THEN
4218 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4219 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'DATASET'), TRUE);
4220 FND_MSG_PUB.ADD;
4221 RAISE FND_API.G_EXC_ERROR;
4222 END IF;
4223 SELECT COUNT(*) INTO l_count
4224 FROM BSC_KPIS_B
4225 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4226 IF (l_count = 0) THEN
4227 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
4228 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
4229 FND_MSG_PUB.ADD;
4230 RAISE FND_API.G_EXC_ERROR;
4231 END IF;
4232 -- Verify that this is not a Shared KPI.
4233 SELECT share_flag INTO l_count
4234 FROM BSC_KPIS_B
4235 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id ;
4236 IF (l_count = 2) THEN
4237 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
4238 --FND_MESSAGE.SET_TOKEN('BSC_KPI', l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
4239 FND_MSG_PUB.ADD;
4240 RAISE FND_API.G_EXC_ERROR;
4241 END IF;
4242
4243 SELECT Source INTO l_data_source
4244 FROM BSC_SYS_DATASETS_B
4245 WHERE Dataset_Id = l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id;
4246 IF (NOT p_update_ana_opt AND l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id IS NOT NULL) THEN
4247 BSC_BIS_KPI_MEAS_PUB.get_Dim_Set_Source_Info
4248 ( p_Indicator => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4249 , p_DimSetId => l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4250 , x_Source => l_temp_data_source
4251 , x_Data_Set_Id => l_data_set_id
4252 );
4253 --dbms_output.PUT_LINE('l_temp_data_source <'||l_temp_data_source||'>');
4254 --dbms_output.PUT_LINE('l_data_source <'||l_data_source||'>');
4255 --dbms_output.PUT_LINE('l_data_set_id <'||l_data_set_id||'>');
4256 IF ((l_temp_data_source IS NOT NULL) AND
4257 (((l_data_source <> l_temp_data_source) AND (l_data_set_id <> -1)) OR
4258 ((l_data_set_id <> -1) AND (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id = -1)))) THEN
4259 FND_MESSAGE.SET_NAME('BSC','BSC_NO_UPDATE_MEASURE_SOURCE');
4260 FND_MSG_PUB.ADD;
4261 RAISE FND_API.G_EXC_ERROR;
4262 ELSIF (l_temp_data_source IS NULL) THEN
4263 FND_MESSAGE.SET_NAME('BSC','BSC_V_NO_MEASURE_BY_DIM_SET');
4264 FND_MESSAGE.SET_TOKEN('DIM_SET', l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id);
4265 FND_MSG_PUB.ADD;
4266 RAISE FND_API.G_EXC_ERROR;
4267 END IF;
4268 END IF;
4269 --dbms_output.PUT_LINE('p_data_source '||l_data_source);
4270 -- START Granular Locking - Lock the KPI Under consideration
4271 BSC_BIS_LOCKS_PUB.LOCK_KPI
4272 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4273 , p_time_stamp => p_time_stamp
4274 , p_Full_Lock_Flag => NULL
4275 , x_return_status => x_return_status
4276 , x_msg_count => x_msg_count
4277 , x_msg_data => x_msg_data
4278 );
4279 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4280 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_KPI - Failed');
4281 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4282 END IF;
4283 --ADDED BY PETER
4284 -- Save the old data set ID for comparison (3169904)
4285 IF (c_old_data_set_id%ISOPEN) THEN
4286 CLOSE c_old_data_set_id;
4287 END IF;
4288 OPEN c_old_data_set_id;
4289 FETCH c_old_data_set_id INTO l_old_data_set_id;
4290 CLOSE c_old_data_set_id;
4291 --END HERE BY PETER
4292 OPEN c_default_calculation;
4293 FETCH c_default_calculation INTO l_def_calc_id;
4294 CLOSE c_default_calculation;
4295
4296 --default_calculation should be cleared off when the current dataset does not support that property
4297 IF l_old_data_set_id <> p_data_set_id AND l_def_calc_id IS NOT NULL AND
4298 BSC_CALCULATIONS_PUB.Is_Calculation_Enabled(p_dataset_id => p_data_set_id, p_calculation_id => l_def_calc_id) = 'N' THEN
4299 BSC_KPI_SERIES_PUB.Save_Default_Calculation(
4300 p_commit => FND_API.G_FALSE
4301 ,p_Indicator => p_kpi_id
4302 ,p_Analysis_Option0 => p_analysis_option_id0
4303 ,p_Analysis_Option1 => p_analysis_option_id1
4304 ,p_Analysis_Option2 => p_analysis_option_id2
4305 ,p_Series_Id => p_series_id
4306 ,p_default_calculation => NULL
4307 ,x_return_status => x_return_status
4308 ,x_msg_count => x_msg_count
4309 ,x_msg_data => x_msg_data
4310 );
4311 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4312 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4313 END IF;
4314 END IF;
4315 -- END Granular Locking - Lock the KPI Under consideration
4316 IF (l_data_source = 'PMF') THEN
4317 IF ((l_dim_set_id IS NULL) OR (l_dim_set_id = 0)) THEN
4318 --Whenever user update Option-0 with a PMF Measure,
4319 --a new dimension set should be created. So change l_dim_set_id to NULL
4320 l_dim_set_id := NULL;
4321 l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id := l_dim_set_id;
4322 END IF;
4323 --dbms_output.PUT_LINE('into the PMF area');
4324 BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults
4325 ( p_commit => FND_API.G_FALSE
4326 , p_data_set_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
4327 , p_measure_short_name => p_measure_short_name
4328 , p_dim_obj_short_names => p_dim_obj_short_names
4329 , p_default_short_names => p_default_short_names
4330 , p_view_by_name => p_view_by_name
4331 , x_dim_obj_short_names => l_dim_obj_short_names
4332 , x_default_short_names => l_default_short_names
4333 , x_view_by_name => l_view_by_name
4334 , x_measure_short_name => l_measure_short_name
4335 , x_return_status => x_return_status
4336 , x_msg_count => x_msg_count
4337 , x_msg_data => x_msg_data
4338 );
4339 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4340 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults');
4341 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4342 END IF;
4343 BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison
4344 ( p_commit => FND_API.G_FALSE
4345 , p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4346 , p_dim_set_id => l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4347 , x_return_status => x_return_status
4348 , x_msg_count => x_msg_count
4349 , x_msg_data => x_msg_data
4350 );
4351 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4352 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Remove_Unused_PMF_Dimenison');
4353 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4354 END IF;
4355 --this following part of the code is copied from BSC_PMF_UI_API_PUB.Create_Bsc_Analysis_Option
4356 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id IS NULL) THEN
4357 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 0;
4358 END IF;
4359 IF (l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id IS NULL) THEN
4360 l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id := 0;
4361 END IF;
4362 IF (l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id IS NULL) THEN
4363 l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id := 0;
4364 END IF;
4365 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 IS NULL) THEN
4366 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
4367 END IF;
4368 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 IS NULL) THEN
4369 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
4370 END IF;
4371 -- Start Granular Locking
4372 l_dim_obj_names := l_dim_obj_short_names;
4373 IF (l_dim_obj_short_names IS NOT NULL) THEN
4374 l_dim_obj_names := l_dim_obj_short_names ;
4375 WHILE (is_more( p_dim_short_names => l_dim_obj_names
4376 , p_dim_short_name => l_dim_obj_name)
4377 ) LOOP
4378 --dbms_output.PUT_LINE('locking .. '|| l_dim_obj_name);
4379 -- added for Bug#3549057
4380 SELECT COUNT(1) INTO l_Count
4381 FROM BSC_SYS_DIM_LEVELS_B
4382 WHERE SHORT_NAME = l_dim_obj_name;
4383
4384 IF (l_Count > 0) THEN
4385
4386 IF (l_dim_obj_tmp_short_names IS NULL) THEN
4387 l_dim_obj_tmp_short_names := l_dim_obj_name;
4388 ELSE
4389 l_dim_obj_tmp_short_names := l_dim_obj_tmp_short_names ||',' || l_dim_obj_name;
4390 END IF;
4391
4392 BSC_BIS_LOCKS_PUB.LOCK_DIM_LEVEL
4393 ( p_dim_level_id => NVL(BSC_DIMENSION_LEVELS_PVT.get_Dim_Level_Id(l_dim_obj_name), -1)
4394 , p_time_stamp => NULL
4395 , x_return_status => x_return_status
4396 , x_msg_count => x_msg_count
4397 , x_msg_data => x_msg_data
4398 );
4399 --dbms_output.PUT_LINE('locked @@ .. '|| l_dim_obj_name);
4400 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4401 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_CREATE_DIMENSION');
4402 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4403 END IF;
4404 END IF;
4405 END LOOP;
4406 END IF;
4407 -- End Granular Locking
4408
4409 -- Over write with valid Dimension Object short_names
4410 -- added for Bug#3549057
4411 l_dim_obj_short_names := l_dim_obj_tmp_short_names;
4412
4413
4414 IF (l_dim_obj_short_names IS NOT NULL) THEN
4415 --dbms_output.PUT_LINE('Create A Unique Dimension Group Short_Name As Well As Display Name');
4416 SELECT NVL(MAX(dim_group_id) + 1, 0) INTO l_count
4417 FROM BSC_SYS_DIM_GROUPS_VL;
4418
4419 l_dim_short_name := l_dim_short_name||l_count;
4420 l_temp_var := l_dim_short_name;
4421 l_alias := NULL;
4422 l_count := 0;
4423 WHILE (l_count <> 0) LOOP
4424 SELECT COUNT(*) INTO l_count
4425 FROM BSC_SYS_DIM_GROUPS_VL
4426 WHERE UPPER(short_name) = l_temp_var
4427 OR UPPER(name) = l_temp_var;
4428 IF (l_count = 0) THEN
4429 l_dim_short_name := l_temp_var;
4430 END IF;
4431 l_alias := BSC_BIS_KPI_MEAS_PUB.get_Next_Alias(l_alias);
4432 l_temp_var := l_dim_short_name||'_'||l_alias;
4433 END LOOP;
4434 --dbms_output.PUT_LINE('Unique Short Name Created '||l_dim_short_name);
4435 --dbms_output.PUT_LINE('l_dim_obj_short_names '||l_dim_obj_short_names);
4436 --dbms_output.PUT_LINE('CREATE DIMENSION GROUPS');
4437 BSC_BIS_DIMENSION_PUB.Create_Dimension
4438 ( p_commit => FND_API.G_FALSE
4439 , p_dim_short_name => l_dim_short_name
4440 , p_display_name => l_dim_short_name
4441 , p_description => l_dim_short_name
4442 , p_dim_obj_short_names => l_dim_obj_short_names
4443 , p_application_id => 271
4444 , p_create_view => 1
4445 , p_hide => FND_API.G_TRUE
4446 , x_return_status => x_return_status
4447 , x_msg_count => x_msg_count
4448 , x_msg_data => x_msg_data
4449 );
4450 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4451 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_DIMENSION_PUB.Create_Dimension');
4452 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4453 END IF;
4454
4455 END IF;
4456 --if dimension set exists than update otherwise create new dimension set
4457 IF (l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id IS NULL) THEN
4458 --dbms_output.PUT_LINE('CREATE DIMENSION SET');
4459 IF (l_dim_obj_short_names IS NULL) THEN
4460 l_dim_short_name := NULL;
4461 END IF;
4462 --get the dimension set Id which is created now
4463 SELECT NVL(MAX(dim_set_id) + 1, 0)
4464 INTO l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4465 FROM BSC_KPI_DIM_SETS_VL
4466 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4467 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set
4468 ( p_commit => FND_API.G_FALSE
4469 , p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4470 , p_display_name => 'Dimension Set '||l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4471 , p_dim_short_names => l_dim_short_name
4472 , p_time_stamp => NULL
4473 , x_return_status => x_return_status
4474 , x_msg_count => x_msg_count
4475 , x_msg_data => x_msg_data
4476 );
4477 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4478 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set');
4479 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4480 END IF;
4481 ELSE
4482 SELECT COUNT(*) INTO l_count
4483 FROM BSC_KPI_DIM_SETS_VL
4484 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4485 AND dim_set_id = l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id;
4486 IF (l_count = 0) THEN
4487 FND_MESSAGE.SET_NAME('BSC', 'BSC_INCORRECT_KPI_DIMSET');
4488 FND_MESSAGE.SET_TOKEN('KPI_ID', l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
4489 FND_MESSAGE.SET_TOKEN('DIM_SET_ID', l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id);
4490 FND_MSG_PUB.ADD;
4491 RAISE FND_API.G_EXC_ERROR;
4492 END IF;
4493 --dbms_output.PUT_LINE('ASSIGN TO DIMENSION SET');
4494 IF (l_dim_obj_short_names IS NULL) THEN
4495 l_dim_short_name := NULL;
4496 END IF;
4497 BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set
4498 ( p_commit => FND_API.G_FALSE
4499 , p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4500 , p_dim_set_id => l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4501 , p_dim_short_names => l_dim_short_name
4502 , x_return_status => x_return_status
4503 , x_msg_count => x_msg_count
4504 , x_msg_data => x_msg_data
4505 );
4506 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4507 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set Failed: at BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set');
4508 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4509 END IF;
4510 END IF;
4511 -- default values and view by
4512 IF (l_default_short_names IS NOT NULL) THEN
4513 l_dim_obj_names := l_default_short_names ;
4514 WHILE (is_more( p_dim_short_names => l_dim_obj_names
4515 , p_dim_short_name => l_dim_obj_name)
4516 ) LOOP
4517 IF (INSTR(l_dim_obj_short_names, l_dim_obj_name) <> 0 ) THEN
4518 l_bsc_dimset_rec.Bsc_Dset_Default_Value := 'LD';
4519 l_bsc_dimset_rec.Bsc_Kpi_Id := l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4520 l_bsc_dimset_rec.Bsc_Dim_Set_Id := l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id;
4521 SELECT level_table_name
4522 INTO l_bsc_dimset_rec.Bsc_Level_Name
4523 FROM BSC_SYS_DIM_LEVELS_B
4524 WHERE Short_Name = l_dim_obj_name;
4525 BSC_DIMENSION_SETS_PUB.Update_Dim_Levels
4526 ( p_commit => FND_API.G_FALSE
4527 , p_Dim_Set_Rec => l_bsc_dimset_rec
4528 , x_return_status => x_return_status
4529 , x_msg_count => x_msg_count
4530 , x_msg_data => x_msg_data
4531 );
4532 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4533 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Levels <'||x_msg_data||'>');
4534 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4535 END IF;
4536 -- default values and view by for shared indicators
4537 FOR cd IN c_kpi_ids LOOP
4538 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
4539 BSC_DIMENSION_SETS_PUB.Update_Dim_Levels
4540 ( p_commit => FND_API.G_FALSE
4541 , p_Dim_Set_Rec => l_bsc_dimset_rec
4542 , x_return_status => x_return_status
4543 , x_msg_count => x_msg_count
4544 , x_msg_data => x_msg_data
4545 );
4546 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4547 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Levels <'||x_msg_data||'>');
4548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4549 END IF;
4550 END LOOP;
4551 END IF;
4552 END LOOP;
4553 END IF;
4554 IF (l_view_by_name IS NOT NULL) THEN
4555 IF (INSTR(l_default_short_names, l_view_by_name) <> 0 ) THEN
4556 l_bsc_dimset_rec.Bsc_Dset_Default_Value := 'C';
4557 l_bsc_dimset_rec.Bsc_Kpi_Id := l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4558 l_bsc_dimset_rec.Bsc_Dim_Set_Id := l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id;
4559 SELECT level_table_name
4560 INTO l_bsc_dimset_rec.Bsc_Level_Name
4561 FROM BSC_SYS_DIM_LEVELS_B
4562 WHERE Short_Name = l_view_by_name;
4563 BSC_DIMENSION_SETS_PUB.Update_Dim_Levels
4564 ( p_commit => FND_API.G_FALSE
4565 , p_Dim_Set_Rec => l_bsc_dimset_rec
4566 , x_return_status => x_return_status
4567 , x_msg_count => x_msg_count
4568 , x_msg_data => x_msg_data
4569 );
4570 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4571 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Levels <'||x_msg_data||'>');
4572 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4573 END IF;
4574 -- default values and view by for shared indicators
4575 FOR cd IN c_kpi_ids LOOP
4576 l_bsc_dimset_rec.Bsc_Kpi_Id := cd.indicator;
4577 BSC_DIMENSION_SETS_PUB.Update_Dim_Levels
4578 ( p_commit => FND_API.G_FALSE
4579 , p_Dim_Set_Rec => l_bsc_dimset_rec
4580 , x_return_status => x_return_status
4581 , x_msg_count => x_msg_count
4582 , x_msg_data => x_msg_data
4583 );
4584 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4585 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.CREATE_DIM_GRP_LEV_IN_DSET Failed: at BSC_DIMENSION_SETS_PUB.Update_Dim_Levels <'||x_msg_data||'>');
4586 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4587 END IF;
4588 END LOOP;
4589 END IF;
4590 END IF;
4591 --Added for bug# 4099118
4592
4593 SELECT indicator_type,config_type
4594 INTO l_indic_type, l_config_type
4595 FROM bsc_kpis_b
4596 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4597 /* MultiBar indicator can have more number of series
4598 but if the first analysis option is PMF Measure then there is no point of
4599 have more than one series under the same analysis option
4600 */
4601 IF(l_indic_type = 10 AND l_config_type = 1) THEN -- Multibar indicator
4602 FOR CD IN C_OPTIONZERO_SOURCE LOOP
4603 IF(cd.dataset_id = -1 OR cd.source ='PMF') THEN
4604 BSC_ANALYSIS_OPTION_PUB.delete_extra_series(
4605 p_Bsc_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4606 , x_return_status => x_return_status
4607 , x_msg_count => x_msg_count
4608 , x_msg_data => x_msg_data
4609 );
4610 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4611 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4612 END IF;
4613 END IF;
4614 END LOOP;
4615 END IF;
4616
4617 SELECT COUNT(1) INTO l_namecount
4618 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
4619 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
4620
4621 SELECT COUNT(1) INTO l_index
4622 FROM BSC_KPI_ANALYSIS_MEASURES_B
4623 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4624 AND analysis_option0 = 0
4625 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
4626 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2
4627 AND series_id = 0
4628 AND dataset_id = -1;
4629
4630
4631 IF (p_update_ana_opt OR ((l_dim_set_id IS NOT NULL) OR
4632 ((l_dim_set_id IS NULL) AND
4633 ((l_index = 1) AND (p_analysis_option_id0 = 0 OR l_namecount = 1))))) THEN
4634 --dbms_output.PUT_LINE('IN IF');
4635
4636 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_analysis_option_id0;
4637 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id IS NULL) THEN
4638 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := 0;
4639 END IF;
4640 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
4641 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Name IS NULL) THEN
4642 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name;
4643 END IF;
4644 BSC_BIS_LOCKS_PUB.LOCK_DATASET
4645 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
4646 , p_time_stamp => NULL
4647 , x_return_status => x_return_status
4648 , x_msg_count => x_msg_count
4649 , x_msg_data => x_msg_data
4650 );
4651 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4652 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DATASET Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4654 END IF;
4655 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
4656 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id);
4657 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id);
4658 -- END Granular Locking
4659 BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options
4660 ( p_commit => FND_API.G_FALSE
4661 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4662 , x_return_status => x_return_status
4663 , x_msg_count => x_msg_count
4664 , x_msg_data => x_msg_data
4665 );
4666 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4667 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4668 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4669 END IF;
4670 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
4671 FOR cd IN c_kpi_ids LOOP
4672 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := cd.indicator;
4673 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
4674 END LOOP;
4675
4676 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
4677 (
4678 p_Kpi_Id => p_kpi_id
4679 , p_Dim_Level_Id => NULL
4680 , x_return_status => x_return_status
4681 , x_msg_count => x_msg_count
4682 , x_msg_data => x_msg_data
4683 );
4684 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4685 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed Failed: BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button');
4686 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4687 END IF;
4688 ELSE
4689 --dbms_output.PUT_LINE('ELSE');
4690 IF (l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name IS NULL) THEN
4691 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4692 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_IVIEWER', 'ANALYSIS_MS'), TRUE);
4693 FND_MSG_PUB.ADD;
4694 RAISE FND_API.G_EXC_ERROR;
4695 END IF;
4696 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Name IS NULL) THEN
4697 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name;
4698 END IF;
4699 BSC_ANALYSIS_OPTION_PUB.Create_Analysis_Options
4700 ( p_commit => FND_API.G_FALSE
4701 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4702 , x_return_status => x_return_status
4703 , x_msg_count => x_msg_count
4704 , x_msg_data => x_msg_data
4705 );
4706 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4707 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Create_Analysis_Options');
4708 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4709 END IF;
4710 END IF;
4711 -- START Granular Locking added by Aditya
4712 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
4713 ( p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4714 , p_dim_set_id => l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4715 , x_return_status => x_return_status
4716 , x_msg_count => x_msg_count
4717 , x_msg_data => x_msg_data
4718 );
4719 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4720 --dbms_output.PUT_LINE('BSC_BIS_DIMENSION_PUB.CREATE_DIM_LEVEL_GROUP Failed: at BSC_DIMENSION_GROUPS_PUB.Update_Dim_Levels_In_Group');
4721 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4722 END IF;
4723 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DATASET
4724 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
4725 , x_return_status => x_return_status
4726 , x_msg_count => x_msg_count
4727 , x_msg_data => x_msg_data
4728 );
4729 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4730 --dbms_output.PUT_LINE('BSC_BIS_DIMENSION_PUB.CREATE_DIM_LEVEL_GROUP Failed: at BSC_DIMENSION_GROUPS_PUB.Update_Dim_Levels_In_Group');
4731 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4732 END IF;
4733 -- END Granular Locking added by Aditya
4734 ELSIF (l_data_source = 'BSC') THEN
4735 -- IF (p_option0_Name IS NOT NULL) THEN /* if changed to fix bug 3149102 */
4736 IF ((p_option0_Name IS NOT NULL) OR (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NOT NULL)) THEN
4737 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_analysis_option_id0;
4738 l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id := NULL;
4739 l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id := NULL;
4740 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := p_option0_Name;
4741 --dbms_output.PUT_LINE('BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options '||p_option0_Name);
4742 -- START Granular Locking
4743 IF (l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id IS NOT NULL) THEN
4744 BSC_BIS_LOCKS_PUB.LOCK_DIM_SET
4745 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4746 , p_Dim_Set_Id => l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
4747 , p_time_stamp => null
4748 , x_return_status => x_return_status
4749 , x_msg_count => x_msg_count
4750 , x_msg_data => x_msg_data
4751 );
4752 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4753 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DIM_SET - Failed');
4754 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4755 END IF;
4756 END IF;
4757 -- Lock the Datasets before UPDATE
4758 -- IF (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NULL) THEN fiexed bug
4759 IF (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NOT NULL) THEN
4760 BSC_BIS_LOCKS_PUB.LOCK_DATASET
4761 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
4762 , p_time_stamp => NULL
4763 , x_return_status => x_return_status
4764 , x_msg_count => x_msg_count
4765 , x_msg_data => x_msg_data
4766 );
4767 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4768 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DATASET Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4769 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4770 END IF;
4771 END IF;
4772 -- END Granular Locking
4773 BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options
4774 ( p_commit => FND_API.G_FALSE
4775 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4776 , p_data_Source => l_data_source
4777 , x_return_status => x_return_status
4778 , x_msg_count => x_msg_count
4779 , x_msg_data => x_msg_data
4780 );
4781 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4782 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4783 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4784 END IF;
4785 IF (p_option1_Name IS NOT NULL) THEN
4786 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_analysis_option_id1;
4787 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := p_option1_Name;
4788 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 1;
4789 BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids
4790 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4791 , p_Analysis_Group_ID => l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id
4792 , p_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id
4793 , p_Parent_Option_ID => p_analysis_option_id0
4794 , p_GrandParent_Option_ID => NULL
4795 , x_Parent_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id
4796 , x_GrandParent_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id
4797 , x_return_status => x_return_status
4798 , x_msg_count => x_msg_count
4799 , x_msg_data => x_msg_data
4800 );
4801 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4802 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids');
4803 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4804 END IF;
4805 l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id := NULL;
4806 --dbms_output.PUT_LINE('BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options1 '||p_option1_Name);
4807 BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options
4808 ( p_commit => FND_API.G_FALSE
4809 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4810 , p_data_Source => l_data_source
4811 , x_return_status => x_return_status
4812 , x_msg_count => x_msg_count
4813 , x_msg_data => x_msg_data
4814 );
4815 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4816 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4817 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4818 END IF;
4819 END IF;
4820 IF (p_option2_Name IS NOT NULL) THEN
4821 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_analysis_option_id2;
4822 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := p_option2_Name;
4823 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 2;
4824 BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids
4825 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4826 , p_Analysis_Group_ID => l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id
4827 , p_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id
4828 , p_Parent_Option_ID => p_analysis_option_id1
4829 , p_GrandParent_Option_ID => p_analysis_option_id0
4830 , x_Parent_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id
4831 , x_GrandParent_Option_ID => l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id
4832 , x_return_status => x_return_status
4833 , x_msg_count => x_msg_count
4834 , x_msg_data => x_msg_data
4835 );
4836 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4837 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Get_Valid_Analysis_Option_Ids');
4838 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4839 END IF;
4840 --dbms_output.PUT_LINE('BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options2 '||p_option2_Name);
4841 BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options
4842 ( p_commit => FND_API.G_FALSE
4843 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
4844 , p_data_Source => l_data_source
4845 , x_return_status => x_return_status
4846 , x_msg_count => x_msg_count
4847 , x_msg_data => x_msg_data
4848 );
4849 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4850 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
4851 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4852 END IF;
4853 END IF;
4854 END IF;
4855 IF ((p_default_value IS NOT NULL) AND (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Id IS NOT NULL)) THEN
4856 --logic for setting BSC_KPI_ANALYSIS_MEASURES_B.Default_Value for multi series indicators
4857 SELECT COUNT(*) INTO l_count FROM BSC_KPI_ANALYSIS_MEASURES_B
4858 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4859 AND analysis_option0 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0
4860 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
4861 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2;
4862 IF (l_count > 1 ) THEN -- this condition ensure that it have many series.
4863 UPDATE BSC_KPI_ANALYSIS_MEASURES_B
4864 SET default_value = 1
4865 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4866 AND analysis_option0 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0
4867 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
4868 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2
4869 AND series_id = p_default_value;
4870
4871 UPDATE BSC_KPI_ANALYSIS_MEASURES_B
4872 SET default_value = 0
4873 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4874 AND analysis_option0 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0
4875 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
4876 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2
4877 AND series_id <> p_default_value;
4878 END IF;
4879 END IF;
4880 --ADDED BY PETER
4881 -- If the data set is changed, we need to flag it as a structural change (3169904)
4882 IF (l_old_data_set_id <> l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id) THEN
4883 BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
4884 FOR cd IN c_kpi_ids LOOP
4885 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := cd.indicator;
4886 BSC_DESIGNER_PVT.ActionFlag_Change(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
4887 END LOOP;
4888 END IF;
4889 --END BY PETER
4890 -- START Granular Locking added by Aditya
4891 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_KPI
4892 ( p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
4893 , x_return_status => x_return_status
4894 , x_msg_count => x_msg_count
4895 , x_msg_data => x_msg_data
4896 );
4897 IF ((x_return_status = FND_API.G_RET_STS_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
4898 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET Failed');
4899 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4900 END IF;
4901 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DATASET
4902 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
4903 , x_return_status => x_return_status
4904 , x_msg_count => x_msg_count
4905 , x_msg_data => x_msg_data
4906 );
4907 IF ((x_return_status = FND_API.G_RET_STS_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
4908 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DATASET Failed');
4909 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4910 END IF;
4911 -- END Granular Locking added by Aditya
4912 END IF;
4913
4914 IF (p_commit = FND_API.G_TRUE) THEN
4915 COMMIT;
4916 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
4917 END IF;
4918 x_return_status := FND_API.G_RET_STS_SUCCESS;
4919 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options procedure');
4920 EXCEPTION
4921 WHEN FND_API.G_EXC_ERROR THEN
4922 IF (c_data_set_id%ISOPEN) THEN
4923 CLOSE c_data_set_id;
4924 END IF;
4925 ROLLBACK TO UpdateBSCKPIAnaOpts;
4926 IF (x_msg_data IS NULL) THEN
4927 FND_MSG_PUB.Count_And_Get
4928 ( p_encoded => FND_API.G_FALSE
4929 , p_count => x_msg_count
4930 , p_data => x_msg_data
4931 );
4932 END IF;
4933 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
4934 x_return_status := FND_API.G_RET_STS_ERROR;
4935 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4936 IF (c_data_set_id%ISOPEN) THEN
4937 CLOSE c_data_set_id;
4938 END IF;
4939 ROLLBACK TO UpdateBSCKPIAnaOpts;
4940 IF (x_msg_data IS NULL) THEN
4941 FND_MSG_PUB.Count_And_Get
4942 ( p_encoded => FND_API.G_FALSE
4943 , p_count => x_msg_count
4944 , p_data => x_msg_data
4945 );
4946 END IF;
4947 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4948 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
4949 WHEN NO_DATA_FOUND THEN
4950 IF (c_data_set_id%ISOPEN) THEN
4951 CLOSE c_data_set_id;
4952 END IF;
4953 ROLLBACK TO UpdateBSCKPIAnaOpts;
4954 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4955 IF (x_msg_data IS NOT NULL) THEN
4956 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options ';
4957 ELSE
4958 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options ';
4959 END IF;
4960 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
4961 WHEN OTHERS THEN
4962 IF (c_data_set_id%ISOPEN) THEN
4963 CLOSE c_data_set_id;
4964 END IF;
4965 ROLLBACK TO UpdateBSCKPIAnaOpts;
4966 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4967 IF (x_msg_data IS NOT NULL) THEN
4968 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options ';
4969 ELSE
4970 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options ';
4971 END IF;
4972 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
4973 END Update_KPI_Analysis_Options;
4974
4975 /*********************************************************************************
4976 API TO CREATE PMF/BSC MEASURES/ANALYSIS OPTIONS WITHIN AN INDICATOR
4977 *********************************************************************************/
4978 -- ADRAO added Short_Name to Analysis Option for Enh#3540302 (ADMINISTRATOR TO ADD KPI TO KPI REGION)
4979 PROCEDURE Create_KPI_Analysis_Options
4980 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
4981 , p_kpi_id IN NUMBER
4982 , p_analysis_group_id IN NUMBER
4983 , p_data_set_id IN NUMBER
4984 , p_measure_short_name IN VARCHAR2
4985 , p_measure_name IN VARCHAR2
4986 , p_measure_help IN VARCHAR2
4987 , p_time_stamp IN VARCHAR2 := NULL
4988 , p_Short_Name IN VARCHAR2 := NULL
4989 , x_return_status OUT NOCOPY VARCHAR2
4990 , x_msg_count OUT NOCOPY NUMBER
4991 , x_msg_data OUT NOCOPY VARCHAR2
4992 ) IS
4993 l_Bsc_Anal_Opt_Rec BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type;
4994 l_count NUMBER;
4995 l_datasource BSC_SYS_DATASETS_B.Source%TYPE;
4996 l_meaning VARCHAR(60);
4997 l_DimObj_ViewBy_Tbl BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type;
4998 l_measure_short_name BSC_SYS_MEASURES.Short_Name%TYPE;
4999 l_sname BSC_KPIS_B.SHORT_NAME%TYPE;
5000
5001 CURSOR c_data_source IS
5002 SELECT Source
5003 FROM BSC_SYS_DATASETS_B
5004 WHERE Dataset_Id = p_data_set_id;
5005
5006 CURSOR c_kpi_ids IS
5007 SELECT indicator
5008 FROM BSC_KPIS_B
5009 WHERE Source_Indicator = p_kpi_id
5010 AND Prototype_Flag <> 2;
5011
5012 l_default_level_set BOOLEAN := FALSE;
5013 l_namecount NUMBER;
5014 l_index NUMBER;
5015 BEGIN
5016 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options procedure');
5017 FND_MSG_PUB.Initialize;
5018 x_return_status := FND_API.G_RET_STS_SUCCESS;
5019 SAVEPOINT CreateBSCKPIAnaOpts;
5020
5021 OPEN c_data_source;
5022 FETCH c_data_source INTO l_datasource;
5023 CLOSE c_data_source;
5024 IF (l_datasource IS NULL) THEN
5025 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
5026 SELECT MEANING INTO l_meaning
5027 FROM BSC_LOOKUPS
5028 WHERE LOOKUP_TYPE = 'BSC_UI_COMMON' AND LOOKUP_CODE = 'EDW_MEASURE' ;
5029 FND_MESSAGE.SET_TOKEN('TYPE', l_meaning, TRUE);
5030 FND_MSG_PUB.ADD;
5031 RAISE FND_API.G_EXC_ERROR;
5032 END IF;
5033 IF ((l_datasource <> 'BSC') AND (l_datasource <> 'PMF')) THEN
5034 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
5035 FND_MSG_PUB.ADD;
5036 RAISE FND_API.G_EXC_ERROR;
5037 END IF;
5038 --Initialize record for BSC_KPI_ANALYSIS_MEASURES_B/TL &BSC_KPI_ANALYSIS_OPTIONS_B/TL
5039 l_measure_short_name := p_measure_short_name;
5040 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := p_measure_name;
5041 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
5042 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
5043 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
5044 l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name := p_measure_name;
5045 l_Bsc_Anal_Opt_Rec.Bsc_Measure_Help := p_measure_help;
5046 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := p_kpi_id;
5047 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Id := 0;
5048 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id := p_data_set_id;
5049 l_Bsc_Anal_Opt_Rec.Bsc_Parent_Option_Id := 0;
5050 l_Bsc_Anal_Opt_Rec.Bsc_Grandparent_Option_Id := 0;
5051 IF (p_analysis_group_id IS NOT NULL) THEN
5052 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := p_analysis_group_id;
5053 ELSE
5054 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 0;
5055 END IF;
5056
5057 l_Bsc_Anal_Opt_Rec.Bsc_Option_Short_Name := p_Short_Name;
5058
5059 IF (l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id IS NULL) THEN
5060 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5061 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5062 FND_MSG_PUB.ADD;
5063 RAISE FND_API.G_EXC_ERROR;
5064 END IF;
5065 IF ((l_datasource = 'BSC') AND (l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id IS NULL)) THEN
5066 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5067 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'DATASET'), TRUE);
5068 FND_MSG_PUB.ADD;
5069 RAISE FND_API.G_EXC_ERROR;
5070 END IF;
5071 SELECT COUNT(*) INTO l_count
5072 FROM BSC_KPIS_B
5073 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5074 IF (l_count = 0) THEN
5075 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
5076 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5077 FND_MSG_PUB.ADD;
5078 RAISE FND_API.G_EXC_ERROR;
5079 END IF;
5080 -- Verify that this is not a Shared KPI.
5081 SELECT share_flag INTO l_count
5082 FROM BSC_KPIS_B
5083 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id ;
5084 IF (l_count = 2) THEN
5085 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
5086 FND_MSG_PUB.ADD;
5087 RAISE FND_API.G_EXC_ERROR;
5088 END IF;
5089 --dbms_output.PUT_LINE('l_datasource '||l_datasource);
5090 IF (l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name IS NULL) THEN
5091 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5092 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_IVIEWER', 'ANALYSIS_MS'), TRUE);
5093 FND_MSG_PUB.ADD;
5094 RAISE FND_API.G_EXC_ERROR;
5095 END IF;
5096 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Name IS NULL) THEN
5097 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name;
5098 END IF;
5099 --START Granular Locking - Lock the KPI Under consideration
5100 BSC_BIS_LOCKS_PUB.LOCK_KPI
5101 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5102 , p_time_stamp => p_time_stamp
5103 , p_Full_Lock_Flag => NULL
5104 , x_return_status => x_return_status
5105 , x_msg_count => x_msg_count
5106 , x_msg_data => x_msg_data
5107 );
5108 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5109 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_KPI - Failed');
5110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5111 END IF;
5112 -- END Granular Locking - Lock the KPI Under consideration
5113 IF (l_datasource = 'PMF') THEN
5114 BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options
5115 ( p_commit => FND_API.G_FALSE
5116 , p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5117 , p_data_source => l_datasource
5118 , p_analysis_group_id => l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id
5119 , p_analysis_option_id0 => NULL
5120 , p_analysis_option_id1 => NULL
5121 , p_analysis_option_id2 => NULL
5122 , p_series_id => NULL
5123 , p_data_set_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
5124 , p_dim_set_id => NULL
5125 , p_option0_Name => l_Bsc_Anal_Opt_Rec.Bsc_Option_Name
5126 , p_option1_Name => NULL
5127 , p_option2_Name => NULL
5128 , p_measure_short_name => NULL
5129 , p_dim_obj_short_names => NULL
5130 , p_default_short_names => NULL
5131 , p_view_by_name => NULL
5132 , p_measure_name => l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name
5133 , p_measure_help => l_Bsc_Anal_Opt_Rec.Bsc_Measure_Help
5134 , p_default_value => NULL
5135 , p_time_stamp => NULL
5136 , x_return_status => x_return_status
5137 , x_msg_count => x_msg_count
5138 , x_msg_data => x_msg_data
5139 );
5140 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5141 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options');
5142 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5143 END IF;
5144 ELSIF (l_datasource = 'BSC') THEN
5145 --for BSC we do not create dimension set. Therefore use the default value for dimension set
5146 l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id := 0;
5147 -- In 5.1.0 the requirement is that whenever we add the BIS/BSC measure the default measure option 0
5148 --should be overridden.Till now we were handling this issue for BIS measures.Now in 5.1.0 we have o handle
5149 --this for BSC measures also.
5150 /*****************conditions to be checked before updating ***********************
5151 If the name of the option 0 is not chnaged.
5152 If the number of the analysis options within the indicator are 1
5153 If the dataset_id is -1.
5154 If all the above conditons are met then only update the option 0.
5155 other wise create a new analysis option.
5156 *********************************************************************************/
5157 SELECT COUNT(0)
5158 INTO l_namecount
5159 FROM BSC_KPI_ANALYSIS_OPTIONS_VL
5160 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5161
5162 SELECT COUNT(*)
5163 INTO l_index
5164 FROM BSC_KPI_ANALYSIS_MEASURES_B
5165 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5166 AND analysis_option0 = 0
5167 AND analysis_option1 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1
5168 AND analysis_option2 = l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2
5169 AND series_id = 0
5170 AND dataset_id = -1;
5171 IF ((l_namecount =1) AND (l_index=1)AND (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id = 0)) THEN
5172 SELECT Option_Id
5173 INTO l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0
5174 FROM BSC_KPI_ANALYSIS_OPTIONS_B
5175 WHERE Indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5176 AND Analysis_Group_Id = l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id;
5177 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0;
5178 IF (l_Bsc_Anal_Opt_Rec.Bsc_Option_Name IS NULL) THEN
5179 l_Bsc_Anal_Opt_Rec.Bsc_Option_Name := l_Bsc_Anal_Opt_Rec.Bsc_Measure_Long_Name;
5180 END IF;
5181 BSC_BIS_LOCKS_PUB.LOCK_DATASET
5182 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
5183 , p_time_stamp => NULL
5184 , x_return_status => x_return_status
5185 , x_msg_count => x_msg_count
5186 , x_msg_data => x_msg_data
5187 );
5188 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5189 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_DATASET Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
5190 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5191 END IF;
5192 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
5193 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id);
5194 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id);
5195 -- END Granular Locking
5196 BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options
5197 ( p_commit => FND_API.G_FALSE
5198 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
5199 , x_return_status => x_return_status
5200 , x_msg_count => x_msg_count
5201 , x_msg_data => x_msg_data
5202 );
5203 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5204 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Update_Analysis_Options');
5205 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5206 END IF;
5207 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
5208 FOR cd IN c_kpi_ids LOOP
5209 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := cd.indicator;
5210 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
5211 END LOOP;
5212 ELSE
5213 SELECT COUNT(Option_Id) + 1
5214 INTO l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0
5215 FROM BSC_KPI_ANALYSIS_OPTIONS_B
5216 WHERE Indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5217 AND Analysis_Group_Id = l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id;
5218
5219 -- START Granular Locking added by Aditya
5220 BSC_ANALYSIS_OPTION_PUB.Create_Analysis_Options
5221 ( p_commit => FND_API.G_FALSE
5222 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
5223 , x_return_status => x_return_status
5224 , x_msg_count => x_msg_count
5225 , x_msg_data => x_msg_data
5226 );
5227 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5228 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Create_Analysis_Options');
5229 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5230 END IF;
5231 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DATASET
5232 ( p_dataset_id => l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Id
5233 , x_return_status => x_return_status
5234 , x_msg_count => x_msg_count
5235 , x_msg_data => x_msg_data
5236 );
5237 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5238 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DATASET Failed');
5239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5240 END IF;
5241 -- Added by ADRAO
5242 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_KPI
5243 ( p_kpi_id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5244 , x_return_status => x_return_status
5245 , x_msg_count => x_msg_count
5246 , x_msg_data => x_msg_data
5247 );
5248 IF ((x_return_status = FND_API.G_RET_STS_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
5249 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5250 END IF;
5251 -- END Granular Locking added by Aditya
5252 END IF;
5253 END IF;
5254
5255 SELECT short_name
5256 INTO l_sname
5257 FROM BSC_KPIS_B
5258 WHERE INDICATOR = p_kpi_id ;
5259
5260 IF ((l_datasource = 'BSC') OR (l_sname IS NOT NULL)) THEN
5261 BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
5262 FOR cd IN c_kpi_ids LOOP
5263 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := cd.indicator;
5264 BSC_DESIGNER_PVT.ActionFlag_Change(l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
5265 END LOOP;
5266
5267 END IF;
5268
5269 IF (p_commit = FND_API.G_TRUE) THEN
5270 COMMIT;
5271 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
5272 END IF;
5273 x_return_status := FND_API.G_RET_STS_SUCCESS;
5274 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options procedure');
5275 EXCEPTION
5276 WHEN FND_API.G_EXC_ERROR THEN
5277 IF (c_data_source%ISOPEN)THEN
5278 CLOSE c_data_source;
5279 END IF;
5280 ROLLBACK TO CreateBSCKPIAnaOpts;
5281 IF (x_msg_data IS NULL) THEN
5282 FND_MSG_PUB.Count_And_Get
5283 ( p_encoded => FND_API.G_FALSE
5284 , p_count => x_msg_count
5285 , p_data => x_msg_data
5286 );
5287 END IF;
5288 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
5289 x_return_status := FND_API.G_RET_STS_ERROR;
5290 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5291 IF (c_data_source%ISOPEN)THEN
5292 CLOSE c_data_source;
5293 END IF;
5294 ROLLBACK TO CreateBSCKPIAnaOpts;
5295 IF (x_msg_data IS NULL) THEN
5296 FND_MSG_PUB.Count_And_Get
5297 ( p_encoded => FND_API.G_FALSE
5298 , p_count => x_msg_count
5299 , p_data => x_msg_data
5300 );
5301 END IF;
5302 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5303 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
5304 WHEN NO_DATA_FOUND THEN
5305 IF (c_data_source%ISOPEN)THEN
5306 CLOSE c_data_source;
5307 END IF;
5308 ROLLBACK TO CreateBSCKPIAnaOpts;
5309 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5310 IF (x_msg_data IS NOT NULL) THEN
5311 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options ';
5312 ELSE
5313 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options ';
5314 END IF;
5315 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
5316 WHEN OTHERS THEN
5317 IF (c_data_source%ISOPEN)THEN
5318 CLOSE c_data_source;
5319 END IF;
5320 ROLLBACK TO CreateBSCKPIAnaOpts;
5321 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5322 IF (x_msg_data IS NOT NULL) THEN
5323 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options ';
5324 ELSE
5325 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options ';
5326 END IF;
5327 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
5328 END Create_KPI_Analysis_Options;
5329 /*********************************************************************************
5330 API TO DELETE PMF/BSC MEASURES/ANALYSIS OPTIONS WITHIN AN INDICATOR
5331 *********************************************************************************/
5332 /*PROCEDURE Delete_KPI_Analysis_Options
5333 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
5334 , p_kpi_id IN NUMBER
5335 , p_data_source IN VARCHAR2
5336 , p_option_id IN NUMBER
5337 , p_time_stamp IN VARCHAR2 := NULL
5338 , x_return_status OUT NOCOPY VARCHAR2
5339 , x_msg_count OUT NOCOPY NUMBER
5340 , x_msg_data OUT NOCOPY VARCHAR2
5341 ) IS
5342 l_count NUMBER;
5343 l_new_count NUMBER;
5344 l_tab_id NUMBER;
5345 l_dim_set_id NUMBER;
5346
5347 l_Bsc_Anal_Opt_Rec BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type;
5348 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
5349 l_Bsc_Dim_Set_Rec_Type BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
5350 BEGIN
5351 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options procedure');
5352 FND_MSG_PUB.Initialize;
5353 x_return_status := FND_API.G_RET_STS_SUCCESS;
5354 SAVEPOINT DeleteBSCKPIAnaOpts;
5355 IF (p_data_source IS NULL) THEN
5356 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5357 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DATA_SOURCE'), TRUE);
5358 FND_MSG_PUB.ADD;
5359 RAISE FND_API.G_EXC_ERROR;
5360 END IF;
5361 IF ((p_data_source <> 'BSC') AND (p_data_source <> 'PMF')) THEN
5362 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
5363 FND_MSG_PUB.ADD;
5364 RAISE FND_API.G_EXC_ERROR;
5365 END IF;
5366 --Initialize record for BSC_KPI_ANALYSIS_MEASURES_B/TL &BSC_KPI_ANALYSIS_OPTIONS_B/TL
5367 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := p_kpi_id; -- BSC_KPI_ANALYSIS_OPTIONS_TL.indicator
5368 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_option_id; -- BSC_KPI_ANALYSIS_OPTIONS_TL.option_id
5369 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 0; -- BSC_KPI_ANALYSIS_OPTIONS_TL.analysis_group_id
5370
5371 -- we also need to normalize the values for column ANALYSYS_OPTION0,
5372 -- ANALYSYS_OPTION1, ANALYSYS_OPTION2 based on group id.
5373 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id = 0) THEN
5374 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
5375 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
5376 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
5377 ELSIF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id = 1) THEN
5378 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
5379 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
5380 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
5381 ELSE
5382 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
5383 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
5384 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
5385 END IF;
5386 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
5387 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id);
5388 --dbms_output.PUT_LINE('l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id '||l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id);
5389 IF (l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id IS NULL) THEN
5390 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5391 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5392 FND_MSG_PUB.ADD;
5393 RAISE FND_API.G_EXC_ERROR;
5394 END IF;
5395
5396 SELECT COUNT(*) INTO l_count
5397 FROM BSC_KPIS_B
5398 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5399 IF (l_count = 0) THEN
5400 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
5401 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5402 FND_MSG_PUB.ADD;
5403 RAISE FND_API.G_EXC_ERROR;
5404 END IF;
5405 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id IS NULL) THEN
5406 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5407 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ANALYSIS_OPTIONS'), TRUE);
5408 FND_MSG_PUB.ADD;
5409 RAISE FND_API.G_EXC_ERROR;
5410 END IF;
5411 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id IS NULL) THEN
5412 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5413 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ANALYSIS_GROUP'), TRUE);
5414 FND_MSG_PUB.ADD;
5415 RAISE FND_API.G_EXC_ERROR;
5416 END IF;
5417 -- Verify that this is not a Shared KPI.
5418 SELECT share_flag INTO l_count
5419 FROM BSC_KPIS_B
5420 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id ;
5421 IF (l_count = 2) THEN
5422 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
5423 --FND_MESSAGE.SET_TOKEN('BSC_KPI', l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id);
5424 FND_MSG_PUB.ADD;
5425 RAISE FND_API.G_EXC_ERROR;
5426 END IF;
5427 --Determine if Indicator assigned to a tab.
5428 SELECT COUNT(indicator) INTO l_count
5429 FROM BSC_TAB_INDICATORS
5430 WHERE indicator = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id;
5431 -- if indicator assigned to tab get tab id.
5432 IF(l_count > 0) THEN
5433 SELECT tab_id INTO l_tab_id
5434 FROM BSC_TAB_INDICATORS
5435 WHERE indicator = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id;
5436 END IF;
5437 -- obtain dimension set id this option is using.
5438 SELECT dim_set_id INTO l_dim_set_id
5439 FROM BSC_KPI_ANALYSIS_OPTIONS_B
5440 WHERE indicator = p_kpi_id
5441 AND analysis_group_id = 0
5442 AND option_id = p_option_id;
5443
5444 -- START Granular Locking - Lock the KPI Under consideration
5445 BSC_BIS_LOCKS_PUB.LOCK_KPI
5446 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5447 , p_time_stamp => NULL
5448 , p_Full_Lock_Flag => NULL
5449 , x_return_status => x_return_status
5450 , x_msg_count => x_msg_count
5451 , x_msg_data => x_msg_data
5452 );
5453 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5454 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_KPI - Failed');
5455 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5456 END IF;
5457 --Determine number of distinct dataset_id before delete.
5458 SELECT COUNT (DISTINCT dataset_id) INTO l_count
5459 FROM BSC_KPI_ANALYSIS_MEASURES_B
5460 WHERE INDICATOR = p_kpi_id;
5461
5462 -- END Granular Locking - Lock the KPI Under consideration
5463 BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options
5464 ( p_commit => FND_API.G_FALSE
5465 , p_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
5466 , x_return_status => x_return_status
5467 , x_msg_count => x_msg_count
5468 , x_msg_data => x_msg_data
5469 );
5470 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5471 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options');
5472 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5473 END IF;
5474 --Determine number of distinct dataset_id after delete.
5475 SELECT COUNT (DISTINCT dataset_id) INTO l_new_count
5476 FROM BSC_KPI_ANALYSIS_MEASURES_B
5477 WHERE INDICATOR=p_kpi_id;
5478 IF (l_count <> l_new_count) THEN
5479 -- fixed bug#3136769
5480 BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
5481 END IF;
5482 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id := p_kpi_id;
5483 BSC_KPI_PUB.Update_Kpi_Time_Stamp
5484 ( p_commit => FND_API.G_FALSE
5485 , p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
5486 , x_return_status => x_return_status
5487 , x_msg_count => x_msg_count
5488 , x_msg_data => x_msg_data
5489 );
5490 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5491 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_KPI_PUB.Update_Kpi_Time_Stamp');
5492 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5493 END IF;
5494 -- Determine if the dimension set is being used by other options.
5495 IF (p_data_source = 'PMF') THEN
5496 SELECT COUNT(option_id) INTO l_count
5497 FROM BSC_KPI_ANALYSIS_OPTIONS_B
5498 WHERE indicator = p_kpi_id
5499 AND dim_set_id = l_dim_set_id;
5500 -- If there are no more options using this dim set delete it.
5501 IF (l_count = 0) THEN
5502 BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set
5503 ( p_commit => FND_API.G_FALSE
5504 , p_kpi_id => p_kpi_id
5505 , p_dim_set_id => l_dim_set_id
5506 , x_return_status => x_return_status
5507 , x_msg_count => x_msg_count
5508 , x_msg_data => x_msg_data
5509 );
5510 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5511 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set');
5512 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5513 END IF;
5514 -- Need to call procedure for list button logic.
5515 BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels
5516 ( p_commit => FND_API.G_FALSE
5517 , p_Tab_Id => l_tab_id
5518 , x_return_status => x_return_status
5519 , x_msg_count => x_msg_count
5520 , x_msg_data => x_msg_data
5521 );
5522 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5523 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels');
5524 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5525 END IF;
5526 END IF;
5527 END IF;
5528 IF (p_commit = FND_API.G_TRUE) THEN
5529 COMMIT;
5530 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
5531 END IF;
5532 x_return_status := FND_API.G_RET_STS_SUCCESS;
5533 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options procedure');
5534 EXCEPTION
5535 WHEN FND_API.G_EXC_ERROR THEN
5536 ROLLBACK TO DeleteBSCKPIAnaOpts;
5537 IF (x_msg_data IS NULL) THEN
5538 FND_MSG_PUB.Count_And_Get
5539 ( p_encoded => FND_API.G_FALSE
5540 , p_count => x_msg_count
5541 , p_data => x_msg_data
5542 );
5543 END IF;
5544 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
5545 x_return_status := FND_API.G_RET_STS_ERROR;
5546 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5547 ROLLBACK TO DeleteBSCKPIAnaOpts;
5548 IF (x_msg_data IS NULL) THEN
5549 FND_MSG_PUB.Count_And_Get
5550 ( p_encoded => FND_API.G_FALSE
5551 , p_count => x_msg_count
5552 , p_data => x_msg_data
5553 );
5554 END IF;
5555 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5556 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
5557 WHEN NO_DATA_FOUND THEN
5558 ROLLBACK TO DeleteBSCKPIAnaOpts;
5559 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5560 IF (x_msg_data IS NOT NULL) THEN
5561 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5562 ELSE
5563 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5564 END IF;
5565 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
5566 WHEN OTHERS THEN
5567 ROLLBACK TO DeleteBSCKPIAnaOpts;
5568 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5569 IF (x_msg_data IS NOT NULL) THEN
5570 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5571 ELSE
5572 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5573 END IF;
5574 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
5575 END Delete_KPI_Analysis_Options; */
5576 /************************************************************************************
5577 DELETE_KPI_ANALYSIS_OPTIONS
5578 ************************************************************************************/
5579 PROCEDURE Delete_KPI_Analysis_Options
5580 ( p_Bsc_Anal_Opt_Rec IN BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type
5581 , p_data_source IN VARCHAR2
5582 , x_return_status OUT NOCOPY VARCHAR2
5583 , x_msg_count OUT NOCOPY NUMBER
5584 , x_msg_data OUT NOCOPY VARCHAR2
5585 ) IS
5586 l_count NUMBER;
5587 l_tab_id NUMBER;
5588 l_regions VARCHAR2(32000);
5589 l_dim_group_id BSC_SYS_DIM_GROUPS_VL.DIM_GROUP_ID%TYPE;
5590 l_dim_shortName BSC_SYS_DIM_GROUPS_VL.SHORT_NAME%TYPE;
5591
5592 CURSOR c_dim_group_id IS
5593 SELECT
5594 dim_group_id
5595 FROM
5596 BSC_KPI_DIM_GROUPS
5597 WHERE
5598 Dim_Set_Id = p_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id AND
5599 Indicator = p_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5600
5601 CURSOR c_dim_short_name(p_dim_group_id NUMBER) IS
5602 SELECT
5603 short_name
5604 FROM
5605 BSC_SYS_DIM_GROUPS_VL
5606 WHERE
5607 dim_group_id = p_dim_group_id;
5608
5609
5610 BEGIN
5611 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options procedure');
5612 FND_MSG_PUB.Initialize;
5613 x_return_status := FND_API.G_RET_STS_SUCCESS;
5614 SAVEPOINT DeleteBSCKPIAnaOpts;
5615 -- we also need to normalize the values for column ANALYSYS_OPTION0,
5616 -- ANALYSYS_OPTION1, ANALYSYS_OPTION2 based on group id.
5617
5618 -- END Granular Locking - Lock the KPI Under consideration
5619 BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options
5620 ( p_commit => FND_API.G_FALSE
5621 , p_Anal_Opt_Rec => p_Bsc_Anal_Opt_Rec
5622 , x_return_status => x_return_status
5623 , x_msg_count => x_msg_count
5624 , x_msg_data => x_msg_data
5625 );
5626 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5627 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options');
5628 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5629 END IF;
5630 -- Determine if the dimension set is being used by other options.
5631 IF (p_data_source = 'PMF') THEN
5632 SELECT COUNT(option_id) INTO l_count
5633 FROM BSC_KPI_ANALYSIS_OPTIONS_B
5634 WHERE indicator = p_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5635 AND dim_set_id = p_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id;
5636
5637 --Fetch the dim group id before deleting the objective.
5638 l_dim_group_id := -1;
5639 OPEN c_dim_group_id;
5640 FETCH c_dim_group_id INTO l_dim_group_id;
5641 CLOSE c_dim_group_id;
5642
5643 -- If there are no more options using this dim set delete it.
5644 IF (l_count = 0) THEN
5645 BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set
5646 ( p_commit => FND_API.G_FALSE
5647 , p_kpi_id => p_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
5648 , p_dim_set_id => p_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
5649 , x_return_status => x_return_status
5650 , x_msg_count => x_msg_count
5651 , x_msg_data => x_msg_data
5652 );
5653 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5654 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Set');
5655 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5656 END IF;
5657
5658 --Determine if Indicator assigned to a tab.
5659 SELECT COUNT(indicator) INTO l_count
5660 FROM BSC_TAB_INDICATORS
5661 WHERE indicator = p_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5662 -- if indicator assigned to tab get tab id.
5663 IF(l_count > 0) THEN
5664 SELECT tab_id INTO l_tab_id
5665 FROM BSC_TAB_INDICATORS
5666 WHERE indicator = p_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
5667 END IF;
5668 -- Need to call procedure for list button logic.
5669 BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels
5670 ( p_commit => FND_API.G_FALSE
5671 , p_Tab_Id => l_tab_id
5672 , x_return_status => x_return_status
5673 , x_msg_count => x_msg_count
5674 , x_msg_data => x_msg_data
5675 );
5676 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5677 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Analysis_Options Failed: at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels');
5678 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5679 END IF;
5680 END IF;
5681
5682 IF(l_dim_group_id <> -1) THEN
5683 OPEN c_dim_short_name(l_dim_group_id);
5684 FETCH c_dim_short_name INTO l_dim_shortName;
5685 CLOSE c_dim_short_name;
5686 --delete the imported dimensions if it is not used in any report
5687 l_regions := BSC_UTILITY.Is_Dim_In_AKReport(l_dim_shortName, BSC_UTILITY.c_DIMENSION);
5688 IF(l_regions IS NULL AND l_dim_shortName IS NOT NULL) THEN
5689 BSC_BIS_DIMENSION_PUB.Delete_Dimension
5690 ( p_commit => FND_API.G_FALSE
5691 , p_dim_short_name => l_dim_shortName
5692 , x_return_status => x_return_status
5693 , x_msg_count => x_msg_count
5694 , x_msg_data => x_msg_data
5695 );
5696 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
5697 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5698 END IF;
5699 END IF;
5700 END IF;
5701 END IF;
5702 x_return_status := FND_API.G_RET_STS_SUCCESS;
5703 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options procedure');
5704 EXCEPTION
5705 WHEN FND_API.G_EXC_ERROR THEN
5706 ROLLBACK TO DeleteBSCKPIAnaOpts;
5707 IF (x_msg_data IS NULL) THEN
5708 FND_MSG_PUB.Count_And_Get
5709 ( p_encoded => FND_API.G_FALSE
5710 , p_count => x_msg_count
5711 , p_data => x_msg_data
5712 );
5713 END IF;
5714 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
5715 x_return_status := FND_API.G_RET_STS_ERROR;
5716 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5717 ROLLBACK TO DeleteBSCKPIAnaOpts;
5718 IF (x_msg_data IS NULL) THEN
5719 FND_MSG_PUB.Count_And_Get
5720 ( p_encoded => FND_API.G_FALSE
5721 , p_count => x_msg_count
5722 , p_data => x_msg_data
5723 );
5724 END IF;
5725 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5726 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
5727 WHEN NO_DATA_FOUND THEN
5728 ROLLBACK TO DeleteBSCKPIAnaOpts;
5729 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5730 IF (x_msg_data IS NOT NULL) THEN
5731 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5732 ELSE
5733 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5734 END IF;
5735 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
5736 WHEN OTHERS THEN
5737 ROLLBACK TO DeleteBSCKPIAnaOpts;
5738 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5739 IF (x_msg_data IS NOT NULL) THEN
5740 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5741 ELSE
5742 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options ';
5743 END IF;
5744 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
5745 END Delete_KPI_Analysis_Options;
5746 /************************************************************************************
5747 UPDATE KPIS
5748 ************************************************************************************/
5749 PROCEDURE Update_Kpi
5750 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
5751 , p_kpi_id IN NUMBER
5752 , p_kpi_name IN VARCHAR2
5753 , p_kpi_help IN VARCHAR2 := NULL
5754 , p_responsibility_id IN NUMBER := NULL
5755 , p_default_value IN NUMBER
5756 , p_BM_Property_Value IN NUMBER := BSC_KPI_PUB.Benchmark_Kpi_Line_Graph -- 0 For Lines and 1 for Bars
5757 , p_time_stamp IN VARCHAR2 := NULL
5758 , p_Anal_opt0 IN BSC_KPI_ANALYSIS_MEASURES_B.analysis_option0%TYPE
5759 , p_Anal_opt1 IN BSC_KPI_ANALYSIS_MEASURES_B.analysis_option1%TYPE
5760 , p_Anal_opt2 IN BSC_KPI_ANALYSIS_MEASURES_B.analysis_option2%TYPE
5761 , p_Anal_Series IN BSC_KPI_ANALYSIS_MEASURES_B.series_id%TYPE
5762 , x_return_status OUT NOCOPY VARCHAR2
5763 , x_msg_count OUT NOCOPY NUMBER
5764 , x_msg_data OUT NOCOPY VARCHAR2
5765 ) IS
5766 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
5767 l_commit VARCHAR2(10);
5768 l_tab_name BSC_TABS_TL.name%TYPE;
5769 l_count NUMBER;
5770 l_max_group_count NUMBER;
5771 l_anal_grp_id NUMBER;
5772 l_Anal_Num_Tbl BSC_ANALYSIS_OPTION_PUB.Anal_Opt_Comb_Num_Tbl_Type;
5773 l_Old_Anal_Num_Tbl BSC_ANALYSIS_OPTION_PUB.Anal_Opt_Comb_Num_Tbl_Type;
5774
5775 l_obj_prototype_flag BSC_KPIS_B.prototype_flag%TYPE;
5776 l_color_rollup_type BSC_KPIS_B.color_rollup_type%TYPE;
5777 l_def_kpi_measure_id BSC_KPI_ANALYSIS_MEASURES_VL.kpi_measure_id%TYPE;
5778 l_kpi_measure_id BSC_KPI_ANALYSIS_MEASURES_VL.kpi_measure_id%TYPE;
5779
5780
5781 CURSOR c_kpi_ids IS
5782 SELECT indicator
5783 FROM BSC_KPIS_B
5784 WHERE Source_Indicator = p_kpi_id
5785 AND Prototype_Flag <> 2;
5786
5787 CURSOR c_dft_anal_ids IS
5788 SELECT analysis_option0
5789 , analysis_option1
5790 , analysis_option2
5791 , series_id
5792 FROM bsc_oaf_analysys_opt_comb_v
5793 WHERE indicator = p_kpi_id
5794 AND default_flag = 1;
5795
5796
5797 BEGIN
5798 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Update_Kpi procedure');
5799 SAVEPOINT UpdatePMDBSCKPIs;
5800 x_return_status := FND_API.G_RET_STS_SUCCESS;
5801 FND_MSG_PUB.Initialize;
5802 IF (p_kpi_id IS NULL) THEN
5803 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
5804 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5805 FND_MSG_PUB.ADD;
5806 RAISE FND_API.G_EXC_ERROR;
5807 END IF;
5808 SELECT COUNT(*) INTO l_count
5809 FROM BSC_KPIS_B
5810 WHERE indicator = p_kpi_id;
5811 IF (l_count = 0) THEN
5812 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
5813 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
5814 FND_MSG_PUB.ADD;
5815 RAISE FND_API.G_EXC_ERROR;
5816 END IF;
5817 -- Verify that this is not a Shared KPI.
5818 SELECT share_flag
5819 INTO l_count
5820 FROM bsc_kpis_b
5821 WHERE indicator = p_kpi_id ;
5822 IF (l_count = 2) THEN
5823 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
5824 --FND_MESSAGE.SET_TOKEN('BSC_KPI', p_kpi_id);
5825 FND_MSG_PUB.ADD;
5826 RAISE FND_API.G_EXC_ERROR;
5827 END IF;
5828 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id := p_kpi_id;
5829
5830 l_Anal_Num_Tbl(0) := p_Anal_opt0;
5831 l_Anal_Num_Tbl(1) := p_Anal_opt1;
5832 l_Anal_Num_Tbl(2) := p_Anal_opt2;
5833
5834 l_anal_grp_id := BSC_ANALYSIS_OPTION_PUB.get_Analysis_Group_Id
5835 (
5836 p_Anal_Opt_Comb_Tbl => l_Anal_Num_Tbl
5837 , p_obj_id => p_kpi_id
5838 );
5839 l_Anal_Num_Tbl(3) := p_Anal_Series;
5840
5841 FOR cd_df IN c_dft_anal_ids LOOP
5842 l_Old_Anal_Num_Tbl(0) := cd_df.analysis_option0;
5843 l_Old_Anal_Num_Tbl(1) := cd_df.analysis_option1;
5844 l_Old_Anal_Num_Tbl(2) := cd_df.analysis_option2;
5845 l_Old_Anal_Num_Tbl(3) := cd_df.series_id;
5846 END LOOP;
5847
5848
5849 l_Bsc_Kpi_Entity_Rec.Bsc_Anal_Group_Id := l_anal_grp_id;
5850 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Name := p_kpi_name;
5851 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Help := p_kpi_help;
5852 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Default_Value := p_default_value;
5853 l_Bsc_Kpi_Entity_Rec.Bsc_Anal_Opt_Comb_Tbl := l_Anal_Num_Tbl;
5854
5855
5856
5857 IF ((p_BM_Property_Value IS NOT NULL) AND (p_BM_Property_Value <> BSC_KPI_PUB.Benchmark_Kpi_Line_Graph)) THEN
5858 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Property_Code := BSC_KPI_PUB.Benchmark_Kpi_Property;
5859 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Property_Value := BSC_KPI_PUB.Benchmark_Kpi_Bar_Graph;
5860 ELSE
5861 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Property_Code := BSC_KPI_PUB.Benchmark_Kpi_Property;
5862 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Property_Value := BSC_KPI_PUB.Benchmark_Kpi_Line_Graph;
5863 END IF;
5864 -- Set some default values.
5865 -- Added by ADRAO
5866 BSC_BIS_LOCKS_PUB.LOCK_KPI
5867 ( p_Kpi_Id => l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id
5868 , p_time_stamp => p_time_stamp
5869 , p_Full_Lock_Flag => NULL
5870 , x_return_status => x_return_status
5871 , x_msg_count => x_msg_count
5872 , x_msg_data => x_msg_data
5873 );
5874 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5875 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_KPI - Failed');
5876 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5877 END IF;
5878 -- We need to check if there is an update on the Indicator name in order
5879 -- to prevent it. To do this we need to check if there is a different
5880 -- indicator in the same tab with the same name.
5881 SELECT COUNT(indicator) INTO l_count
5882 FROM BSC_TAB_INDICATORS A
5883 WHERE A.Indicator <> p_kpi_id
5884 AND A.Tab_Id = (SELECT Tab_Id FROM BSC_TAB_INDICATORS WHERE Indicator = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id)
5885 AND A.Indicator IN (SELECT Indicator FROM BSC_KPIS_TL WHERE Name = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Name);
5886 IF (l_count <> 0) THEN
5887 SELECT v.name
5888 INTO l_tab_name
5889 FROM bsc_tabs_vl v
5890 ,bsc_tab_indicators w
5891 WHERE v.tab_id =w.tab_id
5892 AND w.indicator = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id;
5893
5894 FND_MESSAGE.SET_NAME('BSC','BSC_B_NO_SAMEKPI_TAB');
5895 FND_MESSAGE.SET_TOKEN('Indicator name: ', p_kpi_name);
5896 FND_MESSAGE.SET_TOKEN('Tab name: ', l_tab_name);
5897 FND_MSG_PUB.ADD;
5898 RAISE FND_API.G_EXC_ERROR;
5899 END IF;
5900
5901
5902 BSC_KPI_PUB.Update_Kpi
5903 ( p_commit => FND_API.G_FALSE
5904 , p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
5905 , x_return_status => x_return_status
5906 , x_msg_count => x_msg_count
5907 , x_msg_data => x_msg_data
5908 );
5909 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5910 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Kpi Failed: at BSC_KPI_PUB.Update_Kpi');
5911 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5912 END IF;
5913
5914 -- Fixed Bug#3663301, Called ActionFlag_Change with a Color Flag
5915 IF (l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Default_Value IS NOT NULL) THEN
5916 IF(BSC_ANALYSIS_OPTION_PUB.Default_Anal_Option_Changed(l_Anal_Num_Tbl,l_Old_Anal_Num_Tbl))THEN
5917
5918 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id);
5919
5920 SELECT kpi_measure_id
5921 INTO l_kpi_measure_id
5922 FROM bsc_kpi_analysis_measures_vl
5923 WHERE analysis_option0 = p_Anal_opt0
5924 AND analysis_option1 = p_Anal_opt1
5925 AND analysis_option2 = p_Anal_opt2
5926 AND series_id = p_Anal_Series
5927 AND indicator = p_kpi_id;
5928
5929 SELECT bk.color_rollup_type, km.kpi_measure_id, bk.prototype_flag
5930 INTO l_color_rollup_type, l_def_kpi_measure_id, l_obj_prototype_flag
5931 FROM bsc_db_color_ao_defaults_v dd, bsc_kpi_analysis_measures_vl km, bsc_kpis_b bk
5932 WHERE km.indicator = l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id AND
5933 bk.indicator = km.indicator AND
5934 km.indicator = dd.indicator AND
5935 dd.a0_default = km.analysis_option0 AND
5936 dd.a1_default = km.analysis_option1 AND
5937 dd.a2_default = km.analysis_option2 AND
5938 km.default_value = 1;
5939
5940 IF (l_obj_prototype_flag <> 2 AND
5941 l_obj_prototype_flag <> '7' AND
5942 ((l_color_rollup_type = BSC_COLOR_CALC_UTIL.DEFAULT_KPI AND l_def_kpi_measure_id = l_kpi_measure_id)
5943 --OR (l_color_rollup_type <> BSC_COLOR_CALC_UTIL.DEFAULT_KPI))) THEN
5944 )) THEN
5945
5946 BSC_KPI_COLOR_PROPERTIES_PUB.Obj_Prototype_Flag_Change
5947 ( p_objective_id => l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id
5948 , p_prototype_flag => '7'
5949 , x_return_status => x_return_status
5950 , x_msg_count => x_msg_count
5951 , x_msg_data => x_msg_data
5952 );
5953
5954 END IF;
5955
5956 --BSC_DESIGNER_PVT.ActionFlag_Change(l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color);
5957 FOR cd IN c_kpi_ids LOOP
5958 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id := cd.indicator;
5959 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id);
5960 --BSC_DESIGNER_PVT.ActionFlag_Change(l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color);
5961 END LOOP;
5962
5963 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
5964 (
5965 p_Kpi_Id => p_kpi_id
5966 , p_Dim_Level_Id => NULL
5967 , x_return_status => x_return_status
5968 , x_msg_count => x_msg_count
5969 , x_msg_data => x_msg_data
5970 );
5971 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5972 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Update_Kpi Failed:at BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button');
5973 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5974 END IF;
5975 END IF;
5976 END IF;
5977
5978 -- Added by ADRAO
5979 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_KPI
5980 ( p_kpi_id => l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id
5981 , x_return_status => x_return_status
5982 , x_msg_count => x_msg_count
5983 , x_msg_data => x_msg_data
5984 );
5985 IF ((x_return_status = FND_API.G_RET_STS_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
5986 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5987 END IF;
5988 IF (p_commit = FND_API.G_TRUE) THEN
5989 COMMIT;
5990 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
5991 END IF;
5992 x_return_status := FND_API.G_RET_STS_SUCCESS;
5993 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Update_Kpi procedure');
5994 EXCEPTION
5995 WHEN FND_API.G_EXC_ERROR THEN
5996 ROLLBACK TO UpdatePMDBSCKPIs;
5997 IF (x_msg_data IS NULL) THEN
5998 FND_MSG_PUB.Count_And_Get
5999 ( p_encoded => FND_API.G_FALSE
6000 , p_count => x_msg_count
6001 , p_data => x_msg_data
6002 );
6003 END IF;
6004 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
6005 x_return_status := FND_API.G_RET_STS_ERROR;
6006 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6007 ROLLBACK TO UpdatePMDBSCKPIs;
6008 IF (x_msg_data IS NULL) THEN
6009 FND_MSG_PUB.Count_And_Get
6010 ( p_encoded => FND_API.G_FALSE
6011 , p_count => x_msg_count
6012 , p_data => x_msg_data
6013 );
6014 END IF;
6015 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6016 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
6017 WHEN NO_DATA_FOUND THEN
6018 ROLLBACK TO UpdatePMDBSCKPIs;
6019 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6020 IF (x_msg_data IS NOT NULL) THEN
6021 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Kpi ';
6022 ELSE
6023 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Kpi ';
6024 END IF;
6025 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
6026 WHEN OTHERS THEN
6027 ROLLBACK TO UpdatePMDBSCKPIs;
6028 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6029 IF (x_msg_data IS NOT NULL) THEN
6030 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Kpi ';
6031 ELSE
6032 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Kpi ';
6033 END IF;
6034 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
6035 END Update_Kpi;
6036
6037 /************************************************************************************/
6038 PROCEDURE Create_Kpi
6039 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
6040 , p_group_id IN NUMBER
6041 , p_kpi_name IN VARCHAR2
6042 , p_kpi_help IN VARCHAR2
6043 , p_responsibility_id IN NUMBER
6044 , x_return_status OUT NOCOPY VARCHAR2
6045 , x_msg_count OUT NOCOPY NUMBER
6046 , x_msg_data OUT NOCOPY VARCHAR2
6047 ) IS
6048 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
6049 BEGIN
6050 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_Kpi procedure');
6051 x_return_status := FND_API.G_RET_STS_SUCCESS;
6052 FND_MSG_PUB.Initialize;
6053 SAVEPOINT CreatePMDBSCKPIs;
6054 IF (p_kpi_name IS NULL) THEN
6055 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
6056 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_NAME'), TRUE);
6057 FND_MSG_PUB.ADD;
6058 RAISE FND_API.G_EXC_ERROR;
6059 END IF;
6060 IF (p_responsibility_id IS NULL) THEN
6061 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
6062 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_SETUP', 'SRC_RESPONSIBILITY'), TRUE);
6063 FND_MSG_PUB.ADD;
6064 RAISE FND_API.G_EXC_ERROR;
6065 END IF;
6066 -- set the passed values to the record.
6067 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Group_Id := p_group_id;
6068 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Name := p_kpi_name;
6069 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Help := p_kpi_help;
6070 l_Bsc_Kpi_Entity_Rec.Bsc_Responsibility_Id := p_responsibility_id;
6071 -- set some default values.
6072 l_Bsc_Kpi_Entity_Rec.Bsc_Anal_Group_Id := 0;
6073 l_Bsc_Kpi_Entity_Rec.Bsc_Csf_Id := 0;
6074 l_Bsc_Kpi_Entity_Rec.Bsc_Dependency_Flag := 0;
6075 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Bm_Group_Id := 1;
6076 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Color_Flag := 1;
6077 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Config_Type := 1;
6078 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Current_Period := 1;
6079 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Default_Value := 0;
6080 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Display_Order := 0;
6081 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Indicator_Type := 1;
6082 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Level_Comb := '?';
6083 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Num_Years := 0;
6084 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Periodicity_Id := 5;
6085 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Previous_Years := 0;
6086 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Prototype_Color := 'G';
6087 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Prototype_Flag := 3;
6088 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Share_Flag := 0;
6089 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_User_Level0 := 1;
6090 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_User_Level1 := 1;
6091 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Viewport_Default_Size := 0;
6092 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Viewport_Flag := 0;
6093 l_Bsc_Kpi_Entity_Rec.Bsc_Language := 'US';
6094 l_Bsc_Kpi_Entity_Rec.Bsc_Num_Options := 1;
6095 l_Bsc_Kpi_Entity_Rec.Bsc_Parent_Anal_Id := 0;
6096 l_Bsc_Kpi_Entity_Rec.Bsc_Source_Language := 'US';
6097 l_Bsc_Kpi_Entity_Rec.Created_By := 0;
6098 l_Bsc_Kpi_Entity_Rec.Last_Updated_By := 0;
6099 l_Bsc_Kpi_Entity_Rec.Last_Update_Login := 0;
6100 l_Bsc_Kpi_Entity_Rec.Last_Update_Login := 0;
6101 BSC_KPI_PUB.Create_Kpi
6102 ( p_commit => FND_API.G_FALSE
6103 , p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
6104 , x_return_status => x_return_status
6105 , x_msg_count => x_msg_count
6106 , x_msg_data => x_msg_data
6107 );
6108 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6109 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Kpi Failed: at BSC_KPI_PUB.Create_Kpi');
6110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6111 END IF;
6112 IF (p_commit = FND_API.G_TRUE) THEN
6113 COMMIT;
6114 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
6115 END IF;
6116 x_return_status := FND_API.G_RET_STS_SUCCESS;
6117 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_Kpi procedure');
6118 EXCEPTION
6119 WHEN FND_API.G_EXC_ERROR THEN
6120 ROLLBACK TO CreatePMDBSCKPIs;
6121 IF (x_msg_data IS NULL) THEN
6122 FND_MSG_PUB.Count_And_Get
6123 ( p_encoded => FND_API.G_FALSE
6124 , p_count => x_msg_count
6125 , p_data => x_msg_data
6126 );
6127 END IF;
6128 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
6129 x_return_status := FND_API.G_RET_STS_ERROR;
6130 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6131 ROLLBACK TO CreatePMDBSCKPIs;
6132 IF (x_msg_data IS NULL) THEN
6133 FND_MSG_PUB.Count_And_Get
6134 ( p_encoded => FND_API.G_FALSE
6135 , p_count => x_msg_count
6136 , p_data => x_msg_data
6137 );
6138 END IF;
6139 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6140 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
6141 WHEN NO_DATA_FOUND THEN
6142 ROLLBACK TO CreatePMDBSCKPIs;
6143 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6144 IF (x_msg_data IS NOT NULL) THEN
6145 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Kpi ';
6146 ELSE
6147 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Kpi ';
6148 END IF;
6149 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
6150 WHEN OTHERS THEN
6151 ROLLBACK TO CreatePMDBSCKPIs;
6152 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6153 IF (x_msg_data IS NOT NULL) THEN
6154 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Kpi ';
6155 ELSE
6156 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Kpi ';
6157 END IF;
6158 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
6159 END Create_Kpi;
6160
6161 /*********************************************************************************
6162 This fucntion will validate if time is there within the dimension object.
6163 It is not necessary that even if the time is associated with the measure
6164 then it need not be the view by. so no need to check that it time is there
6165 then it should be the view by also.
6166 *********************************************************************************/
6167 FUNCTION is_Time_In_Dim_Object
6168 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
6169 , p_dim_obj_name IN VARCHAR2
6170 ) RETURN BOOLEAN IS
6171 l_Short_Names VARCHAR2(8000);
6172 l_Short_Name VARCHAR2(100);
6173 BEGIN
6174 IF (TRIM(p_dim_obj_name) IS NULL) THEN
6175 RETURN FALSE;
6176 END IF;
6177 FOR i IN 0..(p_DimObj_ViewBy_Tbl.COUNT-1) LOOP
6178 IF ((p_DimObj_ViewBy_Tbl(i).p_Is_Time_There)) THEN
6179 l_short_names := p_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names;
6180 WHILE (is_more(p_dim_short_names => l_Short_Names
6181 , p_dim_short_name => l_Short_Name)
6182 ) LOOP
6183 IF (TRIM(p_dim_obj_name) = l_short_name) THEN
6184 RETURN TRUE;
6185 END IF;
6186 END LOOP;
6187 END IF;
6188 END LOOP;
6189 RETURN FALSE;
6190 EXCEPTION
6191 WHEN OTHERS THEN
6192 RETURN FALSE;
6193 END is_Time_In_Dim_Object;
6194 /************************************************************************************/
6195 FUNCTION is_View_By
6196 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
6197 , p_dim_obj_name IN VARCHAR2
6198 )RETURN BOOLEAN IS
6199 l_DimObj_ViewBy_Tbl BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type;
6200 l_Dim_Obj VARCHAR2(100);
6201 l_View_By VARCHAR2(100);
6202 BEGIN
6203 IF (TRIM(p_dim_obj_name) IS NULL) THEN
6204 RETURN FALSE;
6205 END IF;
6206 l_DimObj_ViewBy_Tbl := p_DimObj_ViewBy_Tbl;
6207 FOR i IN 0..(p_DimObj_ViewBy_Tbl.COUNT-1) LOOP
6208 WHILE (Is_More( x_dim_objects => l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names
6209 , x_View_Bys => l_DimObj_ViewBy_Tbl(i).p_View_By_There
6210 , x_dim_object => l_Dim_Obj
6211 , x_View_By => l_view_by
6212 )) LOOP
6213 IF (TRIM(p_dim_obj_name) = l_Dim_Obj) THEN
6214 IF (l_view_by = 'Y') THEN
6215 RETURN TRUE;
6216 ELSE
6217 RETURN FALSE;
6218 END IF;
6219 END IF;
6220 END LOOP;
6221 END LOOP;
6222 RETURN FALSE;
6223 EXCEPTION
6224 WHEN OTHERS THEN
6225 RETURN FALSE;
6226 END is_View_By;
6227 /************************************************************************************/
6228 FUNCTION is_Time_With_Measure
6229 ( p_DimObj_ViewBy_Tbl IN BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type
6230 , x_return_status OUT NOCOPY VARCHAR2
6231 , x_msg_count OUT NOCOPY NUMBER
6232 , x_msg_data OUT NOCOPY VARCHAR2
6233 ) RETURN BOOLEAN IS
6234 BEGIN
6235 FOR i IN 0..(p_DimObj_ViewBy_Tbl.COUNT-1) LOOP
6236 IF ((p_DimObj_ViewBy_Tbl(i).p_Is_Time_There)) THEN
6237 RETURN TRUE;
6238 END IF;
6239 END LOOP;
6240 RETURN FALSE;
6241 EXCEPTION
6242 WHEN OTHERS THEN
6243 RETURN FALSE;
6244 END is_Time_With_Measure;
6245 /****************************************************************************
6246 added by Ravi
6247 /**********************************************************************/
6248 FUNCTION get_anal_opt_comb_message
6249 (
6250 p_Kpi_Id IN BSC_KPIS_B.indicator%TYPE
6251 , p_Option_0 IN NUMBER
6252 , p_Option_1 IN NUMBER
6253 , p_Option_2 IN NUMBER
6254 , p_Sid IN NUMBER
6255 )RETURN VARCHAR2
6256 IS
6257 l_tokens VARCHAR2(2000);
6258 l_Msg_Data VARCHAR2(32000);
6259 l_msg_count NUMBER;
6260 BEGIN
6261 FND_MSG_PUB.Initialize;
6262
6263 SELECT Full_Name
6264 INTO l_tokens
6265 FROM bsc_oaf_analysys_opt_comb_v
6266 WHERE Indicator = p_Kpi_Id
6267 AND Analysis_Option0 = p_Option_0
6268 AND Analysis_Option1 = p_Option_1
6269 AND Analysis_Option2 = p_Option_2
6270 and Series_Id = p_Sid;
6271
6272 IF(l_tokens IS NOT NULL) THEN
6273 FND_MESSAGE.SET_NAME('BSC','BSC_MEAS_DELETE_DEPEND');
6274 FND_MESSAGE.SET_TOKEN('MEASURE', l_tokens);
6275 FND_MSG_PUB.ADD;
6276 RAISE FND_API.G_EXC_ERROR;
6277 END IF;
6278
6279 RETURN NULL;
6280
6281 EXCEPTION
6282 WHEN FND_API.G_EXC_ERROR THEN
6283 IF (l_Msg_Data IS NULL) THEN
6284 FND_MSG_PUB.Count_And_Get
6285 ( p_encoded => FND_API.G_FALSE
6286 , p_count => l_msg_count
6287 , p_data => l_Msg_Data
6288 );
6289 END IF;
6290 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR BSC_BIS_KPI_MEAS_PUB.get_anal_opt_comb_message');
6291 RETURN l_Msg_Data;
6292 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6293 IF (l_Msg_Data IS NULL) THEN
6294 FND_MSG_PUB.Count_And_Get
6295 ( p_encoded => FND_API.G_FALSE
6296 , p_count => l_msg_count
6297 , p_data => l_Msg_Data
6298 );
6299 END IF;
6300 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR BSC_BIS_KPI_MEAS_PUB.get_anal_opt_comb_message');
6301 RETURN l_Msg_Data;
6302 WHEN OTHERS THEN
6303 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||SQLERRM);
6304 RETURN NULL;
6305 END get_anal_opt_comb_message;
6306 /*********************************************************************************
6307 API to CREATE DIMENSION-OBJECTS IN DIMENSION SETS USED IN CASCADING
6308 It should only be called for BSC type of Dimension Sets not for PMF type
6309 *********************************************************************************/
6310 PROCEDURE Create_Dim_Objs_In_DSet
6311 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
6312 , p_kpi_id IN NUMBER
6313 , p_dim_set_id IN NUMBER
6314 , p_kpi_flag_change IN NUMBER := NULL
6315 , p_delete IN BOOLEAN := FALSE
6316 , x_return_status OUT NOCOPY VARCHAR2
6317 , x_msg_count OUT NOCOPY NUMBER
6318 , x_msg_data OUT NOCOPY VARCHAR2
6319 )IS
6320 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
6321 l_index NUMBER := 0;
6322 l_count NUMBER;
6323
6324 CURSOR c_kpi_ids IS
6325 SELECT indicator
6326 FROM BSC_KPIS_B
6327 WHERE Source_Indicator = p_kpi_id
6328 AND Prototype_Flag <> 2;
6329
6330 CURSOR c_dim_group_id IS
6331 SELECT Dim_Group_ID
6332 FROM BSC_KPI_DIM_GROUPS
6333 WHERE Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
6334 AND Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
6335 ORDER BY Dim_Group_Index;
6336
6337 CURSOR c_dim_level_id IS
6338 SELECT A.Dim_Level_Id Dim_Level_Id
6339 FROM BSC_SYS_DIM_LEVELS_BY_GROUP A
6340 , BSC_SYS_DIM_GROUPS_VL B
6341 WHERE A.Dim_Group_Id = l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id
6342 AND A.Dim_Group_ID = B.Dim_Group_ID
6343 AND B.Short_Name <> BSC_BIS_DIMENSION_PUB.Unassigned_Dim;
6344 BEGIN
6345 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet procedure');
6346 FND_MSG_PUB.Initialize;
6347 x_return_status := FND_API.G_RET_STS_SUCCESS;
6348 l_bsc_dimset_rec.Bsc_Dim_Level_Help := 'XXX';
6349 l_bsc_dimset_rec.Bsc_Dim_Level_Long_Name := 'XXX';
6350 l_bsc_dimset_rec.Bsc_Dim_Tot_Disp_Name := 'XXX';
6351 l_bsc_dimset_rec.Bsc_Dset_Comp_Order := 0;
6352 l_bsc_dimset_rec.Bsc_Dset_Dim_Level_Index := 1;
6353 l_bsc_dimset_rec.Bsc_Dset_Parent_Level_Rel := 'XXX';
6354 l_bsc_dimset_rec.Bsc_Dset_Position := 0;
6355 l_bsc_dimset_rec.Bsc_Dset_Status := 0;
6356 l_bsc_dimset_rec.Bsc_Dset_Target_Level := 1;
6357 l_bsc_dimset_rec.Bsc_Dset_User_Level0 := 0;
6358 l_bsc_dimset_rec.Bsc_Dset_User_Level1 := 0;
6359 l_bsc_dimset_rec.Bsc_Dset_User_Level1_Default := 0;
6360 l_bsc_dimset_rec.Bsc_Dset_User_Level2 := 0;
6361 l_bsc_dimset_rec.Bsc_Dset_User_Level2_Default := 0;
6362 l_bsc_dimset_rec.Bsc_Dset_Value_Order := 0;
6363 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
6364 l_bsc_dimset_rec.Bsc_Level_Name := 'XXX';
6365 l_bsc_dimset_rec.Bsc_View_Name := 'XXX';
6366 l_bsc_dimset_rec.Bsc_New_Dset := 'Y';
6367 l_bsc_dimset_rec.Bsc_Option_Id := 0;
6368 l_bsc_dimset_rec.Bsc_Pk_Col := 'XXX';
6369 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
6370 l_bsc_dimset_rec.Bsc_Dset_Parent_Level_Rel := NULL;
6371 l_bsc_dimset_rec.Bsc_Dset_No_Items := 0;
6372 l_bsc_dimset_rec.Bsc_Dset_Level_Display := 0;
6373 l_bsc_dimset_rec.Bsc_Dset_Default_Type := 0;
6374 l_bsc_dimset_rec.Bsc_Dset_Default_Value := 'T';
6375 l_bsc_dimset_rec.Bsc_Dset_Parent_In_Total := 2;
6376 l_bsc_dimset_rec.Bsc_Dset_Total0 := 0;
6377 l_bsc_dimset_rec.Bsc_Dset_Status := 2;
6378 l_bsc_dimset_rec.Bsc_Dset_User_Level0 := 2;
6379 l_bsc_dimset_rec.Bsc_Dset_Filter_Value := 0;
6380 l_bsc_dimset_rec.Bsc_Dset_User_Level1 := 2;
6381 l_bsc_dimset_rec.Bsc_Dset_User_Level1_Default := 2;
6382 l_bsc_dimset_rec.Bsc_Dset_User_Level2 := NULL;
6383 l_bsc_dimset_rec.Bsc_Dset_User_Level2_Default := NULL;
6384 l_bsc_dimset_rec.Bsc_Dim_Tot_Disp_Name := 'ALL';
6385 l_bsc_dimset_rec.Bsc_Dim_Comp_Disp_Name := 'COMPARISON';
6386 l_bsc_dimset_rec.Bsc_New_Dset := 'N';
6387 l_count := 0;
6388 SELECT MAX(NUM) INTO l_count
6389 FROM (SELECT COUNT(SYS_DIM_LEL.Dim_Group_Id) NUM
6390 , SYS_DIM_LEL.Dim_Level_Id
6391 FROM BSC_KPI_DIM_GROUPS KPI_GROUP
6392 , BSC_SYS_DIM_LEVELS_BY_GROUP SYS_DIM_LEL
6393 WHERE KPI_GROUP.Dim_Group_Id = SYS_DIM_LEL.Dim_Group_Id
6394 AND KPI_GROUP.Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
6395 AND KPI_GROUP.Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
6396 GROUP BY SYS_DIM_LEL.Dim_Level_Id);
6397 --dbms_output.PUT_LINE('l_count '||l_count);
6398 IF (l_count > 1) THEN
6399 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_COMMON_DIM_OBJS');
6400 FND_MSG_PUB.ADD;
6401 RAISE FND_API.G_EXC_ERROR;
6402 END IF;
6403
6404 IF (p_delete) THEN
6405 --delete all the dimension objects before creating.
6406 --dbms_output.PUT_LINE('DELETE ENABLED');
6407 BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet
6408 ( p_commit => FND_API.G_FALSE
6409 , p_kpi_id => p_kpi_id
6410 , p_dim_set_id => p_dim_set_id
6411 , x_return_status => x_return_status
6412 , x_msg_count => x_msg_count
6413 , x_msg_data => x_msg_data
6414 );
6415 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6416 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Objs_In_DSet');
6417 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6418 END IF;
6419 END IF;
6420 --remove the default entry 'XXX' from BSC_KPI_DIM_LEVELS_B if exists
6421 BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object
6422 ( p_commit => FND_API.G_FALSE
6423 , p_kpi_id => p_kpi_id
6424 , p_dim_set_id => p_dim_set_id
6425 , x_return_status => x_return_status
6426 , x_msg_count => x_msg_count
6427 , x_msg_data => x_msg_data
6428 );
6429 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6430 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_BIS_KPI_MEAS_PUB.Delete_Default_Kpi_Dim_Object');
6431 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6432 END IF;
6433 FOR cn_bsc IN c_dim_group_id LOOP
6434 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := cn_bsc.Dim_Group_ID;
6435 BSC_BIS_LOCKS_PUB.LOCK_KPI
6436 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6437 , p_time_stamp => NULL
6438 , p_Full_Lock_Flag => FND_API.G_FALSE
6439 , x_return_status => x_return_status
6440 , x_msg_count => x_msg_count
6441 , x_msg_data => x_msg_data
6442 );
6443 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6444 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.Lock_Dim_Group');
6445 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6446 END IF;
6447 -- END : Granular Locking
6448 BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties--insert into BSC_KPI_DIM_LEVEL_PROPERTIES
6449 ( p_commit => FND_API.G_FALSE
6450 , p_Dim_Set_Rec => l_bsc_dimset_rec
6451 , x_return_status => x_return_status
6452 , x_msg_count => x_msg_count
6453 , x_msg_data => x_msg_data
6454 );
6455 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6456 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties <'||x_msg_data||'>');
6457 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6458 END IF;
6459 BSC_DIMENSION_SETS_PUB.Create_Dim_Levels
6460 ( p_commit => FND_API.G_FALSE
6461 , p_Dim_Set_Rec => l_bsc_dimset_rec
6462 , x_return_status => x_return_status
6463 , x_msg_count => x_msg_count
6464 , x_msg_data => x_msg_data
6465 );
6466 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6467 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Levels <'||x_msg_data||'>');
6468 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6469 END IF;
6470 END LOOP;
6471 IF ((p_kpi_flag_change IS NOT NULL) AND (p_kpi_flag_change = BSC_DESIGNER_PVT.G_ActionFlag.Normal)) THEN
6472 --do not flag any changes to KPIs
6473 NULL;
6474 --dbms_output.PUT_LINE('NO CHANGES');
6475 ELSIF ((p_kpi_flag_change IS NOT NULL) AND (p_kpi_flag_change = BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color)) THEN
6476 --flag color changes to KPIs
6477 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
6478 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
6479 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color);
6480 END IF;
6481 --dbms_output.PUT_LINE('COLOR CHANGES');
6482 ELSE
6483 --flag structural changes to KPIs
6484 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
6485 IF (NOT is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
6486 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
6487 END IF;
6488 --dbms_output.PUT_LINE('STRUCTURAL CHANGES');
6489 END IF;
6490 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
6491 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6492 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
6493 , x_return_status => x_return_status
6494 , x_msg_count => x_msg_count
6495 , x_msg_data => x_msg_data
6496 );
6497 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6498 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET <'||x_msg_data||'>');
6499 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6500 END IF;
6501 --reapeating the steps for shared KPIs also
6502 FOR cm IN c_kpi_ids LOOP
6503 l_bsc_dimset_rec.Bsc_Kpi_Id := cm.indicator;
6504 SELECT MAX(NUM) INTO l_count
6505 FROM (SELECT COUNT(SYS_DIM_LEL.Dim_Group_Id) NUM
6506 , SYS_DIM_LEL.Dim_Level_Id
6507 FROM BSC_KPI_DIM_GROUPS KPI_GROUP
6508 , BSC_SYS_DIM_LEVELS_BY_GROUP SYS_DIM_LEL
6509 WHERE KPI_GROUP.Dim_Group_Id = SYS_DIM_LEL.Dim_Group_Id
6510 AND KPI_GROUP.Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
6511 AND KPI_GROUP.Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
6512 GROUP BY SYS_DIM_LEL.Dim_Level_Id);
6513 IF (l_count > 1) THEN
6514 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_COMMON_DIM_OBJS');
6515 FND_MSG_PUB.ADD;
6516 RAISE FND_API.G_EXC_ERROR;
6517 END IF;
6518 FOR cn_bsc IN c_dim_group_id LOOP
6519 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := cn_bsc.Dim_Group_ID;
6520 BSC_BIS_LOCKS_PUB.LOCK_KPI
6521 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6522 , p_time_stamp => NULL
6523 , p_Full_Lock_Flag => FND_API.G_FALSE
6524 , x_return_status => x_return_status
6525 , x_msg_count => x_msg_count
6526 , x_msg_data => x_msg_data
6527 );
6528 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6529 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.Lock_Dim_Group');
6530 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6531 END IF;
6532 -- END : Granular Locking
6533 BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties--insert into BSC_KPI_DIM_LEVEL_PROPERTIES
6534 ( p_commit => FND_API.G_FALSE
6535 , p_Dim_Set_Rec => l_bsc_dimset_rec
6536 , x_return_status => x_return_status
6537 , x_msg_count => x_msg_count
6538 , x_msg_data => x_msg_data
6539 );
6540 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6541 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Level_Properties <'||x_msg_data||'>');
6542 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6543 END IF;
6544 BSC_DIMENSION_SETS_PUB.Create_Dim_Levels
6545 ( p_commit => FND_API.G_FALSE
6546 , p_Dim_Set_Rec => l_bsc_dimset_rec
6547 , x_return_status => x_return_status
6548 , x_msg_count => x_msg_count
6549 , x_msg_data => x_msg_data
6550 );
6551 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6552 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Dim_Levels <'||x_msg_data||'>');
6553 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6554 END IF;
6555 END LOOP;
6556 IF ((p_kpi_flag_change IS NOT NULL) AND (p_kpi_flag_change = BSC_DESIGNER_PVT.G_ActionFlag.Normal)) THEN
6557 --do not flag any changes to KPIs
6558 NULL;
6559 --dbms_output.PUT_LINE('NO CHANGES');
6560 ELSIF ((p_kpi_flag_change IS NOT NULL) AND (p_kpi_flag_change = BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color)) THEN
6561 --flag color changes to KPIs
6562 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
6563 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
6564 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Color);
6565 END IF;
6566 --dbms_output.PUT_LINE('COLOR CHANGES');
6567 ELSE
6568 --flag structural changes to KPIs
6569 --IF (NVL(BSC_BIS_KPI_MEAS_PUB.get_DimensionSetSource(l_bsc_dimset_rec.Bsc_Kpi_Id,l_bsc_dimset_rec.Bsc_Dim_Set_Id), 'BSC') = 'BSC') THEN
6570 IF (NOT BSC_BIS_KPI_MEAS_PUB.is_Pure_Pmf_Dim_Grp(l_bsc_dimset_rec.Bsc_Kpi_Id, l_bsc_dimset_rec.Bsc_Dim_Set_Id)) THEN
6571 BSC_DESIGNER_PVT.ActionFlag_Change(l_bsc_dimset_rec.Bsc_Kpi_Id , BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
6572 END IF;
6573 --dbms_output.PUT_LINE('STRUCTURAL CHANGES');
6574 END IF;
6575 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
6576 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6577 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
6578 , x_return_status => x_return_status
6579 , x_msg_count => x_msg_count
6580 , x_msg_data => x_msg_data
6581 );
6582 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6583 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET <'||x_msg_data||'>');
6584 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6585 END IF;
6586 END LOOP;
6587 BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object
6588 ( p_commit => FND_API.G_FALSE
6589 , p_kpi_id => p_kpi_id
6590 , p_dim_set_id => p_dim_set_id
6591 , x_return_status => x_return_status
6592 , x_msg_count => x_msg_count
6593 , x_msg_data => x_msg_data
6594 );
6595 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6596 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Default_Kpi_Dim_Object');
6597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6598 END IF;
6599 IF (p_commit = FND_API.G_TRUE) THEN
6600 COMMIT;
6601 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
6602 END IF;
6603 x_return_status := FND_API.G_RET_STS_SUCCESS;
6604 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet procedure');
6605 EXCEPTION
6606 WHEN FND_API.G_EXC_ERROR THEN
6607 IF (x_msg_data IS NULL) THEN
6608 FND_MSG_PUB.Count_And_Get
6609 ( p_encoded => FND_API.G_FALSE
6610 , p_count => x_msg_count
6611 , p_data => x_msg_data
6612 );
6613 END IF;
6614 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
6615 x_return_status := FND_API.G_RET_STS_ERROR;
6616 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6617 IF (x_msg_data IS NULL) THEN
6618 FND_MSG_PUB.Count_And_Get
6619 ( p_encoded => FND_API.G_FALSE
6620 , p_count => x_msg_count
6621 , p_data => x_msg_data
6622 );
6623 END IF;
6624 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6625 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
6626 WHEN NO_DATA_FOUND THEN
6627 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6628 IF (x_msg_data IS NOT NULL) THEN
6629 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet ';
6630 ELSE
6631 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet ';
6632 END IF;
6633 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
6634 WHEN OTHERS THEN
6635 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6636 IF (x_msg_data IS NOT NULL) THEN
6637 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet ';
6638 ELSE
6639 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet ';
6640 END IF;
6641 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
6642 END Create_Dim_Objs_In_DSet;
6643
6644 /*********************************************************************************
6645 API to DELETE DIMENSION-OBJECTS IN DIMENSION SETS USED IN CASCADING
6646 It should only be called for BSC type of Dimension Sets not for PMF type
6647 *********************************************************************************/
6648 PROCEDURE Delete_Dim_Objs_In_DSet
6649 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
6650 , p_kpi_id IN NUMBER
6651 , p_dim_set_id IN NUMBER
6652 , x_return_status OUT NOCOPY VARCHAR2
6653 , x_msg_count OUT NOCOPY NUMBER
6654 , x_msg_data OUT NOCOPY VARCHAR2
6655 )IS
6656 l_bsc_dimset_rec BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
6657 l_index NUMBER := 0;
6658 l_count NUMBER;
6659
6660 CURSOR c_kpi_ids IS
6661 SELECT indicator
6662 FROM BSC_KPIS_B
6663 WHERE Source_Indicator = p_kpi_id
6664 AND Prototype_Flag <> 2;
6665
6666 CURSOR c_dim_group_id IS
6667 SELECT Dim_Group_ID
6668 FROM BSC_KPI_DIM_GROUPS
6669 WHERE Indicator = l_bsc_dimset_rec.Bsc_Kpi_Id
6670 AND Dim_Set_Id = l_bsc_dimset_rec.Bsc_Dim_Set_Id
6671 ORDER BY Dim_Group_Index;
6672
6673 CURSOR c_dim_level_id IS
6674 SELECT dim_level_id
6675 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
6676 WHERE dim_group_id = l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id;
6677 BEGIN
6678 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet procedure');
6679 FND_MSG_PUB.Initialize;
6680 x_return_status := FND_API.G_RET_STS_SUCCESS;
6681 l_bsc_dimset_rec.Bsc_Kpi_Id := p_kpi_id;
6682 l_bsc_dimset_rec.Bsc_Dim_Set_Id := p_dim_set_id;
6683 FOR cn_bsc IN c_dim_group_id LOOP
6684 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := cn_bsc.Dim_Group_ID;
6685 BSC_BIS_LOCKS_PUB.LOCK_KPI
6686 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6687 , p_time_stamp => NULL
6688 , p_Full_Lock_Flag => FND_API.G_FALSE
6689 , x_return_status => x_return_status
6690 , x_msg_count => x_msg_count
6691 , x_msg_data => x_msg_data
6692 );
6693 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6694 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.Lock_Dim_Group');
6695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6696 END IF;
6697 FOR cd IN c_dim_level_id LOOP
6698 l_bsc_dimset_rec.Bsc_Level_Id := cd.dim_level_id;
6699 BSC_DIMENSION_SETS_PUB.Delete_Dim_Level_Properties
6700 ( p_commit => FND_API.G_FALSE
6701 , p_Dim_Set_Rec => l_bsc_dimset_rec
6702 , x_return_status => x_return_status
6703 , x_msg_count => x_msg_count
6704 , x_msg_data => x_msg_data
6705 );
6706 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6707 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Level_Properties');
6708 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6709 END IF;
6710 BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels
6711 ( p_commit => FND_API.G_FALSE
6712 , p_Dim_Set_Rec => l_bsc_dimset_rec
6713 , x_return_status => x_return_status
6714 , x_msg_count => x_msg_count
6715 , x_msg_data => x_msg_data
6716 );
6717 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6718 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels');
6719 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6720 END IF;
6721 END LOOP;
6722 END LOOP;
6723 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
6724 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6725 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
6726 , x_return_status => x_return_status
6727 , x_msg_count => x_msg_count
6728 , x_msg_data => x_msg_data
6729 );
6730 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6731 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET <'||x_msg_data||'>');
6732 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6733 END IF;
6734 --for share KPIs
6735 FOR cm IN c_kpi_ids LOOP
6736 l_bsc_dimset_rec.Bsc_Kpi_Id := cm.indicator;
6737 FOR cn_bsc IN c_dim_group_id LOOP
6738 l_bsc_dimset_rec.Bsc_Dim_Level_Group_Id := cn_bsc.Dim_Group_ID;
6739 BSC_BIS_LOCKS_PUB.LOCK_KPI
6740 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6741 , p_time_stamp => NULL
6742 , p_Full_Lock_Flag => FND_API.G_FALSE
6743 , x_return_status => x_return_status
6744 , x_msg_count => x_msg_count
6745 , x_msg_data => x_msg_data
6746 );
6747 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6748 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.Lock_Dim_Group');
6749 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6750 END IF;
6751 FOR cd IN c_dim_level_id LOOP
6752 l_bsc_dimset_rec.Bsc_Level_Id := cd.dim_level_id;
6753 BSC_DIMENSION_SETS_PUB.Delete_Dim_Level_Properties
6754 ( p_commit => FND_API.G_FALSE
6755 , p_Dim_Set_Rec => l_bsc_dimset_rec
6756 , x_return_status => x_return_status
6757 , x_msg_count => x_msg_count
6758 , x_msg_data => x_msg_data
6759 );
6760 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6761 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Level_Properties');
6762 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6763 END IF;
6764 BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels
6765 ( p_commit => FND_API.G_FALSE
6766 , p_Dim_Set_Rec => l_bsc_dimset_rec
6767 , x_return_status => x_return_status
6768 , x_msg_count => x_msg_count
6769 , x_msg_data => x_msg_data
6770 );
6771 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6772 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Delete_Dim_Levels');
6773 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6774 END IF;
6775 END LOOP;
6776 END LOOP;
6777 BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET
6778 ( p_Kpi_Id => l_bsc_dimset_rec.Bsc_Kpi_Id
6779 , p_dim_set_id => l_bsc_dimset_rec.bsc_dim_set_id
6780 , x_return_status => x_return_status
6781 , x_msg_count => x_msg_count
6782 , x_msg_data => x_msg_data
6783 );
6784 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6785 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_BIS_LOCKS_PUB.SET_TIME_STAMP_DIM_SET <'||x_msg_data||'>');
6786 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6787 END IF;
6788 END LOOP;
6789 --create the default entry 'XXX' from BSC_KPI_DIM_LEVELS_B if exists
6790 BSC_BIS_KPI_MEAS_PUB.Create_Default_Kpi_Dim_Object
6791 ( p_commit => FND_API.G_FALSE
6792 , p_kpi_id => p_kpi_id
6793 , p_dim_set_id => p_dim_set_id
6794 , x_return_status => x_return_status
6795 , x_msg_count => x_msg_count
6796 , x_msg_data => x_msg_data
6797 );
6798 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6799 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet Failed: at BSC_DIMENSION_SETS_PUB.Create_Default_Kpi_Dim_Object');
6800 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6801 END IF;
6802 IF (p_commit = FND_API.G_TRUE) THEN
6803 COMMIT;
6804 --dbms_output.PUT_LINE('COMMIT SUCCESSFUL');
6805 END IF;
6806 x_return_status := FND_API.G_RET_STS_SUCCESS;
6807 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet procedure');
6808 EXCEPTION
6809 WHEN FND_API.G_EXC_ERROR THEN
6810 IF (x_msg_data IS NULL) THEN
6811 FND_MSG_PUB.Count_And_Get
6812 ( p_encoded => FND_API.G_FALSE
6813 , p_count => x_msg_count
6814 , p_data => x_msg_data
6815 );
6816 END IF;
6817 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
6818 x_return_status := FND_API.G_RET_STS_ERROR;
6819 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6820 IF (x_msg_data IS NULL) THEN
6821 FND_MSG_PUB.Count_And_Get
6822 ( p_encoded => FND_API.G_FALSE
6823 , p_count => x_msg_count
6824 , p_data => x_msg_data
6825 );
6826 END IF;
6827 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6828 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
6829 WHEN NO_DATA_FOUND THEN
6830 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6831 IF (x_msg_data IS NOT NULL) THEN
6832 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet ';
6833 ELSE
6834 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet ';
6835 END IF;
6836 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
6837 WHEN OTHERS THEN
6838 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6839 IF (x_msg_data IS NOT NULL) THEN
6840 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet ';
6841 ELSE
6842 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet ';
6843 END IF;
6844 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
6845 END Delete_Dim_Objs_In_DSet;
6846 /********************************************************************************/
6847 FUNCTION get_KPIs
6848 ( p_Kpi_ID IN NUMBER
6849 , p_Dim_Set_ID IN NUMBER -- IN creation pass null to it
6850 ) RETURN VARCHAR2 IS
6851 l_Msg_Data VARCHAR2(32000);
6852 l_msg_count NUMBER;
6853 l_kpi_names VARCHAR2(32000);
6854 l_Count NUMBER;
6855
6856 CURSOR c_dim_set_kpi IS
6857 SELECT Name||'['||Indicator||']' Indicator
6858 FROM BSC_KPIS_VL
6859 WHERE (Source_Indicator = p_kpi_id
6860 OR Indicator = p_kpi_id)
6861 AND share_flag <> 2;
6862 BEGIN
6863 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.get_KPIs Function');
6864 FND_MSG_PUB.Initialize;
6865 IF (p_Kpi_ID IS NULL) THEN
6866 RETURN NULL;
6867 END IF;
6868 IF (NOT BSC_UTILITY.isBscInProductionMode()) THEN
6869 RETURN NULL;
6870 END IF;
6871 IF (p_Dim_Set_ID IS NOT NULL) THEN
6872 SELECT COUNT(*) INTO l_Count
6873 FROM BSC_KPI_DIM_GROUPS
6874 WHERE Indicator = p_Kpi_ID
6875 AND Dim_Set_Id = p_Dim_Set_ID;
6876 IF (l_Count = 0) THEN
6877 RETURN NULL;
6878 END IF;
6879 END IF;
6880 FOR cd IN c_dim_set_kpi LOOP
6881 IF (l_kpi_names IS NULL) THEN
6882 l_kpi_names := cd.Indicator;
6883 ELSE
6884 l_kpi_names := l_kpi_names||', '||cd.Indicator;
6885 END IF;
6886 END LOOP;
6887 IF (l_kpi_names IS NOT NULL) THEN
6888 --raise exception for Structural Changes
6889 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_KPI_STRUCT_INVALID');
6890 FND_MESSAGE.SET_TOKEN('INDICATORS', l_kpi_names);
6891 FND_MSG_PUB.ADD;
6892 RAISE FND_API.G_EXC_ERROR;
6893 END IF;
6894 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.get_KPIs Function');
6895 RETURN NULL;
6896 EXCEPTION
6897 WHEN FND_API.G_EXC_ERROR THEN
6898 IF (l_Msg_Data IS NULL) THEN
6899 FND_MSG_PUB.Count_And_Get
6900 ( p_encoded => FND_API.G_FALSE
6901 , p_count => l_msg_count
6902 , p_data => l_Msg_Data
6903 );
6904 END IF;
6905 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR BSC_BIS_KPI_MEAS_PUB.get_KPIs');
6906 RETURN l_Msg_Data;
6907 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6908 IF (l_Msg_Data IS NULL) THEN
6909 FND_MSG_PUB.Count_And_Get
6910 ( p_encoded => FND_API.G_FALSE
6911 , p_count => l_msg_count
6912 , p_data => l_Msg_Data
6913 );
6914 END IF;
6915 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR BSC_BIS_KPI_MEAS_PUB.get_KPIs');
6916 RETURN l_Msg_Data;
6917 WHEN OTHERS THEN
6918 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||SQLERRM);
6919 RETURN NULL;
6920 END get_KPIs;
6921 /********************************************************************************
6922 WARNING : -
6923 This function will return false if any changes Dimensions within Dimension-Sets
6924 will results in structural changes. This is designed to fulfil the UI screen
6925 need and not a generic function so it should not be called internally from any
6926 other APIs without proper impact analysis.
6927 ********************************************************************************/
6928 FUNCTION is_KPI_Flag_For_Dim_In_DimSets
6929 ( p_Kpi_ID IN NUMBER
6930 , p_Dim_Set_ID IN NUMBER
6931 , p_Unassign_dim_names IN VARCHAR2
6932 , p_Dim_Short_Names IN VARCHAR2
6933 ) RETURN VARCHAR2 IS
6934 l_Msg_Data VARCHAR2(32000);
6935 l_msg_count NUMBER;
6936
6937 l_dimension BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
6938 l_Dimension_Old_Name BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
6939
6940 l_old_dimensions VARCHAR2(8000) := NULL;
6941 l_temp_dimensions VARCHAR2(8000);
6942 l_temp_var VARCHAR2(8000);
6943 l_kpi_names VARCHAR2(32000);
6944
6945 l_Struct_Flag BOOLEAN := FALSE;
6946 l_flag BOOLEAN;
6947 l_Dim_Short_Names VARCHAR2(32000);
6948 l_unassigns VARCHAR2(32000);
6949 l_assigns VARCHAR2(32000);
6950 l_unassign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
6951 l_assign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
6952 l_unassign_dim_objs VARCHAR2(32000);
6953
6954
6955 CURSOR c_Old_Dimensions IS
6956 SELECT A.Short_Name
6957 , B.Dim_Group_Index
6958 FROM BSC_SYS_DIM_GROUPS_VL A
6959 , BSC_KPI_DIM_GROUPS B
6960 WHERE A.Dim_Group_Id = B.Dim_Group_Id
6961 AND B.Indicator = p_Kpi_ID
6962 AND B.Dim_Set_ID = p_Dim_Set_ID
6963 ORDER BY B.Dim_Group_Index;
6964 BEGIN
6965 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.is_KPI_Flag_For_Dim_In_DimSets Function');
6966 FND_MSG_PUB.Initialize;
6967 l_Dim_Short_Names := p_Dim_Short_Names;
6968 IF (p_Kpi_ID IS NULL) THEN
6969 RETURN NULL;
6970 END IF;
6971 IF (NOT BSC_UTILITY.isBscInProductionMode()) THEN
6972 RETURN NULL;
6973 END IF;
6974 l_unassign_dim_objs := NULL;
6975 IF (p_Dim_Set_ID IS NOT NULL) THEN
6976 IF (p_Unassign_dim_names IS NOT NULL) THEN
6977 l_unassigns := p_Unassign_dim_names;
6978 WHILE (is_more(p_dim_short_names => l_unassigns
6979 ,p_dim_short_name => l_unassign)
6980 ) LOOP
6981 l_assigns := p_Dim_Short_Names;
6982 l_flag := TRUE;
6983 WHILE (is_more( p_dim_short_names => l_assigns
6984 , p_dim_short_name => l_assign)
6985 ) LOOP
6986 IF(l_unassign = l_assign) THEN
6987 l_flag := FALSE;
6988 EXIT;
6989 END IF;
6990 END LOOP;
6991 IF(l_flag) THEN
6992 IF (l_unassign_dim_objs IS NULL) THEN
6993 l_unassign_dim_objs := l_unassign;
6994 ELSE
6995 l_unassign_dim_objs := l_unassign_dim_objs||', '||l_unassign;
6996 END IF;
6997 END IF;
6998 END LOOP;
6999 END IF;
7000 END IF;
7001 --dbms_output.PUT_LINE('l_unassign_dim_objs <'||l_unassign_dim_objs||'>');
7002 IF (l_unassign_dim_objs IS NOT NULL) THEN
7003 l_Struct_Flag := TRUE;
7004 END IF;
7005 IF ((NOT l_Struct_Flag) AND (p_Dim_Short_Names IS NULL)) THEN
7006 RETURN NULL;
7007 END IF;
7008 IF (NOT l_Struct_Flag) THEN
7009 FOR cd IN c_Old_Dimensions LOOP
7010 l_flag := TRUE;
7011 l_temp_var := p_Dim_Short_Names;
7012 IF (l_old_dimensions IS NULL) THEN
7013 l_old_dimensions := cd.Short_Name;
7014 ELSE
7015 l_old_dimensions := l_old_dimensions||','||cd.Short_Name;
7016 END IF;
7017 END LOOP;
7018 END IF;
7019 IF ((l_old_dimensions IS NULL) AND (p_Dim_Short_Names IS NOT NULL)) THEN
7020 l_Struct_Flag := TRUE;
7021 ELSIF (l_old_dimensions IS NULL) THEN
7022 l_Dim_Short_Names := p_Dim_Short_Names;
7023 ELSE
7024 l_Dim_Short_Names := l_old_dimensions||','||p_Dim_Short_Names;
7025 END IF;
7026 IF (NOT l_Struct_Flag) THEN
7027 FOR cd IN c_Old_Dimensions LOOP
7028 l_flag := TRUE;
7029 l_temp_var := l_Dim_Short_Names;
7030 IF (l_old_dimensions IS NULL) THEN
7031 l_old_dimensions := cd.Short_Name;
7032 ELSE
7033 l_old_dimensions := l_old_dimensions||','||cd.Short_Name;
7034 END IF;
7035 WHILE (is_more(p_dim_short_names => l_temp_var
7036 , p_dim_short_name => l_dimension
7037 )) LOOP
7038 IF (l_dimension = cd.Short_Name) THEN
7039 l_flag := FALSE;
7040 EXIT;
7041 END IF;
7042 END LOOP;
7043 IF (l_flag) THEN
7044 --dbms_output.PUT_LINE('cd.Short_Name <'||cd.Short_Name||'>');
7045 l_Struct_Flag := TRUE;
7046 EXIT;
7047 END IF;
7048 END LOOP;
7049 END IF;
7050 --dbms_output.PUT_LINE('l_old_dimensions '||l_old_dimensions);
7051 IF (NOT l_Struct_Flag) THEN
7052 l_temp_var := l_Dim_Short_Names;
7053 WHILE (is_more(p_dim_short_names => l_temp_var
7054 , p_dim_short_name => l_dimension
7055 )) LOOP
7056 l_flag := TRUE;
7057 l_temp_dimensions := l_old_dimensions;
7058 WHILE (is_more(p_dim_short_names => l_temp_dimensions
7059 , p_dim_short_name => l_Dimension_Old_Name
7060 )) LOOP
7061 IF (l_Dimension_Old_Name = l_dimension) THEN
7062 l_flag := FALSE;
7063 EXIT;
7064 END IF;
7065 END LOOP;
7066 IF (l_flag) THEN
7067 --dbms_output.PUT_LINE('l_dimension <'||l_dimension||'>');
7068 l_Struct_Flag := TRUE;
7069 EXIT;
7070 END IF;
7071 END LOOP;
7072 END IF;
7073 /*IF (l_Struct_Flag) THEN
7074 --dbms_output.PUT_LINE('l_Struct_Flag IS TRUE');
7075 ELSE
7076 --dbms_output.PUT_LINE('l_Struct_Flag IS FALSE');
7077 END IF;*/
7078 l_kpi_names := BSC_BIS_KPI_MEAS_PUB.get_KPIs(p_Kpi_ID, NULL);
7079 IF ((l_Struct_Flag) AND (l_kpi_names IS NOT NULL)) THEN
7080 l_Msg_Data := l_kpi_names;
7081 RAISE FND_API.G_EXC_ERROR;
7082 END IF;
7083 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.is_KPI_Flag_For_Dim_In_DimSets Function');
7084 RETURN NULL;
7085 EXCEPTION
7086 WHEN FND_API.G_EXC_ERROR THEN
7087 IF (l_Msg_Data IS NULL) THEN
7088 FND_MSG_PUB.Count_And_Get
7089 ( p_encoded => FND_API.G_FALSE
7090 , p_count => l_msg_count
7091 , p_data => l_Msg_Data
7092 );
7093 END IF;
7094 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR BSC_BIS_KPI_MEAS_PUB.is_KPI_Flag_For_Dim_In_DimSets');
7095 RETURN l_Msg_Data;
7096 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7097 IF (l_Msg_Data IS NULL) THEN
7098 FND_MSG_PUB.Count_And_Get
7099 ( p_encoded => FND_API.G_FALSE
7100 , p_count => l_msg_count
7101 , p_data => l_Msg_Data
7102 );
7103 END IF;
7104 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR BSC_BIS_KPI_MEAS_PUB.is_KPI_Flag_For_Dim_In_DimSets');
7105 RETURN l_Msg_Data;
7106 WHEN OTHERS THEN
7107 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||SQLERRM);
7108 RETURN NULL;
7109 END is_KPI_Flag_For_Dim_In_DimSets;
7110 --=============================================================================
7111 FUNCTION check_config_impact_dimset
7112 ( p_Kpi_ID IN NUMBER
7113 , p_Dim_Set_ID IN NUMBER := NULL
7114 , p_Unassign_dim_names IN VARCHAR2
7115 , p_Dim_Short_Names IN VARCHAR2
7116 ) RETURN VARCHAR2 IS
7117 TYPE index_by_table IS Record
7118 ( p_dim_short_name VARCHAR2(30)
7119 );
7120 TYPE index_by_table_type IS TABLE OF index_by_table INDEX BY BINARY_INTEGER;
7121
7122 l_old_dim_array index_by_table_type;
7123 l_dim_objs_array index_by_table_type;
7124 l_unassign_dim_name VARCHAR2(32000);
7125 l_assign_dim_name VARCHAR2(32000);
7126 l_dim_name_after_remove VARCHAR2(32000);
7127 l_final_dim_names VARCHAR2(32000);
7128 l_dimobj_name_rel VARCHAR2(32000);
7129 l_count NUMBER;
7130 l_no_rels NUMBER;
7131 l_dim_set_count NUMBER;
7132 l_dim_set_count_temp NUMBER;
7133 l_Msg_Data VARCHAR2(32000);
7134 l_msg_count NUMBER;
7135
7136 CURSOR cr_Old_Dimensions IS
7137 SELECT A.Short_Name
7138 FROM BSC_SYS_DIM_GROUPS_VL A
7139 , BSC_KPI_DIM_GROUPS B
7140 WHERE A.Dim_Group_Id = B.Dim_Group_Id
7141 AND B.Indicator = p_Kpi_ID
7142 AND B.Dim_Set_ID = p_Dim_Set_ID
7143 ORDER BY B.Dim_Group_Index;
7144
7145 CURSOR cr_dim_objs_in_dimset IS
7146 SELECT VL.SHORT_NAME
7147 FROM BSC_SYS_DIM_LEVELS_B VL ,
7148 BSC_SYS_DIM_LEVELS_BY_GROUP DG ,
7149 BSC_SYS_DIM_GROUPS_VL TL
7150 WHERE VL.DIM_LEVEL_ID = DG.DIM_LEVEL_ID
7151 AND DG.dim_group_id = TL.DIM_GROUP_ID
7152 AND INSTR(l_final_dim_names,','||TL.SHORT_NAME||',') > 0;
7153
7154 i NUMBER;
7155 l_dim_short_name VARCHAR2(30);
7156
7157 BEGIN
7158 FND_MSG_PUB.Initialize;
7159 l_unassign_dim_name := p_Unassign_dim_names;
7160 l_assign_dim_name := p_Dim_Short_Names;
7161 OPEN cr_Old_Dimensions;
7162 -- bug#3405498 meastmon 28-jan-2004: The following is not supported in 8i
7163 --FETCH cr_Old_Dimensions BULK COLLECT INTO l_old_dim_array;
7164 l_old_dim_array.delete;
7165 i := 0;
7166 LOOP
7167 FETCH cr_Old_Dimensions INTO l_dim_short_name;
7168 EXIT WHEN cr_Old_Dimensions%NOTFOUND;
7169 i := i+1;
7170 l_old_dim_array(i).p_dim_short_name := l_dim_short_name;
7171 END LOOP;
7172 CLOSE cr_Old_Dimensions;
7173
7174 --dbms_output.PUT_LINE('UNASSIGNED NAMES ARE :- '||l_unassign_dim_name);
7175 --dbms_output.PUT_LINE('CHECKING DIM OBJECTS');
7176 IF(l_unassign_dim_name IS NULL) THEN
7177 --dbms_output.PUT_LINE('IF LOOP');
7178 FOR index_loop IN 1..(l_old_dim_array.COUNT) LOOP
7179 IF(l_dim_name_after_remove IS NULL) THEN
7180 l_dim_name_after_remove := l_old_dim_array(index_loop).p_dim_short_name;
7181 ELSE
7182 l_dim_name_after_remove :=l_dim_name_after_remove || ','||l_old_dim_array(index_loop).p_dim_short_name;
7183 END IF;
7184 END LOOP;
7185 ELSE
7186 --dbms_output.PUT_LINE('IF LOOP');
7187 FOR index_loop IN 1..(l_old_dim_array.COUNT) LOOP
7188 IF (Instr(l_unassign_dim_name,l_old_dim_array(index_loop).p_dim_short_name) = 0 ) THEN
7189 --dbms_output.PUT_LINE('ADDING DIM :- '||l_old_dim_array(index_loop).p_dim_short_name);
7190 IF(l_dim_name_after_remove IS NULL) THEN
7191 l_dim_name_after_remove := l_old_dim_array(index_loop).p_dim_short_name;
7192 ELSE
7193 l_dim_name_after_remove :=l_dim_name_after_remove || ','||l_old_dim_array(index_loop).p_dim_short_name;
7194 END IF;
7195 END IF;
7196 END LOOP;
7197 END IF;
7198 --dbms_output.PUT_LINE('after remove DIMS ARE '||l_dim_name_after_remove);
7199 l_final_dim_names := l_dim_name_after_remove ||','|| l_assign_dim_name;
7200 l_final_dim_names := ','||l_final_dim_names;
7201 --dbms_output.PUT_LINE('FINAL DIMS ARE '||l_final_dim_names);
7202
7203 SELECT COUNT(b.dim_level_id) INTO l_count
7204 FROM BSC_SYS_DIM_LEVELS_BY_GROUP b,
7205 BSC_SYS_DIM_GROUPS_VL vl
7206 WHERE b.dim_group_id = vl.dim_group_id
7207 AND INSTR(l_final_dim_names,','||vl.short_name ||',')>0 ;
7208 --dbms_output.PUT_LINE('THE COUNT OF DIMOBJECTS :- '||l_count );
7209 IF(l_count > BSC_BIS_KPI_MEAS_PUB.CONFIG_LIMIT_DIM) THEN
7210 --dbms_output.PUT_LINE('DIMESION OBJECTS MESSAEGE' );
7211 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_IMPACT_KPI_SPACE');
7212 FND_MESSAGE.SET_TOKEN('CONTINUE', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'YES'), TRUE);
7213 FND_MESSAGE.SET_TOKEN('CANCEL', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'NO'), TRUE);
7214 FND_MSG_PUB.ADD;
7215 RAISE FND_API.G_EXC_ERROR;
7216 END IF;
7217
7218 SELECT COUNT(DIM_SET_ID) INTO l_dim_set_count
7219 FROM BSC_KPI_DIM_SETS_VL
7220 WHERE INDICATOR = p_Kpi_ID;
7221 IF (l_dim_set_count > BSC_BIS_KPI_MEAS_PUB.CONFIG_LIMIT_DIMSET ) THEN
7222 --dbms_output.PUT_LINE('FIRST dimset IF LOOP' );
7223 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_IMPACT_KPI_SUMMARY_LVL');
7224 FND_MESSAGE.SET_TOKEN('CONTINUE', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'YES'), TRUE);
7225 FND_MESSAGE.SET_TOKEN('CANCEL', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'NO'), TRUE);
7226 FND_MSG_PUB.ADD;
7227 RAISE FND_API.G_EXC_ERROR;
7228 END IF;
7229 --dbms_output.PUT_LINE('DIM SET COUNT :- '||l_dim_set_count );
7230 IF(l_dim_set_count = BSC_BIS_KPI_MEAS_PUB.CONFIG_LIMIT_DIMSET AND p_Dim_Set_ID IS NULL ) THEN
7231 --dbms_output.PUT_LINE('dimset IF LOOP' );
7232 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_IMPACT_KPI_SUMMARY_LVL');
7233 FND_MESSAGE.SET_TOKEN('CONTINUE', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'YES'), TRUE);
7234 FND_MESSAGE.SET_TOKEN('CANCEL', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'NO'), TRUE);
7235 FND_MSG_PUB.ADD;
7236 RAISE FND_API.G_EXC_ERROR;
7237 END IF;
7238
7239 OPEN cr_dim_objs_in_dimset ;
7240 -- bug#3405498 meastmon 28-jan-2004: The following is not supported in 8i
7241 --FETCH cr_dim_objs_in_dimset BULK COLLECT INTO l_dim_objs_array;
7242 l_dim_objs_array.delete;
7243 i := 0;
7244 LOOP
7245 FETCH cr_dim_objs_in_dimset INTO l_dim_short_name;
7246 EXIT WHEN cr_dim_objs_in_dimset%NOTFOUND;
7247 i := i+1;
7248 l_dim_objs_array(i).p_dim_short_name := l_dim_short_name;
7249 END LOOP;
7250 CLOSE cr_dim_objs_in_dimset;
7251
7252 FOR index_loop IN 1..(l_dim_objs_array.COUNT) LOOP
7253 IF(l_dimobj_name_rel IS NULL) THEN
7254 l_dimobj_name_rel := l_dim_objs_array(index_loop).p_dim_short_name;
7255 ELSE
7256 l_dimobj_name_rel := l_dimobj_name_rel ||','||l_dim_objs_array(index_loop).p_dim_short_name;
7257 END IF;
7258 END LOOP;
7259 --dbms_output.PUT_LINE('The final dimension objects are :- '||l_dimobj_name_rel );
7260 l_no_rels := get_no_rels(p_dim_obj_sht_names => l_dimobj_name_rel);
7261 --dbms_output.PUT_LINE('THE NO OF RELATIONS ARE :- '||l_no_rels );
7262 IF(l_no_rels > BSC_BIS_KPI_MEAS_PUB.CONFIG_LIMIT_RELS) THEN
7263 --dbms_output.PUT_LINE('RELATIONS MESSAGE' );
7264 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_IMPACT_KPI_SUMMARY_LVL');
7265 FND_MESSAGE.SET_TOKEN('CONTINUE', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'YES'), TRUE);
7266 FND_MESSAGE.SET_TOKEN('CANCEL', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'NO'), TRUE);
7267 FND_MSG_PUB.ADD;
7268 RAISE FND_API.G_EXC_ERROR;
7269 END IF;
7270 IF(cr_dim_objs_in_dimset %ISOPEN) THEN
7271 CLOSE cr_dim_objs_in_dimset ;
7272 END IF;
7273 IF(cr_Old_Dimensions %ISOPEN) THEN
7274 CLOSE cr_Old_Dimensions ;
7275 END IF;
7276 RETURN NULL;
7277 EXCEPTION
7278 WHEN FND_API.G_EXC_ERROR THEN
7279 IF (l_Msg_Data IS NULL) THEN
7280 FND_MSG_PUB.Count_And_Get
7281 ( p_encoded => FND_API.G_FALSE
7282 , p_count => l_msg_count
7283 , p_data => l_Msg_Data
7284 );
7285 END IF;
7286 IF(cr_dim_objs_in_dimset %ISOPEN) THEN
7287 CLOSE cr_dim_objs_in_dimset ;
7288 END IF;
7289 IF(cr_Old_Dimensions %ISOPEN) THEN
7290 CLOSE cr_Old_Dimensions ;
7291 END IF;
7292 RETURN l_Msg_Data;
7293 WHEN OTHERS THEN
7294 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||SQLERRM);
7295 IF(cr_dim_objs_in_dimset %ISOPEN) THEN
7296 CLOSE cr_dim_objs_in_dimset ;
7297 END IF;
7298 IF(cr_Old_Dimensions %ISOPEN) THEN
7299 CLOSE cr_Old_Dimensions ;
7300 END IF;
7301 RETURN NULL;
7302 END check_config_impact_dimset;
7303 --=============================================================================
7304 FUNCTION get_no_rels
7305 (p_dim_obj_sht_names IN VARCHAR2
7306 )RETURN NUMBER
7307 IS
7308 l_no_rels NUMBER;
7309 index_loop NUMBER;
7310 l_count NUMBER;
7311 l_dim_short_name_temp VARCHAR2(32000);
7312 l_dim_short_names VARCHAR2(32000);
7313 l_whole_str_temp VARCHAR2(32000);
7314 l_sht_tmp VARCHAR2(32000);
7315 TYPE One_To_N_Index_Type IS Record
7316 ( p_dim_short_name VARCHAR2(30)
7317 );
7318 TYPE One_To_N_Index_Table IS TABLE OF One_To_N_Index_Type INDEX BY BINARY_INTEGER;
7319 dim_objs_array_temp One_To_N_Index_Table;
7320
7321 CURSOR cr_rel_parent_names IS
7322 SELECT PARENT_SHORT_NAME
7323 FROM BSC_SYS_DIM_LEVEL_RELS_V
7324 WHERE SHORT_NAME = l_dim_short_name_temp;
7325
7326 i NUMBER;
7327 l_dim_short_name VARCHAR2(30);
7328
7329 BEGIN
7330 l_no_rels := 0;
7331 l_dim_short_names := p_dim_obj_sht_names;
7332 WHILE(Is_More( p_dim_short_names => l_dim_short_names
7333 , p_dim_short_name => l_dim_short_name_temp))
7334 LOOP
7335 --dbms_output.PUT_LINE('checkin for dim in getnorels :- '|| l_dim_short_name_temp);
7336 IF(cr_rel_parent_names%ISOPEN) THEN
7337 CLOSE cr_rel_parent_names;
7338 END IF;
7339 OPEN cr_rel_parent_names;
7340 -- bug#3405498 meastmon 28-jan-2004: The following is not supported in 8i
7341 --FETCH cr_rel_parent_names BULK COLLECT INTO dim_objs_array_temp;
7342 dim_objs_array_temp.delete;
7343 i := 0;
7344 LOOP
7345 FETCH cr_rel_parent_names INTO l_dim_short_name;
7346 EXIT WHEN cr_rel_parent_names%NOTFOUND;
7347 i := i+1;
7348 dim_objs_array_temp(i).p_dim_short_name := l_dim_short_name;
7349 END LOOP;
7350 CLOSE cr_rel_parent_names;
7351
7352 l_count := 0;
7353 l_whole_str_temp := ','|| p_dim_obj_sht_names||',';
7354 FOR index_loop IN 1..(dim_objs_array_temp.COUNT) LOOP
7355 l_sht_tmp := ','||dim_objs_array_temp(index_loop).p_dim_short_name||',';
7356 IF(Instr(l_whole_str_temp,l_sht_tmp) > 0) THEN
7357 l_count := l_count + 1;
7358 --dbms_output.PUT_LINE('found relation for :- '|| dim_objs_array_temp(index_loop).p_dim_short_name);
7359 END IF;
7360 END LOOP;
7361 IF(l_count > 0) THEN
7362 l_no_rels := l_no_rels + 1;
7363 END IF;
7364 END LOOP;
7365 IF(cr_rel_parent_names %ISOPEN) THEN
7366 CLOSE cr_rel_parent_names ;
7367 END IF;
7368 RETURN l_no_rels;
7369 EXCEPTION
7370 WHEN OTHERS THEN
7371 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||SQLERRM);
7372 IF(cr_rel_parent_names %ISOPEN) THEN
7373 CLOSE cr_rel_parent_names ;
7374 END IF;
7375 RETURN l_no_rels;
7376 END get_no_rels;
7377
7378 /*********************************************************************************
7379 API TO GET MEAS COUNT IN OBJECTIVE - ONLY BSC MEASURES FOR NORMAL OBJECTIVES,
7380 AND ALL MEASURES FOR OBJs CREATED FROM AG FLOW. THIS IS USED TO DETERMINE
7381 STRUCTURAL CHANGE
7382 *********************************************************************************/
7383
7384 FUNCTION get_Struct_Meas_Count
7385 ( p_kpi_id IN NUMBER
7386
7387 ) RETURN NUMBER IS
7388
7389 l_count NUMBER;
7390 l_new_count NUMBER;
7391 l_sname BSC_KPIS_B.SHORT_NAME%TYPE;
7392
7393 BEGIN
7394
7395 SELECT short_name
7396 INTO l_sname
7397 FROM BSC_KPIS_B
7398 WHERE INDICATOR = p_kpi_id;
7399
7400 IF (l_sname IS NOT NULL) THEN
7401
7402 SELECT COUNT (DISTINCT dataset_id) INTO l_count
7403 FROM BSC_KPI_ANALYSIS_MEASURES_B
7404 WHERE INDICATOR = p_kpi_id;
7405
7406 ELSE
7407
7408 SELECT COUNT (DISTINCT A.dataset_id) INTO l_count
7409 FROM BSC_KPI_ANALYSIS_MEASURES_B A, BSC_SYS_DATASETS_B B
7410 WHERE INDICATOR = p_kpi_id
7411 AND A.DATASET_ID = B.DATASET_ID
7412 AND B.SOURCE = 'BSC';
7413
7414 END IF;
7415 RETURN l_count;
7416
7417 EXCEPTION
7418 WHEN OTHERS THEN
7419 RETURN 0;
7420
7421 END get_Struct_Meas_Count;
7422
7423 /*********************************************************************************
7424 API TO DELETE PMF/BSC MEASURES/ANALYSIS OPTIONS WITHIN AN INDICATOR
7425 *********************************************************************************/
7426 PROCEDURE Delete_KPI_Multi_Groups_Opts
7427 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
7428 , p_kpi_id IN NUMBER
7429 , p_data_source IN VARCHAR2
7430 , p_Option_0 IN NUMBER
7431 , p_Option_1 IN NUMBER
7432 , p_Option_2 IN NUMBER
7433 , p_Sid IN NUMBER
7434 , p_time_stamp IN VARCHAR2 := NULL
7435 , x_return_status OUT NOCOPY VARCHAR2
7436 , x_msg_count OUT NOCOPY NUMBER
7437 , x_msg_data OUT NOCOPY VARCHAR2
7438 ) IS
7439 l_Anal_Num_Tbl BSC_ANALYSIS_OPTION_PUB.Anal_Opt_Comb_Num_Tbl_Type;
7440 l_old_Anal_Opt_Tbl BSC_ANALYSIS_OPTION_PUB.Bsc_Anal_Opt_Tbl_Type;
7441 l_Anal_Opt_Rec BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type;
7442 l_Anal_Opt_Tbl BSC_ANALYSIS_OPTION_PUB.Bsc_Anal_Opt_Tbl_Type;
7443 l_Bsc_Anal_Opt_Rec BSC_ANALYSIS_OPTION_PUB.Bsc_Option_Rec_Type;
7444 l_Bsc_Dim_Set_Rec_Type BSC_DIMENSION_SETS_PUB.Bsc_Dim_Set_Rec_Type;
7445 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
7446 l_count NUMBER;
7447 l_Default_Delete BOOLEAN := FALSE;
7448 l_ind_type BSC_KPIS_B.indicator_type%TYPE;
7449 l_max_group_count NUMBER;
7450 l_new_count NUMBER;
7451 l_series_count NUMBER;
7452 l_tab_id NUMBER;
7453 l_series_delete BOOLEAN;
7454 l_kpi_id BSC_KPIS_B.indicator%TYPE;
7455
7456 CURSOR c_kpi_anal_group IS
7457 SELECT Analysis_Group_Id
7458 , Num_Of_Options
7459 , Dependency_Flag
7460 FROM BSC_KPI_ANALYSIS_GROUPS
7461 WHERE Indicator = p_kpi_id
7462 ORDER BY Analysis_Group_Id;
7463
7464 CURSOR c_kpi_ids IS
7465 SELECT indicator
7466 FROM BSC_KPIS_B
7467 WHERE Source_Indicator = p_kpi_id
7468 AND Prototype_Flag <> 2;
7469
7470 BEGIN
7471 --dbms_output.PUT_LINE('Entered inside BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts procedure');
7472 SAVEPOINT DeleteBSCKPIMulAnaOpts;
7473 FND_MSG_PUB.Initialize;
7474 x_return_status := FND_API.G_RET_STS_SUCCESS;
7475 IF (p_data_source IS NULL) THEN
7476 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
7477 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DATA_SOURCE'), TRUE);
7478 FND_MSG_PUB.ADD;
7479 RAISE FND_API.G_EXC_ERROR;
7480 END IF;
7481 IF ((p_data_source <> 'BSC') AND (p_data_source <> 'PMF')) THEN
7482 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
7483 FND_MSG_PUB.ADD;
7484 RAISE FND_API.G_EXC_ERROR;
7485 END IF;
7486
7487 l_series_delete := FALSE;
7488 l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id := p_kpi_id;
7489 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id := p_Option_0;
7490 l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id := 0;
7491 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id = 0) THEN
7492 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
7493 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
7494 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
7495 ELSIF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id = 1) THEN
7496 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
7497 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
7498 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
7499 ELSE
7500 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id;
7501 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
7502 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
7503 END IF;
7504
7505 IF (l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id IS NULL) THEN
7506 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
7507 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
7508 FND_MSG_PUB.ADD;
7509 RAISE FND_API.G_EXC_ERROR;
7510 END IF;
7511
7512 SELECT COUNT(*) INTO l_count
7513 FROM BSC_KPIS_B
7514 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
7515 IF (l_count = 0) THEN
7516 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
7517 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'KPI_ID'), TRUE);
7518 FND_MSG_PUB.ADD;
7519 RAISE FND_API.G_EXC_ERROR;
7520 END IF;
7521 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Option_Id IS NULL) THEN
7522 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
7523 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ANALYSIS_OPTIONS'), TRUE);
7524 FND_MSG_PUB.ADD;
7525 RAISE FND_API.G_EXC_ERROR;
7526 END IF;
7527 IF (l_Bsc_Anal_Opt_Rec.Bsc_Analysis_Group_Id IS NULL) THEN
7528 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
7529 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ANALYSIS_GROUP'), TRUE);
7530 FND_MSG_PUB.ADD;
7531 RAISE FND_API.G_EXC_ERROR;
7532 END IF;
7533
7534 SELECT share_flag INTO l_count
7535 FROM BSC_KPIS_B
7536 WHERE indicator = l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id;
7537 IF (l_count = 2) THEN
7538 FND_MESSAGE.SET_NAME('BSC','BSC_SHARED_KPI');
7539 FND_MSG_PUB.ADD;
7540 RAISE FND_API.G_EXC_ERROR;
7541 END IF;
7542 -- obtain dimension set id this option is using.
7543 SELECT dim_set_id INTO l_Bsc_Anal_Opt_Rec.Bsc_Dim_Set_Id
7544 FROM BSC_KPI_ANALYSIS_OPTIONS_B
7545 WHERE indicator = p_kpi_id
7546 AND analysis_group_id = 0
7547 AND option_id = p_Option_0;
7548 -- START Granular Locking - Lock the KPI Under consideration
7549
7550 BSC_BIS_LOCKS_PUB.LOCK_KPI
7551 ( p_Kpi_Id => l_Bsc_Anal_Opt_Rec.Bsc_Kpi_Id
7552 , p_time_stamp => NULL
7553 , p_Full_Lock_Flag => NULL
7554 , x_return_status => x_return_status
7555 , x_msg_count => x_msg_count
7556 , x_msg_data => x_msg_data
7557 );
7558 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7559 --dbms_output.PUT_LINE('BSC_BIS_LOCKS_PUB.LOCK_KPI - Failed');
7560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7561 END IF;
7562 --Determine number of distinct dataset_id before delete.
7563 /*SELECT COUNT (DISTINCT dataset_id) INTO l_count
7564 FROM BSC_KPI_ANALYSIS_MEASURES_B
7565 WHERE INDICATOR = p_kpi_id;*/
7566
7567 l_count := get_Struct_Meas_Count(p_kpi_id);
7568
7569 BSC_BIS_KPI_MEAS_PUB.store_kpi_anal_group(p_kpi_id, l_Anal_Opt_Tbl);
7570 BSC_ANALYSIS_OPTION_PUB.store_anal_opt_grp_count(p_kpi_id,l_old_Anal_Opt_Tbl);
7571
7572
7573 l_Anal_Opt_Rec.Bsc_Kpi_Id := p_kpi_id;
7574 l_Anal_Opt_Rec.Bsc_Option_Group0 := p_Option_0;
7575 l_Anal_Opt_Rec.Bsc_Option_Group1 := p_Option_1;
7576 l_Anal_Opt_Rec.Bsc_Option_Group2 := p_Option_2;
7577 l_Anal_Opt_Rec.Bsc_Dataset_Series_Id := p_Sid;
7578
7579 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group0 := p_Option_0;
7580 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group1 := p_Option_1;
7581 l_Bsc_Anal_Opt_Rec.Bsc_Option_Group2 := p_Option_2;
7582 l_Bsc_Anal_Opt_Rec.Bsc_Dataset_Series_Id := p_Sid;
7583
7584 /*** Check if the source is PMF then directly call the previous API*/
7585 IF (p_data_source = 'BSC') THEN
7586 SELECT COUNT(0)
7587 INTO l_max_group_count
7588 FROM BSC_KPI_ANALYSIS_GROUPS
7589 WHERE INDICATOR = p_kpi_id;
7590
7591 l_Anal_Num_Tbl(0) := p_Option_0;
7592 l_Anal_Num_Tbl(1) := p_Option_1;
7593 l_Anal_Num_Tbl(2) := p_Option_2;
7594
7595 IF (l_max_group_count > 1) THEN
7596 BSC_ANALYSIS_OPTION_PUB.Delete_Ana_Opt_Mult_Groups
7597 ( p_commit => FND_API.G_FALSE
7598 , p_Kpi_id => p_kpi_id
7599 , p_Anal_Opt_Tbl => l_Anal_Opt_Tbl
7600 , p_max_group_count => l_max_group_count
7601 , p_Anal_Opt_Comb_Tbl => l_Anal_Num_Tbl
7602 , p_Anal_Opt_Rec => l_Anal_Opt_Rec
7603 , x_return_status => x_return_status
7604 , x_msg_count => x_msg_count
7605 , x_msg_data => x_msg_data
7606 );
7607 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7608 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Ana_Opt_Mult_Groups Failed: at BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options');
7609 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7610 END IF;
7611 ELSE
7612 l_Default_Delete := TRUE;
7613 END IF;
7614 END IF;
7615 IF ((p_data_source = 'PMF') OR (l_Default_Delete)) THEN
7616 BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Analysis_Options
7617 ( p_Bsc_Anal_Opt_Rec => l_Bsc_Anal_Opt_Rec
7618 , p_data_source => p_data_source
7619 , x_return_status => x_return_status
7620 , x_msg_count => x_msg_count
7621 , x_msg_data => x_msg_data
7622 );
7623 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7624 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_Ana_Opt_Mult_Groups Failed: at BSC_ANALYSIS_OPTION_PUB.Delete_Analysis_Options');
7625 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7626 END IF;
7627 END IF;
7628
7629 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id := p_kpi_id;
7630 BSC_KPI_PVT.Set_Default_Option
7631 ( p_commit => FND_API.G_FALSE
7632 , p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
7633 , x_return_status => x_return_status
7634 , x_msg_count => x_msg_count
7635 , x_msg_data => x_msg_data
7636 );
7637 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7638 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts Failed: at BSC_KPI_PVT.Set_Default_Option');
7639 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7640 END IF;
7641
7642 BSC_KPI_PUB.Update_Kpi_Time_Stamp
7643 ( p_commit => FND_API.G_FALSE
7644 , p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
7645 , x_return_status => x_return_status
7646 , x_msg_count => x_msg_count
7647 , x_msg_data => x_msg_data
7648 );
7649 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7650 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts Failed: at BSC_KPI_PUB.Update_Kpi_Time_Stamp');
7651 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7652 END IF;
7653
7654 BSC_ANALYSIS_OPTION_PUB.Synch_Kpi_Anal_Group
7655 ( p_commit => FND_API.G_FALSE
7656 , p_Kpi_Id => p_kpi_id
7657 , p_Anal_Opt_Tbl => l_Anal_Opt_Tbl
7658 , x_return_status => x_return_status
7659 , x_msg_count => x_msg_count
7660 , x_msg_data => x_msg_data
7661 );
7662 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7663 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts Failed: at BSC_BIS_KPI_MEAS_PUB.Synch_Kpi_Anal_Group');
7664 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7665 END IF;
7666
7667 /* SELECT COUNT (DISTINCT dataset_id) INTO l_new_count
7668 FROM BSC_KPI_ANALYSIS_MEASURES_B
7669 WHERE INDICATOR = p_kpi_id;*/
7670
7671 l_new_count := get_Struct_Meas_Count(p_kpi_id);
7672
7673 IF (l_count <> l_new_count) THEN
7674 BSC_DESIGNER_PVT.ActionFlag_Change(p_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
7675 END IF;
7676 BSC_DESIGNER_PVT.Deflt_RefreshKpi(p_kpi_id);
7677
7678 FOR cd IN c_kpi_ids LOOP
7679 l_kpi_id := cd.indicator;
7680 BSC_ANALYSIS_OPTION_PUB.Synch_Kpi_Anal_Group
7681 ( p_commit => FND_API.G_FALSE
7682 , p_Kpi_Id => l_kpi_id
7683 , p_Anal_Opt_Tbl => l_Anal_Opt_Tbl
7684 , x_return_status => x_return_status
7685 , x_msg_count => x_msg_count
7686 , x_msg_data => x_msg_data
7687 );
7688 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7689 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts Failed: at BSC_BIS_KPI_MEAS_PUB.Synch_Kpi_Anal_Group');
7690 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7691 END IF;
7692
7693 SELECT COUNT (DISTINCT dataset_id) INTO l_new_count
7694 FROM BSC_KPI_ANALYSIS_MEASURES_B
7695 WHERE INDICATOR = l_kpi_id;
7696 IF (l_count <> l_new_count) THEN
7697 BSC_DESIGNER_PVT.ActionFlag_Change(l_kpi_id, BSC_DESIGNER_PVT.G_ActionFlag.GAA_Structure);
7698 END IF;
7699 BSC_DESIGNER_PVT.Deflt_RefreshKpi(l_kpi_id);
7700 END LOOP;
7701
7702 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
7703 (
7704 p_Kpi_Id => p_kpi_id
7705 , p_Dim_Level_Id => NULL
7706 , x_return_status => x_return_status
7707 , x_msg_count => x_msg_count
7708 , x_msg_data => x_msg_data
7709 );
7710 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7711 --dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts procedure Failed:at BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button');
7712 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7713 END IF;
7714
7715 -- Added for Start-to-End KPI Enhancement to maintain SHORT_NAME
7716 -- This API will refresh short_names for Analysis Options belonging to Start-to-End KPIs
7717 -- Enhancement#3540302 and Bug#3691035
7718 BSC_ANALYSIS_OPTION_PVT.Refresh_Short_Names
7719 (
7720 p_Commit => FND_API.G_FALSE
7721 , p_Kpi_Id => p_kpi_id
7722 , x_Return_Status => x_return_status
7723 , x_Msg_Count => x_msg_count
7724 , x_Msg_Data => x_msg_data
7725 );
7726 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7727 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7728 END IF;
7729
7730 IF (p_commit = FND_API.G_TRUE) THEN
7731 COMMIT;
7732 END IF;
7733 x_return_status := FND_API.G_RET_STS_SUCCESS;
7734 --dbms_output.PUT_LINE('Exiting from BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts procedure');
7735 EXCEPTION
7736 WHEN FND_API.G_EXC_ERROR THEN
7737 ROLLBACK TO DeleteBSCKPIMulAnaOpts;
7738 IF (x_msg_data IS NULL) THEN
7739 FND_MSG_PUB.Count_And_Get
7740 ( p_encoded => FND_API.G_FALSE
7741 , p_count => x_msg_count
7742 , p_data => x_msg_data
7743 );
7744 END IF;
7745 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
7746 x_return_status := FND_API.G_RET_STS_ERROR;
7747 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7748 ROLLBACK TO DeleteBSCKPIMulAnaOpts;
7749 IF (x_msg_data IS NULL) THEN
7750 FND_MSG_PUB.Count_And_Get
7751 ( p_encoded => FND_API.G_FALSE
7752 , p_count => x_msg_count
7753 , p_data => x_msg_data
7754 );
7755 END IF;
7756 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7757 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
7758 WHEN NO_DATA_FOUND THEN
7759 ROLLBACK TO DeleteBSCKPIMulAnaOpts;
7760 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7761 IF (x_msg_data IS NOT NULL) THEN
7762 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts ';
7763 ELSE
7764 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts ';
7765 END IF;
7766 --dbms_output.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
7767 WHEN OTHERS THEN
7768 ROLLBACK TO DeleteBSCKPIMulAnaOpts;
7769 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7770 IF (x_msg_data IS NOT NULL) THEN
7771 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts ';
7772 ELSE
7773 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts ';
7774 END IF;
7775 --dbms_output.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
7776 END Delete_KPI_Multi_Groups_Opts;
7777
7778
7779 /*****************************************************************
7780 Name :- Find_Period_CircularRef
7781 Description :- This Function will find the circular reference among the periods.
7782 Input :- Accepts the base period and the current period.
7783 Ouput :- Returns TRUE if circular reference is found else returns false.
7784 Creator :- Ashankar to fix the bug 3908204
7785 /*****************************************************************/
7786
7787 FUNCTION Find_Period_CircularRef
7788 (
7789 p_basePeriod IN BSC_SYS_PERIODICITIES.periodicity_id%TYPE
7790 , p_current_period IN BSC_SYS_PERIODICITIES.periodicity_id%TYPE
7791
7792 ) RETURN BOOLEAN IS
7793
7794 l_baseperiod BSC_SYS_PERIODICITIES.periodicity_id%TYPE;
7795 l_count NUMBER;
7796 l_Source BSC_SYS_PERIODICITIES.Source%TYPE;
7797 l_period_values BSC_UTILITY.varchar_tabletype;
7798 l_period_number NUMBER;
7799 l_temp BOOLEAN;
7800
7801 BEGIN
7802
7803 l_baseperiod := p_basePeriod;
7804
7805 IF(l_baseperiod = p_current_period) THEN
7806 RETURN TRUE;
7807 END IF;
7808
7809 SELECT SOURCE
7810 INTO l_Source
7811 FROM BSC_SYS_PERIODICITIES
7812 WHERE PERIODICITY_ID =l_baseperiod;
7813
7814 IF((l_Source IS NULL) OR (LENGTH(TRIM(l_Source))=0))THEN
7815 RETURN FALSE;
7816 END IF;
7817
7818 BSC_UTILITY.Parse_String
7819 (
7820 p_List => l_Source
7821 , p_Separator => BSC_BIS_KPI_MEAS_PUB.COMMA_SEPARATOR
7822 , p_List_Data => l_period_values
7823 , p_List_number => l_period_number
7824 );
7825
7826 /*
7827 --Enable for debug
7828 FOR i IN 1..l_period_number LOOP
7829 --dbms_output.PUT_LINE('period ['|| to_char(i) || '] value is :-' || l_period_values(i));
7830 END LOOP;*/
7831
7832 l_temp := FALSE;
7833 FOR j IN 1..l_period_number LOOP
7834 l_temp := Find_Period_CircularRef(l_period_values(j),p_current_period);
7835 IF(l_temp) THEN
7836 EXIT;
7837 END IF;
7838 END LOOP;
7839
7840 RETURN l_temp;
7841 END Find_Period_CircularRef;
7842
7843 /*****************************************************************
7844 Name :- is_Period_Ciruclar
7845 Description :- This is the top level API to check Circular Reference among periods.
7846 This API is called from VB as of now.
7847 Input :- Accepts the base period and the current period.
7848 Ouput :- Returns 'Y' if circular reference is found else returns 'N'.
7849 Creator :- Ashankar to fix the bug 3908204
7850 /*****************************************************************/
7851
7852 FUNCTION is_Period_Circular
7853 (
7854 p_basePeriod IN BSC_SYS_PERIODICITIES.periodicity_id%TYPE
7855 , p_current_period IN BSC_SYS_PERIODICITIES.periodicity_id%TYPE
7856 ) RETURN VARCHAR2 IS
7857
7858 l_ifCircular BOOLEAN;
7859
7860 BEGIN
7861 l_ifCircular := BSC_BIS_KPI_MEAS_PUB.Find_Period_CircularRef
7862 (
7863 p_basePeriod => p_basePeriod
7864 , p_current_period => p_current_period
7865 );
7866 IF(l_ifCircular) THEN
7867 RETURN BSC_BIS_KPI_MEAS_PUB.CIR_REF_EXISTS;
7868 END IF;
7869
7870 RETURN BSC_BIS_KPI_MEAS_PUB.CIR_REF_NOTEXISTS;
7871 END is_Period_Circular;
7872 /****************************************************************************************
7873 To get comma seperated dimension object shortnames for a given BIS measure shortname
7874 ****************************************************************************************/
7875 PROCEDURE check_pmf_validveiw_for_mes
7876 (
7877 p_dataset_id IN NUMBER
7878 , x_dimobj_name OUT NOCOPY VARCHAR2
7879 , x_return_status OUT NOCOPY VARCHAR2
7880 , x_msg_count OUT NOCOPY NUMBER
7881 , x_msg_data OUT NOCOPY VARCHAR2
7882
7883 )IS
7884 l_DimObj_ViewBy_Tbl BSC_BIS_KPI_MEAS_PUB.DimObj_Viewby_Tbl_Type;
7885 l_comma_shtnames VARCHAR2(32000);
7886 l_dim_sht_name VARCHAR2(32000);
7887 l_measure_short_name VARCHAR2(32000);
7888
7889
7890 BEGIN
7891 SELECT MES.SHORT_NAME
7892 INTO l_measure_short_name
7893 FROM BSC_SYS_MEASURES MES,
7894 BSC_SYS_DATASETS_B SYS
7895 WHERE MES.MEASURE_ID = SYS.MEASURE_ID1
7896 AND SYS.DATASET_ID = p_dataset_id;
7897
7898 --dbms_output.PUT_LINE('given measure short name is :- '|| l_measure_short_name);
7899
7900 BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl(
7901 p_Measure_Short_Name => l_measure_short_name
7902 , p_Region_Code => null
7903 , x_DimObj_ViewBy_Tbl => l_DimObj_ViewBy_Tbl
7904 , x_return_status => x_return_status
7905 , x_msg_count => x_msg_count
7906 , x_msg_data => x_msg_data
7907 );
7908 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7909 ----dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults Failed: at BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl');
7910 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7911 END IF;
7912
7913 --dbms_output.PUT_LINE('The no of dimension objects count is = '||l_DimObj_ViewBy_Tbl.COUNT);
7914
7915 FOR i IN 0..l_DimObj_ViewBy_Tbl.COUNT-1 LOOP
7916 /* if (l_comma_shtnames is null) then
7917 l_comma_shtnames := l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names ;
7918 end if;
7919 l_comma_shtnames := l_comma_shtnames||','|| l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names ;*/
7920 --dbms_output.PUT_LINE('the i value is :- '||i);
7921 l_comma_shtnames := l_DimObj_ViewBy_Tbl(i).p_Dim_Object_Names;
7922
7923 if(instr(l_comma_shtnames,',') > 0) then
7924 WHILE (is_more( p_dim_short_names => l_comma_shtnames
7925 , p_dim_short_name => l_dim_sht_name )
7926 ) LOOP
7927 --dbms_output.PUT_LINE('CALLING CHECK VIEW FOR :- '||l_dim_sht_name );
7928
7929 -- Dont validate if the Dimension short name is of rolling type. Bug#4290070
7930 IF (BIS_UTILITIES_PVT.Is_Rolling_Period_Level(l_dim_sht_name) = 0) THEN
7931 BSC_BIS_DIM_OBJ_PUB.Validate_PMF_Views(
7932 p_Dim_Obj_Short_Name => l_dim_sht_name
7933 , p_Dim_Obj_View_Name => null
7934 , x_Return_Status => x_return_status
7935 , x_Msg_Count => x_msg_count
7936 , x_Msg_Data => x_msg_data
7937 );
7938 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7939 ----dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults Failed: at BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl');
7940 SELECT NAME
7941 INTO x_dimobj_name
7942 FROM BIS_LEVELS_VL
7943 WHERE SHORT_NAME = l_dim_sht_name;
7944 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7945 END IF;
7946 END IF;
7947 --dbms_output.PUT_LINE('x_return_status '||x_return_status);
7948 --dbms_output.PUT_LINE('x_msg_data '||x_msg_data);
7949 end loop;
7950 else
7951 --dbms_output.PUT_LINE('CALLING CHECK VIEW FOR :- '||l_comma_shtnames );
7952 -- Dont validate if the Dimension short name is of rolling type. Bug#4290070
7953 IF (BIS_UTILITIES_PVT.Is_Rolling_Period_Level(l_comma_shtnames) = 0) THEN
7954 BSC_BIS_DIM_OBJ_PUB.Validate_PMF_Views(
7955 p_Dim_Obj_Short_Name => l_comma_shtnames
7956 , p_Dim_Obj_View_Name => null
7957 , x_Return_Status => x_return_status
7958 , x_Msg_Count => x_msg_count
7959 , x_Msg_Data => x_msg_data
7960 );
7961 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7962 ----dbms_output.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults Failed: at BSC_BIS_KPI_MEAS_PUB.get_DimObj_ViewBy_Tbl');
7963 SELECT NAME
7964 INTO x_dimobj_name
7965 FROM BIS_LEVELS_VL
7966 WHERE SHORT_NAME = l_comma_shtnames;
7967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7968 END IF;
7969 END IF;
7970 --dbms_output.PUT_LINE('x_return_status '||x_return_status);
7971 --dbms_output.PUT_LINE('x_msg_data '|| x_msg_data);
7972
7973 end if;
7974 ----dbms_output.PUT_LINE('FOR DIMENISON OBJECT "'||l_comma_shtnames ||'" THE X_RETURN_STATUS IS :- '||l_return_status ||' AND X_MSG_dATA IS :- ' || l_msg_data);
7975
7976 END LOOP;
7977
7978
7979 EXCEPTION
7980 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7981 IF (x_msg_data IS NULL) THEN
7982 FND_MSG_PUB.Count_And_Get
7983 ( p_encoded => FND_API.G_FALSE
7984 , p_count => x_msg_count
7985 , p_data => x_msg_data
7986 );
7987 END IF;
7988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7989 --dbms_output.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
7990 WHEN OTHERS THEN
7991 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7992 IF (x_msg_data IS NOT NULL) THEN
7993 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
7994 ELSE
7995 x_msg_data := SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Get_PMF_Defaults ';
7996 END IF;
7997 --dbms_output.PUT_LINE('EXCEPTION IN WHEN OTHERS '||x_msg_data);
7998 END check_pmf_validveiw_for_mes;
7999
8000 /**
8001 * This API take the measure short name,dimension object short name
8002 * and required property type and returns the corresponding property
8003 * of the dimension object
8004 * p_Measure_Short_Name - Short Name of the measure
8005 * p_Dim_Obj_Short_Name - Short Name of the dimension object
8006 * @propertyType - This indicates the attribute value that is required .
8007 * This can take the following values
8008 * 1. c_VIEWBY - Checks whether viewBy is applicable or not
8009 * 2. c_ALL - Checks whether all is enabled or not
8010 * 3. C_HIDE_DIM_OBJ - Checks whether dimension object is hidden in the parameter section or not
8011 * @returns 'Y' or 'N' depending on the attribute value
8012 */
8013 FUNCTION Get_Dimobj_Properties
8014 ( p_Measure_Short_Name IN VARCHAR2
8015 , p_Dim_Obj_Short_Name IN VARCHAR2
8016 , p_Property_Type IN VARCHAR2
8017 ) RETURN VARCHAR2 IS
8018 l_region_code AK_REGIONS.REGION_CODE%TYPE;
8019 l_actual_data_source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
8020 l_DimObj_ViewBy_Tbl BIS_PMV_BSC_API_PUB.DimLevel_Viewby_Tbl_Type;
8021 l_return_status VARCHAR2(100);
8022 l_msg_data VARCHAR2(2000);
8023 l_msg_count NUMBER;
8024 l_dim_DimObj VARCHAR2(100);
8025 BEGIN
8026 IF (p_Measure_Short_Name IS NOT NULL AND p_Dim_Obj_Short_Name IS NOT NULL) THEN
8027 SELECT actual_data_source
8028 INTO l_actual_data_source
8029 FROM BIS_INDICATORS
8030 WHERE SHORT_NAME = p_Measure_Short_Name;
8031 l_region_code := SUBSTR(l_actual_data_source, 0, (INSTR(l_actual_data_source,'.')-1));
8032 IF(l_region_code IS NOT NULL) THEN
8033 BIS_PMV_BSC_API_PUB.Get_Dimlevel_Viewby
8034 ( p_Region_Code => l_Region_Code
8035 , p_Measure_Short_Name => p_Measure_Short_Name
8036 , x_DimLevel_Viewby_Tbl => l_DimObj_ViewBy_Tbl
8037 , x_return_status => l_return_status
8038 , x_msg_count => l_msg_count
8039 , x_msg_data => l_msg_data
8040 );
8041
8042 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8043 RETURN 'N';
8044 END IF;
8045
8046 FOR i IN 1..l_DimObj_ViewBy_Tbl.COUNT LOOP
8047 l_dim_DimObj := l_DimObj_ViewBy_Tbl(i).Dim_DimLevel;
8048 IF (l_dim_DimObj IS NOT NULL AND p_Dim_Obj_Short_Name = SUBSTR(l_dim_DimObj,INSTR(l_dim_DimObj,'+')+1)) THEN
8049 IF (p_Property_Type = c_VIEWBY) THEN
8050 RETURN l_DimObj_ViewBy_Tbl(i).Viewby_Applicable;
8051 ELSIF (p_Property_Type = c_ALL) THEN
8052 RETURN l_DimObj_ViewBy_Tbl(i).All_Applicable;
8053 ELSIF (p_Property_Type = C_HIDE_DIM_OBJ) THEN
8054 RETURN l_DimObj_ViewBy_Tbl(i).Hide_Level;
8055 END IF;
8056 END IF;
8057 END LOOP;
8058 RETURN 'N';
8059 END IF;
8060 END IF;
8061 EXCEPTION
8062 WHEN OTHERS THEN
8063 RETURN 'N';
8064 END Get_Dimobj_Properties;
8065
8066
8067 PROCEDURE get_obj_common_dimensions_tabs (
8068 p_dim_short_name IN VARCHAR2
8069 , p_objective_id IN NUMBER
8070 , x_tab_ids OUT NOCOPY VARCHAR2
8071 )
8072 IS
8073 CURSOR c_objective_tabs(p_indicator NUMBER) IS
8074 SELECT DISTINCT tab_id
8075 FROM bsc_tab_indicators
8076 WHERE indicator = p_indicator;
8077
8078 CURSOR c_common_dim(p_tab_id NUMBER, p_dim VARCHAR2) IS
8079 SELECT 1
8080 FROM bsc_sys_com_dim_levels
8081 WHERE tab_id = p_tab_id
8082 AND dim_level_id IN ( SELECT dim_level_id
8083 FROM bsc_sys_dim_levels_by_group dim_lvl, bsc_sys_dim_groups_vl dim
8084 WHERE dim.short_name = p_dim
8085 AND dim.dim_group_id = dim_lvl.dim_group_id
8086 );
8087 l_common_dim NUMBER;
8088 l_tab_id NUMBER;
8089
8090 BEGIN
8091
8092 IF p_objective_id IS NOT NULL THEN
8093
8094 FOR l_objective_tabs IN c_objective_tabs(p_objective_id) LOOP
8095
8096 l_tab_id := l_objective_tabs.tab_id;
8097
8098 l_common_dim := 0;
8099 IF c_common_dim%ISOPEN THEN
8100 CLOSE c_common_dim;
8101 END IF;
8102 OPEN c_common_dim(l_tab_id, p_dim_short_name);
8103 FETCH c_common_dim INTO l_common_dim;
8104 IF c_common_dim%NOTFOUND THEN
8105 l_common_dim := 0;
8106 END IF;
8107 CLOSE c_common_dim;
8108
8109 IF l_common_dim > 0 THEN
8110 IF x_tab_ids IS NULL THEN
8111 x_tab_ids := l_tab_id;
8112 ELSE
8113 x_tab_ids := x_tab_ids || ',' || l_tab_id;
8114 END IF;
8115 END IF;
8116
8117 END LOOP;
8118
8119 END IF;
8120
8121 EXCEPTION
8122 WHEN OTHERS THEN
8123 IF c_common_dim%ISOPEN THEN
8124 CLOSE c_common_dim;
8125 END IF;
8126 x_tab_ids := NULL;
8127 END get_obj_common_dimensions_tabs;
8128
8129
8130 PROCEDURE get_common_dimensions_tabs (
8131 p_dim_short_name IN VARCHAR2
8132 , p_objective_id IN NUMBER
8133 , x_tab_ids OUT NOCOPY VARCHAR2
8134 )
8135 IS
8136 CURSOR c_shared_obj(p_indicator NUMBER) IS
8137 SELECT indicator
8138 FROM bsc_kpis_b
8139 WHERE source_indicator = p_indicator
8140 AND share_flag = 2
8141 AND prototype_flag <> 2;
8142
8143 l_tab_ids VARCHAR2(1000);
8144 l_objective_id NUMBER;
8145
8146 BEGIN
8147
8148 IF p_objective_id IS NOT NULL THEN
8149
8150 get_obj_common_dimensions_tabs
8151 ( p_dim_short_name => p_dim_short_name
8152 , p_objective_id => p_objective_id
8153 , x_tab_ids => x_tab_ids
8154 );
8155
8156 END IF;
8157
8158 -- look for shared objectives
8159 FOR c_shared IN c_shared_obj(p_objective_id) LOOP
8160
8161 l_objective_id := c_shared.indicator;
8162
8163 get_obj_common_dimensions_tabs
8164 ( p_dim_short_name => p_dim_short_name
8165 , p_objective_id => l_objective_id
8166 , x_tab_ids => l_tab_ids
8167 );
8168 IF l_tab_ids IS NOT NULL THEN
8169 IF x_tab_ids IS NULL THEN
8170 x_tab_ids := l_tab_ids;
8171 ELSE
8172 x_tab_ids := x_tab_ids || ',' || l_tab_ids;
8173 END IF;
8174 END IF;
8175
8176 END LOOP;
8177
8178 EXCEPTION
8179 WHEN OTHERS THEN
8180 x_tab_ids := NULL;
8181 END get_common_dimensions_tabs;
8182
8183
8184 END BSC_BIS_KPI_MEAS_PUB;