DBA Data[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;