[Home] [Help]
PACKAGE BODY: APPS.BSC_BIS_DIM_OBJ_PUB
Source
1 PACKAGE BODY BSC_BIS_DIM_OBJ_PUB AS
2 /* $Header: BSCDPMDB.pls 120.30 2008/01/09 13:07:04 lbodired 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 | BSCDPMDB.pls |
10 REM | |
11 REM | DESCRIPTION |
12 REM | Module: Wrapper for Dimensions, part of PMD APIs |
13 REM | |
14 REM | NOTES |
15 REM | 14-FEB-2003 PAJOHRI Created. |
16 REM | 15-MAY-2003 ADRAO Added Incremental Changes |
17 REM | 06-JUN-2003 ADRAO Added Granular Locking |
18 REM | 17-JUL-2003 ADRAO Bug#3054935 Changed following procedures |
19 REM | BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set() |
20 REM | BSC_BIS_KPI_MEAS_PUB.Unassign_Dims_To_Dim_Set() |
21 REM | to use 'NULL' timestamp |
22 REM | 17-JUL-2003 PAJOHRI Bug #3053701, Fixed API Create_Pmf_Views |
23 REM | 29-JUL-2003 PAJOHRI Bug #3049659 |
24 REM | 11-AUG-2003 ADEULGAO fixed bug#3081595 |
25 REM | 12-AUG-2003 ADRAO Added new index for Loader Performance for |
26 REM | for Dimension Object tables Bug#3090828 |
27 REM | 20-OCT-2003 PAJOHRI Bug #3179995 |
28 REM | 20-OCT-2003 PAJOHRI Bug #3179995 |
29 REM | 29-OCT-2003 PAJOHRI Bug #3120190 |
30 REM | 04-NOV-2003 PAJOHRI Bug #3152258 |
31 REM | 04-NOV-2003 PAJOHRI Bug #3220613 |
32 REM | 04-NOV-2003 PAJOHRI Bug #3232366 |
33 REM | 04-NOV-2003 PAJOHRI Bug #3262631 |
34 REM | 08-DEC-2003 KYADAMAK Bug #3225685 |
35 REM | 24-DEC-2003 MEASTMON Bug #3337923 |
36 REM | 26-FEB-2004 MEASTMON Bug #3458428 |
37 REM | 27-FEB-2004 adeulgao fixed bug#3431750 |
38 REM | 02-MAR-2004 ankgoel Bug #3464470 |
39 REM | 29-MAR-2004 PAJOHRI Bug #3530886, Modified tablespaces for tables |
40 REM | 30-MAR-2004 KYADAMAK BUG #3516466 Passing default appid as 271 |
41 REM | 12-APR-2004 PAJOHRI Bug #3426566, modified the logic to use dimension|
42 REM | 'UNASSIGNED' always if there if no Dimension/ |
43 REM | Dimension Object association for PMF and retain |
44 REM | 'All Enable' flag |
45 REM | 19-APR-2004 PAJOHRI Bug #3583394, fix BIS_LEVELS UI Issues |
46 REM | Other issues related to Autonmous Transactions, |
47 REM | and performance also fixed, |
48 REM | 23-APR-2004 ASHANKAR Bug #3518610,Added the fucntion Validate |
49 REM | listbutton |
50 REM | 16-JUN-2004 PAJOHRI Bug #3659486, to support 'All Enable' flag in |
51 REM | Dimension/Dimension Object Association Page |
52 REM | 07-JUL-2004 WLEUNG Bug 3751932, always create/replace PMF View |
53 REM | modified Initialize_Pmf_Recs() |
54 REM | 09-AUG-2004 sawu Used c_BSC_DIM_OBJ in create_dim_object |
55 REM | 11-AUG-2004 sawu Added create_dim_obj() for bug#3819855 with |
56 REM | p_is_default_short_name |
57 REM | 17-AUG-2004 ADRAO Modified Create_Pmf_Views to work with BSC511 |
58 REM | at the code level for Bug#3836170 |
59 REM |25-AUG-2004 visuri Modified Initialize_Bsc_Recs() and |
60 REM | Update_Dim_Object() for bug#3842366 |
61 REM | 17-AUG-2004 wleung modified Bug#3784852 Assign_Unassign_Dimensions |
62 REM | 09-SEP-2004 visuri Shifted Remove_Empty_Dims_For_DimSet() from |
63 REM | BSC_BIS_KPI_MEAS_PUB to BSC_BIS_DIMENSION_PUB |
64 REM | 14-SEP-2004 KYADAMAK added function get_valid_ddlentry_frm_name() |
65 REM | 08-OCT-2004 rpenneru added Modified for bug#3939995 |
66 REM | 21-OCT-2004 akoduri added Modified for bug#3930280 |
67 REM | 03-FEB-2005 kyadamak modified for the bug#4091924 |
68 REM | 08-Feb-04 skchoudh Enh#3873195 drill_to_form_function column |
69 REM | is added |
70 REM | 14-FEB-2005 ashankar modified Alter_One_By_N_Tables and |
71 REM | Alter_M_By_N_Tables.Added the cascading logic |
72 REM | to update RELATION_COL in BSC_SYS_DIM_LEVEL_RELS |
73 REM | 15-FEB-05 ppandey Enh #4016669, support ID, Value for Autogen DO |
74 REM | 16-FEB-2005 ashankar Bug#4184438 Added the Synch Up API |
75 REM | BSC_SYNC_MVLOGS.Sync_dim_table_mv_log |
76 REM | 11-Mar-05 ankgoel Enh#2690720 - AG Report enh |
77 REM | 30-Mar-05 ankgoel Support 'All' enable/disable for BSC dim objects|
78 REM | from Report Designer |
79 REM | 31-MAR-05 adrao Modified API check_sametype_dims to remove |
80 REM | disctinction betweem BSC and BIS Dimesion Objs |
81 REM | 08-APR-2005 kyadamak generating unique master table for PMF dimension|
82 REM | objects for the bug# 4290359 |
83 REM | 02-May-2005 visuri Modified for Bug#4323383 |
84 REM | 18-Jul-2005 ppandey Enh #4417483, Restrict Internal/Calendar Dims |
85 REM | 20-Jul-2005 ppandey Bug #4495539, MIXED Dim Obj not allowed from DD |
86 REM | 22-Jul-2005 kyadamak Modified for bug#4091924 |
87 REM | 09-AUG-2005 adrao Fixed Bug#4383962 for prototype value gen |
88 REM | 11-AUG-2005 ppandey Bug #4324947 Validation for Dim,Dim Obj in Rpt |
89 REM | 27-Sep-2005 ankgoel Bug#4625598,4626579 Uptake common API to get dim|
90 REM | level values |
91 REM | 27-SEP-2005 ashankar Bug#4630859 Removed the duplicate objectives |
92 REM | 28-SEP-2005 ashankar Bug#4630892 Added a new API is_Obj_Display_Frmt_Change |
93 REM | which will check for format changes and the API |
94 REM | is_KPI_Flag_For_DimObject check for Structural |
95 REM | Changes |
96 REM | 25-OCT-2005 kyadamak Removed literals for Enhancement#4618419 |
97 REM | 27-DEC-2005 kyadamak Calling BIA API for bug#4875047 |
98 REM | 02-Jan-2006 akoduri Bug#4611303 - Support For Enable/Disable All |
99 REM | In Report Designer |
100 REM | 06-Jan-2006 akoduri Enh#4739401 - Hide Dimensions/Dim Objects |
101 REM | 13-jan-2005 ashankar Bug#4947293 calling the API sync_dimension_table|
102 REM | dynamically |
103 REM | 31-JAN-2006 adrao Added APIs |
104 REM | - Is_Recursive_Relationship |
105 REM | - Get_Unique_Level_Pk_Col |
106 REM | |
107 REM | Also modified the logic to ensure that when a |
108 REM | PMF DO is under a recursive relationship, the |
109 REM | corresponding BSC View is also changed |
110 REM | 10-FEB-2006 akoduri Bug#4997042 Cascade 'All' property from dim |
111 REM | designer to dim groups of Reports |
112 REM | 15-FEB-2006 visuri bug#4757375 Calendar Create Performance Issue |
113 REM | 31-MAR-2006 akoduri Bug #5048186 No View creation for obsoleted |
114 REM | BIS Dimension objects |
115 REM | 26-Apr-2006 psomesul Enh#5124125 - Creating BSC wrapper view of a |
116 REM | BIS type Dim. Obj. |
117 REM | 15-JUN-2006 ashankar Bug#5254737 Made changes to Create_Dim_Object |
118 REM | Method.Removed the parameter value 'TRUE' in |
119 REM | FND_MESSAGE.SET_TOKEN API |
120 REM | 20-FEB-2006 akoduri Bug #5880618 Validate_PMF_Base_View API is |
121 REM | is failing when more than one parent is passed |
122 REM | 29-JUN-2007 akoduri Bug #6155820 Structural change warning is not |
123 REM | displayed during create dimension object |
124 REM | 21-SEP-2007 ankgoel Bug#6391292 - Handled validation of Manager's |
125 REM | dim object view separately |
126 REM | 09-JAN-2008 lbodired Bug#6707712 PL/SQL error while creating custom |
127 REM | Period for the calendar |
128 REM +=======================================================================+
129 */
130 CONFIG_LIMIT_DIM CONSTANT NUMBER := 8;
131 /*********************************************************************************/
132 TYPE KPI_Dim_Set_Type IS Record
133 ( p_kpi_id BSC_KPI_DIM_SETS_TL.indicator%TYPE
134 , p_dim_set_id BSC_KPI_DIM_SETS_TL.dim_set_id%TYPE
135 , p_Name BSC_KPIS_VL.name%TYPE
136 );
137 /*********************************************************************************/
138
139 TYPE KPI_Dim_Set_Table_Type IS TABLE OF KPI_Dim_Set_Type INDEX BY BINARY_INTEGER;
140 /********************************************************************************
141 FUNCTION TO CHECK IF PASSED PARAMETER IS IS KEY-WORD OR NOT
142 ********************************************************************************/
143 FUNCTION is_SQL_Key_Word
144 (
145 p_value IN VARCHAR2
146 ) RETURN BOOLEAN;
147 /*******************************************************************************
148 FUNCTION TO ALTER
149 M x N Tables
150 ********************************************************************************/
151 FUNCTION Alter_M_By_N_Tables
152 ( p_Dim_Level_Rec IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
153 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
154 , x_return_status OUT NOCOPY VARCHAR2
155 , x_msg_count OUT NOCOPY NUMBER
156 , x_msg_data OUT NOCOPY VARCHAR2
157 )
158 RETURN BOOLEAN;
159 /*******************************************************************************
160 FUNCTION TO strip off invalid characters in the given string
161 ********************************************************************************/
162
163 FUNCTION get_valid_ddlentry_frm_name(
164 p_name IN VARCHAR2
165 )RETURN VARCHAR2;
166
167 /*******************************************************************************
168 FUNCTION TO ALTER One x N Child Tables
169 ********************************************************************************/
170 FUNCTION Alter_One_By_N_Tables
171 ( p_Dim_Level_Rec IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
172 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
173 , x_return_status OUT NOCOPY VARCHAR2
174 , x_msg_count OUT NOCOPY NUMBER
175 , x_msg_data OUT NOCOPY VARCHAR2
176 )
177 RETURN BOOLEAN;
178 /*******************************************************************************
179 FUNCTION TO CREATE BSC DIMENSION OBJECTS MASTER TABLES
180 ********************************************************************************/
181 FUNCTION Create_Bsc_Master_Tabs
182 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
183 , x_return_status OUT NOCOPY VARCHAR2
184 , x_msg_count OUT NOCOPY NUMBER
185 , x_msg_data OUT NOCOPY VARCHAR2
186 )
187 RETURN BOOLEAN;
188 /*******************************************************************************
189 FUNCTION TO ALTER BSC DIMENSION OBJECTS MASTER TABLES
190 ********************************************************************************/
191 FUNCTION Alter_Bsc_Master_Tabs
192 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
193 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
194 , x_return_status OUT NOCOPY VARCHAR2
195 , x_msg_count OUT NOCOPY NUMBER
196 , x_msg_data OUT NOCOPY VARCHAR2
197 )
198 RETURN BOOLEAN;
199 /*******************************************************************************
200 FUNCTION TO CREATE PMF DIMENSION-OBJ VIEWS
201 ********************************************************************************/
202 FUNCTION Create_Pmf_Views
203 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
204 , x_return_status OUT NOCOPY VARCHAR2
205 , x_msg_count OUT NOCOPY NUMBER
206 , x_msg_data OUT NOCOPY VARCHAR2
207 )
208 RETURN BOOLEAN;
209 /*******************************************************************************/
210 FUNCTION check_sametype_dims
211 ( p_dim_obj_name IN VARCHAR2
212 , p_dim_obj_short_name IN VARCHAR2
213 , p_dim_obj_source IN VARCHAR2
214 , p_dim_short_names IN VARCHAR2
215 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
216 , x_return_status OUT NOCOPY VARCHAR2
217 , x_msg_count OUT NOCOPY NUMBER
218 , x_msg_data OUT NOCOPY VARCHAR2
219 )RETURN BOOLEAN;
220
221 /******************************************************************************/
222 FUNCTION is_Obj_Display_Frmt_Change
223 ( p_dim_obj_short_name IN VARCHAR2
224 , p_Source IN VARCHAR2
225 , p_source_table IN VARCHAR2
226 , p_table_column IN VARCHAR2
227 , p_prototype_default_value IN VARCHAR2
228 , p_maximum_code_size IN NUMBER
229 , p_maximum_name_size IN NUMBER
230 , p_dim_short_names IN VARCHAR2
231 , x_obj_names OUT NOCOPY VARCHAR2
232 ) RETURN BOOLEAN;
233
234 /******************************************************************************/
235 -- Added for Bug#4758995
236 FUNCTION Is_Recursive_Relationship
237 (
238 p_Short_Name IN VARCHAR2
239 , x_Relation_Col OUT NOCOPY VARCHAR2
240 , x_Data_Source OUT NOCOPY VARCHAR2
241 , x_Data_Source_Type OUT NOCOPY VARCHAR2
242 ) RETURN VARCHAR2;
243 /******************************************************************************/
244
245 FUNCTION Validate_PMF_Base_View_Mgr (
246 p_view_name IN VARCHAR2
247 , p_parent_id_exists IN VARCHAR2
248 , p_parent_column IN VARCHAR2
249 ) RETURN NUMBER;
250 /******************************************************************************/
251
252 /*******************************************************************************
253 FUNCTION TO CHECK IF VALID ALPHA NUMERIC CHARACTER
254 ********************************************************************************/
255 FUNCTION is_Valid_AlphaNum
256 (
257 p_SQL_Ident IN VARCHAR2
258 ) RETURN BOOLEAN
259 IS
260 l_SQL_Ident VARCHAR2(30);
261 BEGIN
262 IF (p_SQL_Ident IS NULL) THEN
263 RETURN FALSE;
264 END IF;
265 l_SQL_Ident := UPPER(p_SQL_Ident);
266 IF (REPLACE(TRANSLATE(l_SQL_Ident, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_',
267 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'), 'X', '') IS NOT NULL) THEN
268 RETURN FALSE;
269 END IF;
270 RETURN TRUE;
271 END is_Valid_AlphaNum;
272
273 /*******************************************************************************
274 FUNCTION TO CHECK IT THE IDENTIFIER IS VALID SQL IDENTIFIER
275 ********************************************************************************/
276 FUNCTION is_Valid_Identifier
277 (
278 p_SQL_Ident IN VARCHAR2
279 ) RETURN BOOLEAN
280 IS
281 l_SQL_Ident VARCHAR2(30);
282 BEGIN
283 IF (p_SQL_Ident IS NULL) THEN
284 RETURN FALSE;
285 END IF;
286 IF (LENGTH(p_SQL_Ident) > 30) THEN
287 RETURN FALSE;
288 END IF;
289 IF (SUBSTR(p_SQL_Ident, 1,1) = '_') THEN
290 RETURN FALSE;
291 END IF;
292 l_SQL_Ident := UPPER(p_SQL_Ident);
293 IF(REPLACE(TRANSLATE(SUBSTR(l_SQL_Ident, 1, 1), '0123456789', '0000000000'), '0', '') IS NULL) THEN
294 RETURN FALSE;
295 END IF;
296 IF (REPLACE(TRANSLATE(l_SQL_Ident, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_',
297 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'), 'X', '') IS NOT NULL) THEN
298 RETURN FALSE;
299 END IF;
300 RETURN TRUE;
301 END is_Valid_Identifier;
302
303 /*******************************************************************************
304 FUNCTION TO INITIALIZE BSC RECORDS
305 ********************************************************************************/
306 FUNCTION Initialize_Bsc_Recs
307 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
308 , x_return_status OUT NOCOPY VARCHAR2
309 , x_msg_count OUT NOCOPY NUMBER
310 , x_msg_data OUT NOCOPY VARCHAR2
311 ) RETURN BOOLEAN;
312
313 /********************************************************************************
314 FUNCTION TO RETRIEVE CHILD DIM OBJECTS
315 ********************************************************************************/
316 FUNCTION Get_Child_Dim_Objs
317 ( p_Dim_Level_Id IN NUMBER
318 ) RETURN VARCHAR2 IS
319
320 l_child_dim_obj VARCHAR2(32000);
321
322 CURSOR c_Dim_Level_Child IS
323 SELECT dim_level_id
324 FROM BSC_SYS_DIM_LEVEL_RELS
325 WHERE parent_dim_level_id = p_Dim_Level_Id
326 AND RELATION_TYPE <> 2;
327
328 BEGIN
329 l_child_dim_obj := NULL;
330
331 FOR cdl in c_Dim_Level_Child LOOP
332 IF (l_child_dim_obj IS NULL) THEN
333 l_child_dim_obj := cdl.dim_level_id;
334 ELSE
335 l_child_dim_obj := l_child_dim_obj||','||cdl.dim_level_id;
336 END IF;
337 END LOOP;
338
339 RETURN l_child_dim_obj;
340
341 END Get_Child_Dim_Objs;
342
343 /*********************************************************************************/
344
345 -- Modified this API for Bug#4383962
346 -- After A999 - this API will bomb, instead this API will user A - Z to increase
347 -- generation range. For example if A999 is passed, then B0 will be returned.
348 -- If D999 is passed E0 will be returned.
349 FUNCTION get_Next_Alias
350 (
351 p_Alias IN VARCHAR2
352 ) RETURN VARCHAR2
353 IS
354 l_return VARCHAR2(4);
355 l_count NUMBER;
356
357 l_Alias_Prefix VARCHAR2(8);
358 l_Alias_Postfix VARCHAR2(8);
359 l_Alias_Postfix_Num NUMBER;
360 BEGIN
361 IF (p_Alias IS NULL) THEN
362 l_return := 'A';
363 ELSE
364 l_Alias_Prefix := SUBSTR(p_Alias, 1, 1);
365 l_Alias_Postfix := SUBSTR(p_Alias, 2);
366
367 l_Alias_Postfix_Num := TO_NUMBER(l_Alias_Postfix);
368
369 l_count := LENGTH(p_Alias);
370
371 IF (l_count = 1) THEN
372 l_return := l_Alias_Prefix || '0';
373 ELSIF (l_count > 1) THEN
374 IF(l_Alias_Postfix_Num >= 999) THEN
375 l_Alias_Postfix := '0';
376 l_Alias_Prefix := FND_GLOBAL.LOCAL_CHR(ASCII(SUBSTR(p_Alias, 1, 1))+1);
377 ELSE
378 l_Alias_Postfix := TO_CHAR(l_Alias_Postfix_Num+1);
379 END IF;
380
381 l_return := l_Alias_Prefix || l_Alias_Postfix;
382 END IF;
383 END IF;
384 RETURN l_return;
385 EXCEPTION
386 WHEN OTHERS THEN
387 RETURN p_Alias;
388 END get_Next_Alias;
389
390 /*********************************************************************************/
391
392 FUNCTION Is_More
393 ( p_dim_short_names IN OUT NOCOPY VARCHAR2
394 , p_dim_name OUT NOCOPY VARCHAR2
395 ) RETURN BOOLEAN;
396 /*********************************************************************************
397 Set the ALL Enable Flag, must be called only for PMF type Dimension Objects
398 *********************************************************************************/
399 PROCEDURE Set_All_Enable_Flag
400 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
401 , p_Dim_Obj_Short_Name IN VARCHAR2
402 , p_All_Enabled IN NUMBER
403 , x_return_status OUT NOCOPY VARCHAR2
404 , x_msg_count OUT NOCOPY NUMBER
405 , x_msg_data OUT NOCOPY VARCHAR2
406 ) IS
407 l_Bsc_Dim_Obj_ID BSC_SYS_DIM_LEVELS_B.Dim_Level_ID%TYPE;
408 l_Bsc_Group_ID BSC_SYS_DIM_GROUPS_TL.Dim_Group_ID%TYPE;
409 l_Dim_Short_Name BIS_DIMENSIONS.Short_Name%TYPE;
410
411 CURSOR c_Bis_Levels IS
412 SELECT B.Short_Name
413 FROM BIS_LEVELS A
414 , BIS_DIMENSIONS B
415 WHERE A.Short_Name = p_Dim_Obj_Short_Name
416 AND A.Dimension_Id = B.Dimension_Id;
417 BEGIN
418
419 SAVEPOINT SyncPMFAllInPMD;
420 IF ((p_All_Enabled IS NOT NULL) AND ((p_All_Enabled = 0) OR (p_All_Enabled = -1))) THEN
421 IF (c_Bis_Levels%ISOPEN) THEN
422 CLOSE c_Bis_Levels;
423 END IF;
424 OPEN c_Bis_Levels;
425 FETCH c_Bis_Levels
426 INTO l_Dim_Short_Name;
427 CLOSE c_Bis_Levels;
428 l_Bsc_Group_ID := BSC_BIS_DIMENSION_PUB.Get_Bsc_Dimension_ID(l_Dim_Short_Name);
429 l_Bsc_Dim_Obj_ID := BSC_BIS_DIM_OBJ_PUB.Get_Bsc_Dim_Obj_ID(p_Dim_Obj_Short_Name);
430
431 UPDATE BSC_SYS_DIM_LEVELS_BY_GROUP
432 SET Total_Flag = p_All_Enabled
433 WHERE Dim_Level_Id = l_Bsc_Dim_Obj_ID
434 AND Dim_Group_Id = l_Bsc_Group_ID;
435 END IF;
436 IF (p_commit = FND_API.G_TRUE) THEN
437 COMMIT;
438 END IF;
439 x_return_status := FND_API.G_RET_STS_SUCCESS;
440
441 EXCEPTION
442 WHEN OTHERS THEN
443 ROLLBACK TO SyncPMFAllInPMD;
444 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
445 IF (x_msg_data IS NOT NULL) THEN
446 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Set_All_Enable_Flag ';
447 ELSE
448 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Set_All_Enable_Flag ';
449 END IF;
450 END Set_All_Enable_Flag;
451
452 /*********************************************************************************************
453 update relation col in case of m_by_n relation type
454 Modified for bug#4091924
455 *********************************************************************************************/
456 PROCEDURE Update_M_By_N_Relation_col
457 ( p_Dim_Level_Id IN NUMBER
458 , p_Parent_Dim_Level_Id IN NUMBER
459 , p_Relation_Col IN VARCHAR2
460 , x_return_status OUT NOCOPY VARCHAR2
461 , x_msg_count OUT NOCOPY NUMBER
462 , x_msg_data OUT NOCOPY VARCHAR2
463 ) IS
464
465 CURSOR c_Relation_Col IS
466 SELECT K.indicator
467 ,K.dim_set_id
468 ,K.dim_level_index
469 ,K.level_table_name
470 FROM bsc_kpi_dim_levels_vl K
471 ,bsc_sys_dim_levels_b S
472 WHERE S.level_Table_name = K.level_table_name
473 AND S.dim_level_id IN ( p_Dim_Level_Id,p_Parent_Dim_Level_Id)
474 AND K.parent_level_rel IS NOT NULL
475 AND K.table_relation IS NOT NULL;
476
477 BEGIN
478 BSC_APPS.Init_Bsc_Apps;
479 x_return_status := FND_API.G_RET_STS_SUCCESS;
480
481 UPDATE bsc_sys_dim_level_rels
482 SET relation_col = p_Relation_Col
483 WHERE dim_level_id = p_Dim_Level_Id
484 AND parent_dim_level_id = p_Parent_Dim_Level_Id
485 AND relation_type = 2;
486
487 UPDATE bsc_sys_dim_level_rels
488 SET relation_col = p_Relation_Col
489 WHERE dim_level_id = p_Parent_Dim_Level_Id
490 AND parent_dim_level_id = p_Dim_Level_Id
491 AND relation_type = 2;
492
493 FOR CD IN c_Relation_Col LOOP
494 UPDATE bsc_kpi_dim_levels_b
495 SET table_relation = p_Relation_Col
496 WHERE indicator = CD.indicator
497 AND dim_set_id = CD.dim_set_id
498 AND dim_level_index = CD.dim_level_index;
499 END LOOP;
500
501
502 EXCEPTION
503 WHEN OTHERS THEN
504 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
505 IF (x_msg_data IS NOT NULL) THEN
506 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Refresh_BSC_Dim_View_In_Pmf';
507 ELSE
508 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Refresh_BSC_Dim_View_In_Pmf';
509 END IF;
510 END Update_M_By_N_Relation_col;
511 --=======================================================================================
512
513 -- Called from Create and Update flow for BSC type dim objects only.
514 -- This will support enable/disable of 'All' flag from Report Designer.
515 PROCEDURE Set_Bsc_All_Enable_Flag
516 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
517 , p_Dim_Obj_Short_Name IN VARCHAR2
518 , p_Dim_Short_Name IN VARCHAR2 := NULL
519 , p_All_Enabled IN NUMBER
520 , x_return_status OUT NOCOPY VARCHAR2
521 , x_msg_count OUT NOCOPY NUMBER
522 , x_msg_data OUT NOCOPY VARCHAR2
523 )
524 IS
525 BEGIN
526
527 SAVEPOINT SyncBSCAllInPMD;
528
529 IF ((p_All_Enabled IS NOT NULL) AND (p_All_Enabled = 0)) THEN
530 IF (p_Dim_Short_Name IS NOT NULL) THEN -- Update Mode
531 UPDATE bsc_sys_dim_levels_by_group
532 SET total_flag = p_All_Enabled
533 WHERE dim_level_id = BSC_BIS_DIM_OBJ_PUB.Get_Bsc_Dim_Obj_ID(p_Dim_Obj_Short_Name)
534 AND dim_group_id = BSC_BIS_DIMENSION_PUB.Get_Bsc_Dimension_ID(p_Dim_Short_Name);
535 ELSE -- Create Mode
536 UPDATE bsc_sys_dim_levels_by_group
537 SET total_flag = p_All_Enabled
538 WHERE dim_level_id = BSC_BIS_DIM_OBJ_PUB.Get_Bsc_Dim_Obj_ID(p_Dim_Obj_Short_Name);
539 END IF;
540 END IF;
541
542 IF (p_commit = FND_API.G_TRUE) THEN
543 COMMIT;
544 END IF;
545 x_return_status := FND_API.G_RET_STS_SUCCESS;
546
547 EXCEPTION
548 WHEN OTHERS THEN
549 ROLLBACK TO SyncBSCAllInPMD;
550 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
551 IF (x_msg_data IS NOT NULL) THEN
552 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Set_Bsc_All_Enable_Flag ';
553 ELSE
554 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Set_Bsc_All_Enable_Flag ';
555 END IF;
556 END Set_Bsc_All_Enable_Flag;
557
558 /*********************************************************************************
559 CREATE DIMENSION
560 *********************************************************************************/
561 PROCEDURE Create_Dim_Object
562 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
563 , p_dim_obj_short_name IN VARCHAR2
564 , p_display_name IN VARCHAR2
565 , p_application_id IN NUMBER
566 , p_description IN VARCHAR2
567 , p_data_source IN VARCHAR2
568 , p_source_table IN VARCHAR2
569 , p_where_clause IN VARCHAR2 := NULL
570 , p_comparison_label_code IN VARCHAR2
571 , p_table_column IN VARCHAR2
572 , p_source_type IN VARCHAR2
573 , p_maximum_code_size IN NUMBER
574 , p_maximum_name_size IN NUMBER
575 , p_all_item_text IN VARCHAR2
576 , p_comparison_item_text IN VARCHAR2
577 , p_prototype_default_value IN VARCHAR2
578 , p_dimension_values_order IN NUMBER
579 , p_comparison_order IN NUMBER
580 , p_dim_short_names IN VARCHAR2
581 , p_Master_Level IN VARCHAR2 := NULL
582 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
583 , p_Search_Function IN VARCHAR2 := NULL
584 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
585 , p_View_Object_Name IN VARCHAR2 := NULL
586 , p_Default_Values_Api IN VARCHAR2 := NULL
587 , p_All_Enabled IN NUMBER := NULL
588 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
589 , x_return_status OUT NOCOPY VARCHAR2
590 , x_msg_count OUT NOCOPY NUMBER
591 , x_msg_data OUT NOCOPY VARCHAR2
592 ) IS
593 BEGIN
594 SAVEPOINT CreateBSCDimObjPMD;
595 FND_MSG_PUB.Initialize;
596 x_return_status := FND_API.G_RET_STS_SUCCESS;
597
598 Create_Dim_Object
599 ( p_commit => p_commit
600 , p_dim_obj_short_name => p_dim_obj_short_name
601 , p_display_name => p_display_name
602 , p_application_id => p_application_id
603 , p_description => p_description
604 , p_data_source => p_data_source
605 , p_source_table => p_source_table
606 , p_where_clause => p_where_clause
607 , p_comparison_label_code => p_comparison_label_code
608 , p_table_column => p_table_column
609 , p_source_type => p_source_type
610 , p_maximum_code_size => p_maximum_code_size
611 , p_maximum_name_size => p_maximum_name_size
612 , p_all_item_text => p_all_item_text
613 , p_comparison_item_text => p_comparison_item_text
614 , p_prototype_default_value => p_prototype_default_value
615 , p_dimension_values_order => p_dimension_values_order
616 , p_comparison_order => p_comparison_order
617 , p_dim_short_names => p_dim_short_names
618 , p_Master_Level => p_Master_Level
619 , p_Long_Lov => p_Long_Lov
620 , p_Search_Function => p_Search_Function
621 , p_Dim_Obj_Enabled => p_Dim_Obj_Enabled
622 , p_View_Object_Name => p_View_Object_Name
623 , p_Default_Values_Api => p_Default_Values_Api
624 , p_All_Enabled => p_All_Enabled
625 , p_is_default_short_name => 'F'
626 , p_Drill_To_Form_Function => p_Drill_To_Form_Function
627 , x_return_status => x_return_status
628 , x_msg_count => x_msg_count
629 , x_msg_data => x_msg_data
630 );
631 EXCEPTION
632 WHEN FND_API.G_EXC_ERROR THEN
633 ROLLBACK TO CreateBSCDimObjPMD;
634 IF (x_msg_data IS NULL) THEN
635 FND_MSG_PUB.Count_And_Get
636 ( p_encoded => FND_API.G_FALSE
637 , p_count => x_msg_count
638 , p_data => x_msg_data
639 );
640 END IF;
641 x_return_status := FND_API.G_RET_STS_ERROR;
642 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
643 ROLLBACK TO CreateBSCDimObjPMD;
644 IF (x_msg_data IS NULL) THEN
645 FND_MSG_PUB.Count_And_Get
646 ( p_encoded => FND_API.G_FALSE
647 , p_count => x_msg_count
648 , p_data => x_msg_data
649 );
650 END IF;
651 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
652 WHEN NO_DATA_FOUND THEN
653 ROLLBACK TO CreateBSCDimObjPMD;
654 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
655 IF (x_msg_data IS NOT NULL) THEN
656 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
657 ELSE
658 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
659 END IF;
660 WHEN OTHERS THEN
661 ROLLBACK TO CreateBSCDimObjPMD;
662 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
663 IF (x_msg_data IS NOT NULL) THEN
664 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
665 ELSE
666 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
667 END IF;
668 END Create_Dim_Object;
669
670 /*
671 ** Called from JAVA Dimension Designer
672 */
673 PROCEDURE Create_Dim_Object
674 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
675 , p_dim_obj_short_name IN VARCHAR2
676 , p_display_name IN VARCHAR2
677 , p_application_id IN NUMBER
678 , p_description IN VARCHAR2
679 , p_data_source IN VARCHAR2
680 , p_source_table IN VARCHAR2
681 , p_where_clause IN VARCHAR2 := NULL
682 , p_comparison_label_code IN VARCHAR2
683 , p_table_column IN VARCHAR2
684 , p_source_type IN VARCHAR2
685 , p_maximum_code_size IN NUMBER
686 , p_maximum_name_size IN NUMBER
687 , p_all_item_text IN VARCHAR2
688 , p_comparison_item_text IN VARCHAR2
689 , p_prototype_default_value IN VARCHAR2
690 , p_dimension_values_order IN NUMBER
691 , p_comparison_order IN NUMBER
692 , p_dim_short_names IN VARCHAR2
693 , p_Master_Level IN VARCHAR2 := NULL
694 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
695 , p_Search_Function IN VARCHAR2 := NULL
696 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
697 , p_View_Object_Name IN VARCHAR2 := NULL
698 , p_Default_Values_Api IN VARCHAR2 := NULL
699 , p_All_Enabled IN NUMBER := NULL
700 , p_is_default_short_name IN VARCHAR2
701 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
702 , p_Prototype_Values IN BIS_STRING_ARRAY
703 , p_Force_Dimension_Create IN VARCHAR2
704 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
705 , x_return_status OUT NOCOPY VARCHAR2
706 , x_msg_count OUT NOCOPY NUMBER
707 , x_msg_data OUT NOCOPY VARCHAR2
708 ) IS
709 l_next_dim_grp_id NUMBER;
710 l_is_default_short_name VARCHAR2(1);
711 BEGIN
712 SAVEPOINT CreateBSCDimObjPMD;
713 FND_MSG_PUB.Initialize;
714 x_return_status := FND_API.G_RET_STS_SUCCESS;
715
716 l_is_default_short_name := p_is_default_short_name;
717
718 -- Create Dimension if p_Force_Dimension_Create = 'T' (AG)
719 IF (p_Force_Dimension_Create = 'T') THEN
720
721 BSC_BIS_DIMENSION_PUB.Create_Dimension
722 ( p_commit => FND_API.G_FALSE
723 , p_dim_short_name => p_dim_short_names
724 , p_display_name => p_display_name
725 , p_description => p_description
726 , p_dim_obj_short_names => NULL
727 , p_application_id => p_application_id
728 , x_return_status => x_return_status
729 , x_msg_count => x_msg_count
730 , x_msg_data => x_msg_data
731 );
732
733 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
734 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
735 END IF;
736
737 l_is_default_short_name := 'F';
738 END IF;
739
740 -- Create Dimension Object
741 Create_Dim_Object
742 ( p_commit => p_commit
743 , p_dim_obj_short_name => p_dim_obj_short_name
744 , p_display_name => p_display_name
745 , p_application_id => p_application_id
746 , p_description => p_description
747 , p_data_source => p_data_source
748 , p_source_table => p_source_table
749 , p_where_clause => p_where_clause
750 , p_comparison_label_code => p_comparison_label_code
751 , p_table_column => p_table_column
752 , p_source_type => p_source_type
753 , p_maximum_code_size => p_maximum_code_size
754 , p_maximum_name_size => p_maximum_name_size
755 , p_all_item_text => p_all_item_text
756 , p_comparison_item_text => p_comparison_item_text
757 , p_prototype_default_value => p_prototype_default_value
758 , p_dimension_values_order => p_dimension_values_order
759 , p_comparison_order => p_comparison_order
760 , p_dim_short_names => p_dim_short_names
761 , p_Master_Level => p_Master_Level
762 , p_Long_Lov => p_Long_Lov
763 , p_Search_Function => p_Search_Function
764 , p_Dim_Obj_Enabled => p_Dim_Obj_Enabled
765 , p_View_Object_Name => p_View_Object_Name
766 , p_Default_Values_Api => p_Default_Values_Api
767 , p_All_Enabled => p_All_Enabled
768 , p_is_default_short_name => l_is_default_short_name --p_is_default_short_name
769 , p_Drill_To_Form_Function => p_Drill_To_Form_Function
770 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
771 , x_return_status => x_return_status
772 , x_msg_count => x_msg_count
773 , x_msg_data => x_msg_data
774 );
775
776 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
777 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
778 END IF;
779
780 -- Save Prototype Values if NOT NULL (AG)
781 IF (p_Prototype_Values.COUNT > 0) THEN
782 BIS_UTIL.save_prototype_values
783 ( p_dim_object => p_dim_obj_short_name
784 , p_PV_array => p_Prototype_Values
785 );
786 END IF;
787
788 EXCEPTION
789 WHEN FND_API.G_EXC_ERROR THEN
790 ROLLBACK TO CreateBSCDimObjPMD;
791 IF (x_msg_data IS NULL) THEN
792 FND_MSG_PUB.Count_And_Get
793 ( p_encoded => FND_API.G_FALSE
794 , p_count => x_msg_count
795 , p_data => x_msg_data
796 );
797 END IF;
798 x_return_status := FND_API.G_RET_STS_ERROR;
799 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
800 ROLLBACK TO CreateBSCDimObjPMD;
801 IF (x_msg_data IS NULL) THEN
802 FND_MSG_PUB.Count_And_Get
803 ( p_encoded => FND_API.G_FALSE
804 , p_count => x_msg_count
805 , p_data => x_msg_data
806 );
807 END IF;
808 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
809 WHEN NO_DATA_FOUND THEN
810 ROLLBACK TO CreateBSCDimObjPMD;
811 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
812 IF (x_msg_data IS NOT NULL) THEN
813 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
814 ELSE
815 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
816 END IF;
817 WHEN OTHERS THEN
818 ROLLBACK TO CreateBSCDimObjPMD;
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_DIM_OBJ_PUB.Create_Dim_Object ';
822 ELSE
823 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
824 END IF;
825 END Create_Dim_Object;
826
827 /*
828 This procedure allow user to create a new dimension category whose records
829 will be inserted into the following tables.
830 1 BIS_LEVELS.
831 2. BIS_LEVELS_TL
832 3. BSC_SYS_DIM_LEVELS_B
833 4. BSC_SYS_DIM_LEVELS_TL
834
835 Key
836 p_dim_obj_short_name
837
838 Validations:
839 1. p_dimension_id, p_dim_obj_short_name, p_display_name, p_data_source, p_application_id
840 and p_source_type must not be null.
841 2. p_dim_obj_short_name and p_display_name must be unique.
842 */
843
844 PROCEDURE Create_Dim_Object
845 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
846 , p_dim_obj_short_name IN VARCHAR2
847 , p_display_name IN VARCHAR2
848 , p_application_id IN NUMBER
849 , p_description IN VARCHAR2
850 , p_data_source IN VARCHAR2
851 , p_source_table IN VARCHAR2
852 , p_where_clause IN VARCHAR2 := NULL
853 , p_comparison_label_code IN VARCHAR2
854 , p_table_column IN VARCHAR2
855 , p_source_type IN VARCHAR2
856 , p_maximum_code_size IN NUMBER
857 , p_maximum_name_size IN NUMBER
858 , p_all_item_text IN VARCHAR2
859 , p_comparison_item_text IN VARCHAR2
860 , p_prototype_default_value IN VARCHAR2
861 , p_dimension_values_order IN NUMBER
862 , p_comparison_order IN NUMBER
863 , p_dim_short_names IN VARCHAR2
864 , p_Master_Level IN VARCHAR2 := NULL
865 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
866 , p_Search_Function IN VARCHAR2 := NULL
867 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
868 , p_View_Object_Name IN VARCHAR2 := NULL
869 , p_Default_Values_Api IN VARCHAR2 := NULL
870 , p_All_Enabled IN NUMBER := NULL
871 , p_is_default_short_name IN VARCHAR2
872 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
873 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
874 , x_return_status OUT NOCOPY VARCHAR2
875 , x_msg_count OUT NOCOPY NUMBER
876 , x_msg_data OUT NOCOPY VARCHAR2
877 ) IS
878 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
879 l_bis_dim_level_rec BIS_DIMENSION_LEVEL_PUB.Dimension_Level_Rec_Type;
880 l_error_tbl BIS_UTILITIES_PUB.Error_Tbl_Type;
881 l_level_table_name BIS_LEVELS.LEVEL_VALUES_VIEW_NAME%TYPE;
882 l_bis_short_name BIS_LEVELS.Short_Name%TYPE;
883 l_bis_name BIS_LEVELS_TL.Name%TYPE;
884 l_user_id FND_USER.user_id%TYPE;
885 l_login_id NUMBER;
886 l_count NUMBER;
887 l_temp_var BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE;
888 l_alias VARCHAR2(4);
889
890 l_dim_short_names VARCHAR2(32000);
891 l_flag BOOLEAN := FALSE;
892 l_dim_obj_name BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE;
893 l_application_id BIS_LEVELS.Application_Id%TYPE;
894 -- Start Granular Locking added by Aditya
895 l_Dim_Tab BSC_BIS_LOCKS_PUB.t_numberTable;
896 l_dim_Grp_names VARCHAR2(32000);
897
898 l_dim_Grp_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
899 l_index NUMBER := 0;
900 l_first_dim BOOLEAN := TRUE;
901 -- End Granular Locking added by Aditya
902 l_pmf_disp_name VARCHAR2(255); -- DispName
903
904 -- init new case when source='BSC' and short_name = null (or <Default>)
905 l_source_table VARCHAR(30);
906 l_table_column VARCHAR(30);
907 l_prototype_default_value VARCHAR2(255);
908 l_mix_type_dim BOOLEAN;
909
910 CURSOR c_Master_Level IS
911 SELECT Short_Name
912 , Master_Level
913 , Name
914 FROM BIS_LEVELS_VL
915 WHERE Short_Name = p_Master_Level;
916 BEGIN
917
918 SAVEPOINT CreateBSCDimObjPMD;
919 FND_MSG_PUB.Initialize;
920 x_return_status := FND_API.G_RET_STS_SUCCESS;
921
922 IF ((p_dim_obj_short_name IS NOT NULL) AND
923 (p_is_default_short_name <> 'T')) THEN
924 l_dim_obj_name := TRIM(p_dim_obj_short_name);
925 l_application_id := p_application_id;
926 ELSE
927 SELECT NVL(MAX(dim_level_id) + 1, 0)
928 INTO l_count
929 FROM BSC_SYS_DIM_LEVELS_B;
930 IF (p_dim_obj_short_name IS NULL) THEN
931 l_dim_obj_name := c_BSC_DIM_OBJ||l_count;
932 ELSE
933 l_dim_obj_name := p_dim_obj_short_name;
934 END IF;
935 l_flag := TRUE;
936 l_alias := NULL;
937 l_temp_var := l_dim_obj_name;
938 WHILE (l_flag) LOOP
939 SELECT COUNT(1) INTO l_count
940 FROM (SELECT COUNT(1) rec_count
941 FROM BSC_SYS_DIM_LEVELS_VL
942 WHERE UPPER(Short_Name) = UPPER(l_temp_var)
943 UNION
944 SELECT COUNT(1) rec_count
945 FROM BIS_LEVELS_VL
946 WHERE UPPER(Short_Name) = UPPER(l_temp_var))
947 WHERE rec_count > 0;
948 IF (l_count = 0) THEN
949 l_flag := FALSE;
950 l_dim_obj_name := l_temp_var;
951 END IF;
952 l_alias := BSC_BIS_DIM_OBJ_PUB.get_Next_Alias(l_alias);
953 l_temp_var := l_dim_obj_name||l_alias;
954 END LOOP;
955 IF(p_application_id = -1 OR p_application_id IS NULL) THEN
956 l_application_id := 271;
957 ELSE
958 l_application_id := p_application_id;
959 END IF;
960 END IF;
961
962 l_source_table := p_source_table;
963 l_table_column := p_table_column;
964 l_prototype_default_value := p_prototype_default_value;
965
966 --check for not null fields
967 IF (l_dim_obj_name IS NULL) THEN
968 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
969 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'));
970 FND_MSG_PUB.ADD;
971 RAISE FND_API.G_EXC_ERROR;
972 END IF;
973 IF (NOT is_Valid_AlphaNum(l_dim_obj_name)) THEN
974 FND_MESSAGE.SET_NAME('BSC','BSC_ALPHA_NUM_REQUIRED');
975 FND_MESSAGE.SET_TOKEN('VALUE', l_dim_obj_name);
976 FND_MESSAGE.SET_TOKEN('NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'));
977 FND_MSG_PUB.ADD;
978 RAISE FND_API.G_EXC_ERROR;
979 END IF;
980 IF (p_display_name IS NULL) THEN
981 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
982 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DISPLAY_NAME'));
983 FND_MSG_PUB.ADD;
984 RAISE FND_API.G_EXC_ERROR;
985 END IF;
986 IF (l_application_id IS NULL) THEN
987 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
988 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'APPLICATION_ID'));
989 FND_MSG_PUB.ADD;
990 RAISE FND_API.G_EXC_ERROR;
991 END IF;
992 IF (p_data_source IS NULL) THEN
993 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
994 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DATA_SOURCE'));
995 FND_MSG_PUB.ADD;
996 RAISE FND_API.G_EXC_ERROR;
997 END IF;
998 IF ((p_data_source <> 'BSC') AND (p_data_source <> 'PMF')) THEN
999 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
1000 FND_MSG_PUB.ADD;
1001 RAISE FND_API.G_EXC_ERROR;
1002 END IF;
1003 IF (p_data_source = 'BSC') THEN
1004 l_bsc_dim_obj_rec.Source := 'OLTP';
1005 ELSE
1006 IF ((p_source_type IS NULL) OR ((p_source_type <> 'OLTP') AND (p_source_type <> 'EDW'))) THEN
1007 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SOURCE_TYPE');
1008 FND_MSG_PUB.ADD;
1009 RAISE FND_API.G_EXC_ERROR;
1010 ELSE
1011 l_bsc_dim_obj_rec.Source := p_source_type;
1012 END IF;
1013 END IF;
1014 --check for uniqueness of l_dim_obj_name in PMF's metadata
1015 SELECT COUNT(1) INTO l_count
1016 FROM BIS_LEVELS_VL
1017 WHERE UPPER(short_name) = UPPER(l_dim_obj_name);
1018 IF (l_count > 0) THEN
1019 FND_MESSAGE.SET_NAME('BSC','BSC_UNIQUE_NAME_REQUIRED');
1020 FND_MESSAGE.SET_TOKEN('SHORT_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'));
1021 FND_MESSAGE.SET_TOKEN('NAME_VALUE', l_dim_obj_name);
1022 FND_MSG_PUB.ADD;
1023 RAISE FND_API.G_EXC_ERROR;
1024 END IF;
1025 --check for uniqueness of l_dim_obj_name in BSC's metadata
1026 SELECT COUNT(1) INTO l_count
1027 FROM BSC_SYS_DIM_LEVELS_VL
1028 WHERE UPPER(short_name) = UPPER(l_dim_obj_name);
1029 IF (l_count > 0) THEN
1030 FND_MESSAGE.SET_NAME('BSC','BSC_UNIQUE_NAME_REQUIRED');
1031 FND_MESSAGE.SET_TOKEN('SHORT_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'));
1032 FND_MESSAGE.SET_TOKEN('NAME_VALUE', l_dim_obj_name);
1033 FND_MSG_PUB.ADD;
1034 RAISE FND_API.G_EXC_ERROR;
1035 END IF;
1036 ---Check the dimensions that are being attached may contain both autogenerated and existing
1037 -- source type because of this
1038 l_mix_type_dim := FALSE;
1039 IF(p_dim_short_names IS NOT NULL) THEN
1040 l_mix_type_dim := check_sametype_dims
1041 ( p_dim_obj_name => p_display_name
1042 , p_dim_obj_short_name => p_dim_obj_short_name
1043 , p_dim_obj_source => p_data_source
1044 , p_dim_short_names => p_dim_short_names
1045 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
1046 , x_return_status => x_return_status
1047 , x_msg_count => x_msg_count
1048 , x_msg_data => x_msg_data
1049 );
1050 IF (l_mix_type_dim) THEN
1051 RAISE FND_API.G_EXC_ERROR;
1052 END IF;
1053 END IF;
1054
1055 -- start checkin for Default names
1056 l_pmf_disp_name := p_display_name;
1057 IF (p_data_source = 'PMF') THEN
1058 SELECT COUNT(1) INTO l_count
1059 FROM BIS_LEVELS_VL
1060 WHERE UPPER(name) = UPPER(p_display_name);
1061 IF (l_count <> 0) THEN
1062 FND_MESSAGE.SET_NAME('BSC','BSC_UNIQUE_NAME_REQUIRED');
1063 FND_MESSAGE.SET_TOKEN('SHORT_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DISPLAY_NAME'));
1064 FND_MESSAGE.SET_TOKEN('NAME_VALUE', p_display_name);
1065 FND_MSG_PUB.ADD;
1066 RAISE FND_API.G_EXC_ERROR;
1067 END IF;
1068 ELSIF (p_data_source = 'BSC') THEN -- Allow insertion into BSC Data Model, with the same display name
1069 SELECT COUNT(1) INTO l_count
1070 FROM BIS_LEVELS_VL
1071 WHERE UPPER(name) = UPPER(l_pmf_disp_name);
1072 WHILE(l_count > 0) LOOP
1073 l_pmf_disp_name := BSC_UTILITY.get_Next_DispName(l_pmf_disp_name);
1074 SELECT COUNT(1) INTO l_count
1075 FROM BIS_LEVELS_VL
1076 WHERE UPPER(name) = UPPER(l_pmf_disp_name);
1077 END LOOP;
1078 END IF;
1079
1080 -- Start Granular Locking added by Aditya
1081 l_dim_Grp_names := p_dim_short_names;
1082 -- for PMF pick 1st one define a boolean variable first=true;, and
1083 IF (p_dim_short_names IS NOT NULL) THEN
1084 l_dim_Grp_names := p_dim_short_names ;
1085 WHILE (is_more( p_dim_short_names => l_dim_Grp_names
1086 , p_dim_name => l_dim_Grp_name)
1087 ) LOOP
1088 IF (l_first_dim) THEN
1089 l_first_dim := FALSE;
1090 l_bis_dim_level_rec.Dimension_Short_Name := l_dim_Grp_name;
1091 END IF;
1092 l_Dim_Tab(l_index) := NVL(BSC_DIMENSION_GROUPS_PVT.get_Dim_Group_Id(l_dim_Grp_name), -1);
1093 l_index := l_index + 1;
1094 END LOOP;
1095 -- Lock all the Dimension to be assigned to the Dimension Objects
1096 BSC_BIS_LOCKS_PUB.Lock_Create_Dimension_Object
1097 ( p_selected_dimensions => l_Dim_Tab
1098 , x_return_status => x_return_status
1099 , x_msg_count => x_msg_count
1100 , x_msg_data => x_msg_data
1101 );
1102 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1103 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1104 END IF;
1105 ELSE
1106 l_bis_dim_level_rec.Dimension_Short_Name := BSC_BIS_DIMENSION_PUB.Unassigned_Dim;
1107 END IF;
1108 -- End Granular Locking
1109 --BSC_SYS_DIM_LEVELS_B.dim_level_id
1110 l_bsc_dim_obj_rec.Bsc_Level_Id := BSC_DIMENSION_LEVELS_PVT.Get_Next_Value('BSC_SYS_DIM_LEVELS_B', 'DIM_LEVEL_ID');
1111 l_bsc_dim_obj_rec.Bsc_Source := p_data_source;--BSC_SYS_DIM_LEVELS_B.source
1112 l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size := p_maximum_code_size;--BSC_SYS_DIM_LEVELS_B.user_key_size
1113 l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size := p_maximum_name_size;--BSC_SYS_DIM_LEVELS_B.disp_key_size
1114 IF (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size IS NULL) THEN
1115 l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Default_Size;
1116 END IF;
1117 IF (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size IS NULL) THEN
1118 l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Default_Size;
1119 END IF;
1120
1121 -- Bug#4383962
1122 -- Changed the substring to 7, since Get_Next_Alias can return upto 4 chars
1123 -- but UI validation is 11 chars only (8+4 = 12 in the older case)
1124 -- Modified the Get_Next_Alias API to generate better abbreviations.
1125 IF (l_prototype_default_value IS NULL) THEN
1126 IF ((p_dim_obj_short_name IS NULL) OR (p_is_default_short_name = 'T')) THEN
1127 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := substr(get_valid_ddlentry_frm_name(p_display_name),1,7);
1128 IF(l_bsc_dim_obj_rec.Bsc_Level_Abbreviation IS NULL) THEN -- If the abbrevation generated based on display name is still null then generate on short name
1129 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := substr(REPLACE(l_dim_obj_name, ' ', ''),1,7);
1130 END IF;
1131 ELSE
1132 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := SUBSTR(REPLACE(l_dim_obj_name, ' ', ''), 1, 7);
1133 END IF;
1134
1135 ELSE
1136 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := SUBSTR(l_prototype_default_value, 1, 11);
1137 END IF;
1138
1139 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
1140 SELECT COUNT(1) INTO l_count
1141 FROM BSC_SYS_DIM_LEVELS_B
1142 WHERE UPPER(abbreviation) = UPPER(l_bsc_dim_obj_rec.Bsc_Level_Abbreviation);
1143 IF (l_count <> 0) THEN
1144 l_flag := TRUE;
1145 l_alias := NULL;
1146 l_temp_var := SUBSTR(l_bsc_dim_obj_rec.Bsc_Level_Abbreviation, 1, 7);
1147 WHILE (l_flag) LOOP
1148 SELECT COUNT(1) INTO l_count
1149 FROM BSC_SYS_DIM_LEVELS_B
1150 WHERE UPPER(abbreviation) = UPPER(l_temp_var);
1151 IF (l_count = 0) THEN
1152 l_flag := FALSE;
1153 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := l_temp_var;
1154 ELSE
1155 l_alias := BSC_BIS_DIM_OBJ_PUB.get_Next_Alias(l_alias);
1156 l_temp_var := SUBSTR(l_bsc_dim_obj_rec.Bsc_Level_Abbreviation, 1, 7)||l_alias;
1157 END IF;
1158 END LOOP;
1159 END IF;
1160 END IF;
1161
1162 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
1163 IF ((l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size < BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Min_Size) OR
1164 (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size > BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Max_Size) OR
1165 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size < BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Min_Size) OR
1166 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size > BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Max_Size)) THEN
1167 FND_MESSAGE.SET_NAME('BSC','BSC_CODE_NAME_SIZE');
1168 FND_MSG_PUB.ADD;
1169 RAISE FND_API.G_EXC_ERROR;
1170 END IF;
1171 END IF;
1172
1173
1174 l_bsc_dim_obj_rec.Bsc_Level_Short_Name := l_dim_obj_name;--BSC_SYS_DIM_LEVELS_B.short_name
1175 l_bsc_dim_obj_rec.Bsc_Pk_Col := l_table_column;
1176 l_bsc_dim_obj_rec.Bsc_Level_Name := l_source_table;
1177 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
1178 IF (l_bsc_dim_obj_rec.Bsc_Level_Name IS NULL) THEN
1179 IF ((p_dim_obj_short_name IS NULL) OR (p_is_default_short_name = 'T')) THEN
1180 l_bsc_dim_obj_rec.Bsc_Level_Name := substr(get_valid_ddlentry_frm_name(p_display_name),1,30);
1181 IF(l_bsc_dim_obj_rec.Bsc_Level_Name IS NULL) THEN -- Generate level_table_name based on short name if it null
1182 l_bsc_dim_obj_rec.Bsc_Level_Name := substr(get_valid_ddlentry_frm_name(l_dim_obj_name),1,30);
1183 END IF;
1184 l_bsc_dim_obj_rec.Bsc_Level_Name := 'BSC_D_'||SUBSTR(l_bsc_dim_obj_rec.Bsc_Level_Name, 1, 21);
1185 IF (NOT is_Valid_Identifier(l_bsc_dim_obj_rec.Bsc_Level_Name)) THEN
1186 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
1187 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'));
1188 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_bsc_dim_obj_rec.Bsc_Level_Name);
1189 FND_MSG_PUB.ADD;
1190 RAISE FND_API.G_EXC_ERROR;
1191 END IF;
1192 --generate unique table name if already exists
1193 l_flag := TRUE;
1194 l_alias := NULL;
1195 l_temp_var := l_bsc_dim_obj_rec.Bsc_Level_Name;
1196 WHILE (l_flag) LOOP
1197 SELECT COUNT(1) INTO l_count
1198 FROM BSC_SYS_DIM_LEVELS_B
1199 WHERE UPPER(Level_Table_Name) = UPPER(l_temp_var);
1200 IF (l_count = 0) THEN
1201 l_flag := FALSE;
1202 l_bsc_dim_obj_rec.Bsc_Level_Name := l_temp_var;
1203 END IF;
1204 l_alias := BSC_BIS_DIM_OBJ_PUB.get_Next_Alias(l_alias);
1205 l_temp_var := SUBSTR(l_bsc_dim_obj_rec.Bsc_Level_Name, 1, 18)||l_alias;
1206 END LOOP;
1207 ELSE
1208 l_bsc_dim_obj_rec.Bsc_Level_Name := 'BSC_D_'||SUBSTR(TRIM(l_dim_obj_name) , 1, 21);
1209 END IF;
1210 END IF;
1211 l_flag := BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs
1212 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
1213 , x_return_status => x_return_status
1214 , x_msg_count => x_msg_count
1215 , x_msg_data => x_msg_data
1216 );
1217 IF(NOT l_flag) THEN
1218 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1219 END IF;
1220 ELSIF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
1221 IF ((l_bsc_dim_obj_rec.Source = 'OLTP') OR (l_bsc_dim_obj_rec.Source = 'EDW')) THEN
1222 l_flag := BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs
1223 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
1224 , x_return_status => x_return_status
1225 , x_msg_count => x_msg_count
1226 , x_msg_data => x_msg_data
1227 );
1228 IF(NOT l_flag) THEN
1229 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1230 END IF;
1231 ELSE
1232 FND_MESSAGE.SET_NAME('BSC','BSC_PRE_DIM_OBJ_SOURCE_TYPE');
1233 FND_MSG_PUB.ADD;
1234 RAISE FND_API.G_EXC_ERROR;
1235 END IF;
1236 END IF;
1237
1238 --CALL PMF'S API
1239 l_user_id := FND_GLOBAL.USER_ID;
1240 l_login_id := FND_GLOBAL.LOGIN_ID;
1241 -- l_bis_dim_level_rec.Dimension_Short_Name := 'UNASSIGNED';--dummy name is required
1242 /* ADDED BY RAVI ************/
1243 l_bis_dim_level_rec.Dimension_ID := get_bis_dimension_id(l_bis_dim_level_rec.Dimension_Short_Name);
1244 /****************/
1245 l_bis_dim_level_rec.Dimension_Name := p_display_name;
1246 l_bis_dim_level_rec.Dimension_Level_Short_Name := l_dim_obj_name;
1247 l_bis_dim_level_rec.Dimension_Level_Name := l_pmf_disp_name;
1248 l_bis_dim_level_rec.Description := p_description;
1249 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
1250 l_bis_dim_level_rec.Level_Values_View_Name := l_bsc_dim_obj_rec.Bsc_Level_Name;
1251 ELSE
1252 l_bis_dim_level_rec.Level_Values_View_Name := l_source_table;
1253 END IF;
1254 IF ((l_bis_dim_level_rec.Level_Values_View_Name IS NOT NULL) AND
1255 (NOT is_Valid_Identifier(l_bis_dim_level_rec.Level_Values_View_Name))) THEN
1256 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
1257 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'));
1258 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_bis_dim_level_rec.Level_Values_View_Name);
1259 FND_MSG_PUB.ADD;
1260 RAISE FND_API.G_EXC_ERROR;
1261 END IF;
1262
1263 l_bis_dim_level_rec.where_Clause := p_where_clause;
1264 l_bis_dim_level_rec.application_id := l_application_id;
1265 l_bis_dim_level_rec.Source := l_bsc_dim_obj_rec.Source;
1266 l_bis_dim_level_rec.Comparison_Label_Code := p_comparison_label_code;
1267 --SELECT bis_levels_s.NextVal INTO l_bis_dim_level_rec.Dimension_Level_ID FROM DUAL;
1268
1269 IF ((p_Long_Lov IS NULL) OR ((p_Long_Lov <> FND_API.G_TRUE) AND (p_Long_Lov <> FND_API.G_FALSE))) THEN
1270 l_bis_dim_level_rec.Long_Lov := FND_API.G_FALSE;
1271 ELSE
1272 l_bis_dim_level_rec.Long_Lov := p_Long_Lov;
1273 END IF;
1274
1275 IF ((p_Dim_Obj_Enabled IS NULL) OR ((p_Dim_Obj_Enabled <> FND_API.G_TRUE) AND (p_Dim_Obj_Enabled <> FND_API.G_FALSE))) THEN
1276 l_bis_dim_level_rec.Enabled := FND_API.G_FALSE;
1277 ELSE
1278 l_bis_dim_level_rec.Enabled := p_Dim_Obj_Enabled;
1279 END IF;
1280 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
1281 IF (p_Default_Values_Api IS NULL) THEN
1282 l_bis_dim_level_rec.Default_Values_Api := p_Default_Values_Api;
1283 ELSIF (p_Default_Values_Api <> '''''') THEN
1284 l_bis_dim_level_rec.Default_Values_Api := p_Default_Values_Api;
1285 END IF;
1286 l_bis_dim_level_rec.View_Object_Name := p_View_Object_Name;
1287 l_bis_dim_level_rec.Attribute_Code := l_bis_dim_level_rec.Dimension_Level_Short_Name;
1288 END IF;
1289 IF ((l_bsc_dim_obj_rec.Bsc_Source = 'PMF') AND (p_Master_Level IS NOT NULL)) THEN
1290 IF (p_Master_Level = l_bis_dim_level_rec.Dimension_Level_Short_Name) THEN
1291 FND_MESSAGE.SET_NAME('BIS','BIS_PMF_NO_SAME_DO');
1292 FND_MSG_PUB.ADD;
1293 RAISE FND_API.G_EXC_ERROR;
1294 END IF;
1295 IF (c_Master_Level%ISOPEN) THEN
1296 CLOSE c_Master_Level;
1297 END IF;
1298 OPEN c_Master_Level;
1299 FETCH c_Master_Level
1300 INTO l_bis_dim_level_rec.Master_Level
1301 , l_bis_short_name
1302 , l_bis_name;
1303 CLOSE c_Master_Level;
1304 IF (l_bis_dim_level_rec.Master_Level IS NULL) THEN
1305 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_LEVEL_NAME');
1306 FND_MESSAGE.SET_TOKEN('BSC_LEVEL_NAME', p_Master_Level);
1307 FND_MSG_PUB.ADD;
1308 RAISE FND_API.G_EXC_ERROR;
1309 END IF;
1310 IF (l_bis_short_name IS NOT NULL) THEN
1311 FND_MESSAGE.SET_NAME('BIS','BIS_PMF_LOV_NO_MASTER');
1312 FND_MESSAGE.SET_TOKEN('BIS_OBJ_LOV', l_bis_name);
1313 FND_MSG_PUB.ADD;
1314 RAISE FND_API.G_EXC_ERROR;
1315 END IF;
1316 END IF;
1317
1318 l_bis_dim_level_rec.Default_Search := p_Search_Function;
1319
1320 -- Assigns Drill_To_Form_Function
1321 l_bis_dim_level_rec.Drill_To_Form_Function := p_Drill_To_Form_Function;
1322 BIS_DIMENSION_LEVEL_PUB.Create_Dimension_Level
1323 ( p_api_version => 1.0
1324 , p_commit => FND_API.G_FALSE
1325 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
1326 , p_Dimension_Level_Rec => l_bis_dim_level_rec
1327 , x_return_status => x_return_status
1328 , x_error_Tbl => l_error_tbl
1329 );
1330 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1331 IF (l_error_tbl.COUNT > 0) THEN
1332 x_msg_data := l_error_tbl(l_error_tbl.COUNT).Error_Description;
1333 IF(INSTR(x_msg_data, ' ') = 0 ) THEN
1334 FND_MESSAGE.SET_NAME('BIS',x_msg_data);
1335 FND_MSG_PUB.ADD;
1336 x_msg_data := NULL;
1337 END IF;
1338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1339 END IF;
1340 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1341 END IF;
1342
1343 --CALL BSC API
1344 l_bsc_dim_obj_rec.Bsc_Dim_Comp_Disp_Name := p_comparison_item_text;--BSC_SYS_DIM_LEVELS_TL.comp_disp_name
1345 l_bsc_dim_obj_rec.Bsc_Dim_Level_Long_Name := p_display_name;--BSC_SYS_DIM_LEVELS_TL.name
1346 IF (p_description IS NULL) THEN
1347 l_bsc_dim_obj_rec.Bsc_Dim_Level_Help := p_display_name;
1348 ELSE
1349 l_bsc_dim_obj_rec.Bsc_Dim_Level_Help := p_description;--BSC_SYS_DIM_LEVELS_TL.help
1350 END IF;
1351 l_bsc_dim_obj_rec.Bsc_Dim_Tot_Disp_Name := p_all_item_text;--BSC_SYS_DIM_LEVELS_TL.total_disp_name
1352 l_bsc_dim_obj_rec.Bsc_Language := NULL;--BSC_SYS_DIM_LEVELS_TL.language
1353 l_bsc_dim_obj_rec.Bsc_Level_Column_Name := NULL;
1354 l_bsc_dim_obj_rec.Bsc_Level_Column_Type := NULL;
1355 l_bsc_dim_obj_rec.Bsc_Level_Comp_Order_By := p_comparison_order;--BSC_SYS_DIM_LEVELS_B.comp_order_by
1356 l_bsc_dim_obj_rec.Bsc_Level_Custom_Group := 0;--BSC_SYS_DIM_LEVELS_B.custom_group
1357 l_bsc_dim_obj_rec.Bsc_Level_Index := 0;
1358 l_bsc_dim_obj_rec.Bsc_Level_Table_Type := 1;--BSC_SYS_DIM_LEVELS_B.table_type
1359 l_bsc_dim_obj_rec.Bsc_Level_Value_Order_By := p_dimension_values_order;--BSC_SYS_DIM_LEVELS_B.value_order_by
1360 l_bsc_dim_obj_rec.Bsc_Source_Language := NULL;--source_lang
1361 l_bsc_dim_obj_rec.Bsc_Source_Level_Long_Name := NULL;
1362 l_bsc_dim_obj_rec.Bsc_Relation_Column := NULL;
1363 l_bsc_dim_obj_rec.Bsc_Relation_Type := NULL;
1364 l_bsc_dim_obj_rec.Bsc_Parent_Level_Id := NULL;
1365 l_bsc_dim_obj_rec.Bsc_Parent_Level_Index := NULL;
1366 l_bsc_dim_obj_rec.Bsc_Parent_Level_Short_Name := NULL;
1367 l_bsc_dim_obj_rec.Bsc_Parent_Level_Source := NULL;
1368 l_bsc_dim_obj_rec.Bsc_Flag := NULL;
1369 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
1370 l_level_table_name := l_bsc_dim_obj_rec.Bsc_Level_Name;
1371 l_bsc_dim_obj_rec.Bsc_Level_Name := l_bsc_dim_obj_rec.Bsc_Level_View_Name;
1372 END IF;
1373 BSC_DIMENSION_LEVELS_PUB.Create_Dim_Level
1374 ( p_commit => FND_API.G_FALSE
1375 , p_Dim_Level_Rec => l_bsc_dim_obj_rec
1376 , p_create_tables => FALSE
1377 , x_return_status => x_return_status
1378 , x_msg_count => x_msg_count
1379 , x_msg_data => x_msg_data
1380 );
1381 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1382 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1383 END IF;
1384 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
1385 BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions
1386 ( p_commit => FND_API.G_FALSE
1387 , p_dim_obj_short_name => l_dim_obj_name
1388 , p_dim_short_names => BSC_BIS_DIMENSION_PUB.Unassigned_Dim
1389 , x_return_status => x_return_status
1390 , x_msg_count => x_msg_count
1391 , x_msg_data => x_msg_data
1392 );
1393 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1394 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1395 END IF;
1396 BSC_BIS_DIM_OBJ_PUB.Set_All_Enable_Flag
1397 ( p_commit => FND_API.G_FALSE
1398 , p_Dim_Obj_Short_Name => l_dim_obj_name
1399 , p_All_Enabled => p_All_Enabled
1400 , x_return_status => x_return_status
1401 , x_msg_count => x_msg_count
1402 , x_msg_data => x_msg_data
1403 );
1404 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1405 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1406 END IF;
1407 END IF;
1408 IF (p_dim_short_names IS NOT NULL) THEN
1409 BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions
1410 ( p_commit => FND_API.G_FALSE
1411 , p_dim_obj_short_name => l_dim_obj_name
1412 , p_assign_dim_short_names => p_dim_short_names
1413 , p_unassign_dim_short_names => BSC_BIS_DIMENSION_PUB.Unassigned_Dim
1414 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
1415 , x_return_status => x_return_status
1416 , x_msg_count => x_msg_count
1417 , x_msg_data => x_msg_data
1418 );
1419 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1420 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1421 END IF;
1422 END IF;
1423
1424 /* Set 'All' flag for BSC type dim objects (specific to RPD)
1425 'All' flag is not supported from Dimension Designer for BSC type dim objects
1426 from Create/Update Dim Object screen. Only from RPD, 'All' flag can be '0' in
1427 Create case.
1428 */
1429 IF ((l_bsc_dim_obj_rec.Bsc_Source = 'BSC') AND (p_dim_short_names IS NOT NULL)) THEN
1430 BSC_BIS_DIM_OBJ_PUB.Set_Bsc_All_Enable_Flag
1431 ( p_commit => FND_API.G_FALSE
1432 , p_Dim_Obj_Short_Name => l_dim_obj_name
1433 , p_All_Enabled => p_All_Enabled
1434 , x_return_status => x_return_status
1435 , x_msg_count => x_msg_count
1436 , x_msg_data => x_msg_data
1437 );
1438 END IF;
1439 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1441 END IF;
1442
1443 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
1444 l_flag := BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs
1445 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
1446 , x_return_status => x_return_status
1447 , x_msg_count => x_msg_count
1448 , x_msg_data => x_msg_data
1449 );
1450 IF(NOT l_flag) THEN
1451 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1452 END IF;
1453 ELSIF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
1454 IF ((l_bsc_dim_obj_rec.Source = 'OLTP') OR (l_bsc_dim_obj_rec.Source = 'EDW')) THEN
1455 l_bsc_dim_obj_rec.Bsc_Level_Name := l_level_table_name;
1456 l_flag := BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views
1457 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
1458 , x_return_status => x_return_status
1459 , x_msg_count => x_msg_count
1460 , x_msg_data => x_msg_data
1461 );
1462 IF(NOT l_flag) THEN
1463 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1464 END IF;
1465 ELSE
1466 FND_MESSAGE.SET_NAME('BSC','BSC_PRE_DIM_OBJ_SOURCE_TYPE');
1467 FND_MSG_PUB.ADD;
1468 RAISE FND_API.G_EXC_ERROR;
1469 END IF;
1470 END IF;
1471
1472 /********************************************************
1473 Check no of independent dimension objects in dimension set
1474 ********************************************************/
1475
1476 check_indp_dimobjs
1477 (
1478 p_dim_id => l_bsc_dim_obj_rec.Bsc_Level_Id
1479 , x_return_status => x_return_status
1480 , x_msg_count => x_msg_count
1481 , x_msg_data => x_msg_data
1482 );
1483 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1484 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1485 END IF;
1486 /***********************************************************/
1487
1488
1489 IF (p_commit = FND_API.G_TRUE) THEN
1490 COMMIT;
1491 END IF;
1492 x_return_status := FND_API.G_RET_STS_SUCCESS;
1493 EXCEPTION
1494 WHEN FND_API.G_EXC_ERROR THEN
1495 IF (c_Master_Level%ISOPEN) THEN
1496 CLOSE c_Master_Level;
1497 END IF;
1498 ROLLBACK TO CreateBSCDimObjPMD;
1499 IF (x_msg_data IS NULL) THEN
1500 FND_MSG_PUB.Count_And_Get
1501 ( p_encoded => FND_API.G_FALSE
1502 , p_count => x_msg_count
1503 , p_data => x_msg_data
1504 );
1505 END IF;
1506 x_return_status := FND_API.G_RET_STS_ERROR;
1507 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1508 IF (c_Master_Level%ISOPEN) THEN
1509 CLOSE c_Master_Level;
1510 END IF;
1511 ROLLBACK TO CreateBSCDimObjPMD;
1512 IF (x_msg_data IS NULL) THEN
1513 FND_MSG_PUB.Count_And_Get
1514 ( p_encoded => FND_API.G_FALSE
1515 , p_count => x_msg_count
1516 , p_data => x_msg_data
1517 );
1518 END IF;
1519 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1520 WHEN NO_DATA_FOUND THEN
1521 IF (c_Master_Level%ISOPEN) THEN
1522 CLOSE c_Master_Level;
1523 END IF;
1524 ROLLBACK TO CreateBSCDimObjPMD;
1525 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1526 IF (x_msg_data IS NOT NULL) THEN
1527 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
1528 ELSE
1529 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
1530 END IF;
1531 WHEN OTHERS THEN
1532 IF (c_Master_Level%ISOPEN) THEN
1533 CLOSE c_Master_Level;
1534 END IF;
1535 ROLLBACK TO CreateBSCDimObjPMD;
1536 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1537 IF (x_msg_data IS NOT NULL) THEN
1538 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
1539 ELSE
1540 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object ';
1541 END IF;
1542 END Create_Dim_Object;
1543
1544 /*********************************************************************************
1545 ASSIGN DIMENSIONS TO DIMENSION OBJECT
1546 *********************************************************************************/
1547 PROCEDURE Assign_Dimensions
1548 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1549 , p_dim_obj_short_name IN VARCHAR2
1550 , p_dim_short_names IN VARCHAR2
1551 , x_return_status OUT NOCOPY VARCHAR2
1552 , x_msg_count OUT NOCOPY NUMBER
1553 , x_msg_data OUT NOCOPY VARCHAR2
1554 ) IS
1555 l_dim_short_names VARCHAR2(32000);
1556 l_dim_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
1557 l_dim_grp_id BSC_SYS_DIM_GROUPS_TL.Dim_Group_Id%TYPE;
1558
1559 l_count NUMBER;
1560 BEGIN
1561 FND_MSG_PUB.Initialize;
1562 x_return_status := FND_API.G_RET_STS_SUCCESS;
1563 IF (p_dim_obj_short_name IS NULL) THEN
1564 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1565 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
1566 FND_MSG_PUB.ADD;
1567 RAISE FND_API.G_EXC_ERROR;
1568 END IF;
1569 IF (p_dim_short_names IS NOT NULL) THEN
1570 l_dim_short_names := p_dim_short_names;
1571 WHILE (is_more( p_dim_short_names => l_dim_short_names
1572 , p_dim_name => l_dim_name)
1573 ) LOOP
1574 -- Granular Locking - Set the timestamp of Dimension Group
1575 l_dim_grp_id := NVL(BSC_DIMENSION_GROUPS_PVT.get_Dim_Group_Id(l_dim_name), -1);
1576 BSC_BIS_LOCKS_PUB.Set_Time_Stamp_Dim_Group
1577 ( p_dim_group_id => l_dim_grp_id
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_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
1583 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1584 END IF;
1585 -- Granular Locking - Set the timestamp of Dimension Group
1586 SELECT COUNT(1) INTO l_count
1587 FROM BSC_SYS_DIM_LEVELS_BY_GROUP A
1588 , BSC_SYS_DIM_LEVELS_B B
1589 WHERE A.Dim_Group_Id = l_dim_grp_id
1590 AND A.Dim_Level_Id = B.Dim_Level_Id
1591 AND B.Short_Name = p_dim_obj_short_name;
1592 IF (l_count = 0) THEN
1593 BSC_BIS_DIMENSION_PUB.Assign_Dimension_Objects
1594 ( p_commit => FND_API.G_FALSE
1595 , p_dim_short_name => l_dim_name
1596 , p_dim_obj_short_names => p_dim_obj_short_name
1597 , p_time_stamp => NULL
1598 , x_return_status => x_return_status
1599 , x_msg_count => x_msg_count
1600 , x_msg_data => x_msg_data
1601 );
1602 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1603 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1604 END IF;
1605 END IF;
1606 END LOOP;
1607 END IF;
1608 IF (p_commit = FND_API.G_TRUE) THEN
1609 COMMIT;
1610 END IF;
1611 x_return_status := FND_API.G_RET_STS_SUCCESS;
1612 EXCEPTION
1613 WHEN FND_API.G_EXC_ERROR THEN
1614 IF (x_msg_data IS NULL) THEN
1615 FND_MSG_PUB.Count_And_Get
1616 ( p_encoded => FND_API.G_FALSE
1617 , p_count => x_msg_count
1618 , p_data => x_msg_data
1619 );
1620 END IF;
1621 x_return_status := FND_API.G_RET_STS_ERROR;
1622 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1623 IF (x_msg_data IS NULL) THEN
1624 FND_MSG_PUB.Count_And_Get
1625 ( p_encoded => FND_API.G_FALSE
1626 , p_count => x_msg_count
1627 , p_data => x_msg_data
1628 );
1629 END IF;
1630 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1631 WHEN NO_DATA_FOUND THEN
1632 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1633 IF (x_msg_data IS NOT NULL) THEN
1634 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions ';
1635 ELSE
1636 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions ';
1637 END IF;
1638 WHEN OTHERS THEN
1639 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1640 IF (x_msg_data IS NOT NULL) THEN
1641 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions ';
1642 ELSE
1643 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions ';
1644 END IF;
1645 END Assign_Dimensions;
1646
1647 /*********************************************************************************
1648 ASSIGN DIMENSIONS TO DIMENSION OBJECT
1649 *********************************************************************************/
1650 PROCEDURE Unassign_Dimensions
1651 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1652 , p_dim_obj_short_name IN VARCHAR2
1653 , p_dim_short_names IN VARCHAR2
1654 , x_return_status OUT NOCOPY VARCHAR2
1655 , x_msg_count OUT NOCOPY NUMBER
1656 , x_msg_data OUT NOCOPY VARCHAR2
1657 ) IS
1658 l_dim_short_names VARCHAR2(32000);
1659 l_dim_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
1660 BEGIN
1661 FND_MSG_PUB.Initialize;
1662 x_return_status := FND_API.G_RET_STS_SUCCESS;
1663 IF (p_dim_obj_short_name IS NULL) THEN
1664 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1665 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
1666 FND_MSG_PUB.ADD;
1667 RAISE FND_API.G_EXC_ERROR;
1668 END IF;
1669 IF (p_dim_short_names IS NOT NULL) THEN
1670 l_dim_short_names := p_dim_short_names;
1671 WHILE (is_more( p_dim_short_names => l_dim_short_names
1672 , p_dim_name => l_dim_name)
1673 ) LOOP
1674
1675 -- Granular Locking - Set the timestamp of Dimension Group
1676 BSC_BIS_LOCKS_PUB.Set_Time_Stamp_Dim_Group
1677 ( p_dim_group_id => NVL(BSC_DIMENSION_GROUPS_PVT.get_Dim_Group_Id(l_dim_name), -1)
1678 , x_return_status => x_return_status
1679 , x_msg_count => x_msg_count
1680 , x_msg_data => x_msg_data
1681 );
1682 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1683 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1684 END IF;
1685 -- Granular Locking - Set the timestamp of Dimension Group
1686 BSC_BIS_DIMENSION_PUB.Unassign_Dimension_Objects
1687 ( p_commit => FND_API.G_FALSE
1688 , p_dim_short_name => l_dim_name
1689 , p_dim_obj_short_names => p_dim_obj_short_name
1690 , x_return_status => x_return_status
1691 , x_msg_count => x_msg_count
1692 , x_msg_data => x_msg_data
1693 );
1694 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1696 END IF;
1697 END LOOP;
1698 END IF;
1699 IF (p_commit = FND_API.G_TRUE) THEN
1700 COMMIT;
1701 END IF;
1702 x_return_status := FND_API.G_RET_STS_SUCCESS;
1703 EXCEPTION
1704 WHEN FND_API.G_EXC_ERROR THEN
1705 IF (x_msg_data IS NULL) THEN
1706 FND_MSG_PUB.Count_And_Get
1707 ( p_encoded => FND_API.G_FALSE
1708 , p_count => x_msg_count
1709 , p_data => x_msg_data
1710 );
1711 END IF;
1712 x_return_status := FND_API.G_RET_STS_ERROR;
1713 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1714 IF (x_msg_data IS NULL) THEN
1715 FND_MSG_PUB.Count_And_Get
1716 ( p_encoded => FND_API.G_FALSE
1717 , p_count => x_msg_count
1718 , p_data => x_msg_data
1719 );
1720 END IF;
1721 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1722 WHEN NO_DATA_FOUND THEN
1723 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1724 IF (x_msg_data IS NOT NULL) THEN
1725 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions ';
1726 ELSE
1727 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions ';
1728 END IF;
1729 WHEN OTHERS THEN
1730 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1731 IF (x_msg_data IS NOT NULL) THEN
1732 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions ';
1733 ELSE
1734 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions ';
1735 END IF;
1736 END Unassign_Dimensions;
1737
1738 /*********************************************************************************
1739 RESTRICT INTERNAL DIMENSION FOR USE IN DD
1740 *********************************************************************************/
1741 PROCEDURE Restrict_Internal_Dimensions
1742 ( p_dim_obj_short_name IN VARCHAR2
1743 , p_assign_dim_short_names IN VARCHAR2
1744 , p_unassign_dim_short_names IN VARCHAR2
1745 , x_return_status OUT NOCOPY VARCHAR2
1746 , x_msg_count OUT NOCOPY NUMBER
1747 , x_msg_data OUT NOCOPY VARCHAR2
1748 ) IS
1749 l_assigns VARCHAR2(32000);
1750 l_assign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
1751 l_assign_dim VARCHAR2(32000);
1752 l_count NUMBER;
1753 BEGIN
1754 -- It is to find values from p_assign_dim_short_names which are not already assigned.
1755 l_assigns := p_assign_dim_short_names;
1756 WHILE (is_more( p_dim_short_names => l_assigns
1757 , p_dim_name => l_assign)
1758 ) LOOP
1759 SELECT COUNT(1)
1760 INTO l_count
1761 FROM BSC_SYS_DIM_LEVELS_BY_GROUP A
1762 ,BSC_SYS_DIM_LEVELS_B L
1763 ,BSC_SYS_DIM_GROUPS_TL D
1764 WHERE D.SHORT_NAME = l_assign
1765 AND L.SHORT_NAME = p_dim_obj_short_name
1766 AND L.DIM_LEVEL_ID = A.DIM_LEVEL_ID
1767 AND D.DIM_GROUP_ID = A.DIM_GROUP_ID;
1768
1769 IF(l_count = 0) THEN
1770 IF (l_assign_dim IS NULL) THEN
1771 l_assign_dim := l_assign;
1772 ELSE
1773 l_assign_dim := l_assign_dim||','||l_assign;
1774 END IF;
1775 END IF;
1776 END LOOP;
1777 IF (p_unassign_dim_short_names IS NOT NULL) THEN
1778 IF (l_assign_dim IS NULL) THEN
1779 l_assign_dim := p_unassign_dim_short_names;
1780 ELSE
1781 l_assign_dim := l_assign_dim ||','||p_unassign_dim_short_names;
1782 END IF;
1783 END IF;
1784 BSC_UTILITY.Enable_Dimensions_Entity(
1785 p_Entity_Type => BSC_UTILITY.c_DIMENSION
1786 , p_Entity_Short_Names => l_assign_dim
1787 , p_Entity_Action_Type => BSC_UTILITY.c_UPDATE
1788 , x_Return_Status => x_return_status
1789 , x_Msg_Count => x_msg_count
1790 , x_Msg_Data => x_msg_data
1791 );
1792 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1793 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1794 END IF;
1795
1796
1797 END Restrict_Internal_Dimensions;
1798
1799
1800 /*********************************************************************************
1801 ASSIGN DIMENSIONS TO DIMENSION OBJECT
1802 *********************************************************************************/
1803 PROCEDURE Assign_Unassign_Dimensions
1804 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
1805 , p_dim_obj_short_name IN VARCHAR2
1806 , p_assign_dim_short_names IN VARCHAR2
1807 , p_unassign_dim_short_names IN VARCHAR2
1808 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
1809 , x_return_status OUT NOCOPY VARCHAR2
1810 , x_msg_count OUT NOCOPY NUMBER
1811 , x_msg_data OUT NOCOPY VARCHAR2
1812 ) IS
1813 l_unassigns VARCHAR2(32000);
1814 l_assigns VARCHAR2(32000);
1815 l_unassign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
1816 l_assign BSC_SYS_DIM_GROUPS_TL.Short_Name%TYPE;
1817
1818 l_unassign_dims VARCHAR2(32000);
1819 l_temp VARCHAR2(32000);
1820 l_regions VARCHAR2(32000);
1821 l_dim_name VARCHAR2(300);
1822 l_dim_obj_name VARCHAR2(300);
1823 l_flag BOOLEAN;
1824
1825 BEGIN
1826 FND_MSG_PUB.Initialize;
1827 x_return_status := FND_API.G_RET_STS_SUCCESS;
1828 IF (p_dim_obj_short_name IS NULL) THEN
1829 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
1830 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
1831 FND_MSG_PUB.ADD;
1832 RAISE FND_API.G_EXC_ERROR;
1833 END IF;
1834
1835 IF (p_unassign_dim_short_names IS NOT NULL) THEN
1836 l_unassigns := p_unassign_dim_short_names;
1837 WHILE (is_more( p_dim_short_names => l_unassigns
1838 , p_dim_name => l_unassign)
1839 ) LOOP
1840 l_assigns := p_assign_dim_short_names;
1841 l_flag := TRUE;
1842 WHILE (is_more( p_dim_short_names => l_assigns
1843 , p_dim_name => l_assign)
1844 ) LOOP
1845 IF(l_unassign = l_assign) THEN
1846 l_flag := FALSE;
1847 EXIT;
1848 END IF;
1849 END LOOP;
1850 IF(l_flag) THEN
1851 IF (l_unassign_dims IS NULL) THEN
1852 l_unassign_dims := l_unassign;
1853 ELSE
1854 l_unassign_dims := l_unassign_dims||', '||l_unassign;
1855 END IF;
1856
1857 IF (l_unassign <> BSC_BIS_DIMENSION_PUB.Unassigned_Dim) THEN
1858
1859 l_regions := BSC_UTILITY.Is_Dim_In_AKReport(l_unassign||'+'||p_dim_obj_short_name);
1860 IF(l_regions IS NOT NULL) THEN
1861 SELECT DIM_NAME
1862 INTO l_dim_name
1863 FROM BSC_BIS_DIM_VL
1864 WHERE SHORT_NAME = l_unassign;
1865
1866 SELECT NAME
1867 INTO l_dim_obj_name
1868 FROM BSC_BIS_DIM_OBJS_VL
1869 WHERE SHORT_NAME = p_dim_obj_short_name;
1870
1871 FND_MESSAGE.SET_NAME('BIS','BIS_DIM_OBJ_RPTASSOC_ERROR');
1872 FND_MESSAGE.SET_TOKEN('DIM_NAME', l_dim_name);
1873 FND_MESSAGE.SET_TOKEN('DIM_OBJ_NAME', l_dim_obj_name);
1874 FND_MESSAGE.SET_TOKEN('REPORTS_ASSOC', l_regions);
1875 FND_MSG_PUB.ADD;
1876 RAISE FND_API.G_EXC_ERROR;
1877 END IF;
1878 END IF;
1879 END IF;
1880 END LOOP;
1881 IF (l_unassign_dims IS NOT NULL) THEN
1882 BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions
1883 ( p_commit => FND_API.G_FALSE
1884 , p_dim_obj_short_name => p_dim_obj_short_name
1885 , p_dim_short_names => l_unassign_dims
1886 , x_return_status => x_return_status
1887 , x_msg_count => x_msg_count
1888 , x_msg_data => x_msg_data
1889 );
1890 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1891 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1892 END IF;
1893 END IF;
1894 END IF;
1895 IF (p_Restrict_Dim_Validate IS NOT NULL) THEN
1896 Restrict_Internal_Dimensions
1897 ( p_dim_obj_short_name => p_dim_obj_short_name
1898 , p_assign_dim_short_names => p_assign_dim_short_names
1899 , p_unassign_dim_short_names => l_unassign_dims
1900 , x_return_status => x_return_status
1901 , x_msg_count => x_msg_count
1902 , x_msg_data => x_msg_data
1903 );
1904 END IF;
1905 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1906 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1907 END IF;
1908
1909 IF (p_assign_dim_short_names IS NOT NULL) THEN
1910 BSC_BIS_DIM_OBJ_PUB.Assign_Dimensions
1911 ( p_commit => FND_API.G_FALSE
1912 , p_dim_obj_short_name => p_dim_obj_short_name
1913 , p_dim_short_names => p_assign_dim_short_names
1914 , x_return_status => x_return_status
1915 , x_msg_count => x_msg_count
1916 , x_msg_data => x_msg_data
1917 );
1918 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1919 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1920 END IF;
1921 END IF;
1922 -- Bug 3784852 validate empty dimension after unassign/assign dim objs. Remove empty from dim sets for all objectives
1923 IF (p_unassign_dim_short_names IS NOT NULL) THEN
1924 BSC_BIS_DIMENSION_PUB.Remove_Empty_Dims_For_DimSet
1925 ( p_commit => FND_API.G_FALSE
1926 , p_dim_short_names => p_unassign_dim_short_names
1927 , x_return_status => x_return_status
1928 , x_msg_count => x_msg_count
1929 , x_msg_data => x_msg_data
1930 );
1931 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1932 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1933 END IF;
1934 END IF;
1935 IF (p_commit = FND_API.G_TRUE) THEN
1936 COMMIT;
1937 END IF;
1938 x_return_status := FND_API.G_RET_STS_SUCCESS;
1939 EXCEPTION
1940 WHEN FND_API.G_EXC_ERROR THEN
1941 IF (x_msg_data IS NULL) THEN
1942 FND_MSG_PUB.Count_And_Get
1943 ( p_encoded => FND_API.G_FALSE
1944 , p_count => x_msg_count
1945 , p_data => x_msg_data
1946 );
1947 END IF;
1948 x_return_status := FND_API.G_RET_STS_ERROR;
1949 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1950 IF (x_msg_data IS NULL) THEN
1951 FND_MSG_PUB.Count_And_Get
1952 ( p_encoded => FND_API.G_FALSE
1953 , p_count => x_msg_count
1954 , p_data => x_msg_data
1955 );
1956 END IF;
1957 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1958 WHEN NO_DATA_FOUND THEN
1959 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1960 IF (x_msg_data IS NOT NULL) THEN
1961 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions ';
1962 ELSE
1963 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions ';
1964 END IF;
1965 WHEN OTHERS THEN
1966 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1967 IF (x_msg_data IS NOT NULL) THEN
1968 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions ';
1969 ELSE
1970 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions ';
1971 END IF;
1972 END Assign_Unassign_Dimensions;
1973
1974 FUNCTION Retrieve_Primary_Dimension(
1975 p_Dim_Obj_Short_Name IN VARCHAR2
1976 ) RETURN VARCHAR2 IS
1977 l_Dim_Short_Name BIS_DIMENSIONS.SHORT_NAME%TYPE;
1978 CURSOR c_Bis_Levels IS
1979 SELECT B.Short_Name
1980 FROM BIS_LEVELS A
1981 , BIS_DIMENSIONS B
1982 WHERE A.Short_Name = p_Dim_Obj_Short_Name
1983 AND A.Dimension_Id = B.Dimension_Id;
1984 BEGIN
1985 OPEN c_Bis_Levels;
1986 FETCH c_Bis_Levels INTO l_Dim_Short_Name;
1987 CLOSE c_Bis_Levels;
1988 RETURN l_Dim_Short_Name;
1989 EXCEPTION
1990 WHEN OTHERS THEN
1991 RETURN NULL;
1992 END Retrieve_Primary_Dimension;
1993
1994 /*********************************************************************************
1995 UPDATE DIMENSION
1996 *********************************************************************************/
1997 /*
1998 This procedure allows user to update a dimension. These changes will
1999 be reflected into the following metadata: -
2000 1 BIS_LEVELS.
2001 2. BIS_LEVELS_TL
2002 3. BSC_SYS_DIM_LEVELS_B
2003 4. BSC_SYS_DIM_LEVELS_TL
2004
2005 Key:
2006 'p_dim_obj_short_name'
2007
2008 Validations:
2009 1. p_dimension_id, p_dim_obj_short_name, p_display_name, p_data_source, p_application_id
2010 and p_source_type must not be null.
2011 2. p_dim_obj_short_name and p_display_name must be unique.
2012 */
2013 PROCEDURE Update_Dim_Object
2014 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2015 , p_dim_obj_short_name IN VARCHAR2
2016 , p_display_name IN VARCHAR2
2017 , p_application_id IN NUMBER
2018 , p_description IN VARCHAR2
2019 , p_data_source IN VARCHAR2
2020 , p_source_table IN VARCHAR2
2021 , p_where_clause IN VARCHAR2 := NULL
2022 , p_comparison_label_code IN VARCHAR2
2023 , p_table_column IN VARCHAR2
2024 , p_source_type IN VARCHAR2
2025 , p_maximum_code_size IN NUMBER
2026 , p_maximum_name_size IN NUMBER
2027 , p_all_item_text IN VARCHAR2
2028 , p_comparison_item_text IN VARCHAR2
2029 , p_prototype_default_value IN VARCHAR2
2030 , p_dimension_values_order IN NUMBER
2031 , p_comparison_order IN NUMBER
2032 , p_assign_dim_short_names IN VARCHAR2
2033 , p_unassign_dim_short_names IN VARCHAR2
2034 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
2035 , p_Master_Level IN VARCHAR2 := NULL
2036 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
2037 , p_Search_Function IN VARCHAR2 := NULL
2038 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
2039 , p_View_Object_Name IN VARCHAR2 := NULL
2040 , p_Default_Values_Api IN VARCHAR2 := NULL
2041 , p_All_Enabled IN NUMBER := NULL
2042 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
2043 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
2044 , p_Hide IN VARCHAR2 := FND_API.G_FALSE
2045 , x_return_status OUT NOCOPY VARCHAR2
2046 , x_msg_count OUT NOCOPY NUMBER
2047 , x_msg_data OUT NOCOPY VARCHAR2
2048 ) IS
2049 l_error_tbl BIS_UTILITIES_PUB.Error_Tbl_Type;
2050 l_bis_dim_level_rec BIS_DIMENSION_LEVEL_PUB.Dimension_Level_Rec_Type;
2051 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
2052 l_bsc_drop_tables BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
2053 l_MTab_Tbl BSC_BIS_DIM_OBJ_PUB.KPI_Dim_Set_Table_Type;
2054
2055 l_temp_var BSC_SYS_DIM_LEVELS_B.abbreviation%TYPE;
2056 l_source_table VARCHAR(33);
2057 l_bsc_dim_id BSC_SYS_DIM_LEVELS_B.Dim_Level_Id%TYPE;
2058 l_level_table_name BIS_LEVELS.LEVEL_VALUES_VIEW_NAME%TYPE;
2059 l_dim_obj_name BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE;
2060 l_dim_Grp_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
2061 l_application_id BIS_LEVELS.Application_Id%TYPE;
2062 l_bis_short_name BIS_LEVELS.Short_Name%TYPE;
2063 l_bis_name BIS_LEVELS_TL.Name%TYPE;
2064 l_flag BOOLEAN := FALSE;
2065 l_struct_change BOOLEAN := FALSE;
2066 l_child_struc BOOLEAN := FALSE;
2067 l_create_pmf BOOLEAN := FALSE;--must be false
2068 l_create_bsc BOOLEAN := FALSE;--must be false
2069 l_mix_type_dim BOOLEAN ;
2070 l_duplicate_flag BOOLEAN ;
2071
2072
2073 l_Dim_Tab BSC_BIS_LOCKS_PUB.t_numberTable;
2074 l_dim_Grp_names VARCHAR2(32000);
2075 l_dim_short_names VARCHAR2(32000);
2076 l_child_dim_obj_list VARCHAR2(32000);
2077 l_pmf_disp_name VARCHAR2(255); -- DispName
2078
2079 l_index NUMBER := 0;
2080 l_count NUMBER;
2081
2082 CURSOR c_dimension_names IS
2083 SELECT short_name
2084 FROM BSC_SYS_DIM_GROUPS_VL
2085 WHERE dim_group_id IN (SELECT dim_group_id
2086 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
2087 WHERE dim_level_id = l_bsc_dim_obj_rec.Bsc_Level_Id);
2088
2089 CURSOR c_kpi_dim_set IS
2090 SELECT DISTINCT A.indicator Indicator
2091 , A.dim_set_id Dim_Set_Id
2092 FROM BSC_KPI_DIM_LEVELS_B A
2093 , BSC_SYS_DIM_LEVELS_B D
2094 , BSC_KPIS_B B
2095 WHERE A.Level_Table_Name = D.Level_Table_Name
2096 AND B.Indicator = A.Indicator
2097 AND B.Share_Flag <> 2
2098 AND D.Dim_Level_Id = l_bsc_dim_obj_rec.Bsc_Level_Id;
2099
2100 /* ADDED BY RAVI *********/
2101 CURSOR c_dim_short_name IS
2102 SELECT B.SHORT_NAME
2103 FROM BIS_LEVELS A
2104 , BIS_DIMENSIONS B
2105 WHERE B.DIMENSION_ID = A.DIMENSION_ID
2106 AND A.SHORT_NAME = p_dim_obj_short_name;
2107 --dimension_level_short_name = p_dim_obj_short_name;
2108 l_dim_short_name BIS_DIMENSIONS.short_name%TYPE;
2109 l_dim_exist BOOLEAN := FALSE;
2110 l_first_dim_short_name BIS_DIMENSIONS.short_name%TYPE;
2111 l_first BOOLEAN := TRUE;
2112 l_primary_dim_sht_name BIS_DIMENSIONS.short_name%TYPE;
2113 /********************************/
2114
2115 CURSOR c_Master_Level IS
2116 SELECT Short_Name
2117 , Master_Level
2118 , Name
2119 FROM BIS_LEVELS_VL
2120 WHERE Short_Name = p_Master_Level;
2121
2122
2123 CURSOR c_Kpi_Dim_Set1 IS
2124 SELECT DISTINCT A.INDICATOR Indicator,
2125 A.DIM_SET_ID Dim_Set_Id
2126 FROM BSC_KPI_DIM_LEVELS_VL A,
2127 BSC_SYS_DIM_LEVELS_VL B,
2128 BSC_KPIS_B C
2129 WHERE A.LEVEL_TABLE_NAME=B.LEVEL_TABLE_NAME
2130 AND C.INDICATOR = A.INDICATOR
2131 AND C.SHARE_FLAG <> 2
2132 AND INSTR(','||l_child_dim_obj_list||',', ','||b.dim_level_id||',') > 0;
2133 ------------------------------------------------------------------
2134
2135 BEGIN
2136 FND_MSG_PUB.Initialize;
2137 x_return_status := FND_API.G_RET_STS_SUCCESS;
2138 SAVEPOINT UpdateBSCDimObjectPMD;
2139 IF(p_dim_obj_short_name IS NOT NULL) THEN
2140 l_application_id := p_application_id;
2141 END IF;
2142 l_dim_obj_name := p_dim_obj_short_name;
2143
2144 IF (l_dim_obj_name IS NULL) THEN
2145 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2146 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
2147 FND_MSG_PUB.ADD;
2148 RAISE FND_API.G_EXC_ERROR;
2149 END IF;
2150 IF (p_data_source IS NULL) THEN
2151 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
2152 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DATA_SOURCE'), TRUE);
2153 FND_MSG_PUB.ADD;
2154 RAISE FND_API.G_EXC_ERROR;
2155 END IF;
2156 IF ((p_data_source <> 'BSC') AND (p_data_source <> 'PMF')) THEN
2157 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
2158 FND_MSG_PUB.ADD;
2159 RAISE FND_API.G_EXC_ERROR;
2160 END IF;
2161 IF (p_data_source = 'BSC') THEN
2162 l_bsc_dim_obj_rec.Source := 'OLTP';
2163 ELSE
2164 IF ((p_source_type IS NULL) OR ((p_source_type <> 'OLTP') AND (p_source_type <> 'EDW'))) THEN
2165 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SOURCE_TYPE');
2166 FND_MSG_PUB.ADD;
2167 RAISE FND_API.G_EXC_ERROR;
2168 ELSE
2169 l_bsc_dim_obj_rec.Source := p_source_type;
2170 END IF;
2171 END IF;
2172
2173 --check if short_name exists in the PMF system
2174 SELECT COUNT(1) INTO l_count
2175 FROM BIS_LEVELS
2176 WHERE short_name = l_dim_obj_name;
2177 IF (l_count = 0) THEN
2178 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
2179 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIMENSION_OBJECT'), TRUE);
2180 FND_MSG_PUB.ADD;
2181 RAISE FND_API.G_EXC_ERROR;
2182 END IF;
2183 --check if short_name exists in the BSC system
2184 SELECT COUNT(1) INTO l_count
2185 FROM BSC_SYS_DIM_LEVELS_B
2186 WHERE Short_Name = l_dim_obj_name;
2187 IF (l_count = 0) THEN
2188 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
2189 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIMENSION_OBJECT'), TRUE);
2190 FND_MSG_PUB.ADD;
2191 RAISE FND_API.G_EXC_ERROR;
2192 END IF;
2193 SELECT dim_level_id
2194 , level_table_name
2195 , user_key_size
2196 , disp_key_size
2197 , NVL(source, 'BSC')
2198 , abbreviation
2199 , level_pk_col
2200 , name
2201 , level_view_name
2202 INTO l_bsc_dim_obj_rec.Bsc_Level_Id
2203 , l_bsc_dim_obj_rec.Bsc_Level_Name --p_source_table
2204 , l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size --p_maximum_code_size
2205 , l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size --p_maximum_name_size
2206 , l_bsc_dim_obj_rec.Bsc_Source --p_data_source
2207 , l_bsc_dim_obj_rec.Bsc_Level_Abbreviation --p_prototype_default_value
2208 , l_bsc_dim_obj_rec.Bsc_Pk_Col --p_table_column
2209 , l_bis_dim_level_rec.Dimension_Level_Name
2210 , l_bsc_dim_obj_rec.Bsc_Level_View_Name
2211 FROM BSC_SYS_DIM_LEVELS_VL
2212 WHERE short_name = l_dim_obj_name;
2213 --check uniqueness of display name
2214 IF (p_display_name IS NOT NULL) THEN
2215 l_pmf_disp_name := p_display_name;
2216 IF (p_display_name <> l_bis_dim_level_rec.Dimension_Level_Name) THEN
2217 IF (p_data_source = 'PMF') THEN
2218 SELECT COUNT(1) INTO l_count
2219 FROM BIS_LEVELS_VL
2220 WHERE UPPER(short_name) <> UPPER(l_dim_obj_name)
2221 AND UPPER(name) = UPPER(p_display_name);
2222 IF (l_count <> 0) THEN
2223 FND_MESSAGE.SET_NAME('BSC','BSC_UNIQUE_NAME_REQUIRED');
2224 FND_MESSAGE.SET_TOKEN('SHORT_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DISPLAY_NAME'), TRUE);
2225 FND_MESSAGE.SET_TOKEN('NAME_VALUE', p_display_name);
2226 FND_MSG_PUB.ADD;
2227 RAISE FND_API.G_EXC_ERROR;
2228 END IF;
2229 ELSIF (p_data_source = 'BSC') THEN -- Allow insertion into BSC Data Model, with the same display name
2230 SELECT COUNT(1) INTO l_count
2231 FROM BIS_LEVELS_VL
2232 WHERE UPPER(short_name) <> UPPER(l_dim_obj_name)
2233 AND UPPER(name) = UPPER(l_pmf_disp_name);
2234
2235 WHILE(l_count > 0) LOOP
2236 l_pmf_disp_name := BSC_UTILITY.get_Next_DispName(l_pmf_disp_name);
2237 SELECT COUNT(1) INTO l_count
2238 FROM BIS_LEVELS_VL
2239 WHERE UPPER(name) = UPPER(l_pmf_disp_name);
2240 END LOOP;
2241 END IF;
2242 END IF;
2243 END IF;
2244 ---Check the dimensions that are being attached may contain both autogenerated and existing
2245 -- source type because of this
2246 l_mix_type_dim := FALSE;
2247 IF(p_assign_dim_short_names IS NOT NULL) THEN
2248 l_mix_type_dim := check_sametype_dims
2249 ( p_dim_obj_name => p_display_name
2250 , p_dim_obj_short_name => p_dim_obj_short_name
2251 , p_dim_obj_source => p_data_source
2252 , p_dim_short_names => p_assign_dim_short_names
2253 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
2254 , x_return_status => x_return_status
2255 , x_msg_count => x_msg_count
2256 , x_msg_data => x_msg_data
2257 );
2258 IF (l_mix_type_dim) THEN
2259 RAISE FND_API.G_EXC_ERROR;
2260 END IF;
2261 END IF;
2262
2263 --intialize records with existing values
2264 l_bsc_drop_tables.Bsc_Level_Id := l_bsc_dim_obj_rec.Bsc_Level_Id;
2265 l_bsc_drop_tables.Bsc_Level_Name := l_bsc_dim_obj_rec.Bsc_Level_Name;
2266 l_bsc_drop_tables.Bsc_Level_User_Key_Size := l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size;
2267 l_bsc_drop_tables.Bsc_Level_Disp_Key_Size := l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size;
2268 l_bsc_drop_tables.Bsc_Source := l_bsc_dim_obj_rec.Bsc_Source;
2269 l_bsc_drop_tables.Bsc_Level_Abbreviation := l_bsc_dim_obj_rec.Bsc_Level_Abbreviation;
2270 l_bsc_drop_tables.Bsc_Pk_Col := l_bsc_dim_obj_rec.Bsc_Pk_Col;
2271 l_bsc_drop_tables.Bsc_Level_View_Name := l_bsc_dim_obj_rec.Bsc_Level_View_Name;
2272
2273 --BSC_SYS_DIM_LEVELS_B.dim_level_id
2274 -- Dimension Object type can not be changed (BSC/PMF).
2275 IF ((p_data_source IS NOT NULL) AND (l_bsc_dim_obj_rec.Bsc_Source <> p_data_source)) THEN
2276 FND_MESSAGE.SET_NAME('BSC','BSC_NO_UPDATE_DATA_SOURCE');
2277 FND_MSG_PUB.ADD;
2278 RAISE FND_API.G_EXC_ERROR;
2279 END IF;
2280 l_source_table := p_source_table;
2281 IF ((p_source_table IS NOT NULL) AND (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') AND (INSTR(l_source_table, 'BSC_D_') <> 1)) THEN
2282 l_source_table := 'BSC_D_'||UPPER(l_source_table);
2283 END IF;
2284
2285 IF((LENGTHB(l_source_table) > 27) AND (l_bsc_dim_obj_rec.Bsc_Source = 'BSC')) THEN
2286
2287 FND_MESSAGE.SET_NAME('BSC','BSC_DIM_OBJ_TABLE_NAME');
2288 FND_MESSAGE.SET_TOKEN('TAB_NAME', l_source_table);
2289 FND_MSG_PUB.ADD;
2290 RAISE FND_API.G_EXC_ERROR;
2291 END IF;
2292
2293 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
2294 IF ((l_bsc_dim_obj_rec.Bsc_Level_Abbreviation <> NVL(p_prototype_default_value, l_bsc_dim_obj_rec.Bsc_Level_Abbreviation)) OR
2295 (l_bsc_dim_obj_rec.Bsc_Level_Name <> NVL(p_source_table, l_bsc_dim_obj_rec.Bsc_Level_Name)) OR
2296 (l_bsc_dim_obj_rec.Bsc_Pk_Col <> NVL(p_table_column, l_bsc_dim_obj_rec.Bsc_Pk_Col)) OR
2297 (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size <> NVL(p_maximum_code_size, l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size)) OR
2298 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size <> NVL(p_maximum_name_size, l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size))) THEN
2299 l_create_bsc := TRUE;
2300 END IF;
2301 IF((l_bsc_dim_obj_rec.Bsc_Level_Name <> NVL(p_source_table, l_bsc_dim_obj_rec.Bsc_Level_Name)) OR
2302 (l_bsc_dim_obj_rec.Bsc_Pk_Col <> NVL(p_table_column, l_bsc_dim_obj_rec.Bsc_Pk_Col)))THEN
2303 l_struct_change := TRUE;
2304 END IF;
2305 END IF;
2306
2307 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2308 IF (l_bsc_dim_obj_rec.Bsc_Level_Name <> NVL(l_source_table, l_bsc_dim_obj_rec.Bsc_Level_Name)) THEN
2309 l_create_pmf := TRUE;
2310 END IF;
2311 END IF;
2312 IF (p_source_table IS NOT NULL) THEN
2313 l_bsc_dim_obj_rec.Bsc_Level_Name := l_source_table;
2314 END IF;
2315 IF (p_maximum_code_size IS NOT NULL) THEN
2316 l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size := p_maximum_code_size;
2317 END IF;
2318 IF (p_maximum_name_size IS NOT NULL) THEN
2319 l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size := p_maximum_name_size;
2320 END IF;
2321 IF (p_table_column IS NOT NULL) THEN
2322 l_bsc_dim_obj_rec.Bsc_Pk_Col := p_table_column;
2323 END IF;
2324 IF (p_prototype_default_value IS NOT NULL) THEN
2325 l_bsc_dim_obj_rec.Bsc_Level_Abbreviation := SUBSTR(p_prototype_default_value, 1, 11);
2326 END IF;
2327
2328 l_bsc_dim_obj_rec.Bsc_Level_Short_Name := l_dim_obj_name;--BSC_SYS_DIM_LEVELS_B.short_name
2329
2330 IF (c_dim_short_name%ISOPEN) THEN
2331 CLOSE c_dim_short_name;
2332 END IF;
2333 OPEN c_dim_short_name;
2334 FETCH c_dim_short_name INTO l_dim_short_name;
2335 CLOSE c_dim_short_name;
2336 l_dim_Grp_names := p_assign_dim_short_names;
2337 IF (p_assign_dim_short_names IS NOT NULL) THEN
2338 l_dim_Grp_names := p_assign_dim_short_names ;
2339 WHILE (is_more( p_dim_short_names => l_dim_Grp_names
2340 , p_dim_name => l_dim_Grp_name)
2341 ) LOOP
2342 IF (l_first) THEN
2343 l_first := FALSE;
2344 l_first_dim_short_name := l_dim_Grp_name;
2345 END IF;
2346 IF (l_dim_short_name = l_dim_Grp_name) THEN
2347 l_dim_exist := TRUE;
2348 l_bis_dim_level_rec.Dimension_Short_Name:= l_dim_Grp_name;
2349 END IF;
2350 l_Dim_Tab(l_index) := NVL(BSC_DIMENSION_GROUPS_PVT.get_Dim_Group_Id(l_dim_Grp_name), -1);
2351 l_index := l_index + 1;
2352 END LOOP;
2353 ELSE
2354 l_bis_dim_level_rec.Dimension_Short_Name := BSC_BIS_DIMENSION_PUB.Unassigned_Dim;
2355 END IF;
2356 IF ((NOT l_dim_exist) AND (NOT l_first)) THEN
2357 l_bis_dim_level_rec.Dimension_Short_Name := l_first_dim_short_name;
2358 END IF;
2359 l_dim_Grp_names := p_unassign_dim_short_names;
2360 -- Get all the Dimension Group that are going to be Unassigned
2361 IF (p_unassign_dim_short_names IS NOT NULL) THEN
2362 l_dim_Grp_names := p_unassign_dim_short_names;
2363 WHILE (is_more( p_dim_short_names => l_dim_Grp_names
2364 , p_dim_name => l_dim_Grp_name)
2365 ) LOOP
2366 l_Dim_Tab(l_index) := NVL(BSC_DIMENSION_GROUPS_PVT.get_Dim_Group_Id(l_dim_Grp_name), -1);
2367 l_index := l_index + 1;
2368 END LOOP;
2369 END IF;
2370 -- Lock all the Dimension Groups to be assigned to the Dimension Objects
2371 BSC_BIS_LOCKS_PUB.Lock_Update_Dimension_Object
2372 ( p_Dim_Object_Id => l_bsc_dim_obj_rec.Bsc_Level_Id
2373 ,p_Selected_Dimensions => l_Dim_Tab
2374 ,p_time_stamp => p_time_stamp -- Granular Locking
2375 ,x_return_status => x_return_status
2376 ,x_msg_count => x_msg_count
2377 ,x_msg_data => x_msg_data
2378 );
2379 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2380 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2381 END IF;
2382 -- End Granular Locking
2383
2384 l_bsc_dim_obj_rec.Bsc_Level_Short_Name := l_dim_obj_name;--BSC_SYS_DIM_LEVELS_B.short_name
2385 --generate unique abbreviation if source is BSC
2386 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
2387 IF ((l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size < l_bsc_drop_tables.Bsc_Level_User_Key_Size)
2388 OR (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size < l_bsc_drop_tables.Bsc_Level_Disp_Key_Size)) THEN
2389 FND_MESSAGE.SET_NAME('BSC','BSC_CODE_SIZE_NOT_DECREASED');
2390 FND_MSG_PUB.ADD;
2391 RAISE FND_API.G_EXC_ERROR;
2392 END IF;
2393 IF ((l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size < BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Min_Size) OR
2394 (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size > BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Max_Size) OR
2395 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size < BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Min_Size) OR
2396 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size > BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Max_Size)) THEN
2397 FND_MESSAGE.SET_NAME('BSC','BSC_CODE_NAME_SIZE');
2398 FND_MSG_PUB.ADD;
2399 RAISE FND_API.G_EXC_ERROR;
2400 END IF;
2401 SELECT COUNT(1) INTO l_count
2402 FROM BSC_SYS_DIM_LEVELS_B
2403 WHERE UPPER(abbreviation) = UPPER(l_bsc_dim_obj_rec.Bsc_Level_Abbreviation)
2404 AND dim_level_id <> l_bsc_dim_obj_rec.Bsc_Level_Id
2405 AND Source = 'BSC';
2406 IF (l_count <> 0) THEN
2407 FND_MESSAGE.SET_NAME('BSC','BSC_UNIQUE_NAME_REQUIRED');
2408 FND_MESSAGE.SET_TOKEN('SHORT_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ABBREVIATION'), TRUE);
2409 FND_MESSAGE.SET_TOKEN('NAME_VALUE', l_bsc_dim_obj_rec.Bsc_Level_Abbreviation);
2410 FND_MSG_PUB.ADD;
2411 RAISE FND_API.G_EXC_ERROR;
2412 END IF;
2413 IF (l_bsc_dim_obj_rec.Bsc_Level_Name IS NULL) THEN
2414 l_bsc_dim_obj_rec.Bsc_Level_Name := 'BSC_D_'||SUBSTR(REPLACE(l_dim_obj_name, ' ', '_') , 1, 22);
2415 END IF;
2416 l_flag := BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs
2417 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
2418 , x_return_status => x_return_status
2419 , x_msg_count => x_msg_count
2420 , x_msg_data => x_msg_data
2421 );
2422 IF(NOT l_flag) THEN
2423 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2424 END IF;
2425 ELSIF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2426 IF ((l_bsc_dim_obj_rec.Source = 'OLTP') OR (l_bsc_dim_obj_rec.Source = 'EDW')) THEN
2427
2428 l_bsc_dim_obj_rec.Bsc_Level_Name := p_source_table;
2429 IF((l_bsc_dim_obj_rec.Bsc_Level_Name IS NOT NULL) AND
2430 (INSTR(l_bsc_dim_obj_rec.Bsc_Level_Name, 'BSC_D_') = 1)) THEN
2431 l_bsc_dim_obj_rec.Bsc_Level_Name := SUBSTR(l_bsc_dim_obj_rec.Bsc_Level_Name, 7, LENGTH(l_bsc_dim_obj_rec.Bsc_Level_Name));
2432 END IF;
2433 l_flag := BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs
2434 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
2435 , x_return_status => x_return_status
2436 , x_msg_count => x_msg_count
2437 , x_msg_data => x_msg_data
2438 );
2439 IF (NOT l_flag) THEN
2440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2441 END IF;
2442 ELSE
2443 FND_MESSAGE.SET_NAME('BSC','BSC_PRE_DIM_OBJ_SOURCE_TYPE');
2444 FND_MSG_PUB.ADD;
2445 RAISE FND_API.G_EXC_ERROR;
2446 END IF;
2447 END IF;
2448
2449 SELECT level_id INTO l_bis_dim_level_rec.Dimension_Level_ID
2450 FROM BIS_LEVELS
2451 WHERE short_name = l_dim_obj_name;
2452
2453 /********DISABLED BY RAVI ****************/
2454 --l_bis_dim_level_rec.Dimension_Short_Name := 'UNASSIGNED';
2455 l_bis_dim_level_rec.Dimension_ID := get_bis_dimension_id(l_bis_dim_level_rec.Dimension_Short_Name) ;
2456 /*****************************************/
2457 l_bis_dim_level_rec.Dimension_Name := NULL;
2458 l_bis_dim_level_rec.Dimension_Level_Short_Name := l_dim_obj_name;
2459 l_bis_dim_level_rec.Dimension_Level_Name := l_pmf_disp_name; -- PMF Dimension Name should be different
2460 l_bis_dim_level_rec.Description := p_description;
2461 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
2462 l_bis_dim_level_rec.Level_Values_View_Name := l_bsc_dim_obj_rec.Bsc_Level_Name;
2463 ELSE
2464 l_bis_dim_level_rec.Level_Values_View_Name := p_source_table;
2465 END IF;
2466 IF ((l_bis_dim_level_rec.Level_Values_View_Name IS NOT NULL) AND
2467 (NOT is_Valid_Identifier(l_bis_dim_level_rec.Level_Values_View_Name))) THEN
2468 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
2469 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'), TRUE);
2470 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_bis_dim_level_rec.Level_Values_View_Name);
2471 FND_MSG_PUB.ADD;
2472 RAISE FND_API.G_EXC_ERROR;
2473 END IF;
2474 l_bis_dim_level_rec.where_Clause := p_where_clause;
2475 l_bis_dim_level_rec.source := l_bsc_dim_obj_rec.Source;
2476 l_bis_dim_level_rec.application_id := l_application_id;
2477 l_bis_dim_level_rec.Comparison_Label_Code := p_comparison_label_code;
2478 IF ((p_Long_Lov IS NULL) OR ((p_Long_Lov <> FND_API.G_TRUE) AND (p_Long_Lov <> FND_API.G_FALSE))) THEN
2479 l_bis_dim_level_rec.Long_Lov := FND_API.G_FALSE;
2480 ELSE
2481 l_bis_dim_level_rec.Long_Lov := p_Long_Lov;
2482 END IF;
2483
2484 IF ((p_Dim_Obj_Enabled IS NULL) OR ((p_Dim_Obj_Enabled <> FND_API.G_TRUE) AND (p_Dim_Obj_Enabled <> FND_API.G_FALSE))) THEN
2485 l_bis_dim_level_rec.Enabled := FND_API.G_FALSE;
2486 ELSE
2487 l_bis_dim_level_rec.Enabled := p_Dim_Obj_Enabled;
2488 END IF;
2489
2490 IF( BIS_UTILITIES_PUB.Value_Not_Missing(p_hide) = FND_API.G_TRUE ) THEN
2491 l_bis_dim_level_rec.hide := p_hide;
2492 END IF;
2493
2494 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2495 IF (p_Default_Values_Api IS NULL) THEN
2496 l_bis_dim_level_rec.Default_Values_Api := p_Default_Values_Api;
2497 ELSIF (p_Default_Values_Api <> '''''') THEN
2498 l_bis_dim_level_rec.Default_Values_Api := p_Default_Values_Api;
2499 END IF;
2500 l_bis_dim_level_rec.View_Object_Name := p_View_Object_Name;
2501 l_bis_dim_level_rec.Attribute_Code := l_bis_dim_level_rec.Dimension_Level_Short_Name;
2502 END IF;
2503 IF ((l_bsc_dim_obj_rec.Bsc_Source = 'PMF') AND (p_Master_Level IS NOT NULL)) THEN
2504 IF (p_Master_Level = l_bis_dim_level_rec.Dimension_Level_Short_Name) THEN
2505 FND_MESSAGE.SET_NAME('BIS','BIS_PMF_NO_SAME_DO');
2506 FND_MSG_PUB.ADD;
2507 RAISE FND_API.G_EXC_ERROR;
2508 END IF;
2509 IF (c_Master_Level%ISOPEN) THEN
2510 CLOSE c_Master_Level;
2511 END IF;
2512 OPEN c_Master_Level;
2513 FETCH c_Master_Level
2514 INTO l_bis_dim_level_rec.Master_Level
2515 , l_bis_short_name
2516 , l_bis_name;
2517 CLOSE c_Master_Level;
2518 IF (l_bis_dim_level_rec.Master_Level IS NULL) THEN
2519 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_LEVEL_NAME');
2520 FND_MESSAGE.SET_TOKEN('BSC_LEVEL_NAME', p_Master_Level);
2521 FND_MSG_PUB.ADD;
2522 RAISE FND_API.G_EXC_ERROR;
2523 END IF;
2524 IF (l_bis_short_name IS NOT NULL) THEN
2525 FND_MESSAGE.SET_NAME('BIS','BIS_PMF_LOV_NO_MASTER');
2526 FND_MESSAGE.SET_TOKEN('BIS_OBJ_LOV', l_bis_name);
2527 FND_MSG_PUB.ADD;
2528 RAISE FND_API.G_EXC_ERROR;
2529 END IF;
2530 SELECT COUNT(1) INTO l_Count
2531 FROM BIS_LEVELS
2532 WHERE Master_Level = l_bis_dim_level_rec.Dimension_Level_Short_Name;
2533 IF (l_Count <> 0) THEN
2534 FND_MESSAGE.SET_NAME('BIS','BIS_PMF_UPD_NO_MASTER');
2535 FND_MESSAGE.SET_TOKEN('BIS_OBJ_UPD', NVL(l_bis_dim_level_rec.Dimension_Level_Name, l_bis_dim_level_rec.Dimension_Level_Short_Name));
2536 FND_MSG_PUB.ADD;
2537 RAISE FND_API.G_EXC_ERROR;
2538 END IF;
2539 END IF;
2540
2541 l_bis_dim_level_rec.Default_Search := p_Search_Function;
2542 l_bis_dim_level_rec.Drill_To_Form_Function := p_Drill_To_Form_Function;
2543 -- Primary_Dim will be used only ine case of LDT upload in update mode it should take as provided from PMD API.
2544 l_bis_dim_level_rec.Primary_Dim := FND_API.G_TRUE;
2545 BIS_DIMENSION_LEVEL_PUB.Update_Dimension_Level
2546 ( p_api_version => 1.0
2547 , p_commit => FND_API.G_FALSE
2548 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
2549 , p_Dimension_Level_Rec => l_bis_dim_level_rec
2550 , x_return_status => x_return_status
2551 , x_error_Tbl => l_error_tbl
2552 );
2553 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2554 IF (l_error_tbl.COUNT > 0) THEN
2555 x_msg_data := l_error_tbl(l_error_tbl.COUNT).Error_Description;
2556 IF(INSTR(x_msg_data, ' ') = 0 ) THEN
2557 FND_MESSAGE.SET_NAME('BIS',x_msg_data);
2558 FND_MSG_PUB.ADD;
2559 x_msg_data := NULL;
2560 END IF;
2561 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2562 END IF;
2563 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2564 END IF;
2565
2566 --CALL API TO UPDATE INTO FND_LOOKUP_VALUES
2567
2568 --CALL BSC API
2569 --Get BSC Dimension ID into 'l_bsc_dim_id'
2570 SELECT dim_level_id INTO l_bsc_dim_id
2571 FROM BSC_SYS_DIM_LEVELS_B
2572 WHERE UPPER(short_name) = UPPER(l_dim_obj_name);
2573
2574 l_bsc_dim_obj_rec.Bsc_Dim_Comp_Disp_Name := p_comparison_item_text;
2575 l_bsc_dim_obj_rec.Bsc_Dim_Level_Long_Name := p_display_name;
2576 l_bsc_dim_obj_rec.Bsc_Dim_Level_Help := p_description;
2577 l_bsc_dim_obj_rec.Bsc_Dim_Tot_Disp_Name := p_all_item_text;
2578 l_bsc_dim_obj_rec.Bsc_Language := NULL;
2579 l_bsc_dim_obj_rec.Bsc_Level_Column_Name := NULL;
2580 l_bsc_dim_obj_rec.Bsc_Level_Column_Type := NULL;
2581 l_bsc_dim_obj_rec.Bsc_Level_Comp_Order_By := p_comparison_order;
2582 l_bsc_dim_obj_rec.Bsc_Level_Custom_Group := 0;
2583 l_bsc_dim_obj_rec.Bsc_Level_Index := 0;
2584 l_bsc_dim_obj_rec.Bsc_Level_Value_Order_By := p_dimension_values_order;
2585 l_bsc_dim_obj_rec.Bsc_Source_Language := NULL;
2586 l_bsc_dim_obj_rec.Bsc_Source_Level_Long_Name := NULL;
2587 l_bsc_dim_obj_rec.Bsc_Relation_Column := NULL;
2588 l_bsc_dim_obj_rec.Bsc_Relation_Type := NULL;
2589 l_bsc_dim_obj_rec.Bsc_Parent_Level_Id := NULL;
2590 l_bsc_dim_obj_rec.Bsc_Parent_Level_Index := NULL;
2591 l_bsc_dim_obj_rec.Bsc_Parent_Level_Short_Name := NULL;
2592 l_bsc_dim_obj_rec.Bsc_Parent_Level_Source := NULL;
2593 l_bsc_dim_obj_rec.Bsc_Flag := NULL;
2594
2595 l_count := 0;
2596 --cascading is required for BSC types of Dimension Objects Only
2597 FOR cd IN c_kpi_dim_set LOOP
2598 l_MTab_Tbl(l_count).p_kpi_id := cd.Indicator;
2599 l_MTab_Tbl(l_count).p_dim_set_id := cd.Dim_Set_Id;
2600 l_count := l_count + 1;
2601 END LOOP;
2602
2603 l_child_dim_obj_list := NULL;
2604 -- If l_child_Struct is true, then we need to refresh the Child Dimension Object's Kpis as well
2605 IF (l_child_struc) THEN
2606 l_child_dim_obj_list := Get_Child_Dim_Objs(p_Dim_Level_Id => l_bsc_dim_obj_rec.Bsc_Level_Id);
2607
2608
2609 IF (l_child_dim_obj_list IS NOT NULL) THEN
2610 FOR ckds IN c_Kpi_Dim_Set1 LOOP
2611 l_duplicate_flag := FALSE;
2612 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
2613 IF(l_MTab_Tbl(i).p_kpi_id=ckds.Indicator)THEN
2614 l_duplicate_flag := TRUE;
2615 EXIT;
2616 END IF;
2617 END LOOP;
2618 IF(NOT l_duplicate_flag) THEN
2619 l_MTab_Tbl(l_count).p_kpi_id := ckds.Indicator;
2620 l_MTab_Tbl(l_count).p_dim_set_id := ckds.Dim_Set_Id;
2621 l_count := l_count + 1;
2622 END IF;
2623 END LOOP;
2624 END IF;
2625 END IF;
2626
2627
2628 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
2629 BSC_BIS_KPI_MEAS_PUB.Delete_Dim_Objs_In_DSet
2630 ( p_commit => FND_API.G_FALSE
2631 , p_kpi_id => l_MTab_Tbl(i).p_kpi_id
2632 , p_dim_set_id => l_MTab_Tbl(i).p_dim_set_id
2633 , x_return_status => x_return_status
2634 , x_msg_count => x_msg_count
2635 , x_msg_data => x_msg_data
2636 );
2637 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2638 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2639 END IF;
2640 END LOOP;
2641 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2642 l_level_table_name := l_bsc_dim_obj_rec.Bsc_Level_Name;
2643 l_bsc_dim_obj_rec.Bsc_Level_Name := l_bsc_dim_obj_rec.Bsc_Level_View_Name;
2644 END IF;
2645 BSC_DIMENSION_LEVELS_PUB.Update_Dim_Level
2646 ( p_commit => FND_API.G_FALSE
2647 , p_Dim_Level_Rec => l_bsc_dim_obj_rec
2648 , x_return_status => x_return_status
2649 , x_msg_count => x_msg_count
2650 , x_msg_data => x_msg_data
2651 );
2652 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2654 END IF;
2655 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
2656 IF (l_struct_change) THEN
2657 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet
2658 ( p_commit => FND_API.G_FALSE
2659 , p_kpi_id => l_MTab_Tbl(i).p_kpi_id
2660 , p_dim_set_id => l_MTab_Tbl(i).p_dim_set_id
2661 , x_return_status => x_return_status
2662 , x_msg_count => x_msg_count
2663 , x_msg_data => x_msg_data
2664 );
2665 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2666 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2667 END IF;
2668 ELSE
2669 BSC_BIS_KPI_MEAS_PUB.Create_Dim_Objs_In_DSet
2670 ( p_commit => FND_API.G_FALSE
2671 , p_kpi_id => l_MTab_Tbl(i).p_kpi_id
2672 , p_dim_set_id => l_MTab_Tbl(i).p_dim_set_id
2673 , p_kpi_flag_change => BSC_DESIGNER_PVT.G_ActionFlag.Normal
2674 , x_return_status => x_return_status
2675 , x_msg_count => x_msg_count
2676 , x_msg_data => x_msg_data
2677 );
2678 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2679 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2680 END IF;
2681 END IF;
2682 END LOOP;
2683 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2684 BSC_BIS_DIM_OBJ_PUB.Set_All_Enable_Flag
2685 ( p_commit => FND_API.G_FALSE
2686 , p_Dim_Obj_Short_Name => l_bis_dim_level_rec.Dimension_Level_Short_Name
2687 , p_All_Enabled => p_All_Enabled
2688 , x_return_status => x_return_status
2689 , x_msg_count => x_msg_count
2690 , x_msg_data => x_msg_data
2691 );
2692 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2693 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2694 END IF;
2695 END IF;
2696 BSC_BIS_DIM_OBJ_PUB.Assign_Unassign_Dimensions
2697 ( p_commit => FND_API.G_FALSE
2698 , p_dim_obj_short_name => l_dim_obj_name
2699 , p_assign_dim_short_names => p_assign_dim_short_names
2700 , p_unassign_dim_short_names => p_unassign_dim_short_names
2701 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
2702 , x_return_status => x_return_status
2703 , x_msg_count => x_msg_count
2704 , x_msg_data => x_msg_data
2705 );
2706 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2707 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2708 END IF;
2709 IF (l_bsc_dim_obj_rec.Bsc_Source = 'PMF') THEN
2710 BSC_BIS_DIM_OBJ_PUB.Set_All_Enable_Flag
2711 ( p_commit => FND_API.G_FALSE
2712 , p_Dim_Obj_Short_Name => l_bis_dim_level_rec.Dimension_Level_Short_Name
2713 , p_All_Enabled => p_All_Enabled
2714 , x_return_status => x_return_status
2715 , x_msg_count => x_msg_count
2716 , x_msg_data => x_msg_data
2717 );
2718 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2719 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2720 END IF;
2721 ELSIF ((l_bsc_dim_obj_rec.Bsc_Source = 'BSC') AND (p_assign_dim_short_names IS NOT NULL) AND (p_unassign_dim_short_names IS NULL) AND (INSTR(p_assign_dim_short_names, ',') = 0)) THEN
2722 /* Set 'All' flag for BSC type dim objects (specific to Auto Generated RPD - reserved for future)
2723 We are checking if p_assign_dim_short_names contains only 1 dimension
2724 and p_unassign_dim_short_names doesn't contain any dimension. This way
2725 we are safe not to update 'All' flag for other dimension-dim object
2726 relationships while coming from Dimension Designer.
2727 */
2728 BSC_BIS_DIM_OBJ_PUB.Set_Bsc_All_Enable_Flag
2729 ( p_commit => FND_API.G_FALSE
2730 , p_Dim_Obj_Short_Name => l_dim_obj_name
2731 , p_Dim_Short_Name => p_assign_dim_short_names
2732 , p_All_Enabled => p_All_Enabled
2733 , x_return_status => x_return_status
2734 , x_msg_count => x_msg_count
2735 , x_msg_data => x_msg_data
2736 );
2737 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2738 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2739 END IF;
2740 END IF;
2741
2742 l_primary_dim_sht_name := Retrieve_Primary_Dimension(l_dim_obj_name);
2743 IF (l_primary_dim_sht_name IS NOT NULL AND l_primary_dim_sht_name <> BSC_BIS_DIMENSION_PUB.Unassigned_Dim) THEN
2744 -- Bug 4997042
2745 BSC_BIS_DIM_OBJ_PUB.Cascade_Dim_Props_Into_Dim_Grp (
2746 p_Dim_Obj_Short_Name => l_dim_obj_name
2747 , p_Dim_Short_Name => l_primary_dim_sht_name
2748 , p_All_Flag => p_All_Enabled
2749 , x_Return_Status => x_return_status
2750 , x_Msg_Count => x_msg_count
2751 , x_Msg_Data => x_msg_data
2752 );
2753 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2754 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2755 END IF;
2756 END IF;
2757
2758 -- Start Granular Locking
2759 BSC_BIS_LOCKS_PUB.Set_Time_Stamp_Dim_Level
2760 ( p_dim_level_id => l_bsc_dim_obj_rec.Bsc_Level_Id
2761 , x_return_status => x_return_status
2762 , x_msg_count => x_msg_count
2763 , x_msg_data => x_msg_data
2764 );
2765 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2767 END IF;
2768 IF ((l_create_pmf) AND (l_bsc_dim_obj_rec.Bsc_Source = 'PMF')) THEN
2769 BSC_DIMENSION_LEVELS_PUB.Drop_Dim_Level_Tabs
2770 ( p_Dim_Level_Rec => l_bsc_drop_tables
2771 , x_return_status => x_return_status
2772 , x_msg_count => x_msg_count
2773 , x_msg_data => x_msg_data
2774 );
2775 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2776 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2777 END IF;
2778 l_bsc_dim_obj_rec.Bsc_Level_Name := l_level_table_name;
2779 l_flag := BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views
2780 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
2781 , x_return_status => x_return_status
2782 , x_msg_count => x_msg_count
2783 , x_msg_data => x_msg_data
2784 );
2785 IF (NOT l_flag) THEN
2786 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2787 END IF;
2788 END IF;
2789 IF ((l_create_bsc) AND (l_bsc_dim_obj_rec.Bsc_Source = 'BSC')) THEN
2790 l_flag := BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs
2791 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
2792 , p_Dim_Level_Rec_Old => l_bsc_drop_tables
2793 , x_return_status => x_return_status
2794 , x_msg_count => x_msg_count
2795 , x_msg_data => x_msg_data
2796 );
2797 IF(NOT l_flag) THEN
2798 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2799 END IF;
2800 END IF;
2801 /*************************************************************
2802 When a dimension object is updated, it is possible to assign
2803 unassing the dimension objects from the dimensions.It is possible
2804 that these dimensions might be used in some Kpis and part of the
2805 list button. so we need to call the Validate_List_Button logic
2806 here.
2807 /************************************************************/
2808 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
2809 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
2810 (
2811 p_Kpi_Id => NULL
2812 , p_Dim_Level_Id => l_bsc_dim_obj_rec.Bsc_Level_Id
2813 , x_return_status => x_return_status
2814 , x_msg_count => x_msg_count
2815 , x_msg_data => x_msg_data
2816 );
2817 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2818 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2819 END IF;
2820 END IF;
2821 IF (p_commit = FND_API.G_TRUE) THEN
2822 COMMIT;
2823 END IF;
2824 x_return_status := FND_API.G_RET_STS_SUCCESS;
2825 EXCEPTION
2826 WHEN FND_API.G_EXC_ERROR THEN
2827 IF (c_Master_Level%ISOPEN) THEN
2828 CLOSE c_Master_Level;
2829 END IF;
2830 ROLLBACK TO UpdateBSCDimObjectPMD;
2831 IF (x_msg_data IS NULL) THEN
2832 FND_MSG_PUB.Count_And_Get
2833 ( p_encoded => FND_API.G_FALSE
2834 , p_count => x_msg_count
2835 , p_data => x_msg_data
2836 );
2837 END IF;
2838 x_return_status := FND_API.G_RET_STS_ERROR;
2839 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2840 IF (c_Master_Level%ISOPEN) THEN
2841 CLOSE c_Master_Level;
2842 END IF;
2843 ROLLBACK TO UpdateBSCDimObjectPMD;
2844 IF (x_msg_data IS NULL) THEN
2845 FND_MSG_PUB.Count_And_Get
2846 ( p_encoded => FND_API.G_FALSE
2847 , p_count => x_msg_count
2848 , p_data => x_msg_data
2849 );
2850 END IF;
2851 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2852 WHEN NO_DATA_FOUND THEN
2853 IF (c_Master_Level%ISOPEN) THEN
2854 CLOSE c_Master_Level;
2855 END IF;
2856 ROLLBACK TO UpdateBSCDimObjectPMD;
2857 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2858 IF (x_msg_data IS NOT NULL) THEN
2859 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2860 ELSE
2861 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2862 END IF;
2863 WHEN OTHERS THEN
2864 IF (c_Master_Level%ISOPEN) THEN
2865 CLOSE c_Master_Level;
2866 END IF;
2867 ROLLBACK TO UpdateBSCDimObjectPMD;
2868 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2869 IF (x_msg_data IS NOT NULL) THEN
2870 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2871 ELSE
2872 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2873 END IF;
2874 END Update_Dim_Object;
2875
2876 /*********************************************************************************
2877 UPDATE DIMENSION
2878 *********************************************************************************/
2879 PROCEDURE Update_Dim_Object
2880 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2881 , p_dim_obj_short_name IN VARCHAR2
2882 , p_display_name IN VARCHAR2
2883 , p_application_id IN NUMBER
2884 , p_description IN VARCHAR2
2885 , p_data_source IN VARCHAR2
2886 , p_source_table IN VARCHAR2
2887 , p_where_clause IN VARCHAR2 := NULL
2888 , p_comparison_label_code IN VARCHAR2
2889 , p_table_column IN VARCHAR2
2890 , p_source_type IN VARCHAR2
2891 , p_maximum_code_size IN NUMBER
2892 , p_maximum_name_size IN NUMBER
2893 , p_all_item_text IN VARCHAR2
2894 , p_comparison_item_text IN VARCHAR2
2895 , p_prototype_default_value IN VARCHAR2
2896 , p_dimension_values_order IN NUMBER
2897 , p_comparison_order IN NUMBER
2898 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
2899 , p_Master_Level IN VARCHAR2 := NULL
2900 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
2901 , p_Search_Function IN VARCHAR2 := NULL
2902 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
2903 , p_View_Object_Name IN VARCHAR2 := NULL
2904 , p_Default_Values_Api IN VARCHAR2 := NULL
2905 , p_All_Enabled IN NUMBER := NULL
2906 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
2907 , p_Hide IN VARCHAR2 := FND_API.G_FALSE
2908 , x_return_status OUT NOCOPY VARCHAR2
2909 , x_msg_count OUT NOCOPY NUMBER
2910 , x_msg_data OUT NOCOPY VARCHAR2
2911 ) IS
2912 BEGIN
2913 FND_MSG_PUB.Initialize;
2914 x_return_status := FND_API.G_RET_STS_SUCCESS;
2915
2916 BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object
2917 ( p_commit => FND_API.G_FALSE
2918 , p_dim_obj_short_name => p_dim_obj_short_name
2919 , p_display_name => p_display_name
2920 , p_application_id => p_application_id
2921 , p_description => p_description
2922 , p_data_source => p_data_source
2923 , p_source_table => p_source_table
2924 , p_where_clause => p_where_clause
2925 , p_comparison_label_code => p_comparison_label_code
2926 , p_table_column => p_table_column
2927 , p_source_type => p_source_type
2928 , p_maximum_code_size => p_maximum_code_size
2929 , p_maximum_name_size => p_maximum_name_size
2930 , p_all_item_text => p_all_item_text
2931 , p_comparison_item_text => p_comparison_item_text
2932 , p_prototype_default_value => p_prototype_default_value
2933 , p_dimension_values_order => p_dimension_values_order
2934 , p_comparison_order => p_comparison_order
2935 , p_assign_dim_short_names => NULL
2936 , p_unassign_dim_short_names => NULL
2937 , p_time_stamp => p_time_stamp -- Granular Locking
2938 , p_Master_Level => p_Master_Level
2939 , p_Long_Lov => p_Long_Lov
2940 , p_Search_Function => p_Search_Function
2941 , p_Dim_Obj_Enabled => p_Dim_Obj_Enabled
2942 , p_View_Object_Name => p_View_Object_Name
2943 , p_Default_Values_Api => p_Default_Values_Api
2944 , p_Drill_To_Form_Function => p_Drill_To_Form_Function
2945 , p_All_Enabled => p_All_Enabled
2946 , p_Hide => p_Hide
2947 , x_return_status => x_return_status
2948 , x_msg_count => x_msg_count
2949 , x_msg_data => x_msg_data
2950 );
2951 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2952 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2953 END IF;
2954 IF (p_commit = FND_API.G_TRUE) THEN
2955 COMMIT;
2956 END IF;
2957 x_return_status := FND_API.G_RET_STS_SUCCESS;
2958 EXCEPTION
2959 WHEN FND_API.G_EXC_ERROR THEN
2960 IF (x_msg_data IS NULL) THEN
2961 FND_MSG_PUB.Count_And_Get
2962 ( p_encoded => FND_API.G_FALSE
2963 , p_count => x_msg_count
2964 , p_data => x_msg_data
2965 );
2966 END IF;
2967 x_return_status := FND_API.G_RET_STS_ERROR;
2968 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2969 IF (x_msg_data IS NULL) THEN
2970 FND_MSG_PUB.Count_And_Get
2971 ( p_encoded => FND_API.G_FALSE
2972 , p_count => x_msg_count
2973 , p_data => x_msg_data
2974 );
2975 END IF;
2976 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2977 WHEN NO_DATA_FOUND THEN
2978 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2979 IF (x_msg_data IS NOT NULL) THEN
2980 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2981 ELSE
2982 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2983 END IF;
2984 WHEN OTHERS THEN
2985 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2986 IF (x_msg_data IS NOT NULL) THEN
2987 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2988 ELSE
2989 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
2990 END IF;
2991 END Update_Dim_Object;
2992
2993 /*********************************************************************************
2994 UPDATE DIMENSION
2995 *********************************************************************************/
2996 PROCEDURE Update_Dim_Object
2997 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
2998 , p_dim_obj_short_name IN VARCHAR2
2999 , p_display_name IN VARCHAR2
3000 , p_application_id IN NUMBER
3001 , p_description IN VARCHAR2
3002 , p_data_source IN VARCHAR2
3003 , p_source_table IN VARCHAR2
3004 , p_where_clause IN VARCHAR2 := NULL
3005 , p_comparison_label_code IN VARCHAR2
3006 , p_table_column IN VARCHAR2
3007 , p_source_type IN VARCHAR2
3008 , p_maximum_code_size IN NUMBER
3009 , p_maximum_name_size IN NUMBER
3010 , p_all_item_text IN VARCHAR2
3011 , p_comparison_item_text IN VARCHAR2
3012 , p_prototype_default_value IN VARCHAR2
3013 , p_dimension_values_order IN NUMBER
3014 , p_comparison_order IN NUMBER
3015 , p_assign_dim_short_names IN VARCHAR2
3016 , p_time_stamp IN VARCHAR2 := NULL -- Granular Locking
3017 , p_Master_Level IN VARCHAR2 := NULL
3018 , p_Long_Lov IN VARCHAR2 := FND_API.G_FALSE
3019 , p_Search_Function IN VARCHAR2 := NULL
3020 , p_Dim_Obj_Enabled IN VARCHAR2 := FND_API.G_FALSE
3021 , p_View_Object_Name IN VARCHAR2 := NULL
3022 , p_Default_Values_Api IN VARCHAR2 := NULL
3023 , p_All_Enabled IN NUMBER := NULL
3024 , p_Drill_To_Form_Function IN VARCHAR2 := NULL
3025 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
3026 , p_Hide IN VARCHAR2 := FND_API.G_FALSE
3027 , x_return_status OUT NOCOPY VARCHAR2
3028 , x_msg_count OUT NOCOPY NUMBER
3029 , x_msg_data OUT NOCOPY VARCHAR2
3030 ) IS
3031 l_dim_level_id BSC_SYS_DIM_LEVELS_BY_GROUP.dim_level_id%TYPE;
3032 l_unas_dim_short_names VARCHAR2(32000);
3033
3034
3035 CURSOR cr_bsc_dim_obj IS
3036 SELECT dim_level_id
3037 FROM BSC_SYS_DIM_LEVELS_B
3038 WHERE short_name = p_dim_obj_short_name;
3039
3040 CURSOR c_dimension_names IS
3041 SELECT short_name
3042 FROM BSC_SYS_DIM_GROUPS_VL
3043 WHERE dim_group_id IN (SELECT dim_group_id
3044 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
3045 WHERE dim_level_id = l_dim_level_id);
3046
3047 BEGIN
3048 FND_MSG_PUB.Initialize;
3049 x_return_status := FND_API.G_RET_STS_SUCCESS;
3050
3051 IF (p_dim_obj_short_name IS NULL) THEN
3052 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3053 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
3054 FND_MSG_PUB.ADD;
3055 RAISE FND_API.G_EXC_ERROR;
3056 END IF;
3057
3058 IF (cr_bsc_dim_obj%ISOPEN) THEN
3059 CLOSE cr_bsc_dim_obj;
3060 END IF;
3061 OPEN cr_bsc_dim_obj;
3062 FETCH cr_bsc_dim_obj
3063 INTO l_dim_level_id;
3064 IF (cr_bsc_dim_obj%ROWCOUNT = 0) THEN
3065 l_dim_level_id := -1;
3066 END IF;
3067 CLOSE cr_bsc_dim_obj;
3068 IF (l_dim_level_id = -1) THEN
3069 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
3070 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIMENSION_OBJECT'), TRUE);
3071 FND_MSG_PUB.ADD;
3072 RAISE FND_API.G_EXC_ERROR;
3073 END IF;
3074
3075 FOR cd IN c_dimension_names LOOP
3076 IF (l_unas_dim_short_names IS NULL) THEN
3077 l_unas_dim_short_names := cd.short_name;
3078 ELSE
3079 l_unas_dim_short_names := l_unas_dim_short_names||', '||cd.short_name;
3080 END IF;
3081 END LOOP;
3082 BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object
3083 ( p_commit => FND_API.G_FALSE
3084 , p_dim_obj_short_name => p_dim_obj_short_name
3085 , p_display_name => p_display_name
3086 , p_application_id => p_application_id
3087 , p_description => p_description
3088 , p_data_source => p_data_source
3089 , p_source_table => p_source_table
3090 , p_where_clause => p_where_clause
3091 , p_comparison_label_code => p_comparison_label_code
3092 , p_table_column => p_table_column
3093 , p_source_type => p_source_type
3094 , p_maximum_code_size => p_maximum_code_size
3095 , p_maximum_name_size => p_maximum_name_size
3096 , p_all_item_text => p_all_item_text
3097 , p_comparison_item_text => p_comparison_item_text
3098 , p_prototype_default_value => p_prototype_default_value
3099 , p_dimension_values_order => p_dimension_values_order
3100 , p_comparison_order => p_comparison_order
3101 , p_assign_dim_short_names => p_assign_dim_short_names
3102 , p_unassign_dim_short_names => l_unas_dim_short_names
3103 , p_time_stamp => p_time_stamp -- Granular Locking
3104 , p_Master_Level => p_Master_Level
3105 , p_Long_Lov => p_Long_Lov
3106 , p_Search_Function => p_Search_Function
3107 , p_Dim_Obj_Enabled => p_Dim_Obj_Enabled
3108 , p_View_Object_Name => p_View_Object_Name
3109 , p_Default_Values_Api => p_Default_Values_Api
3110 , p_All_Enabled => p_All_Enabled
3111 , p_Drill_To_Form_Function => p_Drill_To_Form_Function
3112 , p_Restrict_Dim_Validate => p_Restrict_Dim_Validate
3113 , p_Hide => p_Hide
3114 , x_return_status => x_return_status
3115 , x_msg_count => x_msg_count
3116 , x_msg_data => x_msg_data
3117 );
3118 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3119 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3120 END IF;
3121 /********************************************************
3122 Check no of independent dimension objects in dimension set
3123 ********************************************************/
3124
3125 check_indp_dimobjs
3126 (
3127 p_dim_id => l_dim_level_id
3128 , x_return_status => x_return_status
3129 , x_msg_count => x_msg_count
3130 , x_msg_data => x_msg_data
3131 );
3132 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3133 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3134 END IF;
3135 /********************************************************/
3136 IF (p_commit = FND_API.G_TRUE) THEN
3137 COMMIT;
3138 END IF;
3139 x_return_status := FND_API.G_RET_STS_SUCCESS;
3140 EXCEPTION
3141 WHEN FND_API.G_EXC_ERROR THEN
3142 IF (cr_bsc_dim_obj%ISOPEN) THEN
3143 CLOSE cr_bsc_dim_obj;
3144 END IF;
3145 IF (x_msg_data IS NULL) THEN
3146 FND_MSG_PUB.Count_And_Get
3147 ( p_encoded => FND_API.G_FALSE
3148 , p_count => x_msg_count
3149 , p_data => x_msg_data
3150 );
3151 END IF;
3152 x_return_status := FND_API.G_RET_STS_ERROR;
3153 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3154 IF (cr_bsc_dim_obj%ISOPEN) THEN
3155 CLOSE cr_bsc_dim_obj;
3156 END IF;
3157 IF (x_msg_data IS NULL) THEN
3158 FND_MSG_PUB.Count_And_Get
3159 ( p_encoded => FND_API.G_FALSE
3160 , p_count => x_msg_count
3161 , p_data => x_msg_data
3162 );
3163 END IF;
3164 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3165 WHEN NO_DATA_FOUND THEN
3166 IF (cr_bsc_dim_obj%ISOPEN) THEN
3167 CLOSE cr_bsc_dim_obj;
3168 END IF;
3169 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3170 IF (x_msg_data IS NOT NULL) THEN
3171 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
3172 ELSE
3173 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
3174 END IF;
3175 WHEN OTHERS THEN
3176 IF (cr_bsc_dim_obj%ISOPEN) THEN
3177 CLOSE cr_bsc_dim_obj;
3178 END IF;
3179 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3180 IF (x_msg_data IS NOT NULL) THEN
3181 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
3182 ELSE
3183 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
3184 END IF;
3185 END Update_Dim_Object;
3186
3187 /*********************************************************************************
3188 DELETE DIMENSION
3189 *********************************************************************************/
3190 /*
3191 This procedure allows user to delete a dimension. Respective records will be
3192 deleted from the following metadata: -
3193 1 BIS_LEVELS.
3194 2. BIS_LEVELS_TL
3195 3. BSC_SYS_DIM_LEVELS_B
3196 4. BSC_SYS_DIM_LEVELS_TL
3197
3198 Validations:
3199 1. dimension must not be associated with any group.
3200 */
3201 PROCEDURE Delete_Dim_Object
3202 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
3203 , p_dim_obj_short_name IN VARCHAR2
3204 , x_return_status OUT NOCOPY VARCHAR2
3205 , x_msg_count OUT NOCOPY NUMBER
3206 , x_msg_data OUT NOCOPY VARCHAR2
3207 ) IS
3208 l_bsc_dimension_rec BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
3209 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
3210 l_bis_dim_level_rec BIS_DIMENSION_LEVEL_PUB.Dimension_Level_Rec_Type;
3211 l_error_tbl BIS_UTILITIES_PUB.Error_Tbl_Type;
3212 l_count NUMBER;
3213 l_dim_short_name VARCHAR2(30);
3214 l_regions VARCHAR2(2000);
3215 l_is_denorm_deleted VARCHAR(1);
3216 l_delete_count NUMBER := 0;
3217 l_Sql VARCHAR2(8000);
3218
3219 CURSOR c_bsc_levels IS
3220 SELECT dim_level_id
3221 , source
3222 , name
3223 FROM BSC_SYS_DIM_LEVELS_VL
3224 WHERE short_name = p_dim_obj_short_name;
3225 BEGIN
3226 FND_MSG_PUB.Initialize;
3227 x_return_status := FND_API.G_RET_STS_SUCCESS;
3228 SAVEPOINT DeleteBSCDimObjectPMD;
3229
3230 IF (p_dim_obj_short_name IS NULL) THEN
3231 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3232 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
3233 FND_MSG_PUB.ADD;
3234 RAISE FND_API.G_EXC_ERROR;
3235 END IF;
3236 -- CALL PMF'S API
3237 --check if short_name exists in the PMF system
3238 SELECT COUNT(1) INTO l_count FROM BIS_LEVELS
3239 WHERE short_name = p_dim_obj_short_name;
3240 IF (l_count <> 0) THEN
3241 l_bis_dim_level_rec.Dimension_Level_Short_Name := p_dim_obj_short_name;
3242 SELECT COUNT(1) INTO l_Count
3243 FROM BIS_LEVELS
3244 WHERE Master_Level = l_bis_dim_level_rec.Dimension_Level_Short_Name;
3245 IF (l_Count <> 0) THEN
3246 FND_MESSAGE.SET_NAME('BIS','BIS_MASTER_DELETE_DIM_OBJ');
3247 FND_MSG_PUB.ADD;
3248 RAISE FND_API.G_EXC_ERROR;
3249 END IF;
3250 BIS_DIMENSION_LEVEL_PUB.Delete_Dimension_Level
3251 ( p_commit => FND_API.G_FALSE
3252 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
3253 , p_Dimension_Level_Rec => l_bis_dim_level_rec
3254 , x_return_status => x_return_status
3255 , x_error_Tbl => l_error_tbl
3256 );
3257 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3258 IF (l_error_tbl.COUNT > 0) THEN
3259 x_msg_data := l_error_tbl(l_error_tbl.COUNT).Error_Description;
3260 IF(INSTR(x_msg_data, ' ') = 0 ) THEN
3261 FND_MESSAGE.SET_NAME('BIS',x_msg_data);
3262 FND_MSG_PUB.ADD;
3263 x_msg_data := NULL;
3264 END IF;
3265 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3266 END IF;
3267 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3268 END IF;
3269 l_delete_count := l_delete_count + 1;
3270 END IF;
3271
3272 --check if short_name exists in the BSC system
3273 IF (c_bsc_levels%ISOPEN) THEN
3274 CLOSE c_bsc_levels;
3275 END IF;
3276 OPEN c_bsc_levels;
3277 FETCH c_bsc_levels
3278 INTO l_bsc_dim_obj_rec.Bsc_Level_Id
3279 , l_bsc_dim_obj_rec.Bsc_Source
3280 , l_bsc_dim_obj_rec.Bsc_Dim_Level_Long_Name;
3281 CLOSE c_bsc_levels;
3282 IF (l_bsc_dim_obj_rec.Bsc_Level_Id IS NOT NULL) THEN
3283 -- Granular Locking START
3284 BSC_BIS_LOCKS_PUB.Lock_Dim_Level
3285 ( p_dim_level_id => l_bsc_dim_obj_rec.Bsc_Level_Id
3286 ,p_time_stamp => NULL -- Granular Locking
3287 ,x_return_status => x_return_status
3288 ,x_msg_count => x_msg_count
3289 ,x_msg_data => x_msg_data
3290 ) ;
3291 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3292 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3293 END IF;
3294 -- Granular Locking END
3295 BSC_BIS_DIM_OBJ_PUB.validateBscDimensionToDelete
3296 ( p_dim_obj_short_name => p_dim_obj_short_name
3297 , x_return_status => x_return_status
3298 , x_msg_count => x_msg_count
3299 , x_msg_data => x_msg_data
3300 );
3301 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3302 RAISE FND_API.G_EXC_ERROR;
3303 END IF;
3304 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
3305 BSC_DESIGNER_PVT.Dim_Object_Change(l_bsc_dim_obj_rec.Bsc_Level_Id);
3306 END IF;
3307 --remove association with unassigned Dimension if exists
3308 l_bsc_dimension_rec.Bsc_Dim_Level_Group_Short_Name := BSC_BIS_DIMENSION_PUB.Unassigned_Dim;
3309 l_bsc_dimension_rec.Bsc_Level_Id := l_bsc_dim_obj_rec.Bsc_Level_Id;
3310 BSC_DIMENSION_GROUPS_PUB.Delete_Dim_Levels_In_Group
3311 ( p_commit => FND_API.G_FALSE
3312 , p_Dim_Grp_Rec => l_bsc_dimension_rec
3313 , x_return_status => x_return_status
3314 , x_msg_count => x_msg_count
3315 , x_msg_data => x_msg_data
3316 );
3317 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3318 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3319 END IF;
3320 --CALL BSC API
3321 BSC_DIMENSION_LEVELS_PUB.Delete_Dim_Level
3322 ( p_commit => FND_API.G_FALSE
3323 , p_Dim_Level_Rec => l_bsc_dim_obj_rec
3324 , x_return_status => x_return_status
3325 , x_msg_count => x_msg_count
3326 , x_msg_data => x_msg_data
3327 );
3328 IF ((x_return_status = FND_API.G_RET_STS_ERROR) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)) THEN
3329 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3330 END IF;
3331 /*************************************************************
3332 List Button validation.For a list button the condition is that
3333 all the dimesnion sets within the tab (irrespective of whether they are
3334 in the same KPI or different KPIs) the dimesnion objects should be the same
3335 So while deleting the dimension object validate if it is being used in
3336 the tabs.Validate_List_Button takes care of this.
3337 /************************************************************/
3338 IF (l_bsc_dim_obj_rec.Bsc_Source = 'BSC') THEN
3339 BSC_COMMON_DIM_LEVELS_PUB.Validate_List_Button
3340 (
3341 p_Kpi_Id => NULL
3342 , p_Dim_Level_Id => l_bsc_dim_obj_rec.Bsc_Level_Id
3343 , x_return_status => x_return_status
3344 , x_msg_count => x_msg_count
3345 , x_msg_data => x_msg_data
3346 );
3347
3348 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3349 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3350 END IF;
3351 END IF;
3352 l_delete_count := l_delete_count + 1;
3353 /****************************************************
3354 BSC_PMA_APIS_PUB.sync_dimension_table Should be called only when
3355 BSC53 is installed.So first we are checking if BSC53 is installed on the
3356 environment.Since this file is the part of MD/DD ARU we have made the call to
3357 the PL/SQL procedure "BSC_PMA_APIS_PUB.sync_dimension_table" dynamic so that
3358 the package gets complied on the pure BIS409 enviornments.
3359 /****************************************************/
3360 IF(BIS_UTILITIES_PUB.Enable_Generated_Source_Report = FND_API.G_TRUE) THEN
3361 l_is_denorm_deleted := FND_API.G_TRUE;
3362 BEGIN
3363 l_Sql := 'BEGIN IF(BSC_PMA_APIS_PUB.sync_dimension_table (:2,:3,:4)) THEN :1 :=FND_API.G_TRUE; ELSE :1:=FND_API.G_FALSE; END IF;END;';
3364 EXECUTE IMMEDIATE l_Sql USING IN p_dim_obj_short_name,IN BIS_UTIL.G_DROP_TABLE,OUT x_msg_data,OUT l_is_denorm_deleted;
3365 EXCEPTION
3366 WHEN OTHERS THEN
3367 NULL;
3368 END;
3369 IF(l_is_denorm_deleted=FND_API.G_FALSE) THEN
3370 RAISE FND_API.G_EXC_ERROR;
3371 END IF;
3372 END IF;
3373 END IF;
3374 IF (l_delete_count = 0) THEN
3375 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
3376 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIMENSION_OBJECT'), TRUE);
3377 FND_MSG_PUB.ADD;
3378 RAISE FND_API.G_EXC_ERROR;
3379 END IF;
3380 IF (p_commit = FND_API.G_TRUE) THEN
3381 COMMIT;
3382 END IF;
3383 x_return_status := FND_API.G_RET_STS_SUCCESS;
3384
3385 EXCEPTION
3386 WHEN FND_API.G_EXC_ERROR THEN
3387 IF (c_bsc_levels%ISOPEN) THEN
3388 CLOSE c_bsc_levels;
3389 END IF;
3390 ROLLBACK TO DeleteBSCDimObjectPMD;
3391 IF (x_msg_data IS NULL) THEN
3392 FND_MSG_PUB.Count_And_Get
3393 ( p_encoded => FND_API.G_FALSE
3394 , p_count => x_msg_count
3395 , p_data => x_msg_data
3396 );
3397 END IF;
3398 x_return_status := FND_API.G_RET_STS_ERROR;
3399 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3400 IF (c_bsc_levels%ISOPEN) THEN
3401 CLOSE c_bsc_levels;
3402 END IF;
3403 ROLLBACK TO DeleteBSCDimObjectPMD;
3404 IF (x_msg_data IS NULL) THEN
3405 FND_MSG_PUB.Count_And_Get
3406 ( p_encoded => FND_API.G_FALSE
3407 , p_count => x_msg_count
3408 , p_data => x_msg_data
3409 );
3410 END IF;
3411 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3412 WHEN NO_DATA_FOUND THEN
3413 IF (c_bsc_levels%ISOPEN) THEN
3414 CLOSE c_bsc_levels;
3415 END IF;
3416 ROLLBACK TO DeleteBSCDimObjectPMD;
3417 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3418 IF (x_msg_data IS NOT NULL) THEN
3419 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object ';
3420 ELSE
3421 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object ';
3422 END IF;
3423 WHEN OTHERS THEN
3424 IF (c_bsc_levels%ISOPEN) THEN
3425 CLOSE c_bsc_levels;
3426 END IF;
3427 ROLLBACK TO DeleteBSCDimObjectPMD;
3428 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3429 IF (x_msg_data IS NOT NULL) THEN
3430 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object ';
3431 ELSE
3432 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object ';
3433 END IF;
3434 END Delete_Dim_Object;
3435
3436 /*********************************************************************************
3437 FUNCTION validateBscDimensionToDelete
3438 *********************************************************************************/
3439 PROCEDURE validateBscDimensionToDelete
3440 ( p_commit IN VARCHAR2 := FND_API.G_TRUE
3441 , p_dim_obj_short_name IN VARCHAR2
3442 , x_return_status OUT NOCOPY VARCHAR2
3443 , x_msg_count OUT NOCOPY NUMBER
3444 , x_msg_data OUT NOCOPY VARCHAR2
3445 ) IS
3446 l_bsc_dim_id BSC_SYS_DIM_LEVELS_B.dim_level_id%TYPE;
3447 l_name BSC_SYS_DIM_LEVELS_TL.Name%TYPE;
3448 l_count NUMBER;
3449 l_edw_flag BSC_SYS_DIM_LEVELS_B.Edw_Flag%TYPE;
3450
3451 l_dim_Group_id BSC_SYS_DIM_GROUPS_TL.Dim_Group_Id%TYPE;
3452 BEGIN
3453 FND_MSG_PUB.Initialize;
3454 x_return_status := FND_API.G_RET_STS_SUCCESS;
3455
3456 l_dim_Group_id := BSC_BIS_DIMENSION_PUB.Get_Bsc_Dimension_ID(BSC_BIS_DIMENSION_PUB.Unassigned_Dim);
3457 IF (p_dim_obj_short_name IS NULL) THEN
3458 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3459 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
3460 FND_MSG_PUB.ADD;
3461 RAISE FND_API.G_EXC_ERROR;
3462 END IF;
3463
3464 SELECT dim_level_id
3465 , name
3466 INTO l_bsc_dim_id
3467 , l_name
3468 FROM BSC_SYS_DIM_LEVELS_VL
3469 WHERE short_name = p_dim_obj_short_name;
3470
3471
3472 -- CAN'T DELETE DIMENSION, validataion one.
3473 /*SELECT Edw_Flag INTO l_edw_flag
3474 FROM BSC_SYS_DIM_LEVELS_B
3475 WHERE dim_level_id = l_bsc_dim_id;
3476 IF (l_edw_flag <> 1) THEN
3477 --this message is hard coded because it needs more investigation if it is really required
3478 x_msg_data := 'The dimension object can''t be deleted, since BSC_SYS_DIM_LEVELS_B.Edw_Flag <> 1';
3479 RAISE FND_API.G_EXC_ERROR;
3480 END IF;*/
3481
3482 --check if the dimension is associated with any group, if so raise an exception
3483 SELECT COUNT(1) INTO l_count
3484 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
3485 WHERE Dim_Level_Id = l_bsc_dim_id
3486 AND Dim_Group_Id <> l_dim_Group_id;
3487 IF (l_count > 0) THEN
3488 FND_MESSAGE.SET_NAME('BSC','BSC_NOT_DELETE_DIM_OBJ_GRPS');
3489 FND_MESSAGE.SET_TOKEN('SHORT_NAME', l_name);
3490 FND_MSG_PUB.ADD;
3491 RAISE FND_API.G_EXC_ERROR;
3492 END IF;
3493
3494 --check if the dimension is associated in relationships, if so raise an exception
3495 SELECT COUNT(1) INTO l_count
3496 FROM BSC_SYS_DIM_LEVEL_RELS
3497 WHERE dim_level_id = l_bsc_dim_id
3498 OR parent_dim_level_id = l_bsc_dim_id;
3499 IF (l_count > 0) THEN
3500 FND_MESSAGE.SET_NAME('BSC','BSC_NOT_DELETE_DIM_OBJ_RELS');
3501 FND_MESSAGE.SET_TOKEN('SHORT_NAME', l_name);
3502 FND_MSG_PUB.ADD;
3503 RAISE FND_API.G_EXC_ERROR;
3504 END IF;
3505 x_return_status := FND_API.G_RET_STS_SUCCESS;
3506
3507 EXCEPTION
3508 WHEN FND_API.G_EXC_ERROR THEN
3509 IF (x_msg_data IS NULL) THEN
3510 FND_MSG_PUB.Count_And_Get
3511 ( p_encoded => FND_API.G_FALSE
3512 , p_count => x_msg_count
3513 , p_data => x_msg_data
3514 );
3515 END IF;
3516 x_return_status := FND_API.G_RET_STS_ERROR;
3517 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3518 IF (x_msg_data IS NULL) THEN
3519 FND_MSG_PUB.Count_And_Get
3520 ( p_encoded => FND_API.G_FALSE
3521 , p_count => x_msg_count
3522 , p_data => x_msg_data
3523 );
3524 END IF;
3525 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3526 WHEN NO_DATA_FOUND THEN
3527 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3528 IF (x_msg_data IS NOT NULL) THEN
3529 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.validateBscDimensionToDelete ';
3530 ELSE
3531 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.validateBscDimensionToDelete ';
3532 END IF;
3533 WHEN OTHERS THEN
3534 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3535 IF (x_msg_data IS NOT NULL) THEN
3536 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.validateBscDimensionToDelete ';
3537 ELSE
3538 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.validateBscDimensionToDelete ';
3539 END IF;
3540 END validateBscDimensionToDelete;
3541 /*********************************************************************************
3542 FUNCTION GET DIMENSIONS
3543 *********************************************************************************/
3544 FUNCTION get_Dimensions
3545 (
3546 p_group_id IN NUMBER
3547 )RETURN VARCHAR2
3548 IS
3549 l_dimension_names VARCHAR2(32000);
3550 l_name BSC_SYS_DIM_LEVELS_VL.Name%TYPE;
3551
3552 CURSOR c_dimesnion_names IS
3553 SELECT V.NAME
3554 FROM BSC_SYS_DIM_LEVELS_VL V,
3555 BSC_SYS_DIM_LEVELS_BY_GROUP B
3556 WHERE V.DIM_LEVEL_ID = B.DIM_LEVEL_ID
3557 AND B.DIM_GROUP_ID = p_group_id
3558 ORDER BY B.DIM_LEVEL_INDEX;
3559 BEGIN
3560
3561 FOR cd IN c_dimesnion_names LOOP
3562 l_name := cd.name;
3563 IF (l_name IS NOT NULL)THEN
3564 IF (l_dimension_names IS NULL )THEN
3565 l_dimension_names :=l_name;
3566 ELSE
3567 l_dimension_names :=l_dimension_names ||', '|| l_name;
3568 END IF;
3569 END IF;
3570 END LOOP;
3571
3572 RETURN l_dimension_names;
3573 EXCEPTION
3574 WHEN OTHERS THEN
3575 RETURN NULL;
3576 END get_Dimensions;
3577
3578 FUNCTION get_Dimension_Objects
3579 (
3580 p_dim_short_name IN VARCHAR2
3581 ) RETURN VARCHAR2
3582 IS
3583 l_dimObjects_names VARCHAR2(32000);
3584 l_name BSC_SYS_DIM_GROUPS_TL.NAME%TYPE;
3585
3586 CURSOR c_dimension_obj_name IS
3587 SELECT A.name
3588 FROM BSC_SYS_DIM_LEVELS_VL A
3589 , BSC_SYS_DIM_LEVELS_BY_GROUP B
3590 WHERE A.dim_level_id = B.dim_level_id
3591 AND B.dim_group_id = (SELECT dim_group_id
3592 FROM BSC_SYS_DIM_GROUPS_VL
3593 WHERE Short_Name = p_dim_short_name);
3594 BEGIN
3595 FOR cd IN c_dimension_obj_name LOOP
3596 l_name := cd.name;
3597 IF (l_name IS NOT NULL) THEN
3598 IF (l_dimObjects_names IS NULL) THEN
3599 l_dimObjects_names := l_name;
3600 ELSE
3601 l_dimObjects_names := l_dimObjects_names ||', '|| l_name;
3602 END IF;
3603 END IF;
3604 END LOOP;
3605 RETURN l_dimObjects_names;
3606 EXCEPTION
3607 WHEN OTHERS THEN
3608 RETURN NULL;
3609 END get_Dimension_Objects;
3610 /********************************************************************************/
3611 FUNCTION Is_More
3612 ( p_dim_short_names IN OUT NOCOPY VARCHAR2
3613 , p_dim_name OUT NOCOPY VARCHAR2
3614 ) RETURN BOOLEAN
3615 IS
3616 l_pos_ids NUMBER;
3617 l_pos_rel_types NUMBER;
3618 l_pos_rel_columns NUMBER;
3619 BEGIN
3620 IF (p_dim_short_names IS NOT NULL) THEN
3621 l_pos_ids := INSTR(p_dim_short_names, ',');
3622 IF (l_pos_ids > 0) THEN
3623 p_dim_name := TRIM(SUBSTR(p_dim_short_names, 1, l_pos_ids - 1));
3624 p_dim_short_names := TRIM(SUBSTR(p_dim_short_names, l_pos_ids + 1));
3625 ELSE
3626 p_dim_name := TRIM(p_dim_short_names);
3627 p_dim_short_names := NULL;
3628 END IF;
3629 RETURN TRUE;
3630 ELSE
3631 RETURN FALSE;
3632 END IF;
3633 END Is_More;
3634 /*******************************************************************************
3635 FUNCTION TO INITIALIZE BSC RECORDS
3636 ********************************************************************************/
3637 FUNCTION Initialize_Bsc_Recs
3638 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
3639 , x_return_status OUT NOCOPY VARCHAR2
3640 , x_msg_count OUT NOCOPY NUMBER
3641 , x_msg_data OUT NOCOPY VARCHAR2
3642 )
3643 RETURN BOOLEAN IS
3644 l_flag BOOLEAN := TRUE;
3645 l_alias VARCHAR(4);
3646 l_temp_var VARCHAR(50);
3647 l_count NUMBER := 0;
3648 l_Bsc_Level_Name VARCHAR(33);
3649 BEGIN
3650 FND_MSG_PUB.Initialize;
3651 x_return_status := FND_API.G_RET_STS_SUCCESS;
3652
3653 IF ((p_Dim_Level_Rec.Bsc_Source IS NULL) OR (p_Dim_Level_Rec.Bsc_Source <> 'BSC')) THEN
3654 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
3655 FND_MSG_PUB.ADD;
3656 RAISE FND_API.G_EXC_ERROR;
3657 END IF;
3658 IF (p_Dim_Level_Rec.Bsc_Level_Id IS NULL) THEN
3659 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3660 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_ID'), TRUE);
3661 FND_MSG_PUB.ADD;
3662 RAISE FND_API.G_EXC_ERROR;
3663 END IF;
3664 IF (p_Dim_Level_Rec.Bsc_Level_Name IS NULL) THEN
3665 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3666 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
3667 FND_MSG_PUB.ADD;
3668 RAISE FND_API.G_EXC_ERROR;
3669 END IF;
3670 --Initialize 'l_Dim_Level_Rec' record with the default values
3671 IF (p_Dim_Level_Rec.Bsc_Level_User_Key_Size IS NULL) THEN
3672 p_Dim_Level_Rec.Bsc_Level_User_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Default_Size; --default size
3673 END IF;
3674 IF (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size IS NULL) THEN
3675 p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Default_Size; --default size
3676 END IF;
3677 IF (p_Dim_Level_Rec.Bsc_Level_Abbreviation IS NULL) THEN
3678 p_Dim_Level_Rec.Bsc_Level_Abbreviation := SUBSTR(REPLACE(p_Dim_Level_Rec.Bsc_Level_Short_Name, ' ', ''), 1, 8);
3679 END IF;
3680 p_Dim_Level_Rec.Bsc_Level_Abbreviation := UPPER(p_Dim_Level_Rec.Bsc_Level_Abbreviation);
3681 IF (NOT is_Valid_AlphaNum(p_Dim_Level_Rec.Bsc_Level_Abbreviation)) THEN
3682 FND_MESSAGE.SET_NAME('BSC','BSC_ALPHA_NUM_REQUIRED');
3683 FND_MESSAGE.SET_TOKEN('VALUE', p_Dim_Level_Rec.Bsc_Level_Abbreviation);
3684 FND_MESSAGE.SET_TOKEN('NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'ABBREVIATION'), TRUE);
3685 FND_MSG_PUB.ADD;
3686 RAISE FND_API.G_EXC_ERROR;
3687 END IF;
3688 IF(INSTR(p_Dim_Level_Rec.Bsc_Level_Name, 'BSC_D_') = 1) THEN
3689 p_Dim_Level_Rec.Bsc_Level_Name := SUBSTR(p_Dim_Level_Rec.Bsc_Level_Name, 7, LENGTH(p_Dim_Level_Rec.Bsc_Level_Name));
3690 END IF;
3691 l_Bsc_Level_Name := 'BSC_D_'||UPPER(p_Dim_Level_Rec.Bsc_Level_Name);
3692 IF(LENGTHB(l_Bsc_Level_Name) > 27) THEN
3693
3694 FND_MESSAGE.SET_NAME('BSC','BSC_DIM_OBJ_TABLE_NAME');
3695 FND_MESSAGE.SET_TOKEN('TAB_NAME', l_Bsc_Level_Name);
3696 FND_MSG_PUB.ADD;
3697 RAISE FND_API.G_EXC_ERROR;
3698 END IF;
3699 IF (NOT is_Valid_Identifier(l_Bsc_Level_Name)) THEN
3700 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
3701 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
3702 FND_MESSAGE.SET_TOKEN('SQL_VALUE',l_Bsc_Level_Name);
3703 FND_MSG_PUB.ADD;
3704 RAISE FND_API.G_EXC_ERROR;
3705 END IF;
3706 SELECT COUNT(1) INTO l_count
3707 FROM BSC_SYS_DIM_LEVELS_B
3708 WHERE DIM_LEVEL_ID <> p_Dim_Level_Rec.Bsc_Level_Id
3709 AND LEVEL_TABLE_NAME = l_Bsc_Level_Name;
3710 IF (l_count <> 0) THEN
3711 FND_MESSAGE.SET_NAME('BSC','BSC_D_TABLE_NAME_EXIST');
3712 FND_MESSAGE.SET_TOKEN('TABLE_NAME', l_Bsc_Level_Name);
3713 FND_MSG_PUB.ADD;
3714 RAISE FND_API.G_EXC_ERROR;
3715 END IF;
3716 p_Dim_Level_Rec.Bsc_Level_Name :=l_Bsc_Level_Name;
3717
3718 p_Dim_Level_Rec.Bsc_Level_View_Name := 'BSC_D_'||p_Dim_Level_Rec.Bsc_Level_Id||'_VL';
3719
3720 p_Dim_Level_Rec.Bsc_Pk_Col := BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col
3721 ( p_Dim_Level_Rec => p_Dim_Level_Rec
3722 , x_return_status => x_return_status
3723 , x_msg_count => x_msg_count
3724 , x_msg_data => x_msg_data
3725 );
3726 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3727 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3728 END IF;
3729
3730 x_return_status := FND_API.G_RET_STS_SUCCESS;
3731
3732 RETURN TRUE;
3733 EXCEPTION
3734 WHEN FND_API.G_EXC_ERROR THEN
3735 IF (x_msg_data IS NULL) THEN
3736 FND_MSG_PUB.Count_And_Get
3737 ( p_encoded => FND_API.G_FALSE
3738 , p_count => x_msg_count
3739 , p_data => x_msg_data
3740 );
3741 END IF;
3742 x_return_status := FND_API.G_RET_STS_ERROR;
3743 RETURN FALSE;
3744 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3745 IF (x_msg_data IS NULL) THEN
3746 FND_MSG_PUB.Count_And_Get
3747 ( p_encoded => FND_API.G_FALSE
3748 , p_count => x_msg_count
3749 , p_data => x_msg_data
3750 );
3751 END IF;
3752 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3753 RETURN FALSE;
3754 WHEN NO_DATA_FOUND THEN
3755 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3756 IF (x_msg_data IS NOT NULL) THEN
3757 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs ';
3758 ELSE
3759 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs ';
3760 END IF;
3761 RETURN FALSE;
3762 WHEN OTHERS THEN
3763 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3764 IF (x_msg_data IS NOT NULL) THEN
3765 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs ';
3766 ELSE
3767 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Initialize_Bsc_Recs ';
3768 END IF;
3769 RETURN FALSE;
3770 END Initialize_Bsc_Recs;
3771
3772 /*******************************************************************************
3773 FUNCTION TO INTIALIZE PMF DIMENSION RECORDS
3774 ********************************************************************************/
3775 FUNCTION Initialize_Pmf_Recs
3776 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
3777 , x_return_status OUT NOCOPY VARCHAR2
3778 , x_msg_count OUT NOCOPY NUMBER
3779 , x_msg_data OUT NOCOPY VARCHAR2
3780 )
3781 RETURN BOOLEAN IS
3782 l_count NUMBER;
3783 l_sql VARCHAR2(32000);
3784 l_dimshortname VARCHAR2(32000);--the size is copied from PMF code
3785 l_prefix VARCHAR2(32000) := '%PK_KEY%';
3786 l_flag BOOLEAN := TRUE;
3787 l_Recursive VARCHAR2(1);
3788
3789 --meastmon Fix bug#3337923 Performance issue: remove UPPER from left part to allow use of indexes
3790 CURSOR allTabCol1 IS
3791 SELECT Column_Name
3792 FROM ALL_TAB_COLUMNS
3793 WHERE Table_Name = UPPER(p_Dim_Level_Rec.Bsc_Level_Name)
3794 AND Column_Name LIKE l_prefix
3795 AND Owner = BSC_APPS.get_user_schema('APPS');
3796
3797 --meastmon Fix bug#3337923 Performance issue: remove UPPER from left part to allow use of indexes
3798 CURSOR allTabCol2 IS
3799 SELECT Column_Name
3800 FROM ALL_TAB_COLUMNS
3801 WHERE Table_Name = UPPER(p_Dim_Level_Rec.Bsc_Level_Name)
3802 AND (Column_Name LIKE '%DESCRIPTION%'
3803 OR Column_Name LIKE '%NAME%'
3804 OR Column_Name LIKE '%PK')
3805 AND ROWNUM < 2
3806 AND Owner = BSC_APPS.get_user_schema('APPS');
3807
3808 BEGIN
3809 FND_MSG_PUB.Initialize;
3810 x_return_status := FND_API.G_RET_STS_SUCCESS;
3811 -- Check if underlying View or table exists.
3812
3813 --Default values if view does not exists
3814 p_Dim_Level_Rec.Bsc_Level_Name_Column := 'VALUE';
3815 p_Dim_Level_Rec.Bsc_Level_Pk_Key := 'ID';
3816 --BSC_SYS_DIM_LEVELS_B.Level_Pk_Col should be short_name to keep it unique
3817 --p_Dim_Level_Rec.Bsc_Pk_Col := p_Dim_Level_Rec.Bsc_Level_Short_Name;
3818
3819 --Comented for Bug#4758995
3820 --p_Dim_Level_Rec.Bsc_Pk_Col := REPLACE(p_Dim_Level_Rec.Bsc_Level_Short_Name ,' ', '_');
3821
3822 IF ((p_Dim_Level_Rec.Bsc_Source IS NULL) OR (p_Dim_Level_Rec.Bsc_Source <> 'PMF')) THEN
3823 RAISE FND_API.G_EXC_ERROR;
3824 END IF;
3825 IF (p_Dim_Level_Rec.Bsc_Level_Short_Name IS NULL) THEN
3826 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
3827 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
3828 FND_MSG_PUB.ADD;
3829 RAISE FND_API.G_EXC_ERROR;
3830 END IF;
3831 IF ((p_Dim_Level_Rec.Source IS NULL) OR ((p_Dim_Level_Rec.Source <> 'OLTP') AND (p_Dim_Level_Rec.Source <> 'EDW'))) THEN
3832 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SOURCE_TYPE');
3833 FND_MSG_PUB.ADD;
3834 RAISE FND_API.G_EXC_ERROR;
3835 END IF;
3836 --Initialize 'l_Dim_Level_Rec' record with the default values
3837 IF (p_Dim_Level_Rec.Bsc_Level_User_Key_Size IS NULL) THEN
3838 p_Dim_Level_Rec.Bsc_Level_User_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Code_Default_Size; --default size
3839 END IF;
3840 IF (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size IS NULL) THEN
3841 p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size := BSC_BIS_DIM_OBJ_PUB.Dim_Obj_Name_Default_Size; --default size
3842 END IF;
3843 IF (p_Dim_Level_Rec.Bsc_Level_Abbreviation IS NULL) THEN
3844 IF (p_Dim_Level_Rec.Bsc_Level_Short_Name IS NULL) THEN
3845 RAISE FND_API.G_EXC_ERROR;
3846 ELSE
3847 p_Dim_Level_Rec.Bsc_Level_Abbreviation := SUBSTR(REPLACE(p_Dim_Level_Rec.Bsc_Level_Short_Name, ' ', ''), 1, 8);
3848 END IF;
3849 END IF;
3850
3851 -- Added for Bug#4758995
3852 p_Dim_Level_Rec.Bsc_Pk_Col := BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col
3853 ( p_Dim_Level_Rec => p_Dim_Level_Rec
3854 , x_return_status => x_return_status
3855 , x_msg_count => x_msg_count
3856 , x_msg_data => x_msg_data
3857 );
3858 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3859 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3860 END IF;
3861
3862
3863 IF (p_Dim_Level_Rec.Source = 'OLTP') THEN
3864 IF ((p_Dim_Level_Rec.Bsc_Level_Name IS NOT NULL)) THEN
3865 -- Bug 3751932 -- AND (NOT BSC_UTILITY.is_Table_View_Exists(p_Dim_Level_Rec.Bsc_Level_Name))) THEN
3866 p_Dim_Level_Rec.Bsc_Level_Name_Column := 'VALUE';
3867 p_Dim_Level_Rec.Bsc_Level_Pk_Key := 'ID';
3868 ELSE
3869 l_flag := FALSE;
3870 END IF;
3871 ELSE -- IF EDW THEN
3872 IF (BSC_UTILITY.is_Table_View_Exists(p_Dim_Level_Rec.Bsc_Level_Name)) THEN
3873 p_Dim_Level_Rec.Bsc_Level_Name_Column := 'VALUE';
3874 p_Dim_Level_Rec.Bsc_Level_Pk_Key := 'ID';
3875 ELSIF (NOT BSC_UTILITY.is_Table_View_Exists(p_Dim_Level_Rec.Bsc_Level_Short_Name||'_LTC')) THEN
3876 IF (NOT BSC_UTILITY.is_Table_View_Exists(p_Dim_Level_Rec.Bsc_Level_Short_Name)) THEN
3877 l_prefix := '%PK_KEY%';
3878 ELSE
3879 p_Dim_Level_Rec.Bsc_Level_Name := p_Dim_Level_Rec.Bsc_Level_Short_Name;
3880 IF (allTabCol1%ISOPEN) THEN
3881 CLOSE allTabCol1;
3882 END IF;
3883 OPEN allTabCol1;
3884 FETCH allTabCol1 INTO p_Dim_Level_Rec.Bsc_Level_Pk_Key;
3885 CLOSE allTabCol1;
3886 IF (allTabCol2%ISOPEN) THEN
3887 CLOSE allTabCol2;
3888 END IF;
3889 OPEN allTabCol2;
3890 FETCH allTabCol2 INTO p_Dim_Level_Rec.Bsc_Level_Name_Column;
3891 CLOSE allTabCol2;
3892 END IF;
3893 ELSE
3894 p_Dim_Level_Rec.Bsc_Level_Name := p_Dim_Level_Rec.Bsc_Level_Short_Name||'_LTC';
3895 IF (allTabCol1%ISOPEN) THEN
3896 CLOSE allTabCol1;
3897 END IF;
3898 OPEN allTabCol1;
3899 FETCH allTabCol1 INTO p_Dim_Level_Rec.Bsc_Level_Pk_Key;
3900 CLOSE allTabCol1;
3901
3902 IF (allTabCol2%ISOPEN) THEN
3903 CLOSE allTabCol2;
3904 END IF;
3905 OPEN allTabCol2;
3906 FETCH allTabCol2 INTO p_Dim_Level_Rec.Bsc_Level_Name_Column;
3907 CLOSE allTabCol2;
3908 END IF;
3909 END IF;
3910 --p_Dim_Level_Rec.Bsc_Level_View_Name will be NULL only in Create Case
3911 IF (p_Dim_Level_Rec.Bsc_Level_View_Name IS NULL) THEN
3912 p_Dim_Level_Rec.Bsc_Level_View_Name := bsc_utility.get_valid_bsc_master_tbl_name(p_Dim_Level_Rec.Bsc_Level_Short_Name);
3913 END IF;
3914 IF (NOT is_Valid_Identifier(p_Dim_Level_Rec.Bsc_Level_View_Name)) THEN
3915 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
3916 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'), TRUE);
3917 FND_MESSAGE.SET_TOKEN('SQL_VALUE', p_Dim_Level_Rec.Bsc_Level_View_Name);
3918 FND_MSG_PUB.ADD;
3919 RAISE FND_API.G_EXC_ERROR;
3920 END IF;
3921
3922 SELECT COUNT(1) INTO l_count
3923 FROM BSC_SYS_DIM_LEVELS_B
3924 WHERE DIM_LEVEL_ID <> p_Dim_Level_Rec.Bsc_Level_Id
3925 AND UPPER(LEVEL_TABLE_NAME) = p_Dim_Level_Rec.Bsc_Level_View_Name;
3926 IF (l_count <> 0) THEN
3927 FND_MESSAGE.SET_NAME('BSC','BSC_D_TABLE_NAME_EXIST');
3928 FND_MESSAGE.SET_TOKEN('TABLE_NAME', p_Dim_Level_Rec.Bsc_Level_View_Name);
3929 FND_MSG_PUB.ADD;
3930 RAISE FND_API.G_EXC_ERROR;
3931 END IF;
3932
3933 RETURN TRUE;
3934 EXCEPTION
3935 WHEN FND_API.G_EXC_ERROR THEN
3936 IF (allTabCol1%ISOPEN) THEN
3937 CLOSE allTabCol1;
3938 END IF;
3939 IF (allTabCol2%ISOPEN) THEN
3940 CLOSE allTabCol2;
3941 END IF;
3942 IF (x_msg_data IS NULL) THEN
3943 FND_MSG_PUB.Count_And_Get
3944 ( p_encoded => FND_API.G_FALSE
3945 , p_count => x_msg_count
3946 , p_data => x_msg_data
3947 );
3948 END IF;
3949 x_return_status := FND_API.G_RET_STS_ERROR;
3950 RETURN FALSE;
3951 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3952 IF (allTabCol1%ISOPEN) THEN
3953 CLOSE allTabCol1;
3954 END IF;
3955 IF (allTabCol2%ISOPEN) THEN
3956 CLOSE allTabCol2;
3957 END IF;
3958 IF (x_msg_data IS NULL) THEN
3959 FND_MSG_PUB.Count_And_Get
3960 ( p_encoded => FND_API.G_FALSE
3961 , p_count => x_msg_count
3962 , p_data => x_msg_data
3963 );
3964 END IF;
3965 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3966 RETURN FALSE;
3967 WHEN NO_DATA_FOUND THEN
3968 IF (allTabCol1%ISOPEN) THEN
3969 CLOSE allTabCol1;
3970 END IF;
3971 IF (allTabCol2%ISOPEN) THEN
3972 CLOSE allTabCol2;
3973 END IF;
3974 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3975 IF (x_msg_data IS NOT NULL) THEN
3976 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs ';
3977 ELSE
3978 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs ';
3979 END IF;
3980 RETURN FALSE;
3981 WHEN OTHERS THEN
3982 IF (allTabCol1%ISOPEN) THEN
3983 CLOSE allTabCol1;
3984 END IF;
3985 IF (allTabCol2%ISOPEN) THEN
3986 CLOSE allTabCol2;
3987 END IF;
3988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3989 IF (x_msg_data IS NOT NULL) THEN
3990 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs ';
3991 ELSE
3992 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs ';
3993 END IF;
3994 RETURN FALSE;
3995 END Initialize_Pmf_Recs;
3996
3997
3998 /* ---------------------------------------------------
3999 This procedure check if the End to End KPI is anabled
4000 in the database
4001 This return:
4002 'Y' End to End KPI enabled in this environment
4003 'N' End to End KPI disabled in this environment
4004 ----------------------------------------------------------*/
4005 FUNCTION Check_END_TO_END_KPI_FLAG RETURN VARCHAR2
4006 IS
4007 cursor c_End_to_ent_kpi_flag IS
4008 SELECT property_value
4009 FROM bsc_sys_init
4010 WHERE property_code = 'TEMP_END_KPI';
4011 l_END_TO_END_KPI_FLAG VARCHAR2(1);
4012
4013 BEGIN
4014 /* ********* Please READ before chage this code **********
4015 About Check_END_TO_END_KPI_FLAG
4016 This is a temporary validation to support environments with
4017 end to end kpis internaly. A separate ARU will create a variable in
4018 bsc_sys_init to anable this procedure to create the views to support
4019 end to end kpis. See login in Check_END_TO_END_KPI_FLAG.
4020
4021 When End to end kpis be released We must to removed this validation and
4022 comment the old view defenition and force bscup.sql changing its version
4023 to force the system to updated the pmf view.
4024 ********* Please READ: ********** */
4025
4026 l_END_TO_END_KPI_FLAG := 'N';
4027 for cd in c_End_to_ent_kpi_flag loop
4028 if cd.property_value = 'Y' then
4029 l_END_TO_END_KPI_FLAG := 'Y';
4030 end if;
4031 end loop;
4032 RETURN l_END_TO_END_KPI_FLAG;
4033
4034 EXCEPTION
4035 WHEN OTHERS THEN
4036 RETURN 'N';
4037
4038 END Check_END_TO_END_KPI_FLAG;
4039
4040 /*******************************************************************************
4041 FUNCTION TO CREATE PMF DIMENSION-OBJ VIEWS
4042 ********************************************************************************/
4043
4044 FUNCTION Create_Pmf_Views
4045 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4046 , x_return_status OUT NOCOPY VARCHAR2
4047 , x_msg_count OUT NOCOPY NUMBER
4048 , x_msg_data OUT NOCOPY VARCHAR2
4049 )
4050 RETURN BOOLEAN IS
4051 l_sql VARCHAR2(32000);
4052 l_count NUMBER;
4053 l_Rel_Select1 VARCHAR2(1000);
4054 l_Rel_Select2 VARCHAR2(1000);
4055 l_Rel_Where VARCHAR2(1000);
4056 l_Recursive VARCHAR2(1);
4057
4058 CURSOR c_par_dim_ids IS
4059 SELECT
4060 b.relation_col AS rel_col,
4061 (SELECT level_pk_col
4062 FROM bsc_sys_dim_levels_b
4063 WHERE dim_level_id =b.parent_dim_level_id) AS pk_col
4064 FROM
4065 bsc_sys_dim_level_rels_v b
4066 WHERE
4067 b.dim_level_id= p_Dim_Level_Rec.Bsc_Level_Id;
4068 BEGIN
4069 FND_MSG_PUB.Initialize;
4070 x_return_status := FND_API.G_RET_STS_SUCCESS;
4071 SAVEPOINT CreateBSCPmfViewPMD;
4072
4073 BSC_APPS.Init_Bsc_Apps;
4074 IF ((p_Dim_Level_Rec.Bsc_Source IS NULL) OR (p_Dim_Level_Rec.Bsc_Source <> 'PMF')) THEN
4075 RAISE FND_API.G_EXC_ERROR;
4076 END IF;
4077 IF (p_Dim_Level_Rec.Bsc_Level_Short_Name IS NULL) THEN
4078 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4079 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_SHORT_NAME'), TRUE);
4080 FND_MSG_PUB.ADD;
4081 RAISE FND_API.G_EXC_ERROR;
4082 END IF;
4083 IF (p_Dim_Level_Rec.Bsc_Level_Pk_Key IS NULL) THEN
4084 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4085 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_PK_COL'), TRUE);
4086 FND_MSG_PUB.ADD;
4087 RAISE FND_API.G_EXC_ERROR;
4088 END IF;
4089 IF (p_Dim_Level_Rec.Bsc_Level_Name_Column IS NULL) THEN
4090 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4091 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_COL'), TRUE);
4092 FND_MSG_PUB.ADD;
4093 RAISE FND_API.G_EXC_ERROR;
4094 END IF;
4095 IF (p_Dim_Level_Rec.Bsc_Level_View_Name IS NULL) THEN
4096 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4097 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'), TRUE);
4098 FND_MSG_PUB.ADD;
4099 RAISE FND_API.G_EXC_ERROR;
4100 END IF;
4101 IF ((p_Dim_Level_Rec.Bsc_Level_Name IS NOT NULL) AND (is_Valid_Identifier(p_Dim_Level_Rec.Bsc_Level_Name))) THEN
4102
4103 /********** Please READ before chage this code **********
4104 About Check_END_TO_END_KPI_FLAG
4105 This is a temporary validation to support environments with
4106 end to end kpis internaly. A separate ARU will create a variable in
4107 bsc_sys_init to anable this procedure to create the views to support
4108 end to end kpis. See login in Check_END_TO_END_KPI_FLAG.
4109 ********* Please READ: ********** */
4110
4111 -- Modified for Zero Code issue for MVs for Bug#3739872
4112 -- added if condition enableVarchar2Implementation for Bug#3836170
4113 IF (BSC_BIS_CUSTOM_KPI_UTIL_PUB.enableVarchar2Implementation = FND_API.G_TRUE) THEN
4114 -- This defenition is to support KPI END TO END
4115
4116 FOR par_rec IN c_par_dim_ids LOOP
4117 l_Rel_Select1 := l_Rel_Select1 || ',' || par_rec.pk_col || ',' || par_rec.pk_col || '_USR';
4118 l_Rel_Select2 := l_Rel_Select2 || ','
4119 || 'DECODE( ' || 'TO_CHAR(' || par_rec.rel_col || ') ' || ', '
4120 || 'TO_CHAR(' || BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_VIEW_ZCODE || ') ' || ', '
4121 || 'TO_CHAR(' || BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_VIEW_ZCODE_ALIAS || ') ' || ', '
4122 || 'TO_CHAR(' || par_rec.rel_col || ')) '
4123 || ', ' ||' TO_CHAR('|| par_rec.rel_col || ') ';
4124
4125 END LOOP;
4126
4127 l_sql := ' CREATE OR REPLACE VIEW ' || p_Dim_Level_Rec.Bsc_Level_View_Name ||
4128 ' (CODE, USER_CODE, NAME' || l_Rel_Select1 || ') ' ||
4129 ' AS SELECT DISTINCT ' ||
4130 ' DECODE( ' || 'TO_CHAR(' || p_Dim_Level_Rec.Bsc_Level_Pk_Key || ') ' || ', '
4131 || 'TO_CHAR(' || BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_VIEW_ZCODE || ') ' || ', '
4132 || 'TO_CHAR(' || BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_VIEW_ZCODE_ALIAS || ') ' || ', '
4133 || 'TO_CHAR(' || p_Dim_Level_Rec.Bsc_Level_Pk_Key || ')) ' || ', ' ||
4134 'TO_CHAR(' || p_Dim_Level_Rec.Bsc_Level_Pk_Key || ') ' || ', ' ||
4135 p_Dim_Level_Rec.Bsc_Level_Name_Column || l_Rel_Select2 ||
4136 ' FROM ' || p_Dim_Level_Rec.Bsc_Level_Name;
4137 ELSE
4138 --this is old view defenition, as in 11i.BSC.G
4139 l_sql := ' CREATE OR REPLACE VIEW ' || p_Dim_Level_Rec.Bsc_Level_View_Name || '(' ||
4140 ' CODE, USER_CODE, NAME) ' ||
4141 ' AS SELECT ROWNUM, ROWNUM, A.' || p_Dim_Level_Rec.Bsc_Level_Name_Column ||
4142 ' FROM (SELECT DISTINCT ' ||
4143 p_Dim_Level_Rec.Bsc_Level_Name_Column ||
4144 ' FROM ' || p_Dim_Level_Rec.Bsc_Level_Name ||
4145 ' WHERE UPPER(' || p_Dim_Level_Rec.Bsc_Level_Name_Column || ') NOT LIKE ''UNASSIGNED%''' ||
4146 ' AND UPPER(' || p_Dim_Level_Rec.Bsc_Level_Name_Column || ') NOT LIKE ''INVALID%''' ||
4147 ' AND ROWNUM < 26) A';
4148 END IF;
4149
4150 BEGIN
4151 --update Table_Type = 1, which is a indication of view exists
4152 UPDATE BSC_SYS_DIM_LEVELS_B
4153 SET Table_Type = 1
4154 WHERE Short_Name = p_Dim_Level_Rec.Bsc_Level_Short_Name;
4155
4156 BSC_APPS.Do_Ddl_AT(l_sql, ad_ddl.create_view, p_Dim_Level_Rec.Bsc_Level_View_Name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4157
4158 EXCEPTION
4159 --if exception, it means PMF View does not exists,
4160 --in this case update Table_Type = -1, which is a indication of view does not exists
4161 WHEN OTHERS THEN
4162 IF (NOT BSC_UTILITY.is_Table_View_Exists(p_Dim_Level_Rec.Bsc_Level_View_Name)) THEN
4163 UPDATE BSC_SYS_DIM_LEVELS_B
4164 SET Table_Type = -1
4165 WHERE Short_Name = p_Dim_Level_Rec.Bsc_Level_Short_Name;
4166 END IF;
4167 END;
4168 ELSE
4169 --update Table_Type = -1, which is a indication of view does not exists
4170 UPDATE BSC_SYS_DIM_LEVELS_B
4171 SET Table_Type = -1
4172 WHERE Short_Name = p_Dim_Level_Rec.Bsc_Level_Short_Name;
4173 END IF;
4174
4175 RETURN TRUE;
4176 EXCEPTION
4177 WHEN FND_API.G_EXC_ERROR THEN
4178 ROLLBACK TO CreateBSCPmfViewPMD;
4179 IF (x_msg_data IS NULL) THEN
4180 FND_MSG_PUB.Count_And_Get
4181 ( p_encoded => FND_API.G_FALSE
4182 , p_count => x_msg_count
4183 , p_data => x_msg_data
4184 );
4185 END IF;
4186 x_return_status := FND_API.G_RET_STS_ERROR;
4187 RETURN FALSE;
4188 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4189 ROLLBACK TO CreateBSCPmfViewPMD;
4190 IF (x_msg_data IS NULL) THEN
4191 FND_MSG_PUB.Count_And_Get
4192 ( p_encoded => FND_API.G_FALSE
4193 , p_count => x_msg_count
4194 , p_data => x_msg_data
4195 );
4196 END IF;
4197 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4198 RETURN FALSE;
4199 WHEN NO_DATA_FOUND THEN
4200 ROLLBACK TO CreateBSCPmfViewPMD;
4201 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4202 IF (x_msg_data IS NOT NULL) THEN
4203 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views ';
4204 ELSE
4205 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views ';
4206 END IF;
4207 RETURN FALSE;
4208 WHEN OTHERS THEN
4209 ROLLBACK TO CreateBSCPmfViewPMD;
4210 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4211 IF (x_msg_data IS NOT NULL) THEN
4212 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views ';
4213 ELSE
4214 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views ';
4215 END IF;
4216 RETURN FALSE;
4217 END Create_Pmf_Views;
4218
4219 /*******************************************************************************
4220 FUNCTION TO CREATE BSC DIMENSIONS
4221 ********************************************************************************/
4222 FUNCTION Create_Bsc_Master_Tabs
4223 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4224 , x_return_status OUT NOCOPY VARCHAR2
4225 , x_msg_count OUT NOCOPY NUMBER
4226 , x_msg_data OUT NOCOPY VARCHAR2
4227 )
4228 RETURN BOOLEAN IS
4229 l_sql_stmt VARCHAR2(32000);
4230
4231 l_master_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4232 l_input_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4233 l_view_name BSC_SYS_DIM_LEVELS_B.Level_View_Name%TYPE;
4234 l_col_names VARCHAR2(32000) := NULL;
4235 l_code_name VARCHAR2(25);
4236 l_count NUMBER := 0;
4237
4238 CURSOR c_view_cols IS
4239 SELECT column_name
4240 FROM ALL_TAB_COLUMNS
4241 WHERE TABLE_NAME = l_master_table
4242 AND column_name NOT IN ('LANGUAGE', 'SOURCE_LANG')
4243 AND column_name IS NOT NULL
4244 AND OWNER = BSC_APPS.get_user_schema;
4245
4246 l_rollback_ddl_stmts BSC_APPS.t_array_ddl_stmts;
4247 l_num_rollback_ddl_stmts NUMBER := 0;
4248
4249 BEGIN
4250 FND_MSG_PUB.Initialize;
4251 x_return_status := FND_API.G_RET_STS_SUCCESS;
4252 SAVEPOINT CreateBSCMasTabsPMD;
4253
4254 BSC_APPS.Init_Bsc_Apps;
4255 IF ((p_Dim_Level_Rec.Bsc_Source IS NULL) OR (p_Dim_Level_Rec.Bsc_Source <> 'BSC')) THEN
4256 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
4257 FND_MSG_PUB.ADD;
4258 RAISE FND_API.G_EXC_ERROR;
4259 END IF;
4260 IF (p_Dim_Level_Rec.Bsc_Level_Id IS NULL) THEN
4261 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4262 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_ID'), TRUE);
4263 FND_MSG_PUB.ADD;
4264 RAISE FND_API.G_EXC_ERROR;
4265 END IF;
4266 IF (p_Dim_Level_Rec.Bsc_Level_Name IS NULL) THEN
4267 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4268 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
4269 FND_MSG_PUB.ADD;
4270 RAISE FND_API.G_EXC_ERROR;
4271 END IF;
4272 IF (p_Dim_Level_Rec.Bsc_Level_View_Name IS NULL) THEN
4273 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4274 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'), TRUE);
4275 FND_MSG_PUB.ADD;
4276 RAISE FND_API.G_EXC_ERROR;
4277 END IF;
4278 IF (p_Dim_Level_Rec.Bsc_Level_Abbreviation IS NULL) THEN
4279 p_Dim_Level_Rec.Bsc_Level_Abbreviation := SUBSTR(REPLACE(p_Dim_Level_Rec.Bsc_Level_Short_Name, ' ', ''), 1, 8);
4280 END IF;
4281
4282 IF(INSTR(p_Dim_Level_Rec.Bsc_Level_Name, 'BSC_D_') = 1) THEN
4283 p_Dim_Level_Rec.Bsc_Level_Name := SUBSTR(p_Dim_Level_Rec.Bsc_Level_Name, 7, LENGTH(p_Dim_Level_Rec.Bsc_Level_Name));
4284 END IF;
4285 l_master_table := 'BSC_D_'||UPPER(p_Dim_Level_Rec.Bsc_Level_Name);
4286
4287 IF (NOT is_Valid_Identifier(l_master_table)) THEN
4288 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
4289 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
4290 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_master_table);
4291 FND_MSG_PUB.ADD;
4292 RAISE FND_API.G_EXC_ERROR;
4293 END IF;
4294
4295 l_input_table := 'BSC_DI_'||p_Dim_Level_Rec.Bsc_Level_Id;
4296
4297 l_view_name := 'BSC_D_'||p_Dim_Level_Rec.Bsc_Level_Id||'_VL';
4298
4299 IF (p_Dim_Level_Rec.Bsc_Pk_Col IS NULL) THEN
4300 p_Dim_Level_Rec.Bsc_Pk_Col := SUBSTR(p_Dim_Level_Rec.Bsc_Level_Name , 1, 22)||'_CODE';
4301 END IF;
4302
4303 p_Dim_Level_Rec.Bsc_Level_Name := l_master_table;
4304 p_Dim_Level_Rec.Bsc_Level_View_Name := l_view_name;
4305
4306 SELECT COUNT(1) INTO l_count
4307 FROM BSC_SYS_DIM_LEVELS_B
4308 WHERE DIM_LEVEL_ID <> p_Dim_Level_Rec.Bsc_Level_Id
4309 AND LEVEL_TABLE_NAME = l_master_table
4310 AND SOURCE <> 'PMF';
4311
4312 IF (l_count <> 0) THEN
4313 FND_MESSAGE.SET_NAME('BSC','BSC_D_TABLE_NAME_EXIST');
4314 FND_MESSAGE.SET_TOKEN('TABLE_NAME', p_Dim_Level_Rec.Bsc_Level_Name);
4315 FND_MSG_PUB.ADD;
4316 RAISE FND_API.G_EXC_ERROR;
4317 END IF;
4318 --Need to initiliaze in order to Do_DDL works fine
4319
4320 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4321 ' WHERE OBJECT_NAME = :1';
4322
4323 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_master_table;
4324
4325 IF (l_count <> 0) THEN
4326 l_sql_stmt := 'DROP TABLE '||l_master_table;
4327 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4328 END IF;
4329
4330 -- CHANGED THIS TO REARRANGE THE COLS MASTER TABLES
4331 -- BUG #3081595
4332 l_sql_stmt := ' CREATE TABLE '||l_master_table||
4333 ' ( CODE NUMBER NOT NULL,'||
4334 ' USER_CODE VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||'), ' ||
4335 ' NAME VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size||'), '||
4336 ' LANGUAGE VARCHAR2(4) NOT NULL,'||
4337 ' SOURCE_LANG VARCHAR2(4) NOT NULL )'||
4338 ' '||' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Table_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
4339
4340 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4341
4342 -- in case we need to rollback the ddl
4343 l_num_rollback_ddl_stmts := l_num_rollback_ddl_stmts + 1;
4344 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).sql_stmt := 'DROP TABLE '||l_master_table;
4345 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).stmt_type := ad_ddl.drop_table;
4346 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).object_name := l_master_table;
4347
4348 l_sql_stmt := ' CREATE UNIQUE INDEX '||l_master_table||'_U1 '||
4349 ' ON '||l_master_table||' (CODE,LANGUAGE) '||' '||
4350 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
4351
4352 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4353
4354 -- Create a new UNIQUE INDEX for Loader Performance - Bug #3090828
4355 l_sql_stmt := ' CREATE UNIQUE INDEX '||l_master_table||'_U2 '||
4356 ' ON '||l_master_table||' (USER_CODE,LANGUAGE) '||' '||
4357 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
4358
4359 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4360
4361 l_col_names := NULL;
4362 --Bug #3081595
4363 l_col_names := 'USER_CODE, NAME ';
4364
4365 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4366 ' WHERE OBJECT_NAME = :1';
4367
4368 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_input_table;
4369
4370 IF (l_count <> 0) THEN
4371 l_sql_stmt := 'DROP TABLE '||l_input_table;
4372 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4373 END IF;
4374 l_sql_stmt := ' CREATE TABLE '||l_input_table||' '||' TABLESPACE '||
4375 BSC_APPS.Get_Tablespace_Name(BSC_APPS.Input_Table_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause||
4376 ' AS SELECT '||l_col_names||' FROM '||l_master_table||' WHERE 1 = 2';
4377
4378 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4379
4380 -- in case we need to rollback the ddl
4381 l_num_rollback_ddl_stmts := l_num_rollback_ddl_stmts + 1;
4382 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).sql_stmt := 'DROP TABLE '||l_input_table;
4383 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).stmt_type := ad_ddl.drop_table;
4384 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).object_name := l_input_table;
4385
4386 l_sql_stmt := ' CREATE UNIQUE INDEX '||l_input_table||'_U1 '||
4387 ' ON '||l_input_table||' (USER_CODE) '||' '||
4388 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Input_Index_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
4389
4390 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4391
4392 l_col_names := NULL;
4393 FOR cd IN c_view_cols LOOP
4394 IF (l_col_names IS NULL )THEN
4395 l_col_names := cd.column_name;
4396 ELSE
4397 l_col_names := l_col_names ||', '|| cd.column_name;
4398 END IF;
4399 END LOOP;
4400
4401 l_sql_stmt := ' CREATE OR REPLACE VIEW '||l_view_name||' AS (' ||
4402 ' SELECT '||l_col_names||
4403 ' FROM '||l_master_table||
4404 ' WHERE LANGUAGE = USERENV(''LANG''))';
4405
4406 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_view, l_view_name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4407
4408 -- in case we need to rollback the ddl
4409 l_num_rollback_ddl_stmts := l_num_rollback_ddl_stmts + 1;
4410 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).sql_stmt := 'DROP VIEW '||l_view_name;
4411 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).stmt_type := ad_ddl.drop_view;
4412 l_rollback_ddl_stmts(l_num_rollback_ddl_stmts).object_name := l_view_name;
4413
4414
4415 FOR i_project IN 0..5 LOOP
4416 IF (i_project = 0) THEN
4417 l_code_name := 'ALL';
4418 ELSE
4419 l_code_name := p_Dim_Level_Rec.Bsc_Level_Abbreviation || TO_CHAR(i_project);
4420 END IF;
4421
4422 l_sql_stmt := ' INSERT INTO '||l_master_table||
4423 ' (CODE, USER_CODE, NAME, LANGUAGE, SOURCE_LANG) '||
4424 ' SELECT '||i_project||' AS CODE, '||
4425 ' '''||TO_CHAR(i_project)||''' AS USER_CODE, '||
4426 ' '''||l_code_name||''' AS NAME, L.LANGUAGE_CODE, '||
4427 ' USERENV(''LANG'') '||
4428 ' FROM FND_LANGUAGES L '||
4429 ' WHERE L.INSTALLED_FLAG IN (''I'', ''B'') '||
4430 ' AND NOT EXISTS '||
4431 ' ( SELECT NULL FROM '||l_master_table||
4432 ' T WHERE T.CODE = :1 '||
4433 ' AND T.LANGUAGE = L.LANGUAGE_CODE) ';
4434
4435 EXECUTE IMMEDIATE l_sql_stmt USING i_project;
4436 END LOOP;
4437 --insert into BSC_DB_TABLES_RELS & BSC_DB_TABLES
4438
4439 INSERT INTO BSC_DB_TABLES_RELS
4440 (Table_Name, Source_Table_Name, Relation_Type)
4441 VALUES (l_master_table, l_input_table, 0);
4442
4443 INSERT INTO BSC_DB_TABLES
4444 (Table_Name, Table_Type, Periodicity_Id,
4445 Source_Data_Type, Source_File_Name)
4446 VALUES (l_input_table, 2, 0, 0, NULL);
4447 x_return_status := FND_API.G_RET_STS_SUCCESS;
4448
4449 RETURN TRUE;
4450 EXCEPTION
4451 WHEN FND_API.G_EXC_ERROR THEN
4452 ROLLBACK TO CreateBSCMasTabsPMD;
4453 IF (x_msg_data IS NULL) THEN
4454 FND_MSG_PUB.Count_And_Get
4455 ( p_encoded => FND_API.G_FALSE
4456 , p_count => x_msg_count
4457 , p_data => x_msg_data
4458 );
4459 END IF;
4460
4461 x_return_status := FND_API.G_RET_STS_ERROR;
4462
4463 -- try to rollback ddl stmts
4464 BSC_APPS.Execute_DDL_Stmts_AT(l_rollback_ddl_stmts, l_num_rollback_ddl_stmts, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4465
4466 RETURN FALSE;
4467 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4468 ROLLBACK TO CreateBSCMasTabsPMD;
4469 IF (x_msg_data IS NULL) THEN
4470 FND_MSG_PUB.Count_And_Get
4471 ( p_encoded => FND_API.G_FALSE
4472 , p_count => x_msg_count
4473 , p_data => x_msg_data
4474 );
4475 END IF;
4476 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4477
4478
4479 -- try to rollback ddl stmts
4480 BSC_APPS.Execute_DDL_Stmts_AT(l_rollback_ddl_stmts, l_num_rollback_ddl_stmts, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4481
4482 RETURN FALSE;
4483 WHEN NO_DATA_FOUND THEN
4484 ROLLBACK TO CreateBSCMasTabsPMD;
4485 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4486 IF (x_msg_data IS NOT NULL) THEN
4487 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs ';
4488 ELSE
4489 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs ';
4490 END IF;
4491
4492 -- try to rollback ddl stmts
4493 BSC_APPS.Execute_DDL_Stmts_AT(l_rollback_ddl_stmts, l_num_rollback_ddl_stmts, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4494
4495 RETURN FALSE;
4496 WHEN OTHERS THEN
4497 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4498 IF (x_msg_data IS NOT NULL) THEN
4499 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs ';
4500 ELSE
4501 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs ';
4502 END IF;
4503
4504 ROLLBACK TO CreateBSCMasTabsPMD;
4505
4506 -- try to rollback ddl stmts
4507 BSC_APPS.Execute_DDL_Stmts_AT(l_rollback_ddl_stmts, l_num_rollback_ddl_stmts, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4508
4509 RETURN FALSE;
4510 END Create_Bsc_Master_Tabs;
4511 /*******************************************************************************
4512 FUNCTION TO ALTER BSC DIMENSION OBJECTS MASTER TABLES
4513 ********************************************************************************/
4514 FUNCTION Alter_Bsc_Master_Tabs
4515 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4516 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4517 , x_return_status OUT NOCOPY VARCHAR2
4518 , x_msg_count OUT NOCOPY NUMBER
4519 , x_msg_data OUT NOCOPY VARCHAR2
4520 )
4521 RETURN BOOLEAN IS
4522 l_sql_stmt VARCHAR2(32000);
4523 l_master_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4524 l_input_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4525 l_view_name BSC_SYS_DIM_LEVELS_B.Level_View_Name%TYPE;
4526 l_col_names VARCHAR2(32000) := NULL;
4527 l_old_mas_name VARCHAR2(60);
4528 l_abbr VARCHAR2(30);
4529 l_count NUMBER := 0;
4530 l_flag BOOLEAN;
4531 l_Create_View BOOLEAN := FALSE;
4532 l_bind_variable VARCHAR2(100);
4533 e_mlog_exception EXCEPTION;
4534 l_error_msg VARCHAR2(4000);
4535
4536 CURSOR c_view_cols IS
4537 SELECT column_name
4538 FROM ALL_TAB_COLUMNS
4539 WHERE TABLE_NAME = l_master_table
4540 AND column_name IS NOT NULL
4541 AND column_name NOT IN ('LANGUAGE', 'SOURCE_LANG')
4542 AND OWNER = BSC_APPS.get_user_schema;
4543
4544 --cursor to see, if this dimension object is used in many to many relations
4545 CURSOR c_rel_type IS
4546 SELECT parent_dim_level_id
4547 FROM bsc_sys_dim_level_rels
4548 WHERE dim_level_id = p_Dim_Level_Rec.Bsc_Level_Id
4549 AND relation_type = 2;
4550
4551 CURSOR c_db_tables IS
4552 SELECT DISTINCT TAB.Table_Name AS TABLE_NAME
4553 , NVL(COL.Source_Column, COL.Column_Name) AS COLUMN_NAME
4554 FROM BSC_DB_TABLES_COLS COL
4555 , BSC_DB_TABLES TAB
4556 WHERE TAB.Table_Name = COL.Table_Name
4557 AND TAB.Table_Type = 0
4558 AND (UPPER(COL.Column_Name)) = UPPER(p_Dim_Level_Rec.Bsc_Pk_Col);
4559
4560 CURSOR c_One_To_N_Index IS
4561 SELECT B.Level_Pk_Col
4562 FROM BSC_SYS_DIM_LEVEL_RELS A
4563 , BSC_SYS_DIM_LEVELS_B B
4564 WHERE A.Dim_Level_Id = p_Dim_Level_Rec.Bsc_Level_Id
4565 AND B.Dim_Level_Id = A.Parent_Dim_Level_Id
4566 AND A.Relation_Type = 1;
4567
4568 BEGIN
4569 FND_MSG_PUB.Initialize;
4570 x_return_status := FND_API.G_RET_STS_SUCCESS;
4571 SAVEPOINT AlterBSCMasTabsPMD;
4572
4573 BSC_APPS.Init_Bsc_Apps;
4574 IF ((p_Dim_Level_Rec.Bsc_Source IS NULL) OR (p_Dim_Level_Rec.Bsc_Source <> 'BSC')) THEN
4575 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DATA_SOURCE');
4576 FND_MSG_PUB.ADD;
4577 RAISE FND_API.G_EXC_ERROR;
4578 END IF;
4579 IF (p_Dim_Level_Rec.Bsc_Level_Id IS NULL) THEN
4580 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4581 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_ID'), TRUE);
4582 FND_MSG_PUB.ADD;
4583 RAISE FND_API.G_EXC_ERROR;
4584 END IF;
4585 IF (p_Dim_Level_Rec.Bsc_Level_Name IS NULL) THEN
4586 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4587 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
4588 FND_MSG_PUB.ADD;
4589 RAISE FND_API.G_EXC_ERROR;
4590 END IF;
4591 IF (p_Dim_Level_Rec.Bsc_Level_View_Name IS NULL) THEN
4592 FND_MESSAGE.SET_NAME('BSC','BSC_REQ_FIELD_MISSING');
4593 FND_MESSAGE.SET_TOKEN('FIELD_NAME', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_VIEW_NAME'), TRUE);
4594 FND_MSG_PUB.ADD;
4595 RAISE FND_API.G_EXC_ERROR;
4596 END IF;
4597 l_master_table := UPPER(p_Dim_Level_Rec.Bsc_Level_Name);
4598
4599 IF (NOT is_Valid_Identifier(l_master_table)) THEN
4600 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
4601 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_TAB_NAME'), TRUE);
4602 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_master_table);
4603 FND_MSG_PUB.ADD;
4604 RAISE FND_API.G_EXC_ERROR;
4605 END IF;
4606
4607 l_input_table := 'BSC_DI_'||p_Dim_Level_Rec.Bsc_Level_Id;
4608 l_view_name := 'BSC_D_'||p_Dim_Level_Rec.Bsc_Level_Id||'_VL';
4609
4610 SELECT COUNT(1) INTO l_count
4611 FROM BSC_SYS_DIM_LEVELS_B
4612 WHERE DIM_LEVEL_ID <> p_Dim_Level_Rec.Bsc_Level_Id
4613 AND LEVEL_TABLE_NAME = l_master_table;
4614 IF (l_count <> 0) THEN
4615 FND_MESSAGE.SET_NAME('BSC','BSC_D_TABLE_NAME_EXIST');
4616 FND_MESSAGE.SET_TOKEN('TABLE_NAME', p_Dim_Level_Rec.Bsc_Level_Name);
4617 FND_MSG_PUB.ADD;
4618 RAISE FND_API.G_EXC_ERROR;
4619 END IF;
4620 --check if old master tables, views, input table exists in the system.
4621 --if they do not exists than call BSC_BIS_DIM_OBJ_PUB.Create_Bsc_Master_Tabs otherwise proceed further
4622 l_flag := TRUE;
4623 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4624 ' WHERE OBJECT_NAME = :1';
4625
4626 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING p_Dim_Level_Rec_Old.Bsc_Level_Name;
4627 IF (l_count = 0) THEN
4628 l_flag := FALSE;
4629 END IF;
4630 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4631 ' WHERE OBJECT_NAME = :1';
4632 l_bind_variable := 'BSC_D_'||p_Dim_Level_Rec_Old.Bsc_Level_Id||'_VL';
4633 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_bind_variable;
4634 IF (l_count = 0) THEN
4635 l_flag := FALSE;
4636 END IF;
4637 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4638 ' WHERE OBJECT_NAME = :1';
4639
4640 l_bind_variable := 'BSC_DI_'||p_Dim_Level_Rec_Old.Bsc_Level_Id;
4641 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_bind_variable;
4642 IF (l_count = 0) THEN
4643 l_flag := FALSE;
4644 END IF;
4645 IF (NOT l_flag) THEN
4646 --The following part of the code will only be executed if
4647 --master table, input table or view does not exists.
4648 --This secition will be called in the case of data corruption only.
4649 FND_MESSAGE.SET_NAME('BSC','BSC_DB_ERROR');
4650 FND_MSG_PUB.ADD;
4651 RAISE FND_API.G_EXC_ERROR;
4652 ELSE
4653 --check if Level_Pk_Col is differnt, is so update table BSC_DB_TABLES_COLS
4654 IF(UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) <> UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col)) THEN
4655 UPDATE BSC_DB_TABLES_COLS
4656 SET Source_Column = p_Dim_Level_Rec_Old.Bsc_Pk_Col
4657 WHERE UPPER(Column_Name) = UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col)
4658 AND Source_Column IS NULL;
4659
4660 UPDATE BSC_DB_TABLES_COLS
4661 SET Column_Name = p_Dim_Level_Rec.Bsc_Pk_Col
4662 WHERE UPPER(Column_Name) = UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col);
4663 END IF;
4664 --check if user-code size and disp-key size are different
4665 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size)
4666 OR (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_Disp_Key_Size)) THEN
4667 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size < p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size)
4668 OR (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size < p_Dim_Level_Rec_Old.Bsc_Level_Disp_Key_Size)) THEN
4669 FND_MESSAGE.SET_NAME('BSC','BSC_CODE_SIZE_NOT_DECREASED');
4670 FND_MSG_PUB.ADD;
4671 RAISE FND_API.G_EXC_ERROR;
4672 END IF;
4673 l_Create_View := TRUE;
4674
4675 l_sql_stmt := 'ALTER TABLE '||p_Dim_Level_Rec_Old.Bsc_Level_Name||
4676 ' MODIFY USER_CODE VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') '||
4677 ' MODIFY NAME VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size||') ';
4678
4679 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, p_Dim_Level_Rec_Old.Bsc_Level_Name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4680
4681
4682 l_sql_stmt := 'ALTER TABLE BSC_DI_'||p_Dim_Level_Rec_Old.Bsc_Level_Id||' '||
4683 ' MODIFY USER_CODE VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') '||
4684 ' MODIFY NAME VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size||') ';
4685
4686 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, 'BSC_DI_'||p_Dim_Level_Rec_Old.Bsc_Level_Id, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4687 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size)) THEN
4688 FOR cd IN c_db_tables LOOP
4689 l_sql_stmt := ' ALTER TABLE '||cd.Table_Name||
4690 ' MODIFY '||cd.Column_Name||
4691 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') ';
4692 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, cd.TABLE_NAME, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4693 END LOOP;
4694 END IF;
4695
4696 /********************************************************
4697 Here we will synch up the MLOG tables for the current dimension object
4698 ********************************************************/
4699 IF NOT (BSC_SYNC_MVLOGS.Sync_dim_table_mv_log(p_Dim_Level_Rec_Old.Bsc_Level_Name,l_error_msg)) THEN
4700 RAISE e_mlog_exception;
4701 END IF;
4702 END IF;
4703 IF (l_master_table <> UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Name)) THEN
4704 l_Create_View := TRUE;
4705 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4706 ' WHERE OBJECT_NAME = :1';
4707
4708 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_master_table;
4709 IF (l_count <> 0) THEN
4710 l_sql_stmt := 'DROP TABLE '||l_master_table;
4711 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4712 END IF;
4713 l_sql_stmt := ' CREATE TABLE '||l_master_table||' '||' TABLESPACE '||
4714 BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Table_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause||
4715 ' AS SELECT * FROM '||p_Dim_Level_Rec_Old.Bsc_Level_Name;
4716
4717 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4718 l_sql_stmt := ' CREATE UNIQUE INDEX '||l_master_table||'_U1 '||
4719 ' ON '||l_master_table||' (CODE, LANGUAGE) '||' '||
4720 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.Bsc_Storage_Clause;
4721
4722 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4723
4724 -- Create a new UNIQUE INDEX for Loader Performance - Bug #3090828
4725 l_sql_stmt := ' CREATE UNIQUE INDEX '||l_master_table||'_U2 '||
4726 ' ON '||l_master_table||' (USER_CODE, LANGUAGE) '||' '||
4727 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.Bsc_Storage_Clause;
4728 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4729 l_count := 1;
4730 FOR cd IN c_One_To_N_Index LOOP
4731 -- Create a new Non-Unique INDEX for Loader Performance - Bug #3120190
4732
4733 IF (LENGTH(l_master_table||'_N'||l_count) <= 30) THEN
4734 l_sql_stmt := ' CREATE INDEX '||l_master_table||'_N'||l_count||' '||
4735 ' ON '||l_master_table||' ('||cd.Level_Pk_Col||') '||' '||
4736 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
4737
4738 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4739 l_count := l_count + 1;
4740 ELSE
4741 EXIT;
4742 END IF;
4743 END LOOP;
4744 l_sql_stmt := 'DROP TABLE '||p_Dim_Level_Rec_Old.Bsc_Level_Name;
4745
4746 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, p_Dim_Level_Rec_Old.Bsc_Level_Name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4747 --update BSC_DB_TABLES_RELS
4748 UPDATE BSC_DB_TABLES_RELS
4749 SET Table_Name = l_master_table
4750 WHERE Source_Table_Name = l_input_table;
4751 END IF;
4752 IF (l_Create_View) THEN
4753
4754 l_col_names := NULL;
4755 FOR cd IN c_view_cols LOOP
4756 IF (l_col_names IS NULL )THEN
4757 l_col_names := cd.column_name;
4758 ELSE
4759 l_col_names := l_col_names ||', '|| cd.column_name;
4760 END IF;
4761 END LOOP;
4762
4763 l_sql_stmt := ' CREATE OR REPLACE VIEW '||l_view_name||' AS (' ||
4764 ' SELECT '||l_col_names||
4765 ' FROM '||l_master_table||
4766 ' WHERE LANGUAGE = USERENV(''LANG''))';
4767
4768 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_view, l_view_name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4769 END IF;
4770 l_flag := BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables
4771 ( p_Dim_Level_Rec => p_Dim_Level_Rec
4772 , p_Dim_Level_Rec_Old => p_Dim_Level_Rec_Old
4773 , x_return_status => x_return_status
4774 , x_msg_count => x_msg_count
4775 , x_msg_data => x_msg_data
4776 );
4777 IF (NOT l_flag) THEN
4778 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4779 END IF;
4780 l_flag := BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables
4781 ( p_Dim_Level_Rec => p_Dim_Level_Rec
4782 , p_Dim_Level_Rec_Old => p_Dim_Level_Rec_Old
4783 , x_return_status => x_return_status
4784 , x_msg_count => x_msg_count
4785 , x_msg_data => x_msg_data
4786 );
4787 IF (NOT l_flag) THEN
4788 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4789 END IF;
4790 RETURN TRUE;
4791 END IF;
4792 EXCEPTION
4793 WHEN e_mlog_exception THEN
4794 ROLLBACK TO AlterBSCMasTabsPMD;
4795 x_msg_data := NULL;
4796 x_msg_data := l_error_msg || ' -> BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs';
4797 x_return_status := FND_API.G_RET_STS_ERROR;
4798 RETURN FALSE;
4799
4800 WHEN FND_API.G_EXC_ERROR THEN
4801 ROLLBACK TO AlterBSCMasTabsPMD;
4802 IF (x_msg_data IS NULL) THEN
4803 FND_MSG_PUB.Count_And_Get
4804 ( p_encoded => FND_API.G_FALSE
4805 , p_count => x_msg_count
4806 , p_data => x_msg_data
4807 );
4808 END IF;
4809 x_return_status := FND_API.G_RET_STS_ERROR;
4810 RETURN FALSE;
4811 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4812 ROLLBACK TO AlterBSCMasTabsPMD;
4813 IF (x_msg_data IS NULL) THEN
4814 FND_MSG_PUB.Count_And_Get
4815 ( p_encoded => FND_API.G_FALSE
4816 , p_count => x_msg_count
4817 , p_data => x_msg_data
4818 );
4819 END IF;
4820 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4821 RETURN FALSE;
4822 WHEN NO_DATA_FOUND THEN
4823 ROLLBACK TO AlterBSCMasTabsPMD;
4824 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4825 IF (x_msg_data IS NOT NULL) THEN
4826 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs ';
4827 ELSE
4828 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs ';
4829 END IF;
4830 RETURN FALSE;
4831 WHEN OTHERS THEN
4832 ROLLBACK TO AlterBSCMasTabsPMD;
4833 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4834 IF (x_msg_data IS NOT NULL) THEN
4835 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs ';
4836 ELSE
4837 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_Bsc_Master_Tabs ';
4838 END IF;
4839 RETURN FALSE;
4840 END Alter_Bsc_Master_Tabs;
4841 /*******************************************************************************
4842 FUNCTION TO ALTER M x N Tables
4843 ********************************************************************************/
4844 FUNCTION Alter_M_By_N_Tables
4845 ( p_Dim_Level_Rec IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4846 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
4847 , x_return_status OUT NOCOPY VARCHAR2
4848 , x_msg_count OUT NOCOPY NUMBER
4849 , x_msg_data OUT NOCOPY VARCHAR2
4850 )
4851 RETURN BOOLEAN IS
4852 l_count NUMBER;
4853 l_abbreviation BSC_SYS_DIM_LEVELS_B.Abbreviation%TYPE;
4854 l_sql_stmt VARCHAR2(32000);
4855 l_old_mas_name BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4856 l_master_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4857 l_input_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
4858 l_Tbl_Statements BSC_APPS.Autonomous_Statements_Tbl_Type;
4859 e_mlog_exception EXCEPTION;
4860 l_error_msg VARCHAR2(4000);
4861
4862 CURSOR c_MN_Tables IS
4863 SELECT Dim_Level_Id
4864 FROM BSC_SYS_DIM_LEVEL_RELS
4865 WHERE Parent_Dim_Level_Id = p_Dim_Level_Rec.Bsc_Level_Id
4866 AND Relation_Type = 2;
4867 BEGIN
4868 FND_MSG_PUB.Initialize;
4869 x_return_status := FND_API.G_RET_STS_SUCCESS;
4870 BSC_APPS.Init_Bsc_Apps;
4871
4872 SAVEPOINT AlterBSCMxNPMD;
4873 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size = p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size) AND
4874 (UPPER(p_Dim_Level_Rec.Bsc_Level_Abbreviation) = UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Abbreviation)) AND
4875 (UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) = UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col))) THEN
4876 RETURN TRUE;
4877 END IF;
4878 FOR cd IN c_MN_Tables LOOP
4879 SELECT Abbreviation
4880 INTO l_abbreviation
4881 FROM BSC_SYS_DIM_LEVELS_B
4882 WHERE dim_level_id = cd.Dim_Level_Id;
4883
4884 IF (cd.Dim_Level_Id > p_Dim_Level_Rec.Bsc_Level_Id) THEN
4885 l_input_table := 'BSC_DI_'||p_Dim_Level_Rec.Bsc_Level_Id||'_'||cd.Dim_Level_Id;
4886 ELSE
4887 l_input_table := 'BSC_DI_'||cd.Dim_Level_Id||'_'||p_Dim_Level_Rec.Bsc_Level_Id;
4888 END IF;
4889 IF (l_abbreviation > p_Dim_Level_Rec.Bsc_Level_Abbreviation) THEN
4890 l_master_table := 'BSC_D_'||UPPER(p_Dim_Level_Rec.Bsc_Level_Abbreviation)||'_'||UPPER(l_abbreviation);
4891 ELSE
4892 l_master_table := 'BSC_D_'||UPPER(l_abbreviation)||'_'||UPPER(p_Dim_Level_Rec.Bsc_Level_Abbreviation);
4893 END IF;
4894
4895 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4896 ' WHERE OBJECT_NAME = :1';
4897
4898 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_input_table;
4899 IF (l_count = 0) THEN
4900 x_msg_data := 'Input Table does not exists '||l_input_table;
4901 RAISE FND_API.G_EXC_ERROR;
4902 END IF;
4903 --if abbreviation is different than drop and create master tables
4904 IF (UPPER(p_Dim_Level_Rec.Bsc_Level_Abbreviation) <> UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Abbreviation)) THEN
4905 IF (UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Abbreviation) > UPPER(l_abbreviation)) THEN
4906 l_old_mas_name := 'BSC_D_'||UPPER(l_abbreviation)||'_'||UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Abbreviation);
4907 ELSE
4908 l_old_mas_name := 'BSC_D_'||UPPER(p_Dim_Level_Rec_Old.Bsc_Level_Abbreviation)||'_'||UPPER(l_abbreviation);
4909 END IF;
4910
4911 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4912 ' WHERE OBJECT_NAME = :1';
4913
4914 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_master_table;
4915 IF (l_count <> 0) THEN
4916 l_sql_stmt := 'DROP TABLE '||l_master_table;
4917 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4918 END IF;
4919 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
4920 ' WHERE OBJECT_NAME = :1';
4921
4922 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_old_mas_name;
4923 IF (l_count = 0) THEN
4924 x_msg_data := 'Master Table does not exists '||l_old_mas_name;
4925 RAISE FND_API.G_EXC_ERROR;
4926 END IF;
4927 l_sql_stmt := ' CREATE TABLE '||l_master_table||' '||' TABLESPACE '||
4928 BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Table_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause||
4929 ' AS SELECT * FROM '||l_old_mas_name;
4930
4931 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4932
4933 --meastmon 02-27-2004: Here is missing the sql statement. I found this by casualty. So fixing
4934 -- -----
4935 ---Need to update the following table when there is change in abbrevation bug#4091924
4936
4937 Update_M_By_N_Relation_col
4938 ( p_Dim_Level_Id => cd.Dim_Level_Id
4939 , p_Parent_Dim_Level_Id => p_Dim_Level_Rec.Bsc_Level_Id
4940 , p_Relation_Col => l_master_table
4941 , x_return_status => x_return_status
4942 , x_msg_count => x_msg_count
4943 , x_msg_data => x_msg_data
4944 );
4945
4946 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4947 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4948 END IF;
4949
4950 l_sql_stmt := 'DROP TABLE '||l_old_mas_name;
4951 -- -----
4952 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.drop_table, l_old_mas_name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4953
4954 --update BSC_DB_TABLES_RELS
4955 UPDATE BSC_DB_TABLES_RELS
4956 SET Table_Name = l_master_table
4957 WHERE Source_Table_Name = l_input_table;
4958 END IF;
4959 --if level_pk_col is different than change the names of table columns
4960 IF (UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) <> UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col)) THEN
4961
4962 l_Tbl_Statements.DELETE;
4963 l_sql_stmt := 'ALTER TABLE '||l_master_table||' ADD ('||p_Dim_Level_Rec.Bsc_Pk_Col||' NUMBER )';
4964
4965 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4966 l_Tbl_Statements(0).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
4967 l_Tbl_Statements(0).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
4968 l_Tbl_Statements(0).x_Statement_Type := AD_DDL.Alter_Table;
4969 l_Tbl_Statements(0).x_Statement := l_sql_stmt;
4970 l_Tbl_Statements(0).x_Object_Name := l_master_table;
4971
4972 l_sql_stmt := 'UPDATE '||l_master_table||' SET '||
4973 p_Dim_Level_Rec.Bsc_Pk_Col||' = '||p_Dim_Level_Rec_Old.Bsc_Pk_Col;
4974
4975 --EXECUTE IMMEDIATE l_sql_stmt;
4976 l_Tbl_Statements(1).x_Fnd_Apps_Schema := NULL;
4977 l_Tbl_Statements(1).x_Bsc_Apps_Short_Name := NULL;
4978 l_Tbl_Statements(1).x_Statement_Type := NULL;
4979 l_Tbl_Statements(1).x_Statement := l_sql_stmt;
4980 l_Tbl_Statements(1).x_Object_Name := NULL;
4981
4982 l_sql_stmt := 'ALTER TABLE '||l_master_table||' DROP COLUMN '||p_Dim_Level_Rec_Old.Bsc_Pk_Col;
4983
4984 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4985 l_Tbl_Statements(2).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
4986 l_Tbl_Statements(2).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
4987 l_Tbl_Statements(2).x_Statement_Type := AD_DDL.Alter_Table;
4988 l_Tbl_Statements(2).x_Statement := l_sql_stmt;
4989 l_Tbl_Statements(2).x_Object_Name := l_master_table;
4990 BSC_APPS.Do_Ddl_AT(x_Statements_Tbl => l_Tbl_Statements);
4991
4992 l_Tbl_Statements.DELETE;
4993 l_sql_stmt := 'ALTER TABLE '||l_input_table||' ADD ('||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
4994 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||'))';
4995
4996 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
4997 l_Tbl_Statements(0).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
4998 l_Tbl_Statements(0).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
4999 l_Tbl_Statements(0).x_Statement_Type := AD_DDL.Alter_Table;
5000 l_Tbl_Statements(0).x_Statement := l_sql_stmt;
5001 l_Tbl_Statements(0).x_Object_Name := l_master_table;
5002
5003 l_sql_stmt := 'UPDATE '||l_input_table||' SET '||
5004 p_Dim_Level_Rec.Bsc_Pk_Col||'_USR = '||p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5005
5006 --EXECUTE IMMEDIATE l_sql_stmt;
5007 l_Tbl_Statements(1).x_Fnd_Apps_Schema := NULL;
5008 l_Tbl_Statements(1).x_Bsc_Apps_Short_Name := NULL;
5009 l_Tbl_Statements(1).x_Statement_Type := NULL;
5010 l_Tbl_Statements(1).x_Statement := l_sql_stmt;
5011 l_Tbl_Statements(1).x_Object_Name := NULL;
5012
5013 l_sql_stmt := 'ALTER TABLE '||l_input_table||' DROP COLUMN '||p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5014
5015 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5016 l_Tbl_Statements(2).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5017 l_Tbl_Statements(2).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5018 l_Tbl_Statements(2).x_Statement_Type := AD_DDL.Alter_Table;
5019 l_Tbl_Statements(2).x_Statement := l_sql_stmt;
5020 l_Tbl_Statements(2).x_Object_Name := l_master_table;
5021 BSC_APPS.Do_Ddl_AT(x_Statements_Tbl => l_Tbl_Statements);
5022
5023 ELSIF (p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size) THEN
5024 l_sql_stmt := ' ALTER TABLE '||l_input_table||
5025 ' MODIFY '||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
5026 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') ';
5027 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5028 END IF;
5029
5030 /********************************************************************
5031 Here we need to call the API BSC_SYNC_MVLOGS.Sync_dim_table_mv_log
5032 This API will synch up the data in MLOGS corresponding to the dimension
5033 object.
5034 We need to call this API in the following scenarios.
5035 1.When Name and USER_CODE size are changed.
5036 2.When parent col is added or removed from the child dimension object table.
5037 *******************************************************************/
5038 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size)
5039 OR (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_Disp_Key_Size)) THEN
5040 IF NOT (BSC_SYNC_MVLOGS.Sync_dim_table_mv_log(l_master_table,l_error_msg)) THEN
5041 RAISE e_mlog_exception;
5042 END IF;
5043 END IF;
5044 END LOOP;
5045
5046 RETURN TRUE;
5047 EXCEPTION
5048 WHEN e_mlog_exception THEN
5049 ROLLBACK TO AlterBSCMxNPMD;
5050 x_msg_data := NULL;
5051 x_msg_data := l_error_msg || ' -> BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables ';
5052 x_return_status := FND_API.G_RET_STS_ERROR;
5053 RETURN FALSE;
5054 WHEN FND_API.G_EXC_ERROR THEN
5055 ROLLBACK TO AlterBSCMxNPMD;
5056 IF (x_msg_data IS NULL) THEN
5057 FND_MSG_PUB.Count_And_Get
5058 ( p_encoded => FND_API.G_FALSE
5059 , p_count => x_msg_count
5060 , p_data => x_msg_data
5061 );
5062 END IF;
5063 x_return_status := FND_API.G_RET_STS_ERROR;
5064 RETURN FALSE;
5065 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5066 ROLLBACK TO AlterBSCMxNPMD;
5067 IF (x_msg_data IS NULL) THEN
5068 FND_MSG_PUB.Count_And_Get
5069 ( p_encoded => FND_API.G_FALSE
5070 , p_count => x_msg_count
5071 , p_data => x_msg_data
5072 );
5073 END IF;
5074 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5075 RETURN FALSE;
5076 WHEN NO_DATA_FOUND THEN
5077 ROLLBACK TO AlterBSCMxNPMD;
5078 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5079 IF (x_msg_data IS NOT NULL) THEN
5080 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables ';
5081 ELSE
5082 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables ';
5083 END IF;
5084 RETURN FALSE;
5085 WHEN OTHERS THEN
5086 ROLLBACK TO AlterBSCMxNPMD;
5087 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5088 IF (x_msg_data IS NOT NULL) THEN
5089 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables ';
5090 ELSE
5091 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_M_By_N_Tables ';
5092 END IF;
5093 RETURN FALSE;
5094 END Alter_M_By_N_Tables;
5095
5096 /*******************************************************************************
5097 FUNCTION TO ALTER One x N Child Tables
5098 ********************************************************************************/
5099 FUNCTION Alter_One_By_N_Tables
5100 ( p_Dim_Level_Rec IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
5101 , p_Dim_Level_Rec_Old IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
5102 , x_return_status OUT NOCOPY VARCHAR2
5103 , x_msg_count OUT NOCOPY NUMBER
5104 , x_msg_data OUT NOCOPY VARCHAR2
5105 )
5106 RETURN BOOLEAN IS
5107 l_count NUMBER;
5108 l_sql_stmt VARCHAR2(32000);
5109 l_master_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
5110 l_input_table BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
5111 l_view_name BSC_SYS_DIM_LEVELS_B.Level_Table_Name%TYPE;
5112 l_col_names VARCHAR2(32000);
5113 l_index_Name VARCHAR2(100) := NULL;
5114 l_index_Count NUMBER;
5115 l_flag BOOLEAN;
5116 l_Create_View BOOLEAN := FALSE;
5117 l_Tbl_Statements BSC_APPS.Autonomous_Statements_Tbl_Type;
5118 e_mlog_exception EXCEPTION;
5119 l_error_msg VARCHAR2(4000);
5120
5121 --cursor to get the columns for creation of view based on master-table
5122 CURSOR c_view_cols IS
5123 SELECT column_name
5124 FROM ALL_TAB_COLUMNS
5125 WHERE TABLE_NAME = l_master_table
5126 AND column_name NOT IN ('LANGUAGE', 'SOURCE_LANG')
5127 AND column_name IS NOT NULL
5128 AND OWNER = BSC_APPS.get_user_schema;
5129
5130 --cursor to know the index on Column
5131 CURSOR c_Parent_Index_Name IS
5132 SELECT Index_Name
5133 FROM ALL_IND_COLUMNS
5134 WHERE Table_Name = l_master_table
5135 AND Column_Name = UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col)
5136 AND INDEX_OWNER = BSC_APPS.get_user_schema;
5137
5138 CURSOR c_One_by_N IS
5139 SELECT Dim_Level_Id
5140 FROM BSC_SYS_DIM_LEVEL_RELS
5141 WHERE parent_dim_level_id = p_Dim_Level_Rec.Bsc_Level_Id
5142 AND relation_type = 1;
5143 BEGIN
5144 FND_MSG_PUB.Initialize;
5145 x_return_status := FND_API.G_RET_STS_SUCCESS;
5146 BSC_APPS.Init_Bsc_Apps;
5147
5148 SAVEPOINT AlterBSCOnexNPMD;
5149 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size = p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size) AND
5150 (UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) = UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col))) THEN
5151 RETURN TRUE;
5152 END IF;
5153 FOR cd IN c_One_by_N LOOP
5154 l_Create_View := FALSE;
5155
5156 SELECT Level_Table_Name
5157 INTO l_master_table
5158 FROM BSC_SYS_DIM_LEVELS_B
5159 WHERE dim_level_id = cd.dim_level_id;
5160
5161 l_master_table := UPPER(l_master_table);
5162 l_input_table := 'BSC_DI_'||cd.Dim_Level_Id;
5163 l_view_name := 'BSC_D_'||cd.Dim_Level_Id||'_VL';
5164
5165 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
5166 ' WHERE OBJECT_NAME = :1';
5167
5168 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_master_table;
5169 IF (l_count = 0) THEN
5170 x_msg_data := 'Master Table does not exists '||l_master_table;
5171 RAISE FND_API.G_EXC_ERROR;
5172 END IF;
5173
5174 l_sql_stmt := ' SELECT COUNT(1) FROM USER_OBJECTS '||
5175 ' WHERE OBJECT_NAME = :1';
5176
5177 EXECUTE IMMEDIATE l_sql_stmt INTO l_count USING l_input_table;
5178 IF (l_count = 0) THEN
5179 x_msg_data := 'Input Table does not exists '||l_input_table;
5180 RAISE FND_API.G_EXC_ERROR;
5181 END IF;
5182 --if level_pk_col is different than change the names of table columns
5183 IF (UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) <> UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col)) THEN
5184 l_Create_View := TRUE;
5185 --get the name of index on original column.
5186 l_index_Name := NULL;
5187 OPEN c_Parent_Index_Name;
5188 FETCH c_Parent_Index_Name INTO l_index_Name;
5189 CLOSE c_Parent_Index_Name;
5190 IF (l_index_Name IS NULL) THEN
5191 l_flag := TRUE;
5192 l_index_Name := l_master_table||'_N1';
5193 IF (LENGTH(l_index_Name) <= 30) THEN
5194 l_index_Count := 2;
5195 WHILE (l_flag) LOOP
5196 SELECT COUNT(1) INTO l_count
5197 FROM ALL_INDEXES
5198 WHERE INDEX_NAME = l_index_Name
5199 AND OWNER = BSC_APPS.get_user_schema;
5200
5201 IF (l_count = 0) THEN
5202 l_flag := FALSE;
5203 EXIT;
5204 ELSE
5205 l_index_Name := l_master_table||'_N'||l_index_Count;
5206 l_index_Count := l_index_Count + 1;
5207 END IF;
5208 END LOOP;
5209 END IF;
5210 END IF;
5211 l_Tbl_Statements.DELETE;
5212 l_sql_stmt := 'ALTER TABLE '||l_master_table||' ADD ('||p_Dim_Level_Rec.Bsc_Pk_Col||' NUMBER)';
5213
5214 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5215 l_Tbl_Statements(0).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5216 l_Tbl_Statements(0).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5217 l_Tbl_Statements(0).x_Statement_Type := AD_DDL.Alter_Table;
5218 l_Tbl_Statements(0).x_Statement := l_sql_stmt;
5219 l_Tbl_Statements(0).x_Object_Name := l_master_table;
5220
5221 l_sql_stmt := 'UPDATE '||l_master_table||' SET '||
5222 p_Dim_Level_Rec.Bsc_Pk_Col ||' = '||p_Dim_Level_Rec_Old.Bsc_Pk_Col;
5223
5224 --EXECUTE IMMEDIATE l_sql_stmt;
5225 l_Tbl_Statements(1).x_Fnd_Apps_Schema := NULL;
5226 l_Tbl_Statements(1).x_Bsc_Apps_Short_Name := NULL;
5227 l_Tbl_Statements(1).x_Statement_Type := NULL;
5228 l_Tbl_Statements(1).x_Statement := l_sql_stmt;
5229 l_Tbl_Statements(1).x_Object_Name := NULL;
5230
5231 l_sql_stmt := 'ALTER TABLE '||l_master_table||' DROP COLUMN '||p_Dim_Level_Rec_Old.Bsc_Pk_Col;
5232
5233 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5234 l_Tbl_Statements(2).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5235 l_Tbl_Statements(2).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5236 l_Tbl_Statements(2).x_Statement_Type := AD_DDL.Alter_Table;
5237 l_Tbl_Statements(2).x_Statement := l_sql_stmt;
5238 l_Tbl_Statements(2).x_Object_Name := l_master_table;
5239 BSC_APPS.Do_Ddl_AT(x_Statements_Tbl => l_Tbl_Statements);
5240
5241 l_Tbl_Statements.DELETE;
5242 l_sql_stmt := 'ALTER TABLE '||l_master_table||' ADD ('||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
5243 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||'))';
5244
5245 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5246 l_Tbl_Statements(0).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5247 l_Tbl_Statements(0).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5248 l_Tbl_Statements(0).x_Statement_Type := AD_DDL.Alter_Table;
5249 l_Tbl_Statements(0).x_Statement := l_sql_stmt;
5250 l_Tbl_Statements(0).x_Object_Name := l_master_table;
5251
5252
5253 l_sql_stmt := 'UPDATE '||l_master_table||' SET '||
5254 p_Dim_Level_Rec.Bsc_Pk_Col||'_USR = '||p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5255
5256 --EXECUTE IMMEDIATE l_sql_stmt;
5257 l_Tbl_Statements(1).x_Fnd_Apps_Schema := NULL;
5258 l_Tbl_Statements(1).x_Bsc_Apps_Short_Name := NULL;
5259 l_Tbl_Statements(1).x_Statement_Type := NULL;
5260 l_Tbl_Statements(1).x_Statement := l_sql_stmt;
5261 l_Tbl_Statements(1).x_Object_Name := NULL;
5262 l_sql_stmt := 'ALTER TABLE '||l_master_table||' DROP COLUMN '||
5263 p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5264
5265 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5266 l_Tbl_Statements(2).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5267 l_Tbl_Statements(2).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5268 l_Tbl_Statements(2).x_Statement_Type := AD_DDL.Alter_Table;
5269 l_Tbl_Statements(2).x_Statement := l_sql_stmt;
5270 l_Tbl_Statements(2).x_Object_Name := l_master_table;
5271 BSC_APPS.Do_Ddl_AT(x_Statements_Tbl => l_Tbl_Statements);
5272
5273 l_Tbl_Statements.DELETE;
5274 l_sql_stmt := 'ALTER TABLE '||l_input_table||' ADD ('||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
5275 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||'))';
5276
5277 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5278 l_Tbl_Statements(0).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5279 l_Tbl_Statements(0).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5280 l_Tbl_Statements(0).x_Statement_Type := AD_DDL.Alter_Table;
5281 l_Tbl_Statements(0).x_Statement := l_sql_stmt;
5282 l_Tbl_Statements(0).x_Object_Name := l_master_table;
5283
5284 l_sql_stmt := 'UPDATE '||l_input_table||' SET '||
5285 p_Dim_Level_Rec.Bsc_Pk_Col||'_USR = '||p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5286
5287 --EXECUTE IMMEDIATE l_sql_stmt;
5288 l_Tbl_Statements(1).x_Fnd_Apps_Schema := NULL;
5289 l_Tbl_Statements(1).x_Bsc_Apps_Short_Name := NULL;
5290 l_Tbl_Statements(1).x_Statement_Type := NULL;
5291 l_Tbl_Statements(1).x_Statement := l_sql_stmt;
5292 l_Tbl_Statements(1).x_Object_Name := NULL;
5293
5294
5295 l_sql_stmt := 'ALTER TABLE '||l_input_table||' DROP COLUMN '||
5296 p_Dim_Level_Rec_Old.Bsc_Pk_Col||'_USR';
5297
5298 --BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5299 l_Tbl_Statements(2).x_Fnd_Apps_Schema := BSC_APPS.Fnd_Apps_Schema;
5300 l_Tbl_Statements(2).x_Bsc_Apps_Short_Name := BSC_APPS.Bsc_Apps_Short_Name;
5301 l_Tbl_Statements(2).x_Statement_Type := AD_DDL.Alter_Table;
5302 l_Tbl_Statements(2).x_Statement := l_sql_stmt;
5303 l_Tbl_Statements(2).x_Object_Name := l_master_table;
5304 BSC_APPS.Do_Ddl_AT(x_Statements_Tbl => l_Tbl_Statements);
5305
5306 /********************************************************
5307 Here we need to update the relation_col column in BSC_SYS_DIM_LEVEL_RELS
5308 table whenever we are changing the level_pk_col of the parent.
5309 /*******************************************************/
5310 UPDATE BSC_SYS_DIM_LEVEL_RELS
5311 SET RELATION_COL = p_Dim_Level_Rec.Bsc_Pk_Col
5312 WHERE dim_level_id = cd.Dim_Level_Id
5313 AND parent_dim_level_id = p_Dim_Level_Rec.Bsc_Level_Id
5314 AND relation_type = 1;
5315
5316 --Due to DB restrictions, index can't be created if length is > 30 characters.
5317 IF (LENGTH(l_index_Name) <= 30) THEN
5318 l_sql_stmt := ' CREATE INDEX '||l_index_Name||' '||
5319 ' ON '||l_master_table||' ('||p_Dim_Level_Rec.Bsc_Pk_Col||') '||' '||
5320 ' TABLESPACE '||BSC_APPS.Get_Tablespace_Name(BSC_APPS.Dimension_Index_Tbs_Type)||' '||BSC_APPS.bsc_storage_clause;
5321 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_index, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5322 END IF;
5323 ELSIF (p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size) THEN
5324 l_Create_View := TRUE;
5325
5326 l_sql_stmt := ' ALTER TABLE '||l_master_table||
5327 ' MODIFY '||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
5328 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') ';
5329
5330 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_master_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5331
5332 l_sql_stmt := ' ALTER TABLE '||l_input_table||
5333 ' MODIFY '||p_Dim_Level_Rec.Bsc_Pk_Col||'_USR '||
5334 ' VARCHAR2('||p_Dim_Level_Rec.Bsc_Level_User_Key_Size||') ';
5335
5336 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.alter_table, l_input_table, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5337 END IF;
5338 IF (l_Create_View) THEN
5339 l_col_names := NULL;
5340 FOR cd IN c_view_cols LOOP
5341 IF (l_col_names IS NULL )THEN
5342 l_col_names := cd.column_name;
5343 ELSE
5344 l_col_names := l_col_names ||', '|| cd.column_name;
5345 END IF;
5346 END LOOP;
5347
5348 l_sql_stmt := ' CREATE OR REPLACE VIEW '||l_view_name||' AS (' ||
5349 ' SELECT '||l_col_names||
5350 ' FROM '||l_master_table||
5351 ' WHERE LANGUAGE = USERENV(''LANG''))';
5352
5353 BSC_APPS.Do_Ddl_AT(l_sql_stmt, ad_ddl.create_view, l_view_name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
5354 END IF;
5355
5356 --Now synch up the MLOG tables with the new User_Key_Size and Disp_Key_Size
5357
5358 IF ((p_Dim_Level_Rec.Bsc_Level_User_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_User_Key_Size)
5359 OR (p_Dim_Level_Rec.Bsc_Level_Disp_Key_Size <> p_Dim_Level_Rec_Old.Bsc_Level_Disp_Key_Size)
5360 OR(UPPER(p_Dim_Level_Rec.Bsc_Pk_Col) <> UPPER(p_Dim_Level_Rec_Old.Bsc_Pk_Col))) THEN
5361 IF NOT (BSC_SYNC_MVLOGS.Sync_dim_table_mv_log(l_master_table,l_error_msg)) THEN
5362 RAISE e_mlog_exception;
5363 END IF;
5364 END IF;
5365 END LOOP;
5366
5367 RETURN TRUE;
5368 EXCEPTION
5369 WHEN e_mlog_exception THEN
5370 IF (c_Parent_Index_Name%ISOPEN) THEN
5371 CLOSE c_Parent_Index_Name;
5372 END IF;
5373 ROLLBACK TO AlterBSCOnexNPMD;
5374 x_msg_data := NULL;
5375 x_msg_data := l_error_msg || ' -> BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables ';
5376 x_return_status := FND_API.G_RET_STS_ERROR;
5377 RETURN FALSE;
5378 WHEN FND_API.G_EXC_ERROR THEN
5379 IF (c_Parent_Index_Name%ISOPEN) THEN
5380 CLOSE c_Parent_Index_Name;
5381 END IF;
5382 ROLLBACK TO AlterBSCOnexNPMD;
5383 IF (x_msg_data IS NULL) THEN
5384 FND_MSG_PUB.Count_And_Get
5385 ( p_encoded => FND_API.G_FALSE
5386 , p_count => x_msg_count
5387 , p_data => x_msg_data
5388 );
5389 END IF;
5390 x_return_status := FND_API.G_RET_STS_ERROR;
5391 RETURN FALSE;
5392 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5393 IF (c_Parent_Index_Name%ISOPEN) THEN
5394 CLOSE c_Parent_Index_Name;
5395 END IF;
5396 ROLLBACK TO AlterBSCOnexNPMD;
5397 IF (x_msg_data IS NULL) THEN
5398 FND_MSG_PUB.Count_And_Get
5399 ( p_encoded => FND_API.G_FALSE
5400 , p_count => x_msg_count
5401 , p_data => x_msg_data
5402 );
5403 END IF;
5404 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5405 RETURN FALSE;
5406 WHEN NO_DATA_FOUND THEN
5407 IF (c_Parent_Index_Name%ISOPEN) THEN
5408 CLOSE c_Parent_Index_Name;
5409 END IF;
5410 ROLLBACK TO AlterBSCOnexNPMD;
5411 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5412 IF (x_msg_data IS NOT NULL) THEN
5413 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables ';
5414 ELSE
5415 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables ';
5416 END IF;
5417 RETURN FALSE;
5418 WHEN OTHERS THEN
5419 IF (c_Parent_Index_Name%ISOPEN) THEN
5420 CLOSE c_Parent_Index_Name;
5421 END IF;
5422 ROLLBACK TO AlterBSCOnexNPMD;
5423 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5424 IF (x_msg_data IS NOT NULL) THEN
5425 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables ';
5426 ELSE
5427 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Alter_One_By_N_Tables ';
5428 END IF;
5429 RETURN FALSE;
5430 END Alter_One_By_N_Tables;
5431 /********************************************************************************
5432 FUNCTION TO CHECK IF PASSED PARAMETER IS IS A SQL KEY-WORD OR NOT
5433 ********************************************************************************/
5434 FUNCTION is_SQL_Key_Word
5435 (
5436 p_value IN VARCHAR2
5437 ) RETURN BOOLEAN IS
5438 l_key_words VARCHAR2(3000);
5439 l_result VARCHAR2(30);
5440 l_value VARCHAR2(30);
5441 l_flag BOOLEAN := FALSE;
5442 BEGIN
5443 IF(p_value IS NULL) THEN
5444 RETURN l_flag;
5445 ELSE
5446 l_key_words := 'ACCESS, ADD, ALL, ALTER, AND, ANY, ARRAY, AS, ASC, AT, AUDIT, AUTHID, AVG, BEGIN, BETWEEN, BINARY_INTEGER, ';
5447 l_key_words := l_key_words||'BODY, BOOLEAN, BULK, BY, CASE, CHAR, CHAR_BASE, CHECK, CLOSE, CLUSTER, COALESCE, COLLECT, ';
5448 l_key_words := l_key_words||'COLUMN, COMMENT, COMMIT, COMPRESS, CONNECT, CONSTANT, CREATE, CURRENT, CURRVAL, CURSOR, DATE, ';
5449 l_key_words := l_key_words||'DAY, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISTINCT, DO, DROP, ELSE, ELSIF, END, ';
5450 l_key_words := l_key_words||'EXCEPTION, EXCLUSIVE, EXECUTE, EXISTS, EXIT, EXTENDS, EXTRACT, FALSE, FETCH, FILE, FLOAT, ';
5451 l_key_words := l_key_words||'FOR, FORALL, FROM, FUNCTION, GOTO, GRANT, GROUP, HAVING, HEAP, HOUR, IDENTIFIED, IF, ';
5452 l_key_words := l_key_words||'IMMEDIATE, IN, INCREMENT, INDEX, INDICATOR, INITIAL, INSERT, INTEGER, INTERFACE, ';
5453 l_key_words := l_key_words||'INTERSECT, INTERVAL, INTO, IS, ISOLATION, JAVA, LEVEL, LIKE, LIMITED, LOCK, LONG, LOOP, ';
5454 l_key_words := l_key_words||'MAX, MAXEXTENTS, MIN, MINUS, MINUTE, MLSLABEL, MOD, MODE, MODIFY, MONTH, NATURAL, NATURALN, ';
5455 l_key_words := l_key_words||'NEW, NEXTVAL, NOAUDIT, NOCOMPRESS, NOCOPY, NOT, NOWAIT, NULL, NULLIF, NUMBER, NUMBER_BASE, ';
5456 l_key_words := l_key_words||'OCIROWID, OF, OFFLINE, ON, ONLINE, OPAQUE, OPEN, OPERATOR, OPTION, OR, ORDER, ORGANIZATION, ';
5457 l_key_words := l_key_words||'OTHERS, OUT, PACKAGE, PARTITION, PCTFREE, PLS_INTEGER, POSITIVE, POSITIVEN, PRAGMA, PRIOR, ';
5458 l_key_words := l_key_words||'PRIVATE, PRIVILEGES, PROCEDURE, PUBLIC, RAISE, RANGE, RAW, REAL, RECORD, REF, RELEASE, ';
5459 l_key_words := l_key_words||'RENAME, RESOURCE, RETURN, REVERSE, REVOKE, ROLLBACK, ROW, ROWID, ROWNUM, ROWS, ROWTYPE, ';
5460 l_key_words := l_key_words||'SAVEPOINT, SECOND, SELECT, SEPARATE, SESSION, SET, SHARE, SIZE, SMALLINT, SPACE, SQL, ';
5461 l_key_words := l_key_words||'SQLCODE, SQLERRM, START, STDDEV, SUBTYPE, SUCCESSFUL, SUM, SYNONYM, SYSDATE, TABLE, THEN, ';
5462 l_key_words := l_key_words||'TIME, TIMESTAMP, TIMEZONE_ABBR, TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_REGION, TO, ';
5463 l_key_words := l_key_words||'TRIGGER, TRUE, TYPE, UI, UID, UNION, UNIQUE, UPDATE, USER, VALIDATE, VALUES, VARCHAR, ';
5464 l_key_words := l_key_words||'VARCHAR2, VIEW, WHENEVER, WHERE, WITH ';
5465 l_value := UPPER(p_value);
5466 WHILE (is_more( p_dim_short_names => l_key_words
5467 , p_dim_name => l_result)
5468 ) LOOP
5469 IF(l_result = l_value) THEN
5470 l_flag := TRUE;
5471 EXIT;
5472 END IF;
5473 END LOOP;
5474 RETURN l_flag;
5475 END IF;
5476 END is_SQL_Key_Word;
5477
5478 FUNCTION get_bis_dimension_id
5479 (
5480 p_dim_short_name IN VARCHAR2
5481 ) RETURN NUMBER IS
5482 CURSOR c_dim_short_name IS
5483 SELECT dimension_id
5484 FROM BIS_DIMENSIONS
5485 WHERE short_name = p_dim_short_name;
5486
5487 l_dim_id BISFV_DIMENSION_LEVELS.dimension_id%TYPE;
5488 BEGIN
5489 IF (c_dim_short_name%ISOPEN) THEN
5490 CLOSE c_dim_short_name;
5491 END IF;
5492 OPEN c_dim_short_name;
5493 FETCH c_dim_short_name INTO l_dim_id;
5494 CLOSE c_dim_short_name;
5495 RETURN l_dim_id;
5496 END get_bis_dimension_id;
5497
5498 /********************************************************************************
5499 WARNING : -
5500 This function will return false if any changes to Dimensions, Dimension-Objects
5501 will results in structural changes. This is designed to fulfil the UI screen
5502 need and not a generic function so it should not be called internally from any
5503 other APIs without proper impact analysis.
5504 ********************************************************************************/
5505 FUNCTION is_KPI_Flag_For_DimObject
5506 ( p_dim_obj_short_name IN VARCHAR2
5507 , p_Source IN VARCHAR2
5508 , p_source_table IN VARCHAR2
5509 , p_table_column IN VARCHAR2
5510 , p_prototype_default_value IN VARCHAR2
5511 , p_maximum_code_size IN NUMBER
5512 , p_maximum_name_size IN NUMBER
5513 , p_dim_short_names IN VARCHAR2
5514 ) RETURN VARCHAR2 IS
5515 l_Msg_Data VARCHAR2(32000);
5516 l_msg_count NUMBER;
5517
5518 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
5519 l_dim_Grp_name BSC_SYS_DIM_GROUPS_TL.short_name%TYPE;
5520 l_MTab_Tbl BSC_BIS_DIM_OBJ_PUB.KPI_Dim_Set_Table_Type;
5521
5522 l_count NUMBER;
5523 l_strut_flag BOOLEAN := FALSE;
5524 l_child_struct_flag BOOLEAN := FALSE;
5525 l_flag BOOLEAN;
5526 l_counter NUMBER := 0;
5527 l_duplicate_flag BOOLEAN;
5528
5529 l_kpi_names VARCHAR2(8000);
5530 l_new_dim_Grps VARCHAR2(8000);
5531 l_old_dim_Grps VARCHAR2(8000);
5532 l_child_dim_obj_list VARCHAR2 (32000);
5533
5534 CURSOR c_Old_Dim_Obj_Rec IS
5535 SELECT dim_level_id
5536 , level_table_name
5537 , user_key_size
5538 , disp_key_size
5539 , NVL(source, 'BSC')
5540 , abbreviation
5541 , level_pk_col
5542 FROM BSC_SYS_DIM_LEVELS_VL
5543 WHERE short_name = p_dim_obj_short_name;
5544
5545 CURSOR c_Dimension_Names IS
5546 SELECT Short_Name
5547 FROM BSC_SYS_DIM_GROUPS_VL
5548 WHERE dim_group_id IN
5549 (SELECT dim_group_id
5550 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
5551 WHERE dim_level_id = l_bsc_dim_obj_rec.Bsc_Level_Id);
5552
5553 CURSOR c_Kpi_Dim_Set IS
5554 SELECT DISTINCT C.Name||'['||C.Indicator||']' Name
5555 , C.Indicator
5556 FROM BSC_KPI_DIM_LEVELS_B A
5557 , BSC_SYS_DIM_LEVELS_B D
5558 , BSC_KPIS_VL C
5559 WHERE A.Level_Table_Name = D.Level_Table_Name
5560 AND D.Dim_Level_Id = l_bsc_dim_obj_rec.Bsc_Level_Id
5561 AND C.share_flag <> 2
5562 AND C.Indicator = A.Indicator;
5563
5564 CURSOR c_Kpi_Dim_Set1 IS
5565 SELECT DISTINCT C.Name||'['||C.Indicator||']' Name
5566 ,C.Indicator
5567 FROM BSC_KPI_DIM_LEVELS_B A
5568 , BSC_SYS_DIM_LEVELS_B D
5569 , BSC_KPIS_VL C
5570 WHERE A.Level_Table_Name = D.Level_Table_Name
5571 AND C.share_flag <> 2
5572 AND C.Indicator = A.Indicator
5573 AND INSTR(','||l_child_dim_obj_list||',', ','||D.dim_level_id||',') > 0;
5574
5575 CURSOR c_Dim_Set_Kpi IS
5576 SELECT DISTINCT B.Name||'['||B.Indicator||']' Name
5577 ,B.Indicator
5578 FROM BSC_KPI_DIM_GROUPS A
5579 , BSC_KPIS_VL B
5580 , BSC_SYS_DIM_GROUPS_VL C
5581 WHERE A.INDICATOR = B.INDICATOR
5582 AND A.dim_group_id = C.Dim_Group_ID
5583 AND B.share_flag <> 2
5584 AND INSTR(l_new_dim_Grps, ','||C.Short_Name||',') > 0;
5585 BEGIN
5586
5587 FND_MSG_PUB.Initialize;
5588 IF ((p_dim_obj_short_name IS NULL) AND (p_Source IS NULL)) THEN
5589 RETURN NULL;
5590 END IF;
5591 IF (NOT BSC_UTILITY.isBscInProductionMode()) THEN
5592 RETURN NULL;
5593 END IF;
5594
5595 IF (p_dim_obj_short_name IS NOT NULL) THEN
5596 OPEN c_old_dim_obj_rec;
5597 FETCH c_old_dim_obj_rec
5598 INTO l_bsc_dim_obj_rec.Bsc_Level_Id
5599 , l_bsc_dim_obj_rec.Bsc_Level_Name
5600 , l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size
5601 , l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size
5602 , l_bsc_dim_obj_rec.Bsc_Source
5603 , l_bsc_dim_obj_rec.Bsc_Level_Abbreviation
5604 , l_bsc_dim_obj_rec.Bsc_Pk_Col;
5605 CLOSE c_old_dim_obj_rec;
5606 IF (l_bsc_dim_obj_rec.Bsc_Level_Id IS NULL) THEN
5607 RETURN NULL;
5608 END IF;
5609 IF (l_bsc_dim_obj_rec.Bsc_Source <> 'BSC') THEN
5610 RETURN NULL;
5611 END IF;
5612 IF ((l_bsc_dim_obj_rec.Bsc_Level_Name <> NVL(p_source_table, l_bsc_dim_obj_rec.Bsc_Level_Name)) OR
5613 (l_bsc_dim_obj_rec.Bsc_Pk_Col <> NVL(p_table_column, l_bsc_dim_obj_rec.Bsc_Pk_Col)))THEN
5614 l_strut_flag := TRUE;
5615 END IF;
5616
5617 l_counter :=0;
5618
5619 IF (l_strut_flag) THEN
5620 FOR cd IN c_kpi_dim_set LOOP
5621 l_MTab_Tbl(l_counter).p_kpi_id := cd.Indicator;
5622 l_MTab_Tbl(l_counter).p_Name := cd.Name;
5623 l_counter := l_counter + 1;
5624 END LOOP;
5625 END IF;
5626 ELSIF (p_Source <> 'BSC') THEN
5627 RETURN NULL;
5628 END IF;
5629 l_new_dim_Grps := ',';
5630 IF ((l_bsc_dim_obj_rec.Bsc_Level_Id IS NULL) AND (p_dim_short_names IS NOT NULL)) THEN
5631 l_old_dim_Grps := UPPER(p_dim_short_names);
5632 WHILE (is_more(p_dim_short_names => l_old_dim_Grps
5633 , p_dim_name => l_dim_Grp_name
5634 )) LOOP
5635 l_strut_flag := TRUE;
5636 l_new_dim_Grps := l_new_dim_Grps||l_dim_Grp_name||',';
5637 END LOOP;
5638 ELSIF (p_dim_short_names IS NOT NULL) THEN
5639 l_old_dim_Grps := UPPER(p_dim_short_names);
5640 WHILE (is_more(p_dim_short_names => l_old_dim_Grps
5641 , p_dim_name => l_dim_Grp_name
5642 )) LOOP
5643 SELECT COUNT(0)
5644 INTO l_count
5645 FROM BSC_SYS_DIM_LEVELS_BY_GROUP A
5646 , BSC_SYS_DIM_GROUPS_VL B
5647 WHERE A.Dim_Level_Id = l_bsc_dim_obj_rec.Bsc_Level_Id
5648 AND B.Short_Name = l_dim_Grp_name
5649 AND B.Dim_Group_Id = A.Dim_Group_Id;
5650
5651 IF (l_count = 0) THEN
5652 l_strut_flag := TRUE;
5653 l_new_dim_Grps := l_new_dim_Grps||l_dim_Grp_name||',';
5654 END IF;
5655 END LOOP;
5656 END IF;
5657
5658 IF (l_bsc_dim_obj_rec.Bsc_Level_Id IS NOT NULL) THEN
5659 FOR cd IN c_dimension_names LOOP
5660 l_flag := TRUE;
5661 IF (p_dim_short_names IS NOT NULL) THEN
5662 l_old_dim_Grps := UPPER(p_dim_short_names);
5663
5664 WHILE (is_more(p_dim_short_names => l_old_dim_Grps
5665 , p_dim_name => l_dim_Grp_name
5666 )) LOOP
5667
5668 IF (l_dim_Grp_name = cd.Short_Name) THEN
5669 l_flag := FALSE;
5670 EXIT;
5671 END IF;
5672 END LOOP;
5673 END IF;
5674 IF (l_flag) THEN
5675 l_new_dim_Grps := l_new_dim_Grps||cd.Short_Name||',';
5676 END IF;
5677 END LOOP;
5678 END IF;
5679
5680 IF ((l_new_dim_Grps IS NOT NULL) AND (l_new_dim_Grps <> ',')) THEN
5681 FOR cd IN c_dim_set_kpi LOOP
5682 l_duplicate_flag := FALSE;
5683 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
5684 IF(l_MTab_Tbl(i).p_kpi_id=cd.Indicator)THEN
5685 l_duplicate_flag := TRUE;
5686 EXIT;
5687 END IF;
5688 END LOOP;
5689
5690 IF(NOT l_duplicate_flag) THEN
5691 l_MTab_Tbl(l_counter).p_kpi_id := cd.Indicator;
5692 l_MTab_Tbl(l_counter).p_Name := cd.Name;
5693 l_counter := l_counter + 1;
5694 END IF;
5695 END LOOP;
5696 END IF;
5697
5698 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
5699 IF(l_kpi_names IS NULL)THEN
5700 l_kpi_names := l_MTab_Tbl(i).p_Name;
5701 ELSE
5702 l_kpi_names := l_kpi_names||', '||l_MTab_Tbl(i).p_Name;
5703 END IF;
5704 END LOOP;
5705
5706 IF (l_kpi_names IS NOT NULL) THEN
5707 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_KPI_STRUCT_INVALID');
5708 FND_MESSAGE.SET_TOKEN('INDICATORS', l_kpi_names);
5709 FND_MSG_PUB.ADD;
5710 RAISE FND_API.G_EXC_ERROR;
5711 END IF;
5712 /***********************************************************
5713 Check for display format changes here
5714 /************************************************************/
5715 IF((l_kpi_names IS NULL) AND (p_Source ='BSC'))THEN
5716 IF(BSC_BIS_DIM_OBJ_PUB.is_Obj_Display_Frmt_Change
5717 (
5718 p_dim_obj_short_name => p_dim_obj_short_name
5719 , p_Source => p_Source
5720 , p_source_table => p_source_table
5721 , p_table_column => p_table_column
5722 , p_prototype_default_value=> p_prototype_default_value
5723 , p_maximum_code_size => p_maximum_code_size
5724 , p_maximum_name_size => p_maximum_name_size
5725 , p_dim_short_names => p_dim_short_names
5726 , x_obj_names => l_kpi_names
5727 ))THEN
5728 IF(l_kpi_names IS NOT NULL)THEN
5729 FND_MESSAGE.SET_NAME('BSC','BSC_CHANG_OBJ_DISP_FORMAT');
5730 FND_MESSAGE.SET_TOKEN('OBJS', l_kpi_names);
5731 FND_MSG_PUB.ADD;
5732 RAISE FND_API.G_EXC_ERROR;
5733 END IF;
5734 END IF;
5735 END IF;
5736
5737 RETURN NULL;
5738 EXCEPTION
5739 WHEN FND_API.G_EXC_ERROR THEN
5740 IF (l_Msg_Data IS NULL) THEN
5741 FND_MSG_PUB.Count_And_Get
5742 ( p_encoded => FND_API.G_FALSE
5743 , p_count => l_msg_count
5744 , p_data => l_Msg_Data
5745 );
5746 END IF;
5747 RETURN l_Msg_Data;
5748 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5749 IF (l_Msg_Data IS NULL) THEN
5750 FND_MSG_PUB.Count_And_Get
5751 ( p_encoded => FND_API.G_FALSE
5752 , p_count => l_msg_count
5753 , p_data => l_Msg_Data
5754 );
5755 END IF;
5756 RETURN l_Msg_Data;
5757 WHEN OTHERS THEN
5758 RETURN NULL;
5759 END is_KPI_Flag_For_DimObject;
5760
5761 FUNCTION is_config_impact_dim_obj
5762 ( p_Dim_Obj_Short_Name IN VARCHAR2
5763 , p_Dim_Short_Names IN VARCHAR2
5764 ) RETURN VARCHAR2 IS
5765
5766 TYPE index_by_table IS Record
5767 ( p_no_dim_object VARCHAR2(32000)
5768 );
5769 TYPE index_by_table_type IS TABLE OF index_by_table INDEX BY BINARY_INTEGER;
5770 TYPE index_by_table_kpi IS Record
5771 (
5772 kpi_id NUMBER
5773 , dim_set_id NUMBER
5774 );
5775 TYPE index_by_table_type_kpi IS TABLE OF index_by_table_kpi INDEX BY BINARY_INTEGER;
5776 dim_objs_array index_by_table_type;
5777 kpi_dim_set_array index_by_table_type_kpi;
5778 l_dim_sht_names VARCHAR2(32000);
5779 l_dim_short_name VARCHAR2(32000);
5780 l_kpi_id NUMBER;
5781 l_dim_set_id NUMBER;
5782 l_is_found BOOLEAN;
5783 l_count_temp NUMBER;
5784 l_Msg_Data VARCHAR2(32000);
5785 l_msg_count NUMBER;
5786
5787 CURSOR cr_kpidimset_dim IS
5788 SELECT A. INDICATOR
5789 ,A.DIM_SET_ID
5790 FROM BSC_KPI_DIM_GROUPS A
5791 ,BSC_SYS_DIM_GROUPS_VL B
5792 WHERE A.DIM_GROUP_ID = B.DIM_GROUP_ID
5793 AND B.SHORT_NAME = l_dim_short_name;
5794
5795 CURSOR cr_dimobj_in_dimset IS
5796 SELECT B.SHORT_NAME
5797 FROM BSC_SYS_DIM_LEVELS_B B
5798 ,BSC_KPI_DIM_LEVEL_PROPERTIES KDL
5799 WHERE B.DIM_LEVEL_ID = KDL.DIM_LEVEL_ID
5800 AND KDL.indicator = l_kpi_id
5801 AND KDL.dim_set_id = l_dim_set_id;
5802
5803 i NUMBER;
5804 l_no_dim_object VARCHAR2(32000);
5805
5806 BEGIN
5807
5808 FND_MSG_PUB.Initialize;
5809 IF(p_Dim_Short_Names IS NOT NULL) THEN
5810 l_dim_sht_names := p_Dim_Short_Names;
5811 WHILE(Is_More(p_dim_short_names => l_dim_sht_names,p_dim_name =>l_dim_short_name)) LOOP
5812 OPEN cr_kpidimset_dim ;
5813 -- bug#3405498 meastmon 28-jan-2004: The following is not supported in 8i
5814 --FETCH cr_kpidimset_dim BULK COLLECT INTO kpi_dim_set_array;
5815 kpi_dim_set_array.delete;
5816 i:= 0;
5817 LOOP
5818 FETCH cr_kpidimset_dim INTO l_kpi_id, l_dim_set_id;
5819 EXIT WHEN cr_kpidimset_dim%NOTFOUND;
5820 i:= i+1;
5821 kpi_dim_set_array(i).kpi_id := l_kpi_id;
5822 kpi_dim_set_array(i).dim_set_id := l_dim_set_id;
5823 END LOOP;
5824 CLOSE cr_kpidimset_dim;
5825
5826 FOR index_loop IN 1..(kpi_dim_set_array.COUNT) LOOP
5827 l_kpi_id := kpi_dim_set_array(index_loop).kpi_id;
5828 l_dim_set_id := kpi_dim_set_array(index_loop).dim_set_id;
5829 l_is_found := FALSE;
5830 IF(cr_dimobj_in_dimset%ISOPEN) THEN
5831 CLOSE cr_dimobj_in_dimset;
5832 END IF;
5833 OPEN cr_dimobj_in_dimset;
5834 -- bug#3405498 meastmon 28-jan-2004: The following is not supported in 8i
5835 --FETCH cr_dimobj_in_dimset BULK COLLECT INTO dim_objs_array;
5836 dim_objs_array.delete;
5837 i:= 0;
5838 LOOP
5839 FETCH cr_dimobj_in_dimset INTO l_no_dim_object;
5840 EXIT WHEN cr_dimobj_in_dimset%NOTFOUND;
5841 i := i+1;
5842 dim_objs_array(i).p_no_dim_object := l_no_dim_object;
5843 END LOOP;
5844 CLOSE cr_dimobj_in_dimset;
5845
5846 FOR index_loop IN 1..(dim_objs_array.COUNT) LOOP
5847 IF(p_Dim_Obj_Short_Name = dim_objs_array(index_loop).p_no_dim_object) THEN
5848 l_is_found := TRUE;
5849 END IF;
5850 END LOOP;
5851 IF((l_is_found = FALSE) AND (dim_objs_array.COUNT >= BSC_BIS_KPI_MEAS_PUB.Config_Limit_Dim)) THEN
5852 FND_MESSAGE.SET_NAME('BSC','BSC_PMD_IMPACT_KPI_SPACE');
5853 FND_MESSAGE.SET_TOKEN('CONTINUE', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'YES'), TRUE);
5854 FND_MESSAGE.SET_TOKEN('CANCEL', BSC_APPS.Get_Lookup_Value('BSC_UI_KPIDESIGNER', 'NO'), TRUE);
5855 FND_MSG_PUB.ADD;
5856 RAISE FND_API.G_EXC_ERROR;
5857 END IF;
5858 END LOOP;
5859 END LOOP;
5860 END IF;
5861 IF(cr_dimobj_in_dimset%ISOPEN) THEN
5862 CLOSE cr_dimobj_in_dimset;
5863 END IF;
5864 IF(cr_kpidimset_dim%ISOPEN) THEN
5865 CLOSE cr_kpidimset_dim;
5866 END IF;
5867 RETURN NULL;
5868 EXCEPTION
5869 WHEN FND_API.G_EXC_ERROR THEN
5870 IF (l_Msg_Data IS NULL) THEN
5871 FND_MSG_PUB.Count_And_Get
5872 ( p_encoded => FND_API.G_FALSE
5873 , p_count => l_msg_count
5874 , p_data => l_Msg_Data
5875 );
5876 END IF;
5877 IF(cr_kpidimset_dim%ISOPEN) THEN
5878 CLOSE cr_kpidimset_dim;
5879 END IF;
5880 IF(cr_dimobj_in_dimset%ISOPEN) THEN
5881 CLOSE cr_dimobj_in_dimset;
5882 END IF;
5883 RETURN l_Msg_Data;
5884 WHEN OTHERS THEN
5885 IF(cr_kpidimset_dim%ISOPEN) THEN
5886 CLOSE cr_kpidimset_dim;
5887 END IF;
5888 IF(cr_dimobj_in_dimset%ISOPEN) THEN
5889 CLOSE cr_dimobj_in_dimset;
5890 END IF;
5891 RETURN NULL;
5892 END is_config_impact_dim_obj;
5893 /*******************************************************************************
5894 ********************************************************************************/
5895 FUNCTION Get_Dim_Obj_Source
5896 ( p_dim_obj_id IN NUMBER := NULL
5897 , p_short_Name IN VARCHAR2 := NULL
5898 ) RETURN VARCHAR2 IS
5899 l_Data_Source BSC_SYS_DIM_LEVELS_B.Source%TYPE := NULL;
5900
5901 CURSOR c_dim_obj_source_id IS
5902 SELECT Source
5903 FROM BSC_SYS_DIM_LEVELS_B
5904 WHERE Dim_Level_Id = p_dim_obj_id;
5905
5906 CURSOR c_dim_obj_source_name IS
5907 SELECT Source
5908 FROM BSC_SYS_DIM_LEVELS_B
5909 WHERE Short_Name = p_short_Name;
5910 BEGIN
5911 IF (p_dim_obj_id IS NOT NULL) THEN
5912 IF (c_dim_obj_source_id%ISOPEN) THEN
5913 CLOSE c_dim_obj_source_id;
5914 END IF;
5915 OPEN c_dim_obj_source_id;
5916 FETCH c_dim_obj_source_id INTO l_Data_Source;
5917 CLOSE c_dim_obj_source_id;
5918 ELSIF (p_short_Name IS NOT NULL) THEN
5919 IF (c_dim_obj_source_name%ISOPEN) THEN
5920 CLOSE c_dim_obj_source_name;
5921 END IF;
5922 OPEN c_dim_obj_source_name;
5923 FETCH c_dim_obj_source_name INTO l_Data_Source;
5924 CLOSE c_dim_obj_source_name;
5925 END IF;
5926 RETURN l_Data_Source;
5927 EXCEPTION
5928 WHEN OTHERS THEN
5929 IF (c_dim_obj_source_id%ISOPEN) THEN
5930 CLOSE c_dim_obj_source_id;
5931 END IF;
5932 IF (c_dim_obj_source_name%ISOPEN) THEN
5933 CLOSE c_dim_obj_source_name;
5934 END IF;
5935 RETURN NULL;
5936 END Get_Dim_Obj_Source;
5937 /*********************************************************************************************
5938 Returns the Dimension Object ID of BIS
5939 *********************************************************************************************/
5940 FUNCTION Get_Bis_Dim_Obj_ID
5941 ( p_Short_Name IN BIS_LEVELS.Short_Name%TYPE
5942 ) RETURN NUMBER IS
5943
5944 l_dim_id BIS_LEVELS.Level_ID%TYPE;
5945
5946 CURSOR c_Dim_Group_Id IS
5947 SELECT Level_ID
5948 FROM BIS_LEVELS
5949 WHERE Short_Name = p_Short_Name;
5950 BEGIN
5951 IF (c_Dim_Group_Id%ISOPEN) THEN
5952 CLOSE c_Dim_Group_Id;
5953 END IF;
5954 OPEN c_Dim_Group_Id;
5955 FETCH c_Dim_Group_Id INTO l_dim_id;
5956 CLOSE c_Dim_Group_Id;
5957 RETURN l_dim_id;
5958 EXCEPTION
5959 WHEN OTHERS THEN
5960 IF (c_Dim_Group_Id%ISOPEN) THEN
5961 CLOSE c_Dim_Group_Id;
5962 END IF;
5963 RETURN l_dim_id;
5964 END Get_Bis_Dim_Obj_ID;
5965
5966 /*********************************************************************************************
5967 Returns the Dimension Object ID of BSC
5968 *********************************************************************************************/
5969 FUNCTION Get_Bsc_Dim_Obj_ID
5970 ( p_Short_Name IN BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE
5971 ) RETURN NUMBER IS
5972
5973 l_dim_id BSC_SYS_DIM_LEVELS_B.Dim_Level_ID%TYPE;
5974
5975 CURSOR c_Dim_Group_Id IS
5976 SELECT Dim_Level_ID
5977 FROM BSC_SYS_DIM_LEVELS_B
5978 WHERE Short_Name = p_Short_Name;
5979 BEGIN
5980 IF (c_Dim_Group_Id%ISOPEN) THEN
5981 CLOSE c_Dim_Group_Id;
5982 END IF;
5983 OPEN c_Dim_Group_Id;
5984 FETCH c_Dim_Group_Id INTO l_dim_id;
5985 CLOSE c_Dim_Group_Id;
5986
5987 RETURN l_dim_id;
5988 EXCEPTION
5989 WHEN OTHERS THEN
5990 IF (c_Dim_Group_Id%ISOPEN) THEN
5991 CLOSE c_Dim_Group_Id;
5992 END IF;
5993 RETURN l_dim_id;
5994 END Get_Bsc_Dim_Obj_ID;
5995
5996 /*********************************************************************************************
5997 Refresh BSC-PMF Dimension Object View of BSC
5998 *********************************************************************************************/
5999 PROCEDURE Refresh_BSC_PMF_Dim_View
6000 ( p_Short_Name IN VARCHAR2
6001 , x_return_status OUT NOCOPY VARCHAR2
6002 , x_msg_count OUT NOCOPY NUMBER
6003 , x_msg_data OUT NOCOPY VARCHAR2
6004 ) IS
6005 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
6006 l_flag BOOLEAN;
6007
6008 CURSOR c_Pmf_Dim_Obj is
6009 SELECT A.Short_Name
6010 , A.Source PMF_Source
6011 , A.Level_Values_View_Name
6012 , A.Hide_In_Design
6013 , B.Level_Table_Name
6014 , B.Dim_Level_Id
6015 FROM BIS_LEVELS A
6016 , BSC_SYS_DIM_LEVELS_B B
6017 WHERE A.Short_Name = B.Short_Name
6018 AND B.Source = 'PMF'
6019 AND A.Source = 'OLTP';
6020
6021 -- Cursor to filter out by SHORT_NAME
6022 CURSOR c_Pmf_Dim_Obj_SN is
6023 SELECT A.Short_Name
6024 , A.Source PMF_Source
6025 , A.Level_Values_View_Name
6026 , A.Hide_In_Design
6027 , B.Level_Table_Name
6028 , B.Dim_Level_Id
6029 FROM BIS_LEVELS A
6030 , BSC_SYS_DIM_LEVELS_B B
6031 WHERE A.Short_Name = B.Short_Name
6032 AND B.Source = 'PMF'
6033 AND A.Source = 'OLTP'
6034 AND B.Short_Name = p_Short_Name;
6035 BEGIN
6036
6037 IF (p_Short_Name IS NULL) THEN
6038 FOR PMF_CD IN c_Pmf_Dim_Obj LOOP
6039 IF (NVL(PMF_CD.Hide_In_Design,'F') <> 'T') THEN
6040 l_bsc_dim_obj_rec.Bsc_Source := 'PMF';
6041 l_bsc_dim_obj_rec.Bsc_Level_View_Name := PMF_CD.Level_Table_Name; -- name of BSC View to be refereshed
6042 l_bsc_dim_obj_rec.Bsc_Level_Name := PMF_CD.Level_Values_View_Name;-- name of PMF View
6043 l_bsc_dim_obj_rec.Bsc_Level_Short_Name := PMF_CD.Short_Name;
6044 l_bsc_dim_obj_rec.Source := PMF_CD.PMF_Source;
6045 l_bsc_dim_obj_rec.Bsc_Level_Id := PMF_CD.Dim_Level_Id;
6046
6047 -- Calls Initialize_Pmf_Recs and Create_Pmf_Views APIs
6048 BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs
6049 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
6050 , x_return_status => x_return_status
6051 , x_msg_count => x_msg_count
6052 , x_msg_data => x_msg_data
6053 );
6054 END IF;
6055
6056 END LOOP;
6057 ELSE
6058 FOR PMF_CD IN c_Pmf_Dim_Obj_SN LOOP
6059 IF (NVL(PMF_CD.Hide_In_Design,'F') <> 'T') THEN
6060 l_bsc_dim_obj_rec.Bsc_Source := 'PMF';
6061 l_bsc_dim_obj_rec.Bsc_Level_View_Name := PMF_CD.Level_Table_Name; -- name of BSC View to be refereshed
6062 l_bsc_dim_obj_rec.Bsc_Level_Name := PMF_CD.Level_Values_View_Name;-- name of PMF View
6063 l_bsc_dim_obj_rec.Bsc_Level_Short_Name := PMF_CD.Short_Name;
6064 l_bsc_dim_obj_rec.Source := PMF_CD.PMF_Source;
6065 l_bsc_dim_obj_rec.Bsc_Level_Id := PMF_CD.Dim_Level_Id;
6066 -- Calls Initialize_Pmf_Recs and Create_Pmf_Views APIs
6067 BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs
6068 ( p_Dim_Level_Rec => l_bsc_dim_obj_rec
6069 , x_return_status => x_return_status
6070 , x_msg_count => x_msg_count
6071 , x_msg_data => x_msg_data
6072 );
6073 END IF;
6074
6075 END LOOP;
6076 END IF;
6077 EXCEPTION
6078 WHEN FND_API.G_EXC_ERROR THEN
6079 IF (x_msg_data IS NULL) THEN
6080 FND_MSG_PUB.Count_And_Get
6081 ( p_encoded => FND_API.G_FALSE
6082 , p_count => x_msg_count
6083 , p_data => x_msg_data
6084 );
6085 END IF;
6086 x_return_status := FND_API.G_RET_STS_ERROR;
6087 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6088 IF (x_msg_data IS NULL) THEN
6089 FND_MSG_PUB.Count_And_Get
6090 ( p_encoded => FND_API.G_FALSE
6091 , p_count => x_msg_count
6092 , p_data => x_msg_data
6093 );
6094 END IF;
6095 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6096 WHEN OTHERS THEN
6097 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6098 IF (x_msg_data IS NOT NULL) THEN
6099 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Refresh_BSC_PMF_Dim_View';
6100 ELSE
6101 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Refresh_BSC_PMF_Dim_View';
6102 END IF;
6103 END Refresh_BSC_PMF_Dim_View;
6104 --=======================================================================================
6105
6106 /*********************************************************************************************
6107 Remove BSC-PMF EDW Dimension Object View of BSC
6108 *********************************************************************************************/
6109 PROCEDURE Remove_BSC_PMF_EDW_Dim_View
6110 ( x_return_status OUT NOCOPY VARCHAR2
6111 , x_msg_count OUT NOCOPY NUMBER
6112 , x_msg_data OUT NOCOPY VARCHAR2
6113 ) IS
6114 l_sql VARCHAR2(50);
6115 CURSOR c_Pmf_Dim_Obj_Edw is
6116 SELECT A.Short_Name
6117 , B.Level_Table_Name
6118 FROM BIS_LEVELS A
6119 , BSC_SYS_DIM_LEVELS_B B
6120 WHERE A.Short_Name = B.Short_Name
6121 AND B.Source = 'PMF'
6122 AND A.Source = 'EDW'
6123 AND B.TABLE_TYPE = 1; -- Identify EDW with existing Views
6124 BEGIN
6125
6126 FOR PMF_EDW IN c_Pmf_Dim_Obj_Edw LOOP
6127 UPDATE BSC_SYS_DIM_LEVELS_B
6128 SET Table_Type = -1
6129 WHERE Short_Name = PMF_EDW.Short_Name;
6130
6131 l_sql := 'DROP VIEW ' || PMF_EDW.Level_Table_Name;
6132 BSC_APPS.Do_Ddl_AT(l_sql, ad_ddl.drop_view, PMF_EDW.Level_Table_Name, BSC_APPS.fnd_apps_schema, BSC_APPS.bsc_apps_short_name);
6133 END LOOP;
6134 EXCEPTION
6135 WHEN OTHERS THEN
6136 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6137 IF (x_msg_data IS NOT NULL) THEN
6138 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Remove_BSC_PMF_EDW_Dim_View';
6139 ELSE
6140 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Remove_BSC_PMF_EDW_Dim_View';
6141 END IF;
6142 END Remove_BSC_PMF_EDW_Dim_View;
6143 --=======================================================================================
6144
6145 PROCEDURE Init_Create_Pmf_Recs
6146 ( p_Dim_Level_Rec IN OUT NOCOPY BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
6147 , x_return_status OUT NOCOPY VARCHAR2
6148 , x_msg_count OUT NOCOPY NUMBER
6149 , x_msg_data OUT NOCOPY VARCHAR2
6150 ) IS
6151 l_flag BOOLEAN := TRUE;
6152 BEGIN
6153 FND_MSG_PUB.Initialize;
6154 x_return_status := FND_API.G_RET_STS_SUCCESS;
6155
6156 l_flag := BSC_BIS_DIM_OBJ_PUB.Initialize_Pmf_Recs
6157 ( p_Dim_Level_Rec => p_Dim_Level_Rec
6158 , x_return_status => x_return_status
6159 , x_msg_count => x_msg_count
6160 , x_msg_data => x_msg_data
6161 );
6162
6163 IF (l_flag) THEN
6164 l_flag := BSC_BIS_DIM_OBJ_PUB.Create_Pmf_Views
6165 ( p_Dim_Level_Rec => p_Dim_Level_Rec
6166 , x_return_status => x_return_status
6167 , x_msg_count => x_msg_count
6168 , x_msg_data => x_msg_data
6169 );
6170 END IF;
6171
6172 -- This is called from concurrent programs and upgrade scripts
6173 -- so, we need to process all the Dimension Objects, even if some fail
6174 EXCEPTION
6175 WHEN FND_API.G_EXC_ERROR THEN
6176 IF (x_msg_data IS NULL) THEN
6177 FND_MSG_PUB.Count_And_Get
6178 ( p_encoded => FND_API.G_FALSE
6179 , p_count => x_msg_count
6180 , p_data => x_msg_data
6181 );
6182 END IF;
6183 x_return_status := FND_API.G_RET_STS_ERROR;
6184 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6185 IF (x_msg_data IS NULL) THEN
6186 FND_MSG_PUB.Count_And_Get
6187 ( p_encoded => FND_API.G_FALSE
6188 , p_count => x_msg_count
6189 , p_data => x_msg_data
6190 );
6191 END IF;
6192 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6193 WHEN NO_DATA_FOUND THEN
6194 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6195 IF (x_msg_data IS NOT NULL) THEN
6196 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs ';
6197 ELSE
6198 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs ';
6199 END IF;
6200 WHEN OTHERS THEN
6201 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6202 IF (x_msg_data IS NOT NULL) THEN
6203 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs ';
6204 ELSE
6205 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Init_Create_Pmf_Recs ';
6206 END IF;
6207 END Init_Create_Pmf_Recs;
6208 --=======================================================================================
6209 FUNCTION Get_Table_Type_Value(
6210 p_Short_Name IN BSC_SYS_DIM_LEVELS_B.Short_Name%TYPE
6211 ) RETURN NUMBER IS
6212
6213 l_Return NUMBER;
6214
6215 BEGIN
6216
6217 SELECT TABLE_TYPE
6218 INTO l_Return
6219 FROM BSC_SYS_DIM_LEVELS_B
6220 WHERE SHORT_NAME = p_Short_Name;
6221
6222 RETURN l_Return;
6223
6224 EXCEPTION
6225 WHEN OTHERS THEN
6226 RETURN -1;
6227 END Get_Table_Type_Value;
6228
6229
6230 FUNCTION Is_Default_Value(
6231 p_value IN VARCHAR2
6232 ) RETURN BOOLEAN IS
6233 BEGIN
6234 IF (p_value is NULL) THEN
6235 RETURN FALSE;
6236 END IF;
6237
6238 IF (UPPER(p_value) = 'PMD_1') THEN
6239 RETURN TRUE;
6240 ELSE
6241 RETURN FALSE;
6242 END IF;
6243 EXCEPTION
6244 WHEN OTHERS THEN
6245 RETURN FALSE;
6246 END Is_Default_Value;
6247 /********************************************************************
6248 Check no of independent dimension objects in dimension set
6249 *********************************************************************/
6250
6251 PROCEDURE check_indp_dimobjs
6252 (
6253 p_dim_id IN NUMBER
6254 , x_return_status OUT NOCOPY VARCHAR2
6255 , x_msg_count OUT NOCOPY NUMBER
6256 , x_msg_data OUT NOCOPY VARCHAR2
6257 ) IS
6258 l_kpi_id NUMBER;
6259 l_dim_set_id NUMBER;
6260 l_count NUMBER;
6261 l_indp_dimobj NUMBER;
6262 l_affected_kpis VARCHAR2(32000);
6263 l_kpi_name VARCHAR2(20000);
6264 l_is_kpi_affected BOOLEAN;
6265
6266 CURSOR cr_kpi_dimset_dimobj IS
6267 SELECT LEV.INDICATOR,LEV.dim_set_id,COUNT(LEV.dim_level_index)
6268 FROM BSC_KPI_DIM_LEVELS_B LEV,
6269 BSC_KPI_DIM_LEVEL_PROPERTIES prop
6270 WHERE lev.INDICATOR = prop.INDICATOR
6271 AND lev.dim_Set_id = prop.dim_set_id
6272 AND prop.dim_level_id = p_dim_id
6273 GROUP BY lev.INDICATOR,lev.dim_set_id;
6274
6275
6276 BEGIN
6277 l_is_kpi_affected := FALSE;
6278 OPEN cr_kpi_dimset_dimobj;
6279 LOOP
6280 FETCH cr_kpi_dimset_dimobj INTO l_kpi_id,l_dim_set_id,l_count;
6281 EXIT WHEN cr_kpi_dimset_dimobj%NOTFOUND;
6282 IF( l_count > bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
6283 l_indp_dimobj := 0;
6284 l_indp_dimobj := bsc_utility.get_nof_independent_dimobj
6285 ( p_Kpi_Id => l_kpi_id
6286 , p_Dim_Set_Id => l_dim_set_id
6287 );
6288 IF(l_indp_dimobj >bsc_utility.NO_IND_DIM_OBJ_LIMIT) THEN
6289 SELECT NAME INTO l_kpi_name
6290 FROM BSC_KPIS_VL
6291 WHERE INDICATOR = l_kpi_id;
6292
6293 IF(l_affected_kpis IS NULL) THEN
6294 l_affected_kpis := '['||l_kpi_name||']';
6295 ELSE
6296 IF(INSTR(l_affected_kpis,l_kpi_name) = 0) THEN
6297 l_affected_kpis := l_affected_kpis ||','|| '['||l_kpi_name||']';
6298 END IF;
6299 END IF;
6300 l_is_kpi_affected := TRUE;
6301 END IF;
6302
6303 END IF;
6304 END LOOP;
6305 CLOSE cr_kpi_dimset_dimobj;
6306 IF(l_is_kpi_affected) THEN
6307 FND_MESSAGE.SET_NAME('BSC','BSC_IND_DIMOBJ_LIMIT');
6308 FND_MESSAGE.SET_TOKEN('NAME_LIST',l_affected_kpis);
6309 FND_MSG_PUB.ADD;
6310 RAISE FND_API.G_EXC_ERROR;
6311 END IF;
6312
6313 EXCEPTION
6314
6315 WHEN FND_API.G_EXC_ERROR THEN
6316 IF (cr_kpi_dimset_dimobj%ISOPEN) THEN
6317 CLOSE cr_kpi_dimset_dimobj;
6318 END IF;
6319 IF (x_msg_data IS NULL) THEN
6320 FND_MSG_PUB.Count_And_Get
6321 ( p_encoded => FND_API.G_FALSE
6322 , p_count => x_msg_count
6323 , p_data => x_msg_data
6324 );
6325 END IF;
6326
6327 x_return_status := FND_API.G_RET_STS_ERROR;
6328 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6329 IF (cr_kpi_dimset_dimobj%ISOPEN) THEN
6330 CLOSE cr_kpi_dimset_dimobj;
6331 END IF;
6332 IF (x_msg_data IS NULL) THEN
6333 FND_MSG_PUB.Count_And_Get
6334 ( p_encoded => FND_API.G_FALSE
6335 , p_count => x_msg_count
6336 , p_data => x_msg_data
6337 );
6338 END IF;
6339 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6340
6341 WHEN OTHERS THEN
6342 IF (cr_kpi_dimset_dimobj%ISOPEN) THEN
6343 CLOSE cr_kpi_dimset_dimobj;
6344 END IF;
6345 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6346 IF (x_msg_data IS NOT NULL) THEN
6347 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
6348 ELSE
6349 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object ';
6350 END IF;
6351
6352 END check_indp_dimobjs;
6353
6354 /*=======================================================================================
6355 This procedure will strip off the invalid characters(NLS Characters,some invalid characters
6356 from the given string and returns the valid string
6357 =======================================================================================*/
6358 FUNCTION get_valid_ddlentry_frm_name(
6359 p_name IN VARCHAR2
6360 )RETURN VARCHAR2 IS
6361
6362 l_asc number;
6363 l_valid_string varchar2(80);
6364 l_char varchar2(1);
6365 l_alias VARCHAR2(30);
6366
6367 BEGIN
6368 l_valid_string := null;
6369 -- Valid values - numbers/alphabets/underscore
6370 for i in 1..length(p_name) loop
6371 begin
6372 l_char := substr(p_name, i, 1);
6373 exception
6374 when others then
6375 l_char := ' ';/* comsuming this exception as substr() will throw exception for NLS charactes and whole procedure is not being executed */
6376 end;
6377
6378 l_asc := ascii(l_char);
6379 If ((l_asc >= 48 And l_asc <= 57)) or
6380 (l_asc >= 65 And l_asc <= 90) or
6381 (l_asc >= 97 And l_asc <= 122) or
6382 (l_asc = 95) Then
6383 l_valid_string := l_valid_string || l_char;
6384 end if;
6385 end loop;
6386
6387 RETURN l_valid_string;
6388
6389 EXCEPTION
6390 WHEN OTHERS THEN
6391 RETURN l_valid_string;
6392 END get_valid_ddlentry_frm_name;
6393 --=======================================================================================
6394 PROCEDURE Validate_PMF_Views
6395 ( p_Dim_Obj_Short_Name IN VARCHAR2
6396 , p_Dim_Obj_View_Name IN VARCHAR2
6397 , x_Return_Status OUT NOCOPY VARCHAR2
6398 , x_Msg_Count OUT NOCOPY NUMBER
6399 , x_Msg_Data OUT NOCOPY VARCHAR2
6400 )
6401 IS
6402 l_View_Return_Value NUMBER;
6403 l_Count NUMBER;
6404 l_Parent_Cols VARCHAR2(2000);
6405 l_View_Name VARCHAR2(30);
6406 l_Parent_Exists VARCHAR2(1);
6407
6408 CURSOR c_Rel_Levels IS
6409 SELECT R.SHORT_NAME CHILD_SHORT_NAME
6410 , R.RELATION_COL PARENT_COL
6411 , L.LEVEL_VALUES_VIEW_NAME VIEW_NAME
6412 FROM BSC_SYS_DIM_LEVEL_RELS_V R
6413 , BIS_LEVELS L
6414 WHERE R.SHORT_NAME = L.SHORT_NAME
6415 AND L.SHORT_NAME = p_Dim_Obj_Short_Name
6416 AND R.SOURCE = 'PMF';
6417
6418 BEGIN
6419
6420 FND_MSG_PUB.Initialize;
6421 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6422
6423 l_Count := 0;
6424 l_Parent_Cols := NULL;
6425
6426 FOR cRelLevels IN c_Rel_Levels LOOP
6427 IF (l_Count = 0) THEN
6428 l_Parent_Cols := cRelLevels.PARENT_COL;
6429 l_View_Name := cRelLevels.VIEW_NAME;
6430 ELSE
6431 l_Parent_Cols := l_Parent_Cols ||', '||cRelLevels.PARENT_COL;
6432 END IF;
6433 l_Count := l_Count + 1;
6434
6435 END LOOP;
6436
6437 l_Parent_Exists := FND_API.G_FALSE;
6438
6439 IF (l_Count = 0) THEN
6440 IF (p_Dim_Obj_View_Name IS NOT NULL) THEN
6441 l_View_Name := p_Dim_Obj_View_Name;
6442 ELSE
6443 BEGIN
6444 SELECT L.LEVEL_VALUES_VIEW_NAME
6445 INTO l_View_Name
6446 FROM BIS_LEVELS L
6447 WHERE L.SHORT_NAME = p_Dim_Obj_Short_Name;
6448 EXCEPTION
6449 WHEN OTHERS THEN
6450 l_View_Name := NULL;
6451 END;
6452 END IF;
6453 ELSIF (l_Count > 0) THEN
6454 l_Parent_Exists := FND_API.G_TRUE;
6455 END IF;
6456
6457 IF (p_Dim_Obj_Short_Name = 'HRI_PER_USRDR_H') THEN
6458 l_View_Return_Value := BSC_BIS_DIM_OBJ_PUB.Validate_PMF_Base_View_Mgr(
6459 p_View_Name => l_View_Name
6460 , p_Parent_Id_Exists => l_Parent_Exists
6461 , p_Parent_Column => l_Parent_Cols
6462 );
6463 ELSE
6464 l_View_Return_Value := BSC_BIS_DIM_OBJ_PUB.Validate_PMF_Base_View(
6465 p_View_Name => l_View_Name
6466 , p_Parent_Id_Exists => l_Parent_Exists
6467 , p_Parent_Column => l_Parent_Cols
6468 );
6469 END IF;
6470
6471 IF (l_View_Return_Value = C_TABLE_NOT_EXIST) THEN
6472 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6473 RAISE FND_API.G_EXC_ERROR;
6474 ELSIF (l_View_Return_Value = C_UNKNOWN_ERROR) THEN
6475 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6476 RAISE FND_API.G_EXC_ERROR;
6477 ELSIF (l_View_Return_Value = C_COLUMN_NOT_EXIST) THEN
6478 x_Msg_Data := 'BSC_DIM_VIEW_INVALID';
6479 RAISE FND_API.G_EXC_ERROR;
6480 END IF;
6481
6482
6483 EXCEPTION
6484 WHEN FND_API.G_EXC_ERROR THEN
6485 x_Return_Status := FND_API.G_RET_STS_ERROR;
6486 WHEN OTHERS THEN
6487 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6488 x_Return_Status := FND_API.G_RET_STS_ERROR;
6489 END Validate_PMF_Views;
6490
6491 /*
6492 Validates BSC type dim object view source
6493 */
6494 PROCEDURE Validate_BSC_Views
6495 ( p_Dim_Obj_Short_Name IN VARCHAR2
6496 , x_Return_Status OUT NOCOPY VARCHAR2
6497 , x_Msg_Count OUT NOCOPY NUMBER
6498 , x_Msg_Data OUT NOCOPY VARCHAR2
6499 )
6500 IS
6501
6502 l_flag bsc_sys_dim_levels_b.table_type%TYPE;
6503 CURSOR c_bsc_table_type_flag IS
6504 SELECT table_type
6505 FROM bsc_sys_dim_levels_b
6506 WHERE short_name = p_Dim_Obj_Short_Name;
6507
6508 BEGIN
6509
6510 FND_MSG_PUB.Initialize;
6511 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6512
6513 IF (c_bsc_table_type_flag%ISOPEN) THEN
6514 CLOSE c_bsc_table_type_flag;
6515 END IF;
6516
6517 OPEN c_bsc_table_type_flag;
6518 FETCH c_bsc_table_type_flag INTO l_flag;
6519
6520 IF (c_bsc_table_type_flag%FOUND) THEN
6521 IF (l_flag <> 1) THEN -- '1' means that BSC view exists
6522 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6523 RAISE FND_API.G_EXC_ERROR;
6524 END IF;
6525 END IF;
6526
6527 CLOSE c_bsc_table_type_flag;
6528
6529 EXCEPTION
6530 WHEN FND_API.G_EXC_ERROR THEN
6531 x_Return_Status := FND_API.G_RET_STS_ERROR;
6532 IF (c_bsc_table_type_flag%ISOPEN) THEN
6533 CLOSE c_bsc_table_type_flag;
6534 END IF;
6535 WHEN OTHERS THEN
6536 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6537 x_Return_Status := FND_API.G_RET_STS_ERROR;
6538 IF (c_bsc_table_type_flag%ISOPEN) THEN
6539 CLOSE c_bsc_table_type_flag;
6540 END IF;
6541 END Validate_BSC_Views;
6542
6543 /*
6544 Validates dim object view source.
6545 Called from Report Designer.
6546 */
6547 PROCEDURE Validate_Dim_object_Views
6548 ( p_Dim_Obj_Short_Name IN VARCHAR2
6549 , p_Dim_Obj_View_Name IN VARCHAR2
6550 , x_Return_Status OUT NOCOPY VARCHAR2
6551 , x_Msg_Count OUT NOCOPY NUMBER
6552 , x_Msg_Data OUT NOCOPY VARCHAR2
6553 )
6554 IS
6555 BEGIN
6556
6557 FND_MSG_PUB.Initialize;
6558 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6559
6560 IF ('PMF' = BIS_PMF_GET_DIMLEVELS_PVT.get_dim_level_source(p_Dim_Obj_Short_Name)) THEN
6561 IF (INSTR(p_Dim_Obj_Short_Name, 'FII_ROLLING_') = 0) THEN
6562 Validate_PMF_Views
6563 ( p_Dim_Obj_Short_Name => p_Dim_Obj_Short_Name
6564 , p_Dim_Obj_View_Name => p_Dim_Obj_View_Name
6565 , x_Return_Status => x_Return_Status
6566 , x_Msg_Count => x_Msg_Count
6567 , x_Msg_Data => x_Msg_Data
6568 );
6569 END IF;
6570 ELSE
6571 Validate_BSC_Views
6572 ( p_Dim_Obj_Short_Name => p_Dim_Obj_Short_Name
6573 , x_Return_Status => x_Return_Status
6574 , x_Msg_Count => x_Msg_Count
6575 , x_Msg_Data => x_Msg_Data
6576 );
6577 END IF;
6578
6579 EXCEPTION
6580 WHEN FND_API.G_EXC_ERROR THEN
6581 x_Return_Status := FND_API.G_RET_STS_ERROR;
6582 WHEN OTHERS THEN
6583 x_Msg_Data := 'BSC_DIM_VIEW_NOT_EXIST';
6584 x_Return_Status := FND_API.G_RET_STS_ERROR;
6585 END Validate_Dim_object_Views;
6586
6587 --=======================================================================================
6588 FUNCTION Validate_PMF_Base_View (
6589 p_View_Name IN VARCHAR2
6590 , p_Parent_Id_Exists IN VARCHAR2
6591 , p_Parent_Column IN VARCHAR2
6592 ) RETURN NUMBER IS
6593 l_Sql VARCHAR2(4000);
6594 l_Select_Clause VARCHAR2(4000);
6595 l_Id VARCHAR2(4000);
6596 l_Parent_Id VARCHAR2(4000);
6597 l_Value VARCHAR2(4000);
6598
6599 l_Count NUMBER := 0;
6600 BEGIN
6601
6602 IF (p_View_Name IS NULL) THEN
6603 RETURN C_TABLE_NOT_EXIST;
6604 END IF;
6605
6606 IF (p_Parent_Id_Exists = FND_API.G_TRUE) THEN
6607 IF (p_Parent_Column IS NOT NULL) THEN
6608 l_Select_Clause := C_SELECT_CLAUSE || ', ' || p_Parent_Column || ' ';
6609 ELSE
6610 l_Select_Clause := C_SELECT_PARENT_CLAUSE;
6611 END IF;
6612 ELSE
6613 l_Select_Clause := C_SELECT_CLAUSE;
6614 END IF;
6615
6616 l_Sql := C_SELECT || l_Select_Clause
6617 || C_FROM || p_View_Name
6618 || C_WHERE || C_WHERE_CLAUSE ;
6619
6620 IF (p_Parent_Id_Exists = FND_API.G_TRUE) THEN
6621 l_Sql := 'SELECT COUNT(1) FROM ('|| l_Sql || ')' ;
6622 EXECUTE IMMEDIATE l_Sql INTO l_Count;
6623 ELSE
6624 EXECUTE IMMEDIATE l_Sql INTO l_Id, l_Value;
6625 END IF;
6626
6627 RETURN C_SUCCESS_NO_ERROR;
6628
6629 EXCEPTION
6630 WHEN NO_DATA_FOUND THEN
6631 -- Return success, view is ok, but there is no data
6632 RETURN C_SUCCESS_NO_ERROR;
6633
6634 WHEN OTHERS THEN
6635 IF (SQLCODE = C_ORA_ERR_TAB_NOT_EXIST) THEN
6636 RETURN C_TABLE_NOT_EXIST;
6637 ELSIF ((SQLCODE = C_ORA_ERR_COL_NOT_EXIST) OR (SQLCODE = C_ORA_ERR_COL_NOT_EXIST1)) THEN
6638 RETURN C_COLUMN_NOT_EXIST;
6639 END IF;
6640
6641 RETURN C_UNKNOWN_ERROR;
6642 END Validate_PMF_Base_View;
6643
6644
6645 FUNCTION Validate_PMF_Base_View_Mgr (
6646 p_view_name IN VARCHAR2
6647 , p_parent_id_exists IN VARCHAR2
6648 , p_parent_column IN VARCHAR2
6649 ) RETURN NUMBER
6650 IS
6651 l_col_name VARCHAR2(30);
6652 l_view_status VARCHAR2(100);
6653 l_is_id BOOLEAN := FALSE;
6654 l_is_value BOOLEAN := FALSE;
6655 l_is_parent_id BOOLEAN := FALSE;
6656
6657 CURSOR c_column_names IS
6658 SELECT column_name
6659 FROM user_tab_columns
6660 WHERE table_name = p_view_name;
6661
6662 CURSOR c_view_status IS
6663 SELECT status
6664 FROM user_objects
6665 WHERE object_name = p_view_name
6666 AND object_type = 'VIEW';
6667 BEGIN
6668
6669 IF (p_view_name IS NULL) THEN
6670 RETURN C_TABLE_NOT_EXIST;
6671 END IF;
6672
6673 IF (c_view_status%ISOPEN) THEN
6674 CLOSE c_view_status;
6675 END IF;
6676 OPEN c_view_status;
6677 FETCH c_view_status INTO l_view_status;
6678 IF (l_view_status IS NULL OR UPPER(l_view_status) <> 'VALID') THEN
6679 RETURN C_TABLE_NOT_EXIST;
6680 END IF;
6681 CLOSE c_view_status ;
6682
6683 IF (c_column_names%ISOPEN) THEN
6684 CLOSE c_column_names;
6685 END IF;
6686 OPEN c_column_names;
6687 LOOP
6688 FETCH c_column_names INTO l_col_name;
6689 EXIT WHEN c_column_names%NOTFOUND;
6690 IF (UPPER(l_col_name) = 'ID') THEN
6691 l_is_id := TRUE;
6692 ELSIF (UPPER(l_col_name) = 'VALUE') THEN
6693 l_is_value := TRUE;
6694 ELSIF (UPPER(l_col_name) = p_parent_column) THEN
6695 l_is_parent_id := TRUE;
6696 END IF;
6697 END LOOP;
6698 CLOSE c_column_names ;
6699
6700 IF (p_parent_id_exists = FND_API.G_TRUE AND p_parent_column IS NOT NULL) THEN
6701 IF ((NOT l_is_id) OR (NOT l_is_value) OR (NOT l_is_parent_id)) THEN
6702 RETURN C_COLUMN_NOT_EXIST;
6703 END IF;
6704 ELSE
6705 IF ((NOT l_is_id) OR (NOT l_is_value)) THEN
6706 RETURN C_COLUMN_NOT_EXIST;
6707 END IF;
6708 END IF;
6709
6710 RETURN C_SUCCESS_NO_ERROR;
6711
6712 EXCEPTION
6713 WHEN OTHERS THEN
6714 IF (c_column_names%ISOPEN) THEN
6715 CLOSE c_column_names;
6716 END IF;
6717 IF (c_view_status%ISOPEN) THEN
6718 CLOSE c_view_status;
6719 END IF;
6720 RETURN C_UNKNOWN_ERROR;
6721 END Validate_PMF_Base_View_Mgr;
6722
6723
6724 FUNCTION check_sametype_dims
6725 ( p_dim_obj_name IN VARCHAR2
6726 , p_dim_obj_short_name IN VARCHAR2
6727 , p_dim_obj_source IN VARCHAR2
6728 , p_dim_short_names IN VARCHAR2
6729 , p_Restrict_Dim_Validate IN VARCHAR2 := NULL
6730 , x_return_status OUT NOCOPY VARCHAR2
6731 , x_msg_count OUT NOCOPY NUMBER
6732 , x_msg_data OUT NOCOPY VARCHAR2
6733 ) RETURN BOOLEAN
6734 IS
6735
6736 l_source VARCHAR2(20);
6737 l_true BOOLEAN;
6738 l_dim_obj_name VARCHAR2(32000);
6739 l_dim_name VARCHAR2(32000);
6740 l_dim_grp_id NUMBER;
6741 l_dim_short_name VARCHAR2(32000);
6742 l_count NUMBER;
6743 l_exist NUMBER;
6744
6745 CURSOR C_SOURCE_DIM IS
6746 SELECT DISTINCT SOURCE,DIM_NAME,DIM_ID,SHORT_NAME
6747 FROM BSC_BIS_DIM_VL
6748 WHERE SOURCE IS NOT NULL
6749 AND INSTR(','||p_dim_short_names ||',',','||short_name||',') > 0;
6750
6751 CURSOR C_SOURCE_DIM_OBJS IS
6752 SELECT SYS.SOURCE,SYS.SHORT_NAME,SYS.NAME
6753 FROM BSC_SYS_DIM_LEVELS_VL SYS,
6754 BSC_SYS_DIM_LEVELS_BY_GROUP GRP
6755 WHERE SYS.dim_level_id = GRP.dim_level_id
6756 AND GRP.dim_group_id = l_dim_grp_id;
6757
6758 BEGIN
6759 x_return_status := FND_API.G_RET_STS_SUCCESS;
6760 l_true := FALSE;
6761
6762 -- added to relax checking for mixed type of Dimension Objects within a Dimension
6763 -- for Autogenerated reports and removing the disctiction, BSC 5.3
6764 IF (p_Restrict_Dim_Validate IS NOT NULL OR BIS_UTILITIES_PUB.Enable_Generated_Source_Report = FND_API.G_FALSE) THEN
6765 FOR CTYPE IN C_SOURCE_DIM LOOP
6766 l_dim_name := CTYPE.DIM_NAME;
6767 l_dim_grp_id := CTYPE.DIM_ID;
6768 l_dim_short_name := CTYPE.SHORT_NAME;
6769
6770 SELECT COUNT(1) into l_count
6771 FROM BSC_SYS_DIM_LEVELS_BY_GROUP GRP
6772 WHERE GRP.dim_group_id = l_dim_grp_id;
6773
6774 SELECT COUNT(1) into l_exist
6775 FROM BSC_SYS_DIM_LEVELS_VL SYS,
6776 BSC_SYS_DIM_LEVELS_BY_GROUP GRP
6777 WHERE SYS.dim_level_id = GRP.dim_level_id
6778 AND GRP.dim_group_id = l_dim_grp_id
6779 AND SYS.SHORT_NAME = p_dim_obj_short_name;
6780
6781 IF (l_count >= bsc_utility.MAX_DIM_IN_DIM_SET AND l_exist = 0 AND p_dim_obj_source = 'BSC' AND CTYPE.SOURCE = 'BSC') THEN
6782 FND_MESSAGE.SET_NAME('BSC','BSC_DIM_SHUTTLE_OVERFLOW');
6783 FND_MSG_PUB.ADD;
6784 return TRUE;
6785 END IF;
6786
6787 IF(CTYPE.SOURCE <> p_dim_obj_source AND BSC_UTILITY.Is_Internal_Dimension(l_dim_short_name) = FND_API.G_FALSE) THEN
6788 l_true := TRUE;
6789 FOR CD IN C_SOURCE_DIM_OBJS LOOP
6790 l_dim_obj_name := cd.name;
6791 IF(l_source IS NULL) THEN
6792 l_source := CD.SOURCE;
6793 END IF;
6794 IF ((l_dim_short_name = BSC_BIS_DIMENSION_PUB.Unassigned_Dim) AND
6795 (l_source = 'BSC')) THEN
6796 EXIT;
6797 END IF;
6798 IF((l_source <> CD.SOURCE)OR (l_source <> p_dim_obj_source)) THEN
6799 EXIT;
6800 END IF;
6801 END LOOP;
6802 EXIT;
6803 END IF;
6804 END LOOP;
6805
6806 IF (l_true) THEN
6807 FND_MESSAGE.SET_NAME('BSC','BSC_DIM_DIMOBJ_MIXED_TYPE');
6808 FND_MESSAGE.SET_TOKEN('DIMENSION', l_dim_name);
6809 FND_MESSAGE.SET_TOKEN('DIM_OBJECT', p_dim_obj_name);
6810 FND_MSG_PUB.ADD;
6811 return l_true;
6812 END IF;
6813 END IF;
6814
6815 x_return_status := FND_API.G_RET_STS_SUCCESS;
6816 RETURN l_true;
6817
6818 EXCEPTION
6819 WHEN OTHERS THEN
6820 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6821 IF (x_msg_data IS NULL) THEN
6822 x_msg_data := SQLERRM||' at BSC_BIS_DIMENSION_PUB.is_Valid_Dim_Grp_Rels ';
6823 END IF;
6824
6825 RETURN l_true;
6826 END check_sametype_dims;
6827
6828
6829 --=======================================================================================
6830
6831
6832 --=======================================================================================
6833
6834 /************************************************************************
6835 Name : is_Obj_Display_Frmt_Change
6836 Description : This API will validate if the dimension object proeprties
6837 will result in format changes.
6838 Following properties of dimension object will result in
6839 Format changes
6840 1.p_maximum_code_size
6841 2.p_maximum_name_size
6842 3.p_prototype_default_value
6843 Input : p_dim_obj_short_name : dim object short name
6844 p_Source : Source of the dimension object
6845 p_source_table : dim object table name
6846 p_table_column : column name of the dimension object
6847 p_prototype_default_value : prototype prefix value for dim level values
6848 p_maximum_code_size : size of the user code
6849 p_maximum_name_size : size of the display key name
6850 p_dim_short_names : dimension short names within which this dim obj is assigned
6851 output : x_obj_names : comma separated objective names which are effected because of this change
6852 TRUE : Display format has changed
6853 FALSE : Display format has not changed
6854 /************************************************************************/
6855
6856 FUNCTION is_Obj_Display_Frmt_Change
6857 ( p_dim_obj_short_name IN VARCHAR2
6858 , p_Source IN VARCHAR2
6859 , p_source_table IN VARCHAR2
6860 , p_table_column IN VARCHAR2
6861 , p_prototype_default_value IN VARCHAR2
6862 , p_maximum_code_size IN NUMBER
6863 , p_maximum_name_size IN NUMBER
6864 , p_dim_short_names IN VARCHAR2
6865 , x_obj_names OUT NOCOPY VARCHAR2
6866 ) RETURN BOOLEAN IS
6867
6868 l_MTab_Tbl BSC_BIS_DIM_OBJ_PUB.KPI_Dim_Set_Table_Type;
6869 l_bsc_dim_obj_rec BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type;
6870 l_obj_names VARCHAR2(8000);
6871 l_child_dim_obj_list VARCHAR2 (32000);
6872 l_disp_format_flag BOOLEAN := FALSE;
6873 l_child_disp_fm_flag BOOLEAN := FALSE;
6874 l_counter NUMBER;
6875 l_duplicate_flag BOOLEAN;
6876 l_return_flag BOOLEAN := FALSE;
6877 l_maximum_code_size BSC_SYS_DIM_LEVELS_VL.user_key_size%TYPE;
6878 l_maximum_name_size BSC_SYS_DIM_LEVELS_VL.disp_key_size%TYPE;
6879
6880
6881 CURSOR c_Old_Dim_Obj_Rec IS
6882 SELECT dim_level_id
6883 , level_table_name
6884 , user_key_size
6885 , disp_key_size
6886 , NVL(source, 'BSC')
6887 , abbreviation
6888 , level_pk_col
6889 FROM BSC_SYS_DIM_LEVELS_VL
6890 WHERE short_name = p_dim_obj_short_name;
6891
6892 CURSOR c_Kpi_Dim_Set1 IS
6893 SELECT DISTINCT C.Name||'['||C.Indicator||']' Name
6894 ,C.Indicator
6895 FROM BSC_KPI_DIM_LEVELS_B A
6896 , BSC_SYS_DIM_LEVELS_B D
6897 , BSC_KPIS_VL C
6898 WHERE A.Level_Table_Name = D.Level_Table_Name
6899 AND C.share_flag <> 2
6900 AND C.Indicator = A.Indicator
6901 AND INSTR(','||l_child_dim_obj_list||',', ','||D.dim_level_id||',') > 0;
6902
6903 CURSOR c_Kpi_Dim_Set IS
6904 SELECT DISTINCT C.Name||'['||C.Indicator||']' Name
6905 , C.Indicator
6906 FROM BSC_KPI_DIM_LEVELS_B A
6907 , BSC_SYS_DIM_LEVELS_B D
6908 , BSC_KPIS_VL C
6909 WHERE A.Level_Table_Name = D.Level_Table_Name
6910 AND D.Dim_Level_Id = l_bsc_dim_obj_rec.Bsc_Level_Id
6911 AND C.share_flag <> 2
6912 AND C.Indicator = A.Indicator;
6913
6914 BEGIN
6915 IF (p_dim_obj_short_name IS NOT NULL) THEN
6916
6917 OPEN c_old_dim_obj_rec;
6918 FETCH c_old_dim_obj_rec
6919 INTO l_bsc_dim_obj_rec.Bsc_Level_Id
6920 , l_bsc_dim_obj_rec.Bsc_Level_Name
6921 , l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size
6922 , l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size
6923 , l_bsc_dim_obj_rec.Bsc_Source
6924 , l_bsc_dim_obj_rec.Bsc_Level_Abbreviation
6925 , l_bsc_dim_obj_rec.Bsc_Pk_Col;
6926 CLOSE c_old_dim_obj_rec;
6927
6928 l_maximum_name_size := p_maximum_name_size;
6929 l_maximum_code_size := p_maximum_code_size;
6930
6931 IF(l_maximum_code_size<BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_CODE_MIN_SIZE )THEN
6932 l_maximum_code_size :=NULL;
6933 END IF;
6934
6935 IF(l_maximum_name_size<BSC_BIS_DIM_OBJ_PUB.DIM_OBJ_NAME_MIN_SIZE )THEN
6936 l_maximum_name_size :=NULL;
6937 END IF;
6938
6939 IF((l_bsc_dim_obj_rec.Bsc_Level_Abbreviation <> NVL(p_prototype_default_value, l_bsc_dim_obj_rec.Bsc_Level_Abbreviation)) OR
6940 (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size <> NVL(l_maximum_code_size,l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size)) OR
6941 (l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size <> NVL(l_maximum_name_size, l_bsc_dim_obj_rec.Bsc_Level_Disp_Key_Size)))THEN
6942 l_disp_format_flag := TRUE;
6943 END IF;
6944
6945 IF (l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size <> NVL(l_maximum_code_size, l_bsc_dim_obj_rec.Bsc_Level_User_Key_Size)) THEN
6946 l_child_disp_fm_flag := TRUE;
6947 END IF;
6948 l_counter :=0;
6949
6950 IF (l_disp_format_flag) THEN
6951 FOR cd IN c_kpi_dim_set LOOP
6952 l_MTab_Tbl(l_counter).p_kpi_id := cd.Indicator;
6953 l_MTab_Tbl(l_counter).p_Name := cd.Name;
6954 l_counter := l_counter + 1;
6955 END LOOP;
6956
6957 l_child_dim_obj_list:= NULL;
6958
6959 IF (l_child_disp_fm_flag) THEN
6960 l_child_dim_obj_list := Get_Child_Dim_Objs(p_Dim_Level_Id => l_bsc_dim_obj_rec.Bsc_Level_Id);
6961 IF (l_child_dim_obj_list IS NOT NULL) THEN
6962 FOR ckds IN c_Kpi_Dim_Set1 LOOP
6963 l_duplicate_flag := FALSE;
6964 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
6965 IF(l_MTab_Tbl(i).p_kpi_id=ckds.Indicator)THEN
6966 l_duplicate_flag := TRUE;
6967 EXIT;
6968 END IF;
6969 END LOOP;
6970
6971 IF(NOT l_duplicate_flag) THEN
6972 l_MTab_Tbl(l_counter).p_kpi_id := ckds.Indicator;
6973 l_MTab_Tbl(l_counter).p_Name := ckds.Name;
6974 l_counter := l_counter + 1;
6975 END IF;
6976 END LOOP;
6977 END IF;
6978 END IF;
6979 END IF;
6980 FOR i IN 0..(l_MTab_Tbl.COUNT-1) LOOP
6981 IF(l_obj_names IS NULL)THEN
6982 l_obj_names := l_MTab_Tbl(i).p_Name;
6983 ELSE
6984 l_obj_names := l_obj_names||', '||l_MTab_Tbl(i).p_Name;
6985 END IF;
6986 END LOOP;
6987 END IF;
6988
6989 x_obj_names := l_obj_names;
6990 IF(l_disp_format_flag)THEN
6991 l_return_flag := TRUE;
6992 END IF;
6993
6994 RETURN l_return_flag;
6995
6996 END is_Obj_Display_Frmt_Change;
6997
6998 /******************************************************************************/
6999 -- Added for Bug#4758995
7000 FUNCTION Is_Recursive_Relationship
7001 (
7002 p_Short_Name IN VARCHAR2
7003 , x_Relation_Col OUT NOCOPY VARCHAR2
7004 , x_Data_Source OUT NOCOPY VARCHAR2
7005 , x_Data_Source_Type OUT NOCOPY VARCHAR2
7006 ) RETURN VARCHAR2 IS
7007 l_Count NUMBER;
7008
7009 CURSOR c_Rels IS
7010 SELECT R.RELATION_COL,
7011 R.DATA_SOURCE,
7012 R.DATA_SOURCE_TYPE
7013 FROM BSC_SYS_DIM_LEVEL_RELS_V R
7014 WHERE R.DIM_LEVEL_ID = R.PARENT_DIM_LEVEL_ID
7015 AND R.SHORT_NAME = p_Short_Name
7016 AND R.PARENT_SHORT_NAME = p_Short_Name
7017 AND R.SOURCE = BSC_UTILITY.c_PMF
7018 AND R.PARENT_SOURCE = BSC_UTILITY.c_PMF;
7019 BEGIN
7020 l_Count := 0;
7021
7022 FOR cRE IN c_Rels LOOP
7023 x_Relation_Col := cRE.RELATION_COL;
7024 x_Data_Source := cRE.DATA_SOURCE;
7025 x_Data_Source_Type := cRE.DATA_SOURCE_TYPE;
7026
7027 l_Count := l_Count + 1;
7028 END LOOP;
7029
7030 IF (l_Count = 1) THEN
7031 RETURN FND_API.G_TRUE;
7032 ELSE
7033 RETURN FND_API.G_FALSE;
7034 END IF;
7035
7036 EXCEPTION
7037 WHEN OTHERS THEN
7038 RETURN FND_API.G_FALSE;
7039 END Is_Recursive_Relationship;
7040 /******************************************************************************/
7041
7042
7043 /******************************************************************************/
7044 -- Added for Bug#4758995
7045 FUNCTION Get_Unique_Level_Pk_Col
7046 ( p_Dim_Level_Rec IN BSC_DIMENSION_LEVELS_PUB.Bsc_Dim_Level_Rec_Type
7047 , x_return_status OUT NOCOPY VARCHAR2
7048 , x_msg_count OUT NOCOPY NUMBER
7049 , x_msg_data OUT NOCOPY VARCHAR2
7050 ) RETURN VARCHAR2 IS
7051 l_Dim_Object_Name BSC_SYS_DIM_LEVELS_VL.NAME%TYPE;
7052 l_Level_Pk_Col BSC_SYS_DIM_LEVELS_VL.LEVEL_PK_COL%TYPE;
7053 l_temp_var VARCHAR2(1000);
7054 l_alias VARCHAR2(1000);
7055 l_flag BOOLEAN;
7056 l_count NUMBER;
7057
7058 CURSOR c_Lvl_Pk_Col IS
7059 SELECT D.LEVEL_PK_COL
7060 FROM BSC_SYS_DIM_LEVELS_B D
7061 WHERE D.SHORT_NAME = p_Dim_Level_Rec.Bsc_Level_Short_Name;
7062 BEGIN
7063
7064 FND_MSG_PUB.Initialize;
7065 x_return_status := FND_API.G_RET_STS_SUCCESS;
7066
7067 IF (p_Dim_Level_Rec.Bsc_Dim_Level_Long_Name IS NOT NULL) THEN
7068 l_Dim_Object_Name := REPLACE(p_Dim_Level_Rec.Bsc_Level_Name, ' ', '');
7069 ELSE
7070 l_Dim_Object_Name := REPLACE(p_Dim_Level_Rec.Bsc_Level_Short_Name ,' ', '_');
7071 END IF;
7072
7073 l_Level_Pk_Col := p_Dim_Level_Rec.Bsc_Pk_Col;
7074 IF (l_Level_Pk_Col IS NULL) THEN
7075 FOR cLPK IN c_Lvl_Pk_Col LOOP
7076 l_Level_Pk_Col := cLPK.LEVEL_PK_COL;
7077 END LOOP;
7078
7079 IF (l_Level_Pk_Col IS NULL) THEN
7080 l_Level_Pk_Col := SUBSTR(l_Dim_Object_Name, 7, LENGTH(l_Dim_Object_Name))||'_CODE';
7081 END IF;
7082
7083 IF (NOT is_Valid_Identifier(l_Level_Pk_Col)) THEN
7084 IF (LENGTH(l_Level_Pk_Col) > 26) THEN
7085 l_Level_Pk_Col := SUBSTR(l_Level_Pk_Col, 1, 26);
7086 END IF;
7087 l_Level_Pk_Col := 'BSC_'||l_Level_Pk_Col;
7088 END IF;
7089 ELSIF (NOT is_Valid_Identifier(l_Level_Pk_Col)) THEN
7090 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SQL_IDENTIFIER');
7091 FND_MESSAGE.SET_TOKEN('SQL_IDENT', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DIM_OBJ_PK_COL'), TRUE);
7092 FND_MESSAGE.SET_TOKEN('SQL_VALUE', l_Level_Pk_Col);
7093 FND_MSG_PUB.ADD;
7094 RAISE FND_API.G_EXC_ERROR;
7095 END IF;
7096 IF(is_SQL_Key_Word(l_Level_Pk_Col)) THEN
7097 l_Level_Pk_Col := l_Level_Pk_Col||'_CODE';
7098 END IF;
7099
7100 l_Level_Pk_Col := SUBSTR(l_Level_Pk_Col, 1, 26);
7101 l_flag := TRUE;
7102 l_alias := NULL;
7103 l_temp_var := l_Level_Pk_Col;
7104 WHILE (l_flag) LOOP
7105 SELECT COUNT(1) INTO l_count
7106 FROM BSC_SYS_DIM_LEVELS_B
7107 WHERE SHORT_NAME <> p_Dim_Level_Rec.Bsc_Level_Short_Name
7108 AND UPPER(LEVEL_PK_COL) = UPPER(l_temp_var);
7109 IF (l_count = 0) THEN
7110 l_flag := FALSE;
7111 l_Level_Pk_Col := l_temp_var;
7112 END IF;
7113 l_alias := BSC_BIS_DIM_OBJ_PUB.get_Next_Alias(l_alias);
7114 l_temp_var := SUBSTR(l_Level_Pk_Col, 1, 18)||l_alias||'_CODE';
7115 END LOOP;
7116
7117 RETURN l_Level_Pk_Col;
7118
7119 EXCEPTION
7120 WHEN FND_API.G_EXC_ERROR THEN
7121 IF (x_msg_data IS NULL) THEN
7122 FND_MSG_PUB.Count_And_Get
7123 ( p_encoded => FND_API.G_FALSE
7124 , p_count => x_msg_count
7125 , p_data => x_msg_data
7126 );
7127 END IF;
7128 x_Return_Status := FND_API.G_RET_STS_ERROR;
7129 RETURN NULL;
7130 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7131 IF (x_msg_data IS NULL) THEN
7132 FND_MSG_PUB.Count_And_Get
7133 ( p_encoded => FND_API.G_FALSE
7134 , p_count => x_msg_count
7135 , p_data => x_msg_data
7136 );
7137 END IF;
7138 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7139 RETURN NULL;
7140 WHEN NO_DATA_FOUND THEN
7141 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7142 IF (x_msg_data IS NOT NULL) THEN
7143 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col ';
7144 ELSE
7145 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col ';
7146 END IF;
7147 RETURN NULL;
7148 WHEN OTHERS THEN
7149 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7150 IF (x_msg_data IS NOT NULL) THEN
7151 x_msg_data := x_msg_data||' -> BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col ';
7152 ELSE
7153 x_msg_data := SQLERRM||' at BSC_BIS_DIM_OBJ_PUB.Get_Unique_Level_Pk_Col ';
7154 END IF;
7155 RETURN NULL;
7156 END Get_Unique_Level_Pk_Col;
7157 /******************************************************************************/
7158
7159
7160 /********************************************************************************
7161 This is a Public API, used by Backend to validate and create the BSC views
7162 for existing source dimension Objects. Bug #4992082
7163 It first validates if corresponding bis view is valid then try to create a
7164 BSC wrapper view on top of the existing valid view.
7165 ********************************************************************************/
7166
7167 PROCEDURE Validate_Refresh_BSC_PMF_Views
7168 ( p_Dim_Obj_Short_Name IN VARCHAR2
7169 , x_Return_Status OUT NOCOPY VARCHAR2
7170 , x_Msg_Count OUT NOCOPY NUMBER
7171 , x_Msg_Data OUT NOCOPY VARCHAR2
7172 )
7173 IS
7174 l_name VARCHAR2(300);
7175 l_dim_obj_view_name VARCHAR2(30);
7176 l_source VARCHAR2(5);
7177 BEGIN
7178
7179 SELECT bsc.name, bis.LEVEL_VALUES_VIEW_NAME, bsc.source
7180 INTO l_name, l_Dim_Obj_View_Name, l_source
7181 FROM bsc_sys_dim_levels_vl bsc, bis_levels_vl bis
7182 WHERE bsc.short_name = bis.short_name
7183 AND bsc.short_name = p_Dim_Obj_Short_Name;
7184
7185 IF (l_source = BSC_UTILITY.c_PMF) THEN
7186 BSC_BIS_DIM_OBJ_PUB.Validate_PMF_Views(
7187 p_Dim_Obj_Short_Name => p_Dim_Obj_Short_Name
7188 ,p_Dim_Obj_View_Name => l_Dim_Obj_View_Name
7189 ,x_Return_Status => x_Return_Status
7190 ,x_Msg_Count => x_Msg_Count
7191 ,x_Msg_Data => x_Msg_Data
7192 );
7193
7194 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS AND x_Msg_Data IS NOT NULL) THEN
7195 FND_MESSAGE.SET_NAME('BSC',x_Msg_Data);
7196 FND_MESSAGE.SET_TOKEN('DIM_OBJ', l_name, TRUE);
7197 FND_MSG_PUB.ADD;
7198 RAISE FND_API.G_EXC_ERROR;
7199 END IF;
7200 END IF;
7201
7202 BSC_BIS_DIM_OBJ_PUB.Refresh_BSC_PMF_Dim_View(
7203 p_Short_Name => p_Dim_Obj_Short_Name
7204 ,x_return_status => x_Return_Status
7205 ,x_msg_count => x_msg_count
7206 ,x_msg_data => x_Msg_Data
7207 );
7208
7209 EXCEPTION
7210 WHEN OTHERS THEN
7211 FND_MSG_PUB.Count_And_Get
7212 ( p_encoded => FND_API.G_FALSE
7213 , p_count => x_msg_count
7214 , p_data => x_Msg_Data
7215 );
7216 END Validate_Refresh_BSC_PMF_Views;
7217
7218 /****************************************************************************************************
7219 This API takes dimension and dimension object short Names, finds all the dimension groups of the
7220 reports containing that dim+dimobject combination. It then cascades the "All Enable/Disable" property
7221 to the dim groups. This API doesnot take care of where clauses as of now.
7222 p_Dim_Obj_Short_Name : Dimension Object Short Name
7223 p_Dim_Short_Name : Dimension Short Name
7224 p_All_Flag : "All" flag value
7225 ****************************************************************************************************/
7226
7227 PROCEDURE Cascade_Dim_Props_Into_Dim_Grp (
7228 p_Dim_Obj_Short_Name IN VARCHAR2
7229 , p_Dim_Short_Name IN VARCHAR2
7230 , p_All_Flag IN NUMBER
7231 , x_Return_Status OUT NOCOPY VARCHAR2
7232 , x_Msg_Count OUT NOCOPY NUMBER
7233 , x_Msg_Data OUT NOCOPY VARCHAR2
7234 ) IS
7235 l_Dim_DimObj_Sht_Name VARCHAR2(1000);
7236 l_Dim_Short_Name BIS_DIMENSIONS.SHORT_NAME%TYPE;
7237 CURSOR c_dim_groups IS
7238 SELECT
7239 bis_dim.short_name
7240 FROM
7241 ak_regions reg,
7242 ak_region_items reg_item,
7243 bis_dimensions bis_dim
7244 WHERE
7245 reg_item.attribute2 = l_Dim_DimObj_Sht_Name
7246 AND reg.region_code = reg_item.region_code
7247 AND bis_dim.short_name = reg.attribute12
7248 AND bis_util.is_seeded(bis_dim.created_by,'T','F') = 'F'
7249 AND NVL(hide_in_design,'F') = 'T';
7250 BEGIN
7251 FND_MSG_PUB.Initialize;
7252 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
7253 l_Dim_DimObj_Sht_Name := p_Dim_Short_Name || '+' || p_Dim_Obj_Short_Name;
7254 IF (l_Dim_DimObj_Sht_Name IS NOT NULL) THEN
7255 OPEN c_dim_groups;
7256 LOOP
7257 FETCH c_dim_groups INTO l_Dim_Short_Name;
7258 EXIT WHEN c_dim_groups%NOTFOUND;
7259 UPDATE
7260 bsc_sys_dim_levels_by_group
7261 SET
7262 total_flag = p_All_Flag
7263 WHERE
7264 dim_level_id = BSC_BIS_DIM_OBJ_PUB.Get_Bsc_Dim_Obj_ID(p_Dim_Obj_Short_Name)
7265 AND dim_group_id = BSC_BIS_DIMENSION_PUB.Get_Bsc_Dimension_ID(l_Dim_Short_Name);
7266 END LOOP;
7267 END IF;
7268 EXCEPTION
7269 WHEN OTHERS THEN
7270 FND_MSG_PUB.Count_And_Get
7271 ( p_encoded => FND_API.G_FALSE
7272 , p_count => x_msg_count
7273 , p_data => x_Msg_Data
7274 );
7275 x_Return_Status := FND_API.G_RET_STS_ERROR;
7276 END Cascade_Dim_Props_Into_Dim_Grp;
7277
7278
7279 END BSC_BIS_DIM_OBJ_PUB;