DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_COMMON_DIM_LEVELS_PUB

Source


1 PACKAGE BODY BSC_COMMON_DIM_LEVELS_PUB AS
2 /* $Header: BSCPCDLB.pls 120.3 2007/02/20 17:04:07 psomesul ship $ */
3 
4 -------------------------------------------------------------------------------------------------------------------
5 --   Check_Common_Dim_Levels
6 --            Return x_return_status = 'DISABLE'  if it disables one or more common
7 --                                                Dimension in the Checking.
8 -------------------------------------------------------------------------------------------------------------------
9 PROCEDURE  Check_Common_Dim_Levels(
10   p_commit          IN      varchar2 -- := FND_API.G_FALSE
11  ,p_Tab_Id        	IN      number
12  ,x_return_status   OUT NOCOPY     varchar2
13  ,x_msg_count		OUT NOCOPY	number
14  ,x_msg_data		OUT NOCOPY	varchar2
15 ) IS
16 
17  v_Common_Level_ReTrieved_Tbl 	BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Tbl_Type;
18  v_Common_Level_Found_Tbl 	BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Tbl_Type;
19 
20  v_Dim_Level_Rec_R 		BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
21  v_Dim_Level_Rec_F 		BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
22  v_Index 			    NUMBER;
23  v_Parent_Dim_Level_Id	NUMBER;
24  l_deleted_rows         NUMBER;
25  l_Bsc_Tab_Entity_Rec   BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
26 
27 
28 BEGIN
29    FND_MSG_PUB.Initialize;
30    x_return_status := FND_API.G_RET_STS_SUCCESS;
31    SAVEPOINT BSCCheDimLevsPUB;
32 		  --DBMS_OUTPUT.PUT_LINE('Begin Check_Common_Dim_Levels' );
33 		  --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels   p_Tab_Id = ' || p_Tab_Id  );
34   -- Get the Common Dimension Level already define in the DB.
35   Retrieve_Common_Dim_Levels(p_commit, p_Tab_Id, v_Common_Level_ReTrieved_Tbl
36 				 		,x_return_status ,x_msg_count ,x_msg_data );
37 
38   l_deleted_rows := 0;
39   IF v_Common_Level_ReTrieved_Tbl.COUNT > 0 THEN   /* If There are common Dimension defined in DB   */
40         -- Find the potention Common Dimension Levels
41   	Find_Common_Dim_Levels(p_commit, p_Tab_Id, v_Common_Level_Found_Tbl
42 				 		,x_return_status ,x_msg_count ,x_msg_data );
43 
44         -- Check For the Common Dimension Level that not apply any more
45         -- Compare data from v_Common_Level_ReTrieved_Tbl and v_Common_Level_Found_Tbl
46         -- (The Common Level are stored in secuencial order)
47       	v_Index := 0;
48         IF v_Common_Level_Found_Tbl.COUNT > 0 THEN
49             LOOP
50                v_Index := v_Index + 1;
51                v_Dim_Level_Rec_R := v_Common_Level_ReTrieved_Tbl(v_Index);
52    	           IF v_Index  <= v_Common_Level_Found_Tbl.COUNT  THEN
53                 	  v_Dim_Level_Rec_F := v_Common_Level_Found_Tbl(v_Index);
54         		  IF v_Dim_Level_Rec_R.Bsc_Level_View_Name <>  v_Dim_Level_Rec_F.Bsc_Level_View_Name THEN
55                      EXIT;
56                   END IF;
57                ELSE
58 		          EXIT;
59                END IF;
60                IF v_Index = v_Common_Level_ReTrieved_Tbl.COUNT THEN
61                      --It does not need to delete any of the defined Common levels
62 	       	     v_Index := - 9999;
63                      EXIT;
64                END IF;
65             END LOOP;
66             v_Index := v_Index - 1;
67         END IF;
68         IF v_Index >= 0 then
69            --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels    It need delete some common Dimension Levels');
70 
71 	        -- Delete the Common Levels  that not applay any more
72 	        DELETE FROM BSC_SYS_COM_DIM_LEVELS
73 	          WHERE TAB_ID = p_Tab_Id
74 	          AND DIM_LEVEL_INDEX >= v_Index;
75               l_deleted_rows := sql%rowcount;
76               --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels  l_deleted_rows = ' ||l_deleted_rows);
77      		-- Delete Records from BSC_USER_LIST_ACCESS that not apply any more
78     		DELETE FROM BSC_USER_LIST_ACCESS
79                   WHERE TAB_ID = p_Tab_Id
80                   AND DIM_LEVEL_INDEX >= v_Index;
81 
82     		x_return_status := 'DISABLE';
83 
84     		Check_Dim_Level_Default_Value(p_commit, p_Tab_Id
85 				 		,x_return_status ,x_msg_count ,x_msg_data );
86         ELSE
87                 --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels    Common Dimension Levels Not need Changes');
88                 v_Index := 0;   /* Just to support the output */
89         END IF;
90   ELSE
91                 --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels    No Common Dimension Levels Defined in DB');
92                 v_Index := 0;   /* Just to support the output */
93   END IF;
94 
95   -- change the Scorecard time stamp when the common dimension were updated.
96 
97   --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels  - l_deleted_rows = '||l_deleted_rows);
98 
99 
100   IF l_deleted_rows <> 0  THEN
101      --DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels  - l_deleted_rows = '||l_deleted_rows);
102 
103      l_Bsc_Tab_Entity_Rec.Bsc_Tab_Id:=p_Tab_Id;
104       BSC_SCORECARD_PUB.Update_Tab_Time_Stamp( FND_API.G_FALSE
105                                             ,l_Bsc_Tab_Entity_Rec
106                                             ,x_return_status
107                                             ,x_msg_count
108                                             ,x_msg_data
109       );
110   END IF;
111 
112 --DBMS_OUTPUT.PUT_LINE('End Check_Common_Dim_Levels');
113 /*
114 BSC_MESSAGE.Add(x_message => 'completed run Check_Common_Dim_Levels',
115                 x_source => 'BSC_COMMON_DIM_LEVELS_PUB',
116                 x_mode => 'I');
117 commit;
118 */
119 
120 EXCEPTION
121     WHEN FND_API.G_EXC_ERROR THEN
122         ROLLBACK TO BSCCheDimLevsPUB;
123         FND_MSG_PUB.Count_And_Get
124         (      p_encoded   =>  FND_API.G_FALSE
125            ,   p_count     =>  x_msg_count
126            ,   p_data      =>  x_msg_data
127         );
128         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
129         x_return_status :=  FND_API.G_RET_STS_ERROR;
130         RAISE;
131     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
132         ROLLBACK TO BSCCheDimLevsPUB;
133         FND_MSG_PUB.Count_And_Get
134         (      p_encoded   =>  FND_API.G_FALSE
135            ,   p_count     =>  x_msg_count
136            ,   p_data      =>  x_msg_data
137         );
138         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
139         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
140         RAISE;
141     WHEN NO_DATA_FOUND THEN
142         ROLLBACK TO BSCCheDimLevsPUB;
143         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
144         IF (x_msg_data IS NOT NULL) THEN
145             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels ';
146         ELSE
147             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels ';
148         END IF;
149         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
150         RAISE;
151     WHEN OTHERS THEN
152         ROLLBACK TO BSCCheDimLevsPUB;
153         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
154         IF (x_msg_data IS NOT NULL) THEN
155             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels ';
156         ELSE
157             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels ';
158         END IF;
159         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
160         RAISE;
161 END  Check_Common_Dim_Levels;
162 
163 /*-------------------------------------------------------------------------------------------------------------------
164   Check_Common_Dim_Levels_DL
165      To Check Common dimension levels when dimension level is updated
166      ot deleted, etc
167 -------------------------------------------------------------------------------------------------------------------*/
168 PROCEDURE Check_Common_Dim_Levels_DL(
169   p_Dim_Level_Id        IN  number
170  ,x_return_status       OUT NOCOPY     varchar2
171  ,x_msg_count		    OUT NOCOPY	number
172  ,x_msg_data		    OUT NOCOPY	varchar2
173 ) IS
174  -- Query to get the tabs where a dimension object is used
175  -- as common dimension level
176  CURSOR c_tabs_to_check is
177   select TAB_ID
178   from BSC_SYS_COM_DIM_LEVELS
179   Where DIM_LEVEL_id = p_Dim_Level_Id;
180 
181   l_tab_id number;
182 
183 BEGIN
184    FND_MSG_PUB.Initialize;
185    x_return_status := FND_API.G_RET_STS_SUCCESS;
186    SAVEPOINT BSCCheDimLevsDL_PUB;
187 	--DBMS_OUTPUT.PUT_LINE('Begin Check_Common_Dim_Levels_DL' );
188 	--DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels_DL   p_Dim_Level_Id = ' || p_Dim_Level_Id  );
189    open c_tabs_to_check;
190    loop
191      fetch c_tabs_to_check into l_tab_id;
192      exit when c_tabs_to_check%notfound;
193      Check_Common_Dim_Levels(
194         p_Tab_Id            => l_tab_id
195        ,x_return_status     => x_return_status
196        ,x_msg_count	    => x_msg_count
197        ,x_msg_data	    => x_msg_data
198      );
199    end loop;
200    close c_tabs_to_check;
201    --DBMS_OUTPUT.PUT_LINE('Begin Check_Common_Dim_Levels_DL' );
202 
203 EXCEPTION
204     WHEN FND_API.G_EXC_ERROR THEN
205         if c_tabs_to_check%isopen then
206           close c_tabs_to_check;
207         end if;
208         ROLLBACK TO BSCCheDimLevsDL_PUB;
209         FND_MSG_PUB.Count_And_Get
210         (      p_encoded   =>  FND_API.G_FALSE
211            ,   p_count     =>  x_msg_count
212            ,   p_data      =>  x_msg_data
213         );
214         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
215         x_return_status :=  FND_API.G_RET_STS_ERROR;
216         RAISE;
217     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
218         if c_tabs_to_check%isopen then
219           close c_tabs_to_check;
220         end if;
221         ROLLBACK TO BSCCheDimLevsDL_PUB;
222         FND_MSG_PUB.Count_And_Get
223         (      p_encoded   =>  FND_API.G_FALSE
224            ,   p_count     =>  x_msg_count
225            ,   p_data      =>  x_msg_data
226         );
227         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
228         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
229         RAISE;
230     WHEN OTHERS THEN
231         if c_tabs_to_check%isopen then
232           close c_tabs_to_check;
233         end if;
234         ROLLBACK TO BSCCheDimLevsDL_PUB;
235         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
236         IF (x_msg_data IS NOT NULL) THEN
237             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels_DL';
238         ELSE
239             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels_DL';
240         END IF;
241         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
242         RAISE;
243 END  Check_Common_Dim_Levels_DL;
244 
245 /*------------------------------------------------------------------------------
246  Check_Common_Dim_Levels_by_Dim
247     Top be use when a Dimension (Dimension Group is updated)
248 ---------------------------------------------------------------------------------*/
249 PROCEDURE Check_Common_Dim_Levels_by_Dim(
250   p_Dimension_Id        IN  number
251  ,x_return_status       OUT NOCOPY     varchar2
252  ,x_msg_count		    OUT NOCOPY	number
253  ,x_msg_data		    OUT NOCOPY	varchar2
254 ) IS
255  -- Query to get the tabs where a dimension object is used
256  -- as common dimension level
257 
258  CURSOR c_tabs_to_check is
259     SELECT DISTINCT B.TAB_ID
260       FROM BSC_KPI_DIM_GROUPS A
261           ,BSC_TAB_INDICATORS B
262       WHERE A.INDICATOR = B.INDICATOR
263         AND A.DIM_GROUP_ID = p_Dimension_Id;
264 
265   l_tab_id number;
266 
267 BEGIN
268    FND_MSG_PUB.Initialize;
269    x_return_status := FND_API.G_RET_STS_SUCCESS;
270    SAVEPOINT BSCCheckCDimByDim;
271 	--DBMS_OUTPUT.PUT_LINE('Begin Check_Common_Dim_Levels_by_Dim' );
272 	--DBMS_OUTPUT.PUT_LINE('Check_Common_Dim_Levels_by_Dim   p_Dimension_Id = ' || p_Dimension_Id  );
273    open c_tabs_to_check;
274    loop
275      fetch c_tabs_to_check into l_tab_id;
276      exit when c_tabs_to_check%notfound;
277      Check_Common_Dim_Levels(
278         p_Tab_Id            => l_tab_id
279        ,x_return_status     => x_return_status
280        ,x_msg_count	        => x_msg_count
281        ,x_msg_data	        => x_msg_data
282      );
283    end loop;
284    close c_tabs_to_check;
285    --DBMS_OUTPUT.PUT_LINE('End Check_Common_Dim_Levels_by_Dim' );
286 
287 EXCEPTION
288     WHEN FND_API.G_EXC_ERROR THEN
289         if c_tabs_to_check%isopen then
290           close c_tabs_to_check;
291         end if;
292         ROLLBACK TO BSCCheckCDimByDim;
293         FND_MSG_PUB.Count_And_Get
294         (      p_encoded   =>  FND_API.G_FALSE
295            ,   p_count     =>  x_msg_count
296            ,   p_data      =>  x_msg_data
297         );
298         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
299         x_return_status :=  FND_API.G_RET_STS_ERROR;
300         RAISE;
301     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
302         if c_tabs_to_check%isopen then
303           close c_tabs_to_check;
304         end if;
305         ROLLBACK TO BSCCheckCDimByDim;
306         FND_MSG_PUB.Count_And_Get
307         (      p_encoded   =>  FND_API.G_FALSE
308            ,   p_count     =>  x_msg_count
309            ,   p_data      =>  x_msg_data
310         );
311         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
312         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
313         RAISE;
314     WHEN OTHERS THEN
315         if c_tabs_to_check%isopen then
316           close c_tabs_to_check;
317         end if;
318         ROLLBACK TO BSCCheckCDimByDim;
319         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
320         IF (x_msg_data IS NOT NULL) THEN
321             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels_by_Dim';
322         ELSE
323             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels_by_Dim';
324         END IF;
325         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
326         RAISE;
327 END  Check_Common_Dim_Levels_by_Dim;
328 
329 
330 -------------------------------------------------------------------------------------------------------------------
331 --   Find_Common_Dim_Levels
332 -------------------------------------------------------------------------------------------------------------------
333 PROCEDURE Find_Common_Dim_Levels(
334   p_commit              IN      varchar2 := FND_API.G_FALSE
335  ,p_Tab_Id        	IN      number
336  ,x_Dim_Level_Tbl 	OUT NOCOPY     BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Tbl_Type
337  ,x_return_status       OUT NOCOPY     varchar2
338  ,x_msg_count		OUT NOCOPY	number
339  ,x_msg_data		OUT NOCOPY	varchar2
340 ) IS
341 
342  v_Num_KPI_Default_PMF	number;   /* Number of  KPIs With Default PMF Measures  */
343  v_Num_Dim_Sets_In_Tab 			number;
344  v_Dim_Level_Rec 			BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
345 
346  v_Index 				number;
347  v_Parent_Dim_Level_Id			number;
348 
349 
350  --Cursor to get The common Dimensions for the tab.
351  CURSOR c_Common_Levels IS
352 	 SELECT DISTINCT KL.LEVEL_TABLE_NAME, KL.DIM_LEVEL_INDEX, NVL(KL.PARENT_LEVEL_INDEX, -1), SL.DIM_LEVEL_ID
353 	   FROM BSC_TAB_INDICATORS TI,
354 	      BSC_KPIS_B KB,
355 	      BSC_KPI_DIM_LEVELS_VL KL,
356 	      BSC_SYS_DIM_LEVELS_VL SL
357 	   WHERE TI.TAB_ID = p_Tab_Id
358 		  AND KB.INDICATOR = TI.INDICATOR
359 		  AND KB.PROTOTYPE_FLAG <> 2
360 		  AND KL.INDICATOR = KB.INDICATOR
361 		  AND KL.TABLE_RELATION IS NULL
362 		  AND KL.STATUS <> 0
363 		  AND KL.DEFAULT_KEY_VALUE IS NULL
364 		  AND ( KL.DEFAULT_VALUE = 'T' OR KL.DEFAULT_VALUE LIKE 'D%')
365 		  AND KL.LEVEL_SOURCE ='BSC'
366                   AND SL.LEVEL_TABLE_NAME = KL.LEVEL_TABLE_NAME
367 	   GROUP BY KL.LEVEL_TABLE_NAME,
368 		KL.PARENT_LEVEL_INDEX,
369 		KL.DIM_LEVEL_INDEX,
370                 STATUS,
374 	   ORDER BY KL.DIM_LEVEL_INDEX;
371 		KL.TABLE_RELATION,
372 		SL.DIM_LEVEL_ID
373 	   HAVING Count(KL.DIM_SET_ID) =  v_Num_Dim_Sets_In_Tab
375 
376     CURSOR c_child_validation IS
377        SELECT KL.INDICATOR
378             , KL.DIM_SET_ID
379             , KL.DIM_LEVEL_INDEX
380             , SLG.DEFAULT_VALUE
381             , KL.PARENT_LEVEL_INDEX
382             , KL.DEFAULT_KEY_VALUE
383        FROM BSC_TAB_INDICATORS TI
384           , BSC_KPIS_B KB
385           , BSC_KPI_DIM_LEVELS_VL KL
386           , BSC_KPI_DIM_GROUPS KG
387           , BSC_SYS_DIM_LEVELS_BY_GROUP SLG
388           , BSC_SYS_DIM_LEVELS_VL SL
389        WHERE TI.TAB_ID =  p_Tab_Id
390          AND KB.INDICATOR = TI.INDICATOR
391          AND KB.PROTOTYPE_FLAG <> 2
392          AND KL.INDICATOR = KB.INDICATOR
393          AND KG.INDICATOR = KL.INDICATOR
394          AND KG.DIM_SET_ID = KL.DIM_SET_ID
395          AND SLG.DIM_GROUP_ID = KG.DIM_GROUP_ID
396          AND SL.DIM_LEVEL_ID = SLG.DIM_LEVEL_ID
397          AND SL.LEVEL_TABLE_NAME = KL.LEVEL_TABLE_NAME
398        ORDER BY KL.INDICATOR, KL.DIM_SET_ID, KL.DIM_LEVEL_INDEX;
399 
400     l_Dim_Set_Changed_Flag  BOOLEAN;
401     l_Child_Dim_Obj_Flag    BOOLEAN;
402     l_last_KPI_Code         NUMBER;
403     l_Last_Dim_Set_Id       NUMBER;
404     l_Firt_Dim_Family_Flag  BOOLEAN;
405 
406 BEGIN
407    FND_MSG_PUB.Initialize;
408    x_return_status := FND_API.G_RET_STS_SUCCESS;
409 		  --DBMS_OUTPUT.PUT_LINE('Begin Find_Common_Dim_Levels');
410 
411  --Evaluate that not KPI in the tab has PMF Measures as Default One
412  SELECT COUNT(SOURCE)
413    INTO v_Num_KPI_Default_PMF
414    FROM (SELECT DISTINCT KM.INDICATOR, DS.DATASET_ID, DS.SOURCE  --, KM.PROTOTYPE_FLAG
415 	 FROM BSC_TAB_INDICATORS TI,
416 	  BSC_KPI_ANALYSIS_MEASURES_B KM ,
417 	  (SELECT INDICATOR, DEFAULT_VALUE
418 	    FROM  BSC_KPI_ANALYSIS_GROUPS
419 	    WHERE  ANALYSIS_GROUP_ID = 0 ) A0,
420 	  (SELECT INDICATOR, DEFAULT_VALUE
421 	    FROM  BSC_KPI_ANALYSIS_GROUPS
422 	    WHERE  ANALYSIS_GROUP_ID = 1 ) A1,
423 	  (SELECT INDICATOR, DEFAULT_VALUE
424 	    FROM  BSC_KPI_ANALYSIS_GROUPS
425 	    WHERE  ANALYSIS_GROUP_ID = 2 ) A2,
426 	  BSC_SYS_DATASETS_B DS
427 	 WHERE TI.TAB_ID = p_Tab_Id
428 	   AND KM.INDICATOR = TI.INDICATOR
429 	   AND KM.DEFAULT_VALUE = 1
430 	   AND KM.INDICATOR = A0.INDICATOR (+)
431 	   AND KM.ANALYSIS_OPTION0 = NVL(A0.DEFAULT_VALUE, 0)
432 	   AND KM.INDICATOR = A1.INDICATOR (+)
433 	   AND KM.ANALYSIS_OPTION1 = NVL(A1.DEFAULT_VALUE, 0)
434 	   AND KM.INDICATOR = A2.INDICATOR (+)
435 	   AND KM.ANALYSIS_OPTION2 = NVL(A2.DEFAULT_VALUE, 0)
436 	   AND DS.DATASET_ID = KM.DATASET_ID
437 	)
438    WHERE SOURCE <> 'BSC';
439 
440 
441  --If There is not PMF Measures as Default
442  IF v_Num_KPI_Default_PMF  = 0 Then
443 
444   --Evaluate the number of Dimention Set  in the tab, on which a Common Dimension Level must be belong to.
445   --It does not take in account PMF Dimension Sets
446    SELECT COUNT (DIM_SET_ID)
447      INTO v_Num_Dim_Sets_In_Tab
448      FROM (
449           SELECT DISTINCT INDICATOR, DIM_SET_ID, SOURCE
450 	    FROM
451             ( SELECT KB.INDICATOR, KDS.DIM_SET_ID, SL.DIM_LEVEL_ID, SL.SOURCE
452 	        FROM BSC_TAB_INDICATORS TI,
453 	          BSC_KPIS_B KB,
454 	          BSC_KPI_DIM_SETS_VL KDS,
455 	          BSC_KPI_DIM_GROUPS KDG,
456 	          BSC_SYS_DIM_LEVELS_BY_GROUP SLG,
457 	          BSC_SYS_DIM_LEVELS_B SL
458 	        WHERE TI.TAB_ID = p_Tab_Id
459 	          AND KB.INDICATOR = TI.INDICATOR
460 	          AND KB.PROTOTYPE_FLAG <> 2
461 	          AND KDS.INDICATOR = KB.INDICATOR
462 	          AND KDG.INDICATOR (+) = KDS.INDICATOR
463 	          AND NVL(KDG.DIM_SET_ID , KDS.DIM_SET_ID) =  KDS.DIM_SET_ID
464 	          AND SLG.DIM_GROUP_ID (+)  = KDG.DIM_GROUP_ID
465 	          AND SL.DIM_LEVEL_ID (+) =  SLG.DIM_LEVEL_ID
466 	        ORDER BY KB.INDICATOR, KDS.DIM_SET_ID , KDG.DIM_GROUP_INDEX, SLG.DIM_LEVEL_INDEX
467             )
468          )
469      WHERE (SOURCE <> 'PMF' OR SOURCE IS NULL);
470 
471    IF v_Num_Dim_Sets_In_Tab  <> 0 Then
472             --Common Dimension are those that are in all the Dimension Sets existing
473             --in the Tab  (Not including PMF Dimension)
474             --Rules:  Level Status must to be <> 0 . It mean disabled
475             --         M x N RelationShips not apply for Common Dimensions
476             --         Dimensions with DEFAULT_KEY_VALUE not apply for common Dimensions:
477             --              (DEFAULT_VALUE <> 'T Or DEFAULT_KEY_VALUE IS NOT NULL)
478 
479      --get The common Dimensions for the tab.
480      v_Index := 0;
481      v_Parent_Dim_Level_Id := -1;
482      OPEN c_Common_Levels;
483      LOOP
484        FETCH c_Common_Levels INTO v_Dim_Level_Rec.Bsc_Level_View_Name
485                                   ,v_Dim_Level_Rec.Bsc_Level_Index
486                                   ,v_Dim_Level_Rec.Bsc_Parent_Level_Index
487                                   ,v_Dim_Level_Rec.Bsc_Level_Id;
488        EXIT WHEN c_Common_Levels%NOTFOUND;
489        IF v_Index = v_Dim_Level_Rec.Bsc_Level_Index AND
490              (v_Dim_Level_Rec.Bsc_Level_Index = 0 OR v_Dim_Level_Rec.Bsc_Parent_Level_Index <> -1  )  then
491                 v_Index := v_Index + 1 ;
492                 v_Dim_Level_Rec.Bsc_Parent_Level_Id  := v_Parent_Dim_Level_Id;
493 		x_Dim_Level_Tbl(v_Index) := v_Dim_Level_Rec;
497                 --DBMS_OUTPUT.PUT_LINE('Find_Common_Dim_Levels    v_Dim_Level_Rec.Bsc_Level_Index ' || v_Dim_Level_Rec.Bsc_Level_Index );
494 		v_Parent_Dim_Level_Id := v_Dim_Level_Rec.Bsc_Level_Id;
495 
496                 --DBMS_OUTPUT.PUT_LINE('Find_Common_Dim_Levels    v_Dim_Level_Rec.Bsc_Level_View_Name ' || v_Dim_Level_Rec.Bsc_Level_View_Name);
498        ELSE
499  	     EXIT;
500        END IF;
501      END LOOP;
502 
503      --DBMS_OUTPUT.PUT_LINE('Find_Common_Dim_Levels    x_Dim_Level_Tbl.COUNT = ' || x_Dim_Level_Tbl.COUNT);
504 
505      ------------ Disable list button when one of the children of the common
506      --           dimension objects doesn't enter in TOTAL
507      --  fixed bug 3518610
508      l_last_KPI_Code := -999;
509      l_Last_Dim_Set_Id := -999;
510      l_Child_Dim_Obj_Flag := TRUE;
511 
512      FOR CD IN c_child_validation LOOP
513        l_Dim_Set_Changed_Flag := (CD.INDICATOR <> l_last_KPI_Code) OR (CD.DIM_SET_ID <> l_Last_Dim_Set_Id);
514        IF l_Dim_Set_Changed_Flag THEN
515             l_Firt_Dim_Family_Flag := TRUE;
516        END IF;
517        l_last_KPI_Code := CD.INDICATOR;
518        l_Last_Dim_Set_Id := CD.DIM_SET_ID;
519        l_Child_Dim_Obj_Flag := l_Dim_Set_Changed_Flag OR (l_Dim_Set_Changed_Flag = FALSE  AND CD.PARENT_LEVEL_INDEX IS NOT NULL);
520        l_Firt_Dim_Family_Flag := l_Firt_Dim_Family_Flag AND l_Child_Dim_Obj_Flag;
521        --MEM 07/10/00 Bug #1343648 Add condition on DEFAULT_KEY_VALUE. We disable the list also when some common
522        --dimension enter in a key value
523        IF (UPPER(CD.DEFAULT_VALUE) <> 'T' OR CD.DEFAULT_KEY_VALUE IS NOT NULL) AND l_Firt_Dim_Family_Flag THEN
524             -- Clear comman Dimensions
525         	x_Dim_Level_Tbl.DELETE;
526             EXIT;
527        END IF;
528      END LOOP;
529      -----------------------------------
530      --DBMS_OUTPUT.PUT_LINE('Find_Common_Dim_Levels    x_Dim_Level_Tbl.COUNT = ' || x_Dim_Level_Tbl.COUNT);
531 
532    END IF;
533  END IF;
534 		  --DBMS_OUTPUT.PUT_LINE('End Find_Common_Dim_Levels');
535 
536 --debug messages
537 /*
538 BSC_MESSAGE.Add(x_message => 'completed run Find_Common_Dim_Levels',
539                 x_source => 'BSC_COMMON_DIM_LEVELS_PUB',
540                 x_mode => 'I');
541 commit;
542 */
543 EXCEPTION
544     WHEN FND_API.G_EXC_ERROR THEN
545         FND_MSG_PUB.Count_And_Get
546         (      p_encoded   =>  FND_API.G_FALSE
547            ,   p_count     =>  x_msg_count
548            ,   p_data      =>  x_msg_data
549         );
550         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
551         x_return_status :=  FND_API.G_RET_STS_ERROR;
552         RAISE;
553     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
554         FND_MSG_PUB.Count_And_Get
555         (      p_encoded   =>  FND_API.G_FALSE
556            ,   p_count     =>  x_msg_count
557            ,   p_data      =>  x_msg_data
558         );
559         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
560         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
561         RAISE;
562     WHEN NO_DATA_FOUND THEN
563         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
564         IF (x_msg_data IS NOT NULL) THEN
565             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Find_Common_Dim_Levels ';
566         ELSE
567             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Find_Common_Dim_Levels ';
568         END IF;
569         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
570         RAISE;
571     WHEN OTHERS THEN
572         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
573         IF (x_msg_data IS NOT NULL) THEN
574             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Find_Common_Dim_Levels ';
575         ELSE
576             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Find_Common_Dim_Levels ';
577         END IF;
578         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
579         RAISE;
580 END Find_Common_Dim_Levels;
581 
582 
583 /*-------------------------------------------------------------------------------------------------------------------
584    Retrieve_Common_Dim_Levels
585 -------------------------------------------------------------------------------------------------------------------*/
586 PROCEDURE  Retrieve_Common_Dim_Levels(
587   p_commit              IN      varchar2 := FND_API.G_FALSE
588  ,p_Tab_Id        	IN      number
589  ,x_Dim_Level_Tbl 	OUT NOCOPY	BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Tbl_Type
590  ,x_return_status       OUT NOCOPY     varchar2
591  ,x_msg_count		OUT NOCOPY	number
592  ,x_msg_data		OUT NOCOPY	varchar2
593 ) IS
594 
595 -- used
596 
597  v_Dim_Level_Rec 			BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
598  v_Index 				number;
599  v_Parent_Dim_Level_Id			number;
600 
601 
602  --Cursor to get The common Dimensions for the tab.
603  CURSOR c_Common_Levels IS
604 	 SELECT SL.LEVEL_TABLE_NAME,
605 		CL.DIM_LEVEL_INDEX,
606 		CL.PARENT_LEVEL_INDEX,
607 		CL.DIM_LEVEL_ID,
608                 CL.PARENT_DIM_LEVEL_ID
609 	    FROM BSC_SYS_DIM_LEVELS_B SL,
610 		BSC_SYS_COM_DIM_LEVELS CL
611 	   WHERE CL.TAB_ID = p_Tab_Id
612 		AND SL.DIM_LEVEL_ID (+) = CL.DIM_LEVEL_ID
613  	   ORDER BY CL.DIM_LEVEL_INDEX;
614 
615 BEGIN
616    FND_MSG_PUB.Initialize;
620      v_Index := 0;
617    x_return_status := FND_API.G_RET_STS_SUCCESS;
618 		  --DBMS_OUTPUT.PUT_LINE('Begin Retrieve_Common_Dim_Levels');
619 
621      v_Parent_Dim_Level_Id := -1;
622      OPEN c_Common_Levels;
623      LOOP
624        FETCH c_Common_Levels INTO v_Dim_Level_Rec.Bsc_Level_View_Name
625                                   ,v_Dim_Level_Rec.Bsc_Level_Index
626                                   ,v_Dim_Level_Rec.Bsc_Parent_Level_Index
627                                   ,v_Dim_Level_Rec.Bsc_Level_Id
628 				  ,v_Dim_Level_Rec.Bsc_Parent_Level_Id;
629        EXIT WHEN c_Common_Levels%NOTFOUND;
630        v_Index := v_Index + 1 ;
631        x_Dim_Level_Tbl(v_Index) := v_Dim_Level_Rec;
632 
633        --DBMS_OUTPUT.PUT_LINE('Retrieve_Common_Dim_Levels  v_Dim_Level_Rec.Bsc_Level_View_Name ' || v_Dim_Level_Rec.Bsc_Level_View_Name);
634        --DBMS_OUTPUT.PUT_LINE('Retrieve_Common_Dim_Levels  v_Dim_Level_Rec.Bsc_Level_Index ' || v_Dim_Level_Rec.Bsc_Level_Index );
635 
636      END LOOP;
637 
638 
639 		  --DBMS_OUTPUT.PUT_LINE('End Retrieve_Common_Dim_Levels');
640 
641 EXCEPTION
642     WHEN FND_API.G_EXC_ERROR THEN
643         FND_MSG_PUB.Count_And_Get
644         (      p_encoded   =>  FND_API.G_FALSE
645            ,   p_count     =>  x_msg_count
646            ,   p_data      =>  x_msg_data
647         );
648         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
649         x_return_status :=  FND_API.G_RET_STS_ERROR;
650         RAISE;
651     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
652         FND_MSG_PUB.Count_And_Get
653         (      p_encoded   =>  FND_API.G_FALSE
654            ,   p_count     =>  x_msg_count
655            ,   p_data      =>  x_msg_data
656         );
657         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
658         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
659         RAISE;
660     WHEN NO_DATA_FOUND THEN
661         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
662         IF (x_msg_data IS NOT NULL) THEN
663             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Retrieve_Common_Dim_Levels ';
664         ELSE
665             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Retrieve_Common_Dim_Levels ';
666         END IF;
667         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
668         RAISE;
669     WHEN OTHERS THEN
670         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
671         IF (x_msg_data IS NOT NULL) THEN
672             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Retrieve_Common_Dim_Levels ';
673         ELSE
674             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Retrieve_Common_Dim_Levels ';
675         END IF;
676         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
677         RAISE;
678 END  Retrieve_Common_Dim_Levels;
679 
680 /*-------------------------------------------------------------------------------------------------------------------
681    Check_Dim_Level_Default_Value
682 -------------------------------------------------------------------------------------------------------------------*/
683 PROCEDURE  Check_Dim_Level_Default_Value(
684   p_commit              IN      varchar2 := FND_API.G_FALSE
685  ,p_Tab_Id        	IN      number
686  ,x_return_status       OUT NOCOPY     varchar2
687  ,x_msg_count		OUT NOCOPY	number
688  ,x_msg_data		OUT NOCOPY	varchar2
689 ) IS
690 
691  v_Common_Level_ReTrieved_Tbl 	BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Tbl_Type;
692  v_Dim_Level_Rec_R 			BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
693  v_Indicator 				number;
694  v_index				number;
695 
696  CURSOR c_KPIs IS
697  	SELECT INDICATOR
698           FROM  BSC_TAB_INDICATORS
699           WHERE TAB_ID = p_Tab_Id;
700 
701 BEGIN
702    FND_MSG_PUB.Initialize;
703    x_return_status := FND_API.G_RET_STS_SUCCESS;
704    SAVEPOINT BSCChkDimLevDefPUB;
705 
706 		  --DBMS_OUTPUT.PUT_LINE('Begin Check_Dim_Level_Default_Value');
707 
708   -- Get the Common Dimension Level already define in the DB.
709   Retrieve_Common_Dim_Levels(p_commit, p_Tab_Id, v_Common_Level_ReTrieved_Tbl
710 				 		,x_return_status ,x_msg_count ,x_msg_data );
711 
712   OPEN c_KPIs;
713   LOOP
714        FETCH c_KPIs INTO v_Indicator;
715        EXIT WHEN c_KPIs%NOTFOUND;
716 
717 	  UPDATE BSC_KPI_DIM_LEVELS_B SET DEFAULT_VALUE = 'T'
718             WHERE INDICATOR = v_Indicator AND DEFAULT_VALUE Like 'D%';
719 
720           for v_Index IN 1.. v_Common_Level_ReTrieved_Tbl.COUNT LOOP
721 	    v_Dim_Level_Rec_R := v_Common_Level_ReTrieved_Tbl(v_Index);
722 	    UPDATE BSC_KPI_DIM_LEVELS_B SET DEFAULT_VALUE = 'D' || v_Dim_Level_Rec_R.Bsc_Level_Index
723               WHERE INDICATOR = v_Indicator AND LEVEL_TABLE_NAME = v_Dim_Level_Rec_R.Bsc_Level_View_Name;
724 
725             --DBMS_OUTPUT.PUT_LINE('Check_Dim_Level_Default_Value   v_Indicator ' || v_Indicator);
726             --DBMS_OUTPUT.PUT_LINE('Check_Dim_Level_Default_Value   v_Dim_Level_Rec_R.Bsc_Level_View_Name ' || v_Dim_Level_Rec_R.Bsc_Level_View_Name);
727             --DBMS_OUTPUT.PUT_LINE('Check_Dim_Level_Default_Value   v_Dim_Level_Rec_R.Bsc_Level_Index ' || v_Dim_Level_Rec_R.Bsc_Level_Index );
728 
729           end loop;
730 
731  END LOOP;
732 
733  if p_commit = FND_API.G_TRUE then
734 	commit;
735  end if;
739     WHEN FND_API.G_EXC_ERROR THEN
736 		  --DBMS_OUTPUT.PUT_LINE('End Check_Dim_Level_Default_Value');
737 
738 EXCEPTION
740         ROLLBACK TO BSCChkDimLevDefPUB;
741         FND_MSG_PUB.Count_And_Get
742         (      p_encoded   =>  FND_API.G_FALSE
743            ,   p_count     =>  x_msg_count
744            ,   p_data      =>  x_msg_data
745         );
746         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
747         x_return_status :=  FND_API.G_RET_STS_ERROR;
748         RAISE;
749     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
750         ROLLBACK TO BSCChkDimLevDefPUB;
751         FND_MSG_PUB.Count_And_Get
752         (      p_encoded   =>  FND_API.G_FALSE
753            ,   p_count     =>  x_msg_count
754            ,   p_data      =>  x_msg_data
755         );
756         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
757         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
758         RAISE;
759     WHEN NO_DATA_FOUND THEN
760         ROLLBACK TO BSCChkDimLevDefPUB;
761         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
762         IF (x_msg_data IS NOT NULL) THEN
763             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Dim_Level_Default_Value ';
764         ELSE
765             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Dim_Level_Default_Value ';
766         END IF;
767         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
768         RAISE;
769     WHEN OTHERS THEN
770         ROLLBACK TO BSCChkDimLevDefPUB;
771         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
772         IF (x_msg_data IS NOT NULL) THEN
773             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Check_Dim_Level_Default_Value ';
774         ELSE
775             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Check_Dim_Level_Default_Value ';
776         END IF;
777         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
778         RAISE;
779 END  Check_Dim_Level_Default_Value;
780 
781 /*******************************************************************
782  Name	: Validate_List_Button
783  Description : This procedure will validate the common dim levels
784 	       within the tab.
785 	       This procedure can accept Kpi id and dim level id.
786 	       If kpi id passed then Check_Common_Dim_Levels is called.
787 	       If dimension obhect is passed then Check_Common_Dim_Levels_DL
788 	       will be called.
789  Inputs	: p_Kpi_Id
790 	  p_Dim_Level_Id
791 Creator : ashankar 26-MAR-2004
792 Note: This API takes care of shared indicators also.So don't need to call
793       this API for shared indiactors.
794 
795      The below API does the validation for the list buttons
796      Common Dimension are those which are common across the tabs.
797      If the tab contains 10 dimension sets, then all these dimension sets
798      must have the same dimension levels and in the same order.
799      The following is the Logic :-
800      1.First check if the indicator is already assigned to the tab.
801      2.if yes then get the tab id corresponding to the KPI.
802      3.call the common dimension level sanity test API.
803      4.Call the same logic for all the shared indiactors also
804 
805 /******************************************************************/
806 PROCEDURE Validate_List_Button
807 (
808   	p_Kpi_Id		IN		BSC_KPIS_B.indicator%TYPE := NULL
809    ,	p_Dim_Level_Id		IN		NUMBER	:= NULL
810    ,	x_return_status		OUT NOCOPY      VARCHAR2
811    ,	x_msg_count		OUT NOCOPY	NUMBER
812    ,	x_msg_data		OUT NOCOPY	VARCHAR2
813 )IS
814   l_Kpi_Id	BSC_KPIS_B.indicator%TYPE;
815   l_count       NUMBER;
816   l_tab_id	BSC_TABS_B.Tab_Id%TYPE;
817 
818   CURSOR  c_kpi_ids IS
819   SELECT  indicator
820   FROM    BSC_KPIS_B
821   WHERE   Source_Indicator =   l_Kpi_Id
822   AND     Prototype_Flag   <>  2;
823 
824   CURSOR c_tab_id IS
825   SELECT tab_id
826   FROM   BSC_TAB_INDICATORS
827   WHERE  indicator = l_Kpi_Id;
828 
829 BEGIN
830     FND_MSG_PUB.Initialize;
831     x_return_status := FND_API.G_RET_STS_SUCCESS;
832 
833     IF(p_Kpi_Id IS NOT NULL) THEN
834     	l_Kpi_Id := p_Kpi_Id;
835        FOR cd IN c_tab_id LOOP
836 		l_tab_id := cd.tab_id;
837 		BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels
838 		(
839 		      p_Tab_Id             =>  l_tab_id
840 		     ,x_return_status      =>  x_return_status
841 		     ,x_msg_count          =>  x_msg_count
842 		     ,x_msg_data           =>  x_msg_data
843          );
844          IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
845 		   --DBMS_OUTPUT.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set Failed: at  BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels');
846 		    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
847 	     END IF;
848 	   END LOOP;
849 	/***************For Shared Indiactors ***********************************/
850 
851      FOR cd IN c_kpi_ids LOOP
852 	   l_Kpi_Id :=	cd.indicator;
853 
854 	   IF(c_tab_id%ISOPEN ) THEN
855 	   	CLOSE c_tab_id;
856 	   END IF;
857 
858 	   OPEN c_tab_id;
859 	   FETCH c_tab_id INTO l_tab_id;
860 	   EXIT WHEN c_tab_id%NOTFOUND;
861 	   CLOSE c_tab_id;
862 
863 	   BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels
864 	   (
865 	         p_Tab_Id             =>  l_tab_id
866 	        ,x_return_status      =>  x_return_status
867 	        ,x_msg_count          =>  x_msg_count
868 	        ,x_msg_data           =>  x_msg_data
869 	   );
870 	   IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
871 	     --DBMS_OUTPUT.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set Failed: at  BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels');
872 	     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
873 	   END IF;
874     END LOOP;
875 
876     ELSIF(p_Dim_Level_Id IS NOT NULL) THEN
877 
878     	BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels_DL
879     	(
880 	  	p_Dim_Level_Id		=>  p_Dim_Level_Id
881 	       ,x_return_status		=>  x_return_status
882 	       ,x_msg_count		=>  x_msg_count
883 	       ,x_msg_data		=>  x_msg_data
884         );
885         IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
886 	    --DBMS_OUTPUT.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Create_Dim_Set Failed: at  BSC_COMMON_DIM_LEVELS_PUB.Check_Common_Dim_Levels');
887 	    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
888 	END IF;
889     END IF;
890 
891 EXCEPTION
892     WHEN FND_API.G_EXC_ERROR THEN
893         FND_MSG_PUB.Count_And_Get
894         (      p_encoded   =>  FND_API.G_FALSE
895            ,   p_count     =>  x_msg_count
896            ,   p_data      =>  x_msg_data
897         );
898         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
899         x_return_status :=  FND_API.G_RET_STS_ERROR;
900         RAISE;
901     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
902         FND_MSG_PUB.Count_And_Get
903         (      p_encoded   =>  FND_API.G_FALSE
904            ,   p_count     =>  x_msg_count
905            ,   p_data      =>  x_msg_data
906         );
907         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
908         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
909         RAISE;
910     WHEN NO_DATA_FOUND THEN
911         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
912         IF (x_msg_data IS NOT NULL) THEN
913             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button ';
914         ELSE
915             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button ';
916         END IF;
917         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
918         RAISE;
919     WHEN OTHERS THEN
920         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
921         IF (x_msg_data IS NOT NULL) THEN
922             x_msg_data      :=  x_msg_data||' -> BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button ';
923         ELSE
924             x_msg_data      :=  SQLERRM||' at BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button ';
925         END IF;
926         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
927         RAISE;
928 END Validate_List_Button;
929 
930 
931 
932 END BSC_COMMON_DIM_LEVELS_PUB;