[Home] [Help]
PACKAGE BODY: APPS.BSC_BIS_KPI_CRUD_PUB
Source
1 PACKAGE BODY BSC_BIS_KPI_CRUD_PUB AS
2 /* $Header: BSCCRUDB.pls 120.51 2007/10/09 13:03:34 bijain ship $ */
3
4 /*
5 REM +=======================================================================+
6 REM | Copyright (c) 2004 Oracle Corporation, Redwood Shores, CA, USA |
7 REM | All rights reserved. |
8 REM +=======================================================================+
9 REM | FILENAME |
10 REM | BSCCRUDB.pls |
11 REM | |
12 REM | DESCRIPTION |
13 REM | Module: Wrapper API for Configure KPI List Page |
14 REM | |
15 REM | NOTES |
16 REM | |
17 REM | HISTORY |
18 REM | 15-APR-04 akchan Created |
19 REM | 23-APR-04 adrao Added Update/Delete APIs |
20 REM | 06-MAY-04 hcamcho added dbdrv hint "plb" to package |
21 REM | 07-MAY-04 adrao KPI End-to-end Phase II: Modified CRUD APIs |
22 REM | to handle 1 Dimension per Analysis Option |
23 REM | 11-MAY-04 adrao KPI End-to-end Phase II: Modified CRUD APIs |
24 REM | to add Parameter Portlet Region Code as an |
25 REM | nested region item and not add Dimension |
26 REM | Level region items. |
27 REM | 14-MAY-04 adrao Added 2 additional regions/analysis options |
28 REM | 17-MAY-04 adrao Enh: Modified Create_Kpi, Create_Tab, |
29 REM | Create_Kpi_Group to use short_name |
30 REM | 19-MAY-04 adrao Used Page Function Name for KPI, KPI Group |
31 REM | 20-MAY-04 adrao Added the Create_Dimension API |
32 REM | 24-MAY-04 adrao Made Function User Name more descriptive |
33 REM | Bug #3644445 |
34 REM | 26-MAY-04 akchan remove method Create_PPX_Region_Item() |
35 REM | change variable names on methods |
36 REM | Does_Dim_Grp_Exist() and Does_KPI_Exist() |
37 REM | use Constant for String "MEASURE_NOTARGET" |
38 REM | 27-MAY-04 adrao Modularized all CRUD APIs |
39 REM | 04-JUN-04 adrao Added Autofactoring for Measure, Compare To |
40 REM | 10-JUN-04 adrao Modified Create_Measure and Update_Measure |
41 REM | to disable Projection |
42 REM | 14-JUN-04 adrao Modified Update and Create AK Regions for |
43 REM | Bug#3688263 and Bug#3688300 |
44 REM | 14-JUN-04 adrao Added APIs to check for Time Dimension Objs |
45 REM | 17-JUN-04 adrao Modified Bug3698962 and Bug3698936 to remove |
46 REM | ATTRIBUTE3 to NULL except CHANGE_MEASURE and |
47 REM | set ATTRIBUTE10 to "Y" for MEASURE_NOTARGET |
48 REM | 18-JUN-04 adrao Added API Get_Next_Region_Code_By_AO for |
49 REM | Enh#3691035 |
50 REM | 22-JUN-04 adrao Bug#3717084, added a new column |
51 REM | BSC_DB_MEASURE_GROUPS_TL.SHORT_NAME |
52 REM | 05-JUL-04 adrao Bug#3742500, Enabled Graph display at the |
53 REM | measure level region item in create/update |
54 REM | 14-JUL-04 adrao Bug#3766260 Modified Does_KPI_Exist() to |
55 REM | check for Deleted Objectives |
56 REM | 15-JUL-04 adrao Fixed Bug#3766839 to get KPI_ID from |
57 REM | measure short_name instead of Page Function |
58 REM | 19-JUL-04 adrao added API is_XTD_Enabled () for |
59 REM | Bug#3767168 for Parameter Portlets |
60 REM | 21-JUL-04 adrao added API Get_S2EObjective_With_XTD for |
61 REM | Bug#3780082 |
62 REM | 21-JUL-04 adrao made short_name nonunique. prototype_flag =2 |
63 REM | Bug#3781764 |
64 REM | 22-JUL-04 adrao Fixed Bug#3770986 (please see bug) |
65 REM | 02-AUG-04 adrao Fixed Bug#3802192 |
66 REM | 04-AUG-04 adrao Added API Populate_DBI_Calendar() |
67 REM | for Bug#3809721 |
68 REM | 11-AUG-04 adrao Added API Get_Region_Codes_By_Short_Name |
69 REM | for Bug#3777647 |
70 REM | 18-AUG-04 adrao Added API Check_XTD_Summarization() for |
71 REM | Bug#3831859 |
72 REM | 23-AUG-04 adrao Fixed Bug#3844823 |
73 REM | 24-AUG-04 adrao Updated Report Name for Bug#3844849 |
74 REM | 02-SEP-04 adrao Added API Get_Kpi_Details for Bug#3814292 |
75 REM | 09-SEP-04 adrao Added API Get_Change_Disp_Type_By_Mask() for |
76 REM | Bug#3876413 |
77 REM | 20-SEP-04 ankgoel Added Get_Pmf_Metadata_By_Objective for |
78 REM | Bug#3759819 |
79 REM | 21-SEP-04 adrao Added exception handling to Create_Measure |
80 REM | API for Bug#3755656 |
81 REM | 27-SEP-04 ankgoel Modified Get_Pmf_Metadata_By_Objective for |
82 REM | Bug#3916377 |
83 REM | 29-SEP-04 adrao Modified base column attribute3 based on the |
84 REM | format masking for Bug#3919666 |
85 REM | 30-SEP-04 rpenneru Added Get_S2ESCR_DeleteMessage, |
86 REM | , Delete_S2E_Metadata for bug#3893949 |
87 REM | 05-OCT-04 ankgoel Bug#3933075 Moved Get_Pmf_Metadata_By_Objective
88 REM | and C_AK_DATASOURCE and get_Region_Code to |
89 REM | BSCCSUBB.pls. Moved C_BSC_UNDERSCORE to |
90 REM | BSCUTILB.pls. Removed Get_KpiId_By_DatasetId |
91 REM | 30-SEP-04 rpenneru Modified for bug#3938515 |
92 REM | 30-SEP-04 skchoudh Modified for bug#3940652, changed |
93 REM | Validate_Kpi_Delete |
94 REM | 02-NOV-04 akoduri Modified for bug#3977463 |
95 REM | 21-DEC-04 adrao Modified for 8i compatibility, Bug#4079898 |
96 REM | 28-JAN-05 visuri added Has_Compare_To_Or_Plan() , modified |
97 REM | Create_Addl_Ak_Region_Items() for Enh. 4065089 |
98 REM | 08-FEB-05 visuri Modified Create_Addl_Ak_Region_Items() for |
99 REM | Enh. 4065098 |
100 REM | 11-Feb-05 sawu Bug#4057761: create unique tab name, group |
101 REM | name |
102 REM | 22-FEB-05 adrao Autogenerated Measures Enhancement for Report |
103 REM | Designer |
104 REM | 01-MAR-05 adrao Fixed Bug#4213345 and modify the API |
105 REM | Get_Dim_Info_From_ParamPortlet |
106 REM | 07-MAR-05 vtulasi Added procedure Get_Dep_Obj_Func_Name |
107 REM | for bug# 3786130 |
108 REM | 21-Feb-05 rpenneru Enh#4059160, Add FA as property to Custom KPIs|
109 REM | 10-MAR-05 adrao added API Convert_AutoGen_To_ViewBased for |
110 REM | Convert AGR to VBR enhancement. |
111 REM | 18-MAR-05 adrao Made modification to ensure Duplication of |
112 REM | reports and added a few util APIs |
113 REM | 24-MAR-05 visuri Modified Delete_Misc_Region_Items() Bug 4231753|
114 REM | 30-MAR-05 adrao Modified Create AG report to manage deleted |
115 REM | measures |
116 REM | 21-Feb-05 rpenneru Bug#4287317, Pass p_Measure_Short_Name to |
117 REM | createBscBisMetaData instread of default NULL|
118 REM | 12-APR-05 kyadamak Modified for bug# 4288237 calling |
119 REM | update_measure only from report designer |
120 REM | 22-APR-05 akoduri Enhancement#3865711 -- Obsolete Seeded Objects|
121 REM | 26-APR-05 visuri Enhancement#4309381 --Length of WHERE_CLAUSE of|
122 REM | BSC_SYS_DI_LEVELS_BY_GROUP increased to 4000 |
123 REM | 27-APR-05 adrao Fixed bug#4327887 - Moved validation to lower |
124 REM | PL/SQL API Create_Bsc_Bis_Metadata |
125 REM | 04-MAY-05 adrao Always create default measure group for AG |
126 REM | 03-MAY-2005 akoduri Enh #4268374 -- Weighted Average Measures |
127 REM | 11-MAY-2005 adrao Created the following APIs for |
128 REM | selective cascading of Dimensions and Measures|
129 REM | Has_Measure_Column_Changed |
130 REM | Has_Time_Dim_Obj_Changed |
131 REM | Has_Non_Time_Dim_Obj_Changed |
132 REM | 19-MAY-2005 visuri GSCC Issues bug 4363884 |
133 REM | 22-JUN-2005 ppandey Bug #4447283, used cursor. |
134 REM | 28-JUN-2005 rpenneru Bug #4447654, Has_Measure_Column_Changed |
135 REM | modified |
136 REM | 30-JUN-2005 akoduri Bug#4370200 , Default Number of Rows not |
137 REM | getting saved |
138 REM | 08-jul-05 ASHANKAR added the method is_Scorecard_From_Reports |
139 REM | 02-JUN-2005 adrao Added APIs for Calendar Enhancement (4376162) |
140 REM | 13-JUL-2005 adrao Enabled addition of Time based Periodicities |
141 REM | in the Calendar+Periodicity format #4376162 |
142 REM | 15-JUL-2005 akoduri Provided warning messasges for strucutural |
143 REM | and color changes #4492177 |
144 REM | 04-AUG-2005 adrao Fixed Bug#4520525 |
145 REM | 16-AUG-2005 akoduri Bug#4482355 Removing attribute_code and |
146 REM| attribute2 dependency in Report Designer |
147 REM | 25-AUG-2005 adrao Filtered out Rolling Dimension Object type |
148 REM | by calling API Get_Non_Rolling_Dim_Obj for |
149 REM | Bug#4566634 |
150 REM | 25-AUG-2005 rpenneru Report formFunction parameters should have |
151 REM | 'pParameters=pParamIds@Y'. bug#4560857 |
152 REM | 05-SEP-2005 adrao Modifed AGReport creation without AS_OF_DATE |
153 REM | Bug#4552657 |
154 REM | 14-SEP-2005 adrao Fixed Bug#4599432 for updating non seeded |
155 REM | existing source measures |
156 REM | 07-SEP-2005 adrao Implemented dynamic Parameter Portlet builder |
157 REM | as required by Bug#4558279 |
158 REM | 23-SEP-2005 akoduri Bug #4389280 Removing all the measures from |
159 REM | an AG Report is not showing warning |
160 REM | 26-SEP-2005 arhegde bug# 4624100 Moved get_format_mask code to |
161 REM | BSC_BIS_CUSTOM_KPI_UTIL_PUB since pure BIS can use it too. |
162 REM | 28-SEP-2005 akoduri Bug #4626935 Unchecking all the periodicities|
163 REM | is not updating bsc_kpi_periodicities |
164 REM | 26-SEP-2005 ashankar Bug#4619367 Made chnages to the following API|
165 REM | 1.Has_Time_Dim_Obj_Changed |
166 REM | 2.Has_Measure_Column_Changed |
167 REM | 30-SEP-2005 adrao Modified code to ensure that the compare is |
168 REM | populated when the measure is created |
169 REM | Fixed Bug#4638384 |
170 REM |07-NOV-2005 arhegde bug# 4720781 Handle bisviewer.showReport changed to|
171 REM | OA.jsp?page=/oracle/apps/bis/report/webui/BISReportPG |
172 REM | 25-DEC-2005 adrao Added APIs following APIs for Enh#3909868 |
173 REM | - Migrate_AGR_To_PLSQL |
174 REM | - Is_Primary_Source_Of_Measure |
175 REM | - Cascade_Attr_Code_Into_Measure |
176 REM | - Cascade_Changes_Into_Forumla |
177 REM | 03-JAN-2005 adrao Added API for Is_Dim_Associated_To_Objective()|
178 REM | for Bug#4923006 |
179 REM | 06-JAN-2006 akoduri Enh#4739401 - Hide Dimensions/Dim Objects |
180 REM | 17-JAN-2006 rpenneru bug#4741919 - AG report deletion |
181 REM | 17-JAN-2006 adrao Modified Migrate_AGR_To_PLSQL() |
182 REM | for Bug#4958056 |
183 REM | 19-JAN-2006 adrao Added API Migrate_To_Existing_Source() for |
184 REM | Enhancement#4952167 |
185 REM | 07-FEB-2006 hengliu Bug#4955493 - Not overwrite global menu/title|
186 REM | 07-FEB-2006 ppandey Bug#4771854 - Rolling Periods for AG |
187 REM | 16-FEB-2006 adrao added ABS() to DBMS_UTILITY.GET_TIME for |
188 REM | Bug#5039894 |
189 REM | 08-MAR-2006 adrao Bug#5081180 - Ensured that Delete_Dimension |
190 REM | is not called in Delete_AG_Bsc_Metadata() |
191 REM | when there is no dimension |
192 REM | 18-MAY-2006 akoduri Bug #5072842 Added Have_Measures_Changed API|
193 REM | to check for structural changes |
194 REM | 19-MAY-2006 ankgoel Bug #5201116 Get correct Comparison Source |
195 REM | 22-MAY-2006 akoduri Bug #5104426 Data Source getting updated |
196 REM | BSC Type measures |
197 REM | 11-OCT-2006 akoduri Bug #5554168 Issue with Measures having |
198 REM | different short names in bis_indicators & |
199 REM | bsc_sys_measures |
200 REM | 09-feb-2007 ashankar Simulation Tree Enhacement 5386112 |
201 REM | 22-Mar-2007 ashankar Fixed the Bug#5930808 |
202 REM +=======================================================================+
203 */
204
205
206 FUNCTION Is_Assign_To_Tab
207 (
208 p_indicator IN BSC_KPIS_B.indicator%TYPE
209 ,p_tabId IN BSC_TABS_B.tab_id%TYPE
210 )RETURN VARCHAR2 IS
211
212 l_count NUMBER;
213 l_attached VARCHAR2(2);
214
215 BEGIN
216
217 l_attached := FND_API.G_TRUE;
218 SELECT COUNT(0)
219 INTO l_count
220 FROM bsc_tab_indicators
221 WHERE tab_id = p_tabId
222 AND indicator = p_indicator;
223
224 IF(l_count =0)THEN
225 l_attached := FND_API.G_FALSE;
226 END IF;
227
228 RETURN l_attached;
229
230 END Is_Assign_To_Tab;
231
232
233 --------------------------------------------------------------------------------
234 -- Create BSC KPI with BIS Dimension from start to end.
235 --------------------------------------------------------------------------------
236 PROCEDURE Create_Kpi_End_To_End(
237 p_Commit IN VARCHAR2 := FND_API.G_FALSE
238 ,p_Responsibility_Id IN NUMBER
239 ,p_Create_New_Kpi IN VARCHAR2 := FND_API.G_FALSE
240 ,p_Kpi_Id_To_Add_Measure IN VARCHAR2 := NULL
241 ,p_Param_Portlet_Region_Code IN VARCHAR2
242 ,p_Kpi_Name IN VARCHAR2 := NULL
243 ,p_Kpi_Description IN VARCHAR2 := NULL
244 ,p_Measure_Name IN VARCHAR2
245 ,p_Measure_Short_Name IN VARCHAR2 := NULL
246 ,p_Measure_Description IN VARCHAR2 := NULL
247 ,p_Measure_Type IN NUMBER := NULL
248 ,p_Measure_Operation IN VARCHAR2 := BSC_BIS_MEASURE_PUB.c_SUM
249 ,p_Dataset_Format_Id IN NUMBER := NULL
250 ,p_Dataset_Autoscale_Flag IN NUMBER := NULL
251 ,p_Measure_Increase_In_Measure IN VARCHAR2 := NULL
252 ,p_Measure_Random_Style IN NUMBER := NULL
253 ,p_Measure_Min_Act_Value IN NUMBER := NULL
254 ,p_Measure_Max_Act_Value IN NUMBER := NULL
255 ,p_Page_Function_Name IN VARCHAR2
256 ,p_Kpi_Portlet_Function_Name IN VARCHAR2
257 ,p_Create_Region_Per_Ao IN VARCHAR2 := FND_API.G_TRUE
258 ,p_Measure_App_Id IN NUMBER := NULL
259 ,p_Func_Area_Short_Name IN VARCHAR2 := NULL
260 ,x_Measure_Short_Name OUT NOCOPY VARCHAR2
261 ,x_Kpi_Id OUT NOCOPY NUMBER
262 ,x_Return_Status OUT NOCOPY VARCHAR2
263 ,x_Msg_Count OUT NOCOPY NUMBER
264 ,x_Msg_Data OUT NOCOPY VARCHAR2
265 ) IS
266
267
268 l_Dataset_Id NUMBER;
269 l_Does_Kpi_Exist BOOLEAN;
270 l_Kpi_Id NUMBER;
271 l_Max_Seq_Number NUMBER;
272 l_User_Page_Name VARCHAR2(100);
273 l_User_Portlet_Name VARCHAR2(100);
274 l_Analysis_Option NUMBER;
275 l_Region_Code VARCHAR2(80);
276
277 -- added for Bug#4064587
278 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
279
280 l_Param_Region_Code AK_REGIONS.REGION_CODE%TYPE;
281 l_Param_Region_Application_Id AK_REGIONS.REGION_APPLICATION_ID%TYPE;
282
283 BEGIN
284 SAVEPOINT CreateEndToEndKPI;
285 FND_MSG_PUB.Initialize;
286
287 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
288
289 IF (p_Param_Portlet_Region_Code IS NULL) THEN
290 FND_MESSAGE.SET_NAME('BSC','BSC_NO_PARAM_PORTLET');
291 FND_MSG_PUB.ADD;
292 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
293 END IF;
294
295 -- added for Bug#4558279
296 BSC_BIS_KPI_CRUD_PUB.Cascade_Parameter_Portlet (
297 p_Commit => p_Commit
298 , p_Page_Function_Name => p_Page_Function_Name
299 , p_Param_Region_Code => p_Param_Portlet_Region_Code
300 , p_Param_Region_Application_Id => Get_Region_Application_Id(p_Param_Portlet_Region_Code)
301 , p_Action_Type => BSC_UTILITY.C_CREATE
302 , x_Region_Code => l_Param_Region_Code
303 , x_Region_Application_Id => l_Param_Region_Application_Id
304 , x_Return_Status => x_Return_Status
305 , x_Msg_Count => x_Msg_Count
306 , x_Msg_Data => x_Msg_Data
307 );
308 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
309 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
310 END IF;
311
312 l_User_Page_Name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_User_Function_Name(p_Page_Function_Name);
313 l_User_Portlet_Name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_User_Function_Name(p_Kpi_Portlet_Function_Name);
314
315 l_Does_Kpi_Exist := BSC_BIS_KPI_CRUD_PUB.Does_KPI_Exist(p_Page_Function_Name);
316
317 BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata(
318 p_Commit => p_Commit
319 , p_Create_Region_Per_Ao => p_Create_Region_Per_Ao
320 , p_Param_Portlet_Region_Code => l_Param_Region_Code
321 , p_Page_Function_Name => p_Page_Function_Name
322 , p_Kpi_Portlet_Function_Name => p_Kpi_Portlet_Function_Name
323 , p_Region_Function_Name => NULL
324 , p_Region_User_Function_Name => NULL
325 , p_Dim_Obj_Short_Names => NULL
326 , p_Measure_Short_Name => p_Measure_Short_Name
327 , p_Force_Create_Dim => FND_API.G_FALSE
328 , p_Responsibility_Id => p_Responsibility_Id
329 , p_Measure_Name => p_Measure_Name
330 , p_Measure_Description => p_Measure_Description
331 , p_Dataset_Format_Id => p_Dataset_Format_Id
332 , p_Dataset_Autoscale_Flag => p_Dataset_Autoscale_Flag
333 , p_Measure_Operation => p_Measure_Operation
334 , p_Measure_Increase_In_Measure => p_Measure_Increase_In_Measure
335 , p_Measure_Obsolete => FND_API.G_FALSE
336 , p_Type => NULL
337 , p_Measure_Random_Style => p_Measure_Random_Style
338 , p_Measure_Min_Act_Value => p_Measure_Min_Act_Value
339 , p_Measure_Max_Act_Value => p_Measure_Max_Act_Value
340 , p_Measure_Type => p_Measure_Type
341 , p_Measure_App_Id => p_Measure_App_Id
342 , p_Func_Area_Short_Name => p_Func_Area_Short_Name
343 , x_Measure_Short_Name => x_Measure_Short_Name
344 , x_Kpi_Id => x_Kpi_Id
345 , x_Return_Status => x_Return_Status
346 , x_Msg_Count => x_Msg_Count
347 , x_Msg_Data => x_Msg_Data
348 );
349 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
350 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
351 END IF;
352
353
354 IF (x_Measure_Short_Name IS NULL) THEN
355 FND_MESSAGE.SET_NAME('BSC','BSC_DIP_MEASURE_SNAME_IS_NULL');
356 FND_MSG_PUB.ADD;
357 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
358 END IF;
359
360 -- Get the KPI Associated
361 l_Kpi_Id := x_Kpi_Id;
362 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(x_Measure_Short_Name);
363 l_Analysis_Option := BSC_BIS_KPI_CRUD_PUB.Get_AO_Id_By_Measure(l_Kpi_Id, l_Dataset_Id);
364
365 IF ((p_Create_Region_Per_AO = FND_API.G_TRUE) OR (l_Does_Kpi_Exist = FALSE)) THEN
366
367 BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata(
368 p_Commit => p_Commit
369 , p_Create_Region_Per_AO => p_Create_Region_Per_AO
370 , p_Kpi_Id => l_Kpi_Id
371 , p_Analysis_Option_Id => l_Analysis_Option
372 , p_Dim_Set_Id => 0
373 , p_Measure_Short_Name => x_Measure_Short_Name
374 , p_Measure_Name => p_Measure_Name
375 , p_Measure_Description => p_Measure_Description
376 , p_User_Portlet_Name => l_User_Portlet_Name
377 , p_Dataset_Format_Id => p_Dataset_Format_Id
378 , p_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
379 , p_Disable_View_By => 'N'
380 , p_Param_Portlet_Region_Code => l_Param_Region_Code
381 , x_Return_Status => x_Return_Status
382 , x_Msg_Count => x_Msg_Count
383 , x_Msg_Data => x_Msg_Data
384 );
385 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
387 END IF;
388 ELSE
389
390 -- Single Region (BSC_<KPIID>)
391 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(l_Kpi_Id, -1);
392
393 l_Max_Seq_Number := BSC_BIS_KPI_CRUD_PUB.Find_Max_Seq_Of_Region_Item(l_Region_Code);
394 l_Max_Seq_Number := l_Max_Seq_Number + 10;
395
396 BSC_BIS_KPI_CRUD_PUB.Create_Measure_Region_Item(
397 p_Commit => p_Commit
398 ,p_Measure_Short_Name => x_Measure_Short_Name
399 ,p_Sequence_Number => l_Max_Seq_Number
400 ,p_Kpi_Id => l_Kpi_Id
401 ,p_Analysis_Option => NULL
402 ,p_Dataset_Format_Id => p_Dataset_Format_Id
403 ,p_Dataset_Autoscale_Flag => p_Dataset_Autoscale_Flag
404 ,p_Analysis_Option_Name => l_User_Portlet_Name
405 ,x_Return_Status => x_Return_Status
406 ,x_Msg_Count => x_Msg_Count
407 ,x_Msg_Data => x_Msg_Data
408 );
409 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
410 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
411 END IF;
412
413 END IF;
414
415 IF (p_Commit = FND_API.G_TRUE) THEN
416 COMMIT;
417 END IF;
418
419 EXCEPTION
420 WHEN FND_API.G_EXC_ERROR THEN
421 ROLLBACK TO CreateEndToEndKPI;
422 IF (x_msg_data IS NULL) THEN
423 FND_MSG_PUB.Count_And_Get
424 ( p_encoded => FND_API.G_FALSE
425 , p_count => x_msg_count
426 , p_data => x_msg_data
427 );
428 END IF;
429 x_Return_Status := FND_API.G_RET_STS_ERROR;
430 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
431 ROLLBACK TO CreateEndToEndKPI;
432 IF (x_msg_data IS NULL) THEN
433 FND_MSG_PUB.Count_And_Get
434 ( p_encoded => FND_API.G_FALSE
435 , p_count => x_msg_count
436 , p_data => x_msg_data
437 );
438 END IF;
439 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
440 WHEN NO_DATA_FOUND THEN
441 ROLLBACK TO CreateEndToEndKPI;
442 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
443 IF (x_msg_data IS NOT NULL) THEN
444 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Kpi_End_To_End ';
445 ELSE
446 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Kpi_End_To_End ';
447 END IF;
448 WHEN OTHERS THEN
449 ROLLBACK TO CreateEndToEndKPI;
450 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
451 IF (x_msg_data IS NOT NULL) THEN
452 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Kpi_End_To_End ';
453 ELSE
454 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Kpi_End_To_End ';
455 END IF;
456 END Create_Kpi_End_To_End;
457
458
459 /*
460 API to updaate End 2 End KPI
461 */
462
463 PROCEDURE Update_Kpi_End_To_End(
464 p_Commit IN VARCHAR2 := FND_API.G_FALSE
465 ,p_Param_Portlet_Region_Code IN VARCHAR2
466 ,p_Page_Function_Name IN VARCHAR2
467 ,p_Kpi_Portlet_Function_Name IN VARCHAR2
468 ,p_Measure_Name IN VARCHAR2
469 ,p_Measure_Short_Name IN VARCHAR2 := NULL
470 ,p_Measure_Description IN VARCHAR2 := NULL
471 ,p_Measure_Type IN NUMBER := NULL
472 ,p_Measure_Operation IN VARCHAR2 := BSC_BIS_MEASURE_PUB.c_SUM
473 ,p_Dataset_Format_Id IN NUMBER := NULL
474 ,p_Dataset_Autoscale_Flag IN NUMBER := NULL
475 ,p_Measure_Increase_In_Measure IN VARCHAR2 := NULL
476 ,p_Measure_Random_Style IN NUMBER := NULL
477 ,p_Measure_Min_Act_Value IN NUMBER := NULL
478 ,p_Measure_Max_Act_Value IN NUMBER := NULL
479 ,p_Measure_App_Id IN NUMBER := NULL
480 ,p_Func_Area_Short_Name IN VARCHAR2 := NULL
481 ,x_Return_Status OUT NOCOPY VARCHAR2
482 ,x_Msg_Count OUT NOCOPY NUMBER
483 ,x_Msg_Data OUT NOCOPY VARCHAR2
484 ) IS
485
486 x_Non_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
487 x_Non_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
488 x_Non_Time_Dim_Obj_Short_Names VARCHAR2(32000) := NULL;
489 x_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
490 x_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
491 x_Time_Dim_Obj_Short_Names VARCHAR2(32000) := NULL;
492 x_All_Dim_Group_Ids BSC_NUMBER_TBL_TYPE;
493 x_Non_Time_Counter NUMBER;
494 x_Time_Counter NUMBER;
495 l_Dataset_Source VARCHAR2(10) := NULL;
496 l_Dataset_Id NUMBER;
497 l_Does_Dim_Group_Exist BOOLEAN;
498 l_Does_Kpi_Exist BOOLEAN;
499 l_Indicator NUMBER;
500 l_Tab_Id NUMBER;
501 l_Kpi_Group_Id NUMBER;
502 l_Kpi_Id NUMBER;
503 l_Real_Kpi_Name BSC_KPIS_VL.NAME%TYPE;
504 l_Fid NUMBER;
505 l_Rowid ROWID;
506 l_form_parameters VARCHAR2(32000);
507 l_max_seq_number NUMBER;
508 l_sequence NUMBER;
509 l_Bsc_Measure_Id NUMBER;
510 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
511 l_Analysis_Option_Id NUMBER;
512 l_AO_Id NUMBER;
513 l_Region_Code VARCHAR2(30);
514 l_Has_Region_By_AO BOOLEAN;
515
516
517 BEGIN
518
519 SAVEPOINT UpdateEndToEndKPI;
520 -- Initialize the Messaging
521 FND_MSG_PUB.Initialize;
522 x_return_status := FND_API.G_RET_STS_SUCCESS;
523
524 -- Get the KPI ID from the Measure Short_Name (Bug#3766839)
525 l_Kpi_Id := NVL(BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_Kpi(p_Measure_Short_Name),
526 BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY);
527 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(p_Measure_Short_Name);
528 l_sequence := 10;
529
530 -- Validate Input Parameters.
531 -- check if the KPI is in production mode, if yes throw and exception
532
533 IF (p_Param_Portlet_Region_Code IS NULL) THEN
534 FND_MESSAGE.SET_NAME('BSC','BSC_NO_PARAM_PORTLET');
535 FND_MSG_PUB.ADD;
536 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
537 END IF;
538
539 --DBMS_OUTPUT.PUT_LINE('is_Indicator_In_Production');
540
541 l_AO_Id := BSC_BIS_KPI_CRUD_PUB.Get_AO_Id_By_Measure (l_Kpi_Id, l_Dataset_Id);
542 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code (l_Kpi_Id ,l_AO_Id);
543
544
545 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code(
546 p_Param_Portlet_Region_Code => BSC_BIS_KPI_CRUD_PUB.Get_Param_Portlet_By_Region(l_Region_Code)
547 , x_Non_Time_Dimension_Groups => x_Non_Time_Dimension_Groups
548 , x_Non_Time_Dimension_Objects => x_Non_Time_Dimension_Objects
549 , x_Non_Time_Dim_Obj_Short_Names => x_Non_Time_Dim_Obj_Short_Names
550 , x_All_Dim_Group_Ids => x_All_Dim_Group_Ids
551 , x_Non_Time_Counter => x_Non_Time_Counter
552 , x_Time_Dimension_Groups => x_Time_Dimension_Groups
553 , x_Time_Dimension_Objects => x_Time_Dimension_Objects
554 , x_Time_Dim_Obj_Short_Names => x_Time_Dim_Obj_Short_Names
555 , x_Time_Counter => x_Time_Counter
556 , x_Msg_Data => x_Msg_Data
557 );
558 IF (x_Msg_Data IS NOT NULL) THEN
559 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_REG_DIM_AK ');
560 FND_MESSAGE.SET_TOKEN('CODE', p_Param_Portlet_Region_Code);
561 FND_MSG_PUB.ADD;
562 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
563 END IF;
564
565
566 -- Need to update the Region Item FORMAT_ID and AUTOSCALE FLAG
567 --l_sequence
568
569
570 l_Sequence := BSC_BIS_KPI_CRUD_PUB.Get_Sequence_Id_By_Region(
571 p_Region_Code => l_Region_Code
572 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
573 , p_Attribute_Code => p_Measure_Short_Name
574 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
575 );
576
577
578
579 IF BSC_BIS_KPI_CRUD_PUB.is_Valid_Region_Code(l_Region_Code) THEN
580 l_Analysis_Option_Id := l_AO_Id;
581 ELSE
582 l_Analysis_Option_Id := NULL;
583 END IF;
584
585
586 -- Upade the Measure Prototype Data.
587
588 --DBMS_OUTPUT.PUT_LINE('Outside BSC_BIS_MEASURE_PUB.Update_Measure' );
589
590 -- Push the query to a function (mod)
591 SELECT
592 m.measure_id
593 INTO
594 l_Bsc_Measure_Id
595 FROM
596 bsc_sys_measures m,
597 bsc_sys_datasets_vl d,
598 bis_indicators i
599 WHERE
600 i.dataset_id = d.dataset_id AND
601 d.measure_id1 = m.measure_id AND
602 i.short_name = p_measure_short_name;
603
604 -- Passed AK type and AK source (pl/sql), since they were getting updated to null
605 BSC_BIS_MEASURE_PUB.Update_Measure(
606 p_Commit => p_commit
607 ,p_Dataset_Id => l_dataset_id
608 ,p_Dataset_Source => BSC_BIS_MEASURE_PUB.c_BSC
609 ,p_Dataset_Name => p_measure_name
610 ,p_Dataset_Help => p_measure_description
611 ,p_Dataset_Measure_Id1 => l_Bsc_Measure_Id
612 ,p_Dataset_Operation => NULL
613 ,p_Dataset_Measure_Id2 => NULL
614 ,p_Dataset_Format_Id => p_dataset_format_id
615 ,p_Dataset_Color_Method => NULL
616 ,p_Dataset_Autoscale_Flag => p_dataset_autoscale_flag
617 ,p_Dataset_Projection_Flag => NULL
618 ,p_Measure_Short_Name => p_measure_short_name
619 ,p_Measure_Act_Data_Src_Type => 'AK'
620 ,p_Measure_Act_Data_Src => l_Region_Code || '.' || p_measure_short_name
621 ,p_Measure_Comparison_Source => NULL
622 ,p_Measure_Operation => p_measure_operation
623 ,p_Measure_Uom_Class => NULL
624 ,p_Measure_Increase_In_Measure => p_measure_increase_in_measure
625 ,p_Measure_Random_Style => p_measure_random_style
626 ,p_Measure_Min_Act_Value => p_measure_min_act_value
627 ,p_Measure_Max_Act_Value => p_measure_max_act_value
628 ,p_Measure_Min_Bud_Value => NULL
629 ,p_Measure_Max_Bud_Value => NULL
630 ,p_Measure_App_Id => p_Measure_App_Id
631 ,p_Measure_Col => NULL
632 ,p_Measure_Group_Id => NULL
633 ,p_Measure_Projection_Id => BSC_BIS_KPI_CRUD_PUB.C_NO_PROJECTION
634 ,p_Measure_Type => p_measure_type
635 ,p_Measure_Apply_Rollup => NULL
636 ,p_Measure_Function_Name => l_Region_Code
637 ,p_Measure_Enable_Link => 'Y'
638 ,p_Time_Stamp => NULL
639 ,p_Dimension1_Id => x_all_dim_group_ids(1)
640 ,p_Dimension2_Id => x_all_dim_group_ids(2)
641 ,p_Dimension3_Id => x_all_dim_group_ids(3)
642 ,p_Dimension4_Id => x_all_dim_group_ids(4)
643 ,p_Dimension5_Id => x_all_dim_group_ids(5)
644 ,p_Dimension6_Id => x_all_dim_group_ids(6)
645 ,p_Dimension7_Id => x_all_dim_group_ids(7)
646 ,p_Y_Axis_Title => NULL
647 ,p_func_area_short_name => p_Func_Area_Short_Name
648 ,x_Return_Status => x_return_status
649 ,x_Msg_Count => x_msg_count
650 ,x_Msg_Data => x_msg_data
651 );
652
653 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
655 END IF;
656
657
658
659 --DBMS_OUTPUT.PUT_LINE('Outside Update_Kpi_Analysis_Option' );
660 BSC_BIS_KPI_CRUD_PUB.Update_Kpi_Analysis_Option(
661 p_Commit => p_Commit
662 ,p_Kpi_Id => l_Kpi_Id
663 ,p_Dataset_Id => l_Dataset_Id
664 ,p_Measure_Name => p_Measure_Name
665 ,p_Measure_Description => p_Measure_Description
666 ,x_return_status => x_return_status
667 ,x_msg_count => x_msg_count
668 ,x_msg_data => x_msg_data
669 );
670
671 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
672 -- debug
673 FND_MESSAGE.SET_NAME('BSC','BSC_ANA_OPT_NO_UPD_DEL');
674 FND_MESSAGE.SET_TOKEN('ACTION', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON','UPDATE'));
675 FND_MESSAGE.SET_TOKEN('KPI', l_Kpi_Id);
676 FND_MESSAGE.SET_TOKEN('DATASET_ID', l_Dataset_Id);
677 FND_MSG_PUB.ADD;
678 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
679 END IF;
680
681 -------------------------------------------------------
682 ----- BSC and BIS tables
683
684
685 -- IF Analysis_Option is passed as NULL, the lower APIs
686 -- ASSUME that the format of the Region Code is of the format
687 -- BSC_<KPIID>, else BSC_<KPIID>_<AO> is calculated.
688
689 BSC_BIS_KPI_CRUD_PUB.Update_Measure_Region_Item(
690 p_commit => p_commit,
691 p_measure_short_name => p_measure_short_name,
692 p_sequence_number => l_sequence,
693 p_kpi_id => l_Kpi_Id,
694 p_Analysis_Option => l_Analysis_Option_Id,
695 p_dataset_format_id => p_dataset_format_id,
696 p_dataset_autoscale_flag => p_dataset_autoscale_flag,
697 p_Analysis_Option_Name => p_Measure_Name,
698 x_return_status => x_return_status,
699 x_msg_count => x_msg_count,
700 x_msg_data => x_msg_data
701 );
702 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
703 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
704 END IF;
705
706 BSC_BIS_KPI_CRUD_PUB.Update_Addl_Ak_Region_Items(
707 p_commit => p_commit
708 , p_Region_Code => l_Region_Code
709 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
710 , p_Display_Format => Get_Format_Mask(p_Dataset_Format_Id)
711 , p_Format_Id => p_Dataset_Format_Id
712 , p_Measure_Short_Name => p_measure_short_name
713 , x_return_status => x_return_status
714 , x_msg_count => x_msg_count
715 , x_msg_data => x_msg_data
716 );
717 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
718 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
719 END IF;
720
721 -- Changed p_Disable_View_By = 'N' for Bug#3844823
722
723 -- Do not update Region if the region is not in the format BSC_<KPI>_<AO>
724 -- The Measures exists under the same AK Region (common Dimensions)
725 IF (l_Analysis_Option_Id IS NOT NULL AND (l_Analysis_Option_Id <> -1)) THEN
726 BSC_BIS_KPI_CRUD_PUB.Update_Region_By_AO (
727 p_Commit => p_Commit
728 , p_Kpi_Id => l_Kpi_Id
729 , p_Analysis_Option_Id => l_Analysis_Option_Id
730 , p_Dim_Set_Id => 0
731 , p_Region_Name => p_Measure_Name
732 , p_Region_Description => p_Measure_Description
733 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
734 , p_Disable_View_By => 'N'
735 , x_return_status => x_return_status
736 , x_msg_count => x_msg_count
737 , x_msg_data => x_msg_data
738 ) ;
739 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
740 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
741 END IF;
742
743 -- added for Bug#3844849
744 l_Form_Parameters := 'pForceRun=Y' || '&' || 'pRegionCode=' || l_Region_Code
745 || '&' || 'pFunctionName=' || l_Region_Code
746 || '&' || 'pParameters=pParamIds@Y';
747
748 FND_FORM_FUNCTIONS_PKG.UPDATE_ROW
749 (
750 X_FUNCTION_ID => BSC_BIS_KPI_CRUD_PUB.Get_Function_Id_By_Name(l_Region_Code)
751 ,X_WEB_HOST_NAME => ''
752 ,X_WEB_AGENT_NAME => ''
753 ,X_WEB_HTML_CALL => BSC_BIS_KPI_CRUD_PUB.c_bisreportpg
754 ,X_WEB_ENCRYPT_PARAMETERS => 'N'
755 ,X_WEB_SECURED => 'N'
756 ,X_WEB_ICON => ''
757 ,X_OBJECT_ID => NULL
758 ,X_REGION_APPLICATION_ID => NULL
759 ,X_REGION_CODE => ''
760 ,X_FUNCTION_NAME => l_Region_Code
761 ,X_APPLICATION_ID => NULL
762 ,X_FORM_ID => NULL
763 ,X_PARAMETERS => l_Form_Parameters
764 ,X_TYPE => 'JSP'
765 ,X_USER_FUNCTION_NAME => p_Measure_Name
766 ,X_DESCRIPTION => p_Measure_Description
767 ,X_LAST_UPDATE_DATE => SYSDATE
768 ,X_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
769 ,X_LAST_UPDATE_LOGIN => FND_GLOBAL.LOGIN_ID
770 );
771 END IF;
772
773 EXCEPTION
774 WHEN FND_API.G_EXC_ERROR THEN
775 IF (x_msg_data IS NULL) THEN
776 FND_MSG_PUB.Count_And_Get
777 ( p_encoded => FND_API.G_FALSE
778 , p_count => x_msg_count
779 , p_data => x_msg_data
780 );
781 END IF;
782 x_return_status := FND_API.G_RET_STS_ERROR;
783 ROLLBACK TO UpdateEndToEndKPI;
784 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
785 IF (x_msg_data IS NULL) THEN
786 FND_MSG_PUB.Count_And_Get
787 ( p_encoded => FND_API.G_FALSE
788 , p_count => x_msg_count
789 , p_data => x_msg_data
790 );
791 END IF;
792 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
793 ROLLBACK TO UpdateEndToEndKPI;
794 WHEN NO_DATA_FOUND THEN
795 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
796 IF (x_msg_data IS NOT NULL) THEN
797 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Kpi_End_To_End ';
798 ELSE
799 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Kpi_End_To_End ';
800 END IF;
801 ROLLBACK TO UpdateEndToEndKPI;
802 WHEN OTHERS THEN
803 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
804 IF (x_msg_data IS NOT NULL) THEN
805 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Kpi_End_To_End ';
806 ELSE
807 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Kpi_End_To_End ';
808 END IF;
809 ROLLBACK TO UpdateEndToEndKPI;
810 END Update_Kpi_End_To_End;
811
812
813 /*
814
815 Start the DELETE APIs from here on.
816
817 */
818
819
820 PROCEDURE Delete_Kpi_End_To_End(
821 p_Commit IN VARCHAR2 := FND_API.G_FALSE
822 ,p_Param_Portlet_Region_Code IN VARCHAR2
823 ,p_Measure_Short_Name IN VARCHAR2 := NULL
824 ,p_Page_Function_Name IN VARCHAR2
825 ,p_Kpi_Portlet_Function_Name IN VARCHAR2
826 ,x_Return_Status OUT NOCOPY VARCHAR2
827 ,x_Msg_Count OUT NOCOPY NUMBER
828 ,x_Msg_Data OUT NOCOPY VARCHAR2
829 ) IS
830 l_Dataset_Source VARCHAR2(10) := NULL;
831 l_Dataset_Id NUMBER;
832 l_Does_Dim_Group_Exist BOOLEAN;
833 l_Does_Kpi_Exist BOOLEAN;
834 l_Tab_Id NUMBER;
835 l_Kpi_Group_Id NUMBER;
836 l_Kpi_Id NUMBER;
837 l_Real_Kpi_Name BSC_KPIS_VL.NAME%TYPE;
838 l_Fid NUMBER;
839 l_Rowid ROWID;
840 l_form_parameters VARCHAR2(32000);
841 l_max_seq_number NUMBER;
842 l_sequence NUMBER := 10;
843 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
844 l_Region_Code VARCHAR2(30);
845 l_Analysis_Option_Id NUMBER;
846 l_Count NUMBER;
847 l_Last_Analysis_Option NUMBER;
848
849 l_Parameter_Portlet VARCHAR2(30);
850
851 BEGIN
852
853 -- Load local variables.
854 SAVEPOINT DeleteEndToEndKPI;
855
856 FND_MSG_PUB.Initialize;
857 x_return_status := FND_API.G_RET_STS_SUCCESS;
858
859
860 IF (p_Param_Portlet_Region_Code IS NULL) THEN
861 FND_MESSAGE.SET_NAME('BSC','BSC_NO_PARAM_PORTLET');
862 FND_MSG_PUB.ADD;
863 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
864 END IF;
865
866
867 -- should take l_kpi_id from the measure_short_name only and not from
868 -- the Page function name. Bug#3766839
869 l_Kpi_Id := NVL(BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_Kpi(p_Measure_Short_Name),
870 BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY);
871 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(p_Measure_Short_Name);
872
873 -- If the KPI has been deleted, throw a valid message
874
875 SELECT COUNT(1) INTO l_Count
876 FROM BSC_SYS_DATASETS_B
877 WHERE DATASET_ID = l_Dataset_Id;
878 IF l_count = 0 THEN
879 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
880 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON','EDW_MEASURE'));
881 FND_MSG_PUB.ADD;
882 RAISE FND_API.G_EXC_ERROR;
883 END IF;
884
885 SELECT COUNT(1) INTO l_Count
886 FROM BSC_KPIS_B
887 WHERE INDICATOR = l_Kpi_Id;
888 IF l_count = 0 THEN
889 FND_MESSAGE.SET_NAME('BSC','BSC_MUSER_DELETE_MESSAGE');
890 FND_MESSAGE.SET_TOKEN('TYPE', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON','KPI'));
891 FND_MSG_PUB.ADD;
892 RAISE FND_API.G_EXC_ERROR;
893 END IF;
894
895 --DBMS_OUTPUT.PUT_LINE('Get_Num_Measures_By_Kpi -> ' || Get_Num_Measures_By_Kpi(l_Kpi_Id));
896
897 IF(BSC_BIS_KPI_CRUD_PUB.Get_Num_Measures_By_Kpi(l_Kpi_Id) > 1) THEN
898 -- Start deleting the PMV/AK Metadata
899 -- Delete the Measure Metadata
900 -- IF the Measure has its own AK Region, we need to delete it.
901 IF(has_Measure_AK_Region(l_Kpi_Id, l_Dataset_Id)) THEN
902 l_Analysis_Option_Id := Get_AO_Id_By_Measure (l_Kpi_Id, l_Dataset_Id);
903 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(l_Kpi_Id, l_Analysis_Option_Id);
904
905
906 -- Need to find out Param Portlet before AK is deleted
907 l_Parameter_Portlet := BSC_BIS_KPI_CRUD_PUB.Get_Param_Portlet_By_Region(l_Region_Code);
908
909 -- Deletes all the AK Metadata Related to the Analysis Option
910 BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata(
911 p_Commit => p_Commit
912 , p_Region_Code => l_Region_Code
913 , p_Region_Code_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
914 , x_Return_Status => x_Return_Status
915 , x_Msg_Count => x_Msg_Count
916 , x_Msg_Data => x_Msg_Data
917 );
918 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
919 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
920 END IF;
921
922 ELSE -- If the Analysis Option does not have its own AK Region
923 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(l_Kpi_Id, NULL);
924
925 -- Need to find out Param Portlet before AK is deleted
926 l_Parameter_Portlet := BSC_BIS_KPI_CRUD_PUB.Get_Param_Portlet_By_Region(l_Region_Code);
927
928 BSC_BIS_KPI_CRUD_PUB.Delete_Measure_Region_Item(
929 p_Commit => p_commit
930 ,p_Param_Portlet_Region_Code => l_Region_Code
931 ,p_Measure_Short_Name => p_Measure_Short_Name
932 ,p_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
933 ,x_return_status => x_return_status
934 ,x_msg_count => x_msg_count
935 ,x_msg_data => x_msg_data
936 );
937 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
938 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
939 END IF;
940 END IF;
941
942
943 BSC_BIS_KPI_CRUD_PUB.Unassign_Kpi_Analysis_Option (
944 p_Commit => p_commit
945 ,p_Kpi_Id => l_kpi_Id
946 ,p_Dataset_Id => l_Dataset_Id
947 ,x_return_status => x_return_status
948 ,x_msg_count => x_msg_count
949 ,x_msg_data => x_msg_data
950 );
951
952 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
953 FND_MESSAGE.SET_NAME('BSC','BSC_ANA_OPT_NO_UPD_DEL');
954 FND_MESSAGE.SET_TOKEN('ACTION', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON','UPDATE'));
955 FND_MESSAGE.SET_TOKEN('KPI', l_kpi_Id);
956 FND_MESSAGE.SET_TOKEN('DATASET_ID', l_Dataset_Id);
957 FND_MSG_PUB.ADD;
958 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
959 END IF;
960
961
962 -- Delete the Measure from the DB (BSC and BIS).
963
964 BSC_BIS_MEASURE_PUB.Delete_Measure(
965 p_Commit => p_commit
966 ,p_Dataset_Id => l_Dataset_Id
967 ,x_return_status => x_return_status
968 ,x_msg_count => x_msg_count
969 ,x_msg_data => x_msg_data
970 );
971 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
972 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
973 END IF;
974
975 SELECT NVL(MAX(ANALYSIS_OPTION0), 0)
976 INTO l_Last_Analysis_Option
977 FROM BSC_KPI_ANALYSIS_MEASURES_B
978 WHERE INDICATOR = l_kpi_Id;
979
980 IF(l_Analysis_Option_Id <= l_Last_Analysis_Option) THEN
981 BSC_BIS_KPI_CRUD_PUB.Referesh_AK_Metadata (
982 p_Commit => p_Commit
983 , p_Kpi_Id => l_Kpi_Id
984 , p_Deleted_AO_Index => l_Analysis_Option_Id
985 , p_Param_Portlet_Region_Code => l_Parameter_Portlet
986 , x_Return_Status => x_Return_Status
987 , x_Msg_Count => x_Msg_Count
988 , x_Msg_Data => x_Msg_Data
989 );
990 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
991 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
992 END IF;
993 END IF;
994
995 ELSE -- End - IF NOT Get_Num_Measures_By_Kpi > 1 (delete all the KPI Metatada and Regions)
996
997 -- Start deleting the PMV/AK Metadata
998 -- Delete the Measure Metadata
999 --DBMS_OUTPUT.PUT_LINE('Outside Delete_Measure_Region_Item' );
1000 IF(has_Measure_AK_Region(l_Kpi_Id, l_Dataset_Id)) THEN
1001 l_Analysis_Option_Id := Get_AO_Id_By_Measure (l_Kpi_Id, l_Dataset_Id);
1002 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(l_Kpi_Id, l_Analysis_Option_Id);
1003 ELSE
1004 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(l_Kpi_Id, NULL); -- Tyep BSC_<KPIID>
1005 END IF;
1006
1007 BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata(
1008 p_Commit => p_Commit
1009 , p_Region_Code => l_Region_Code
1010 , p_Region_Code_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
1011 , x_Return_Status => x_Return_Status
1012 , x_Msg_Count => x_Msg_Count
1013 , x_Msg_Data => x_Msg_Data
1014 );
1015 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1016 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1017 END IF;
1018
1019 /*
1020 At this point, Delete ALL the KPI Metadata and info related to the KPI.
1021 */
1022 --DBMS_OUTPUT.PUT_LINE('Outside BSC_PMF_UI_WRAPPER.Delete_Kpi' );
1023 --DBMS_OUTPUT.PUT_LINE('Outside FND_FORM_FUNCTIONS_PKG.DELETE_ROW ' );
1024 BSC_PMF_UI_WRAPPER.Delete_Kpi(
1025 p_commit => p_commit
1026 ,p_Kpi_Id => l_Kpi_Id
1027 ,x_Return_Status => x_Return_Status
1028 ,x_Msg_Count => x_Msg_Count
1029 ,x_Msg_Data => x_Msg_Data
1030 );
1031 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1032 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1033 END IF;
1034 --DBMS_OUTPUT.PUT_LINE('Outside FND_FORM_FUNCTIONS_PKG.DELETE_ROW ' );
1035
1036 -- Delete the Actual Measure from BSC and BIS Datamodel.
1037 --DBMS_OUTPUT.PUT_LINE('Outside BSC_BIS_MEASURE_PUB.Delete_Measure ' );
1038 BSC_BIS_MEASURE_PUB.Delete_Measure(
1039 p_Commit => p_Commit
1040 ,p_Dataset_Id => l_Dataset_Id
1041 ,x_return_status => x_return_status
1042 ,x_msg_count => x_msg_count
1043 ,x_msg_data => x_msg_data
1044 );
1045 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1046 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1047 END IF;
1048
1049 l_Parameter_Portlet := BSC_BIS_KPI_CRUD_PUB.Get_Param_Portlet_By_Region(l_Region_Code);
1050
1051 -- parameter was dynamically created - so delete it and its region/region items
1052 -- added for Bug#4558279
1053 IF (p_Param_Portlet_Region_Code <> l_Parameter_Portlet) THEN
1054 BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata(
1055 p_Commit => p_Commit
1056 , p_Region_Code => l_Parameter_Portlet
1057 , p_Region_Code_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
1058 , x_Return_Status => x_Return_Status
1059 , x_Msg_Count => x_Msg_Count
1060 , x_Msg_Data => x_Msg_Data
1061 );
1062 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1063 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1064 END IF;
1065
1066
1067 BSC_BIS_DIMENSION_PUB.Delete_Dimension
1068 ( p_commit => p_Commit
1069 , p_dim_short_name => l_Parameter_Portlet
1070 , x_return_status => x_Return_Status
1071 , x_msg_count => x_Msg_Count
1072 , x_msg_data => x_Msg_Data
1073 );
1074 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1075 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1076 END IF;
1077 END IF;
1078
1079
1080 END IF; -- End - Get_Num_Measures_By_Kpi
1081 --DBMS_OUTPUT.PUT_LINE('End of Delete_Kpi_End_To_End' );
1082 EXCEPTION
1083 WHEN FND_API.G_EXC_ERROR THEN
1084 IF (x_msg_data IS NULL) THEN
1085 FND_MSG_PUB.Count_And_Get
1086 ( p_encoded => FND_API.G_FALSE
1087 , p_count => x_msg_count
1088 , p_data => x_msg_data
1089 );
1090 END IF;
1091 x_return_status := FND_API.G_RET_STS_ERROR;
1092 ROLLBACK TO DeleteEndToEndKPI;
1093 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1094 IF (x_msg_data IS NULL) THEN
1095 FND_MSG_PUB.Count_And_Get
1096 ( p_encoded => FND_API.G_FALSE
1097 , p_count => x_msg_count
1098 , p_data => x_msg_data
1099 );
1100 END IF;
1101 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1102 ROLLBACK TO DeleteEndToEndKPI;
1103 WHEN NO_DATA_FOUND THEN
1104 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1105 IF (x_msg_data IS NOT NULL) THEN
1106 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_Kpi_End_To_End ';
1107 ELSE
1108 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_Kpi_End_To_End ';
1109 END IF;
1110 ROLLBACK TO DeleteEndToEndKPI;
1111 WHEN OTHERS THEN
1112 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1113 IF (x_msg_data IS NOT NULL) THEN
1114 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_Kpi_End_To_End ';
1115 ELSE
1116 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_Kpi_End_To_End ';
1117 END IF;
1118 ROLLBACK TO DeleteEndToEndKPI;
1119 END Delete_Kpi_End_To_End;
1120
1121
1122
1123
1124 PROCEDURE Get_Dim_Info_From_Region_Code(
1125 p_param_portlet_region_code IN VARCHAR2
1126 ,x_non_time_dimension_groups OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
1127 ,x_non_time_dimension_objects OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
1128 ,x_non_time_dim_obj_short_names OUT NOCOPY VARCHAR2
1129 ,x_all_dim_group_ids OUT NOCOPY BSC_NUMBER_TBL_TYPE
1130 ,x_non_time_counter OUT NOCOPY NUMBER
1131 ,x_time_dimension_groups OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
1132 ,x_time_dimension_objects OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
1133 ,x_time_dim_obj_short_names OUT NOCOPY VARCHAR2
1134 ,x_time_counter OUT NOCOPY NUMBER
1135 ,x_msg_data OUT NOCOPY VARCHAR2
1136 ) IS
1137
1138 l_ak_attr2 VARCHAR2(2000);
1139 l_display_sequence NUMBER;
1140 l_dimension_grp bsc_varchar2_tbl_type;
1141 l_dimension_object bsc_varchar2_tbl_type;
1142 l_counter NUMBER := 1;
1143 l_dimension_grp_id NUMBER;
1144 l_msg_count NUMBER;
1145 l_Dim_Id_Cnt NUMBER;
1146
1147
1148 -- attribute2 stores dim+dim obj
1149 CURSOR c_dim(p_region_code varchar2) IS
1150 SELECT DISTINCT a.attribute2, a.display_sequence
1151 FROM ak_region_items a
1152 WHERE a.region_code = p_region_code
1153 AND ATTRIBUTE1 IN ('DIMENSION LEVEL',
1154 'DIM LEVEL SINGLE VALUE',
1155 'DIMENSION VALUE',
1156 'HIDE_VIEW_BY',
1157 'HIDE_VIEW_BY_SINGLE',
1158 'HIDE PARAMETER',
1159 'VIEWBY PARAMETER',
1160 'HIDE_DIM_LVL',
1161 'HIDE DIMENSION LEVEL',
1162 'HIDE VIEW BY DIMENSION',
1163 'HIDE_VIEW_BY_DIM_SINGLE')
1164 AND a.attribute2 LIKE '%+%'
1165 AND a.attribute2 NOT LIKE 'TIME_COMPARISON_TYPE%'
1166 ORDER BY a.display_sequence;
1167
1168 CURSOR c_DimId IS
1169 SELECT a.dimension_id
1170 FROM bis_dimensions a
1171 WHERE UPPER(a.short_name) = UPPER(l_dimension_grp(l_counter));
1172
1173 BEGIN
1174
1175 x_non_time_dim_obj_short_names := NULL;
1176 x_non_time_counter := 1;
1177 x_time_counter := 1;
1178 l_Dim_Id_Cnt := 0;
1179
1180 x_all_dim_group_ids(1) := NULL;
1181 x_all_dim_group_ids(2) := NULL;
1182 x_all_dim_group_ids(3) := NULL;
1183 x_all_dim_group_ids(4) := NULL;
1184 x_all_dim_group_ids(5) := NULL;
1185 x_all_dim_group_ids(6) := NULL;
1186 x_all_dim_group_ids(7) := NULL;
1187
1188 IF c_Dim%ISOPEN THEN
1189 CLOSE c_Dim;
1190 END IF;
1191
1192 OPEN c_dim(p_param_portlet_region_code);
1193
1194 LOOP
1195
1196 FETCH c_dim INTO l_ak_attr2, l_display_sequence; --HRI_PERSON+HRI_PER_USRDR_H
1197 EXIT WHEN c_dim%NOTFOUND;
1198 l_dimension_grp(l_counter) := substr(l_ak_attr2, 1, instr(l_ak_attr2,'+')-1);
1199 l_dimension_object(l_counter) := substr(l_ak_attr2, instr(l_ak_attr2,'+')+1);
1200
1201 IF ((l_dimension_grp(l_counter) <> BSC_BIS_KPI_CRUD_PUB.c_oltp_time) AND
1202 (l_dimension_grp(l_counter) <> BSC_BIS_KPI_CRUD_PUB.c_edw_time)) THEN
1203
1204 x_non_time_dimension_groups(x_non_time_counter) := l_dimension_grp(l_counter);
1205 x_non_time_dimension_objects(x_non_time_counter) := l_dimension_object(l_counter);
1206
1207 -- concatenate non time dimension object short name
1208 IF (x_non_time_dim_obj_short_names IS NULL) THEN
1209 x_non_time_dim_obj_short_names := l_dimension_object(l_counter);
1210 ELSE
1211 x_non_time_dim_obj_short_names := x_non_time_dim_obj_short_names || ',' || l_dimension_object(l_counter);
1212 END IF;
1213 x_non_time_counter := x_non_time_counter + 1;
1214
1215 ELSE
1216 -- for time dimension
1217 x_time_dimension_groups(x_time_counter) := l_dimension_grp(l_counter);
1218 x_time_dimension_objects(x_time_counter) := l_dimension_object(l_counter);
1219 x_time_counter := x_time_counter + 1;
1220 -- concatenate time dimension object short name
1221 IF (x_time_dim_obj_short_names IS NULL) THEN
1222 x_time_dim_obj_short_names := l_dimension_object(l_counter);
1223 ELSE
1224 x_time_dim_obj_short_names := x_time_dim_obj_short_names || ',' || l_dimension_object(l_counter);
1225 END IF;
1226
1227 END IF;
1228
1229 FOR cDimId IN c_DimId LOOP
1230 l_dimension_grp_id := cDimId.DIMENSION_ID;
1231 l_Dim_Id_Cnt := l_Dim_Id_Cnt + 1;
1232 END LOOP;
1233
1234 IF l_Dim_Id_Cnt <> 1 THEN
1235 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
1236 FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME', l_dimension_grp(l_counter), TRUE);
1237 FND_MSG_PUB.ADD;
1238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1239 END IF;
1240
1241 l_Dim_Id_Cnt := 0;
1242
1243 x_all_dim_group_ids(l_counter) := l_dimension_grp_id;
1244
1245 l_counter := l_counter + 1;
1246
1247 END LOOP;
1248
1249 CLOSE c_dim;
1250
1251 -- if no dimension set, raise exception
1252 IF (l_counter = 1) THEN
1253 FND_MESSAGE.SET_NAME('BSC','BSC_NO_DIM_SET_ASSOC');
1254 FND_MSG_PUB.ADD;
1255 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1256 END IF;
1257
1258 -- decrement by one to match the actual number of elements
1259 x_non_time_counter := x_non_time_counter - 1;
1260 x_time_counter := x_time_counter - 1;
1261
1262 EXCEPTION
1263 WHEN FND_API.G_EXC_ERROR THEN
1264 IF c_Dim%ISOPEN THEN
1265 CLOSE c_Dim;
1266 END IF;
1267
1268 IF (x_msg_data IS NULL) THEN
1269 FND_MSG_PUB.Count_And_Get
1270 ( p_encoded => FND_API.G_FALSE
1271 , p_count => l_msg_count
1272 , p_data => x_msg_data
1273 );
1274 END IF;
1275 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1276 IF c_Dim%ISOPEN THEN
1277 CLOSE c_Dim;
1278 END IF;
1279
1280 IF (x_msg_data IS NULL) THEN
1281 FND_MSG_PUB.Count_And_Get
1282 ( p_encoded => FND_API.G_FALSE
1283 , p_count => l_msg_count
1284 , p_data => x_msg_data
1285 );
1286 END IF;
1287
1288 WHEN NO_DATA_FOUND THEN
1289 IF c_Dim%ISOPEN THEN
1290 CLOSE c_Dim;
1291 END IF;
1292
1293 IF (x_msg_data IS NOT NULL) THEN
1294 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code ';
1295 ELSE
1296 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code ';
1297 END IF;
1298 WHEN OTHERS THEN
1299 IF c_Dim%ISOPEN THEN
1300 CLOSE c_Dim;
1301 END IF;
1302
1303 IF (x_msg_data IS NOT NULL) THEN
1304 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code ';
1305 ELSE
1306 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code ';
1307 END IF;
1308
1309 END Get_Dim_Info_From_Region_Code;
1310
1311
1312
1313
1314 PROCEDURE Create_Dim_Level_Region_Item(
1315 p_commit VARCHAR2 := FND_API.G_FALSE
1316 ,p_non_time_counter NUMBER
1317 ,p_non_time_dimension_objects bsc_varchar2_tbl_type
1318 ,p_non_time_dimension_groups bsc_varchar2_tbl_type
1319 ,p_time_counter NUMBER
1320 ,p_time_dimension_objects bsc_varchar2_tbl_type
1321 ,p_time_dimension_groups bsc_varchar2_tbl_type
1322 ,p_kpi_id NUMBER
1323 ,p_Analysis_Option NUMBER := NULL
1324 ,x_sequence IN OUT NOCOPY NUMBER
1325 ,x_return_status OUT NOCOPY VARCHAR2
1326 ,x_msg_count OUT NOCOPY NUMBER
1327 ,x_msg_data OUT NOCOPY VARCHAR2)
1328 IS
1329
1330 l_dim NUMBER;
1331 l_region_item_table_dim_set BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
1332 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
1333 l_real_counter NUMBER := 1;
1334 l_Region_Code VARCHAR2(80);
1335
1336 BEGIN
1337
1338
1339 FOR l_dim IN 1..p_non_time_counter LOOP
1340
1341
1342 l_region_item_rec.Attribute_Code := p_non_time_dimension_objects(l_dim);
1343 l_region_item_rec.Attribute_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
1344 l_region_item_rec.Display_Sequence := x_sequence;
1345 l_region_item_rec.Node_Display_Flag := ' ';
1346 l_region_item_rec.Required_Flag := ' ';
1347 l_region_item_rec.Queryable_Flag := 'Y';
1348 l_region_item_rec.Display_Length := 0;
1349 l_region_item_rec.Long_Label := p_non_time_dimension_objects(l_dim);
1350 l_region_item_rec.Sort_Sequence := NULL;
1351 l_region_item_rec.Initial_Sort_Sequence := NULL;
1352 l_region_item_rec.Sort_Direction := NULL;
1353 l_region_item_rec.Url := NULL;
1354 l_region_item_rec.Attribute_Type := 'DIMENSION LEVEL';
1355 l_region_item_rec.Display_Format := NULL;
1356 l_region_item_rec.Display_Type := NULL;
1357 l_region_item_rec.Measure_Level := p_non_time_dimension_groups(l_dim) || '+' || p_non_time_dimension_objects(l_dim);
1358 l_region_item_rec.Base_Column := NULL;
1359 l_region_item_rec.Lov_Where_Clause := NULL;
1360 l_region_item_rec.Graph_Position := NULL;
1361 l_region_item_rec.Graph_Style := NULL;
1362 l_region_item_rec.Lov_Table := NULL;
1363 l_region_item_rec.Aggregate_Function := NULL;
1364 l_region_item_rec.Display_Total := NULL;
1365 l_region_item_rec.Variance := NULL;
1366 l_region_item_rec.Schedule := NULL;
1367 l_region_item_rec.Override_Hierarchy := NULL;
1368 l_region_item_rec.Additional_View_By := NULL;
1369 l_region_item_rec.Rolling_Lookup := NULL;
1370 l_region_item_rec.Operator_Lookup := NULL;
1371 l_region_item_rec.Dual_YAxis_Graphs := NULL;
1372 l_region_item_rec.Custom_View_Name := NULL;
1373 l_region_item_rec.Graph_Measure_Type := NULL;
1374 l_region_item_rec.Hide_Target_In_Table := NULL;
1375 l_region_item_rec.Parameter_Render_Type := NULL;
1376 l_region_item_rec.Privilege := NULL;
1377
1378 l_region_item_table_dim_set(l_real_counter) := l_region_item_rec;
1379 l_real_counter := l_real_counter + 1;
1380 x_sequence := x_sequence + 10;
1381
1382 END LOOP;
1383
1384
1385 FOR l_dim IN 1..p_time_counter LOOP
1386
1387
1388 l_region_item_rec.Attribute_Code := p_time_dimension_objects(l_dim);
1389 l_region_item_rec.Attribute_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
1390 l_region_item_rec.Display_Sequence := x_sequence;
1391 l_region_item_rec.Node_Display_Flag := ' ';
1392 l_region_item_rec.Required_Flag := ' ';
1393 l_region_item_rec.Queryable_Flag := 'Y';
1394 l_region_item_rec.Display_Length := 0;
1395 l_region_item_rec.Long_Label := p_time_dimension_objects(l_dim);
1396 l_region_item_rec.Sort_Sequence := NULL;
1397 l_region_item_rec.Initial_Sort_Sequence := NULL;
1398 l_region_item_rec.Sort_Direction := NULL;
1399 l_region_item_rec.Url := NULL;
1400 l_region_item_rec.Attribute_Type := 'DIMENSION LEVEL';
1401 l_region_item_rec.Display_Format := NULL;
1402 l_region_item_rec.Display_Type := NULL;
1403 l_region_item_rec.Measure_Level := p_time_dimension_groups(l_dim) || '+' || p_time_dimension_objects(l_dim);
1404 l_region_item_rec.Base_Column := NULL;
1405 l_region_item_rec.Lov_Where_Clause := NULL;
1406 l_region_item_rec.Graph_Position := NULL;
1407 l_region_item_rec.Graph_Style := NULL;
1408 l_region_item_rec.Lov_Table := NULL;
1409 l_region_item_rec.Aggregate_Function := NULL;
1410 l_region_item_rec.Display_Total := NULL;
1411 l_region_item_rec.Variance := NULL;
1412 l_region_item_rec.Schedule := NULL;
1413 l_region_item_rec.Override_Hierarchy := NULL;
1414 l_region_item_rec.Additional_View_By := NULL;
1415 l_region_item_rec.Rolling_Lookup := NULL;
1416 l_region_item_rec.Operator_Lookup := NULL;
1417 l_region_item_rec.Dual_YAxis_Graphs := NULL;
1418 l_region_item_rec.Custom_View_Name := NULL;
1419 l_region_item_rec.Graph_Measure_Type := NULL;
1420 l_region_item_rec.Hide_Target_In_Table := NULL;
1421 l_region_item_rec.Parameter_Render_Type := NULL;
1422 l_region_item_rec.Privilege := NULL;
1423
1424 l_region_item_table_dim_set(l_real_counter) := l_region_item_rec;
1425 l_real_counter := l_real_counter + 1;
1426 x_sequence := x_sequence + 10;
1427
1428 END LOOP;
1429
1430 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(
1431 p_Kpi_Id => p_kpi_id,
1432 p_AO_Id => p_Analysis_Option
1433 );
1434
1435
1436 BIS_PMV_REGION_ITEMS_PVT.CREATE_REGION_ITEMS
1437 (
1438 p_commit => p_commit
1439 ,p_region_code => l_Region_Code
1440 ,p_region_application_id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
1441 ,p_Region_Item_Tbl => l_region_item_table_dim_set
1442 ,x_return_status => x_return_status
1443 ,x_msg_count => x_msg_count
1444 ,x_msg_data => x_msg_data
1445 );
1446
1447 --DBMS_OUTPUT.PUT_LINE('region_code = ' || BSC_UTILITY.C_BSC_UNDERSCORE || p_kpi_id);
1448 --DBMS_OUTPUT.PUT_LINE('return_status_for dim_ak_region_item = ' || x_return_status);
1449
1450 END Create_Dim_Level_Region_Item;
1451
1452
1453
1454
1455
1456 PROCEDURE Create_Measure(
1457 p_commit VARCHAR2 := FND_API.G_FALSE
1458 ,x_dataset_id OUT NOCOPY NUMBER
1459 ,p_kpi_id NUMBER
1460 ,p_dataset_source VARCHAR2
1461 ,p_measure_name VARCHAR2
1462 ,p_measure_short_name VARCHAR2
1463 ,p_measure_description VARCHAR2
1464 ,p_dataset_format_id NUMBER
1465 ,p_dataset_autoscale_flag NUMBER
1466 ,p_measure_operation VARCHAR2
1467 ,p_measure_increase_in_measure VARCHAR2
1468 ,p_measure_obsolete VARCHAR2 := FND_API.G_FALSE
1469 ,p_type VARCHAR2 -- This is used for weighted kpis,This can take values CDS_SCORE,CDS_PERF or Null
1470 ,p_measure_random_style NUMBER
1471 ,p_measure_min_act_value NUMBER
1472 ,p_measure_max_act_value NUMBER
1473 ,p_measure_type NUMBER
1474 ,p_measure_function_name VARCHAR2
1475 ,p_measure_group_id NUMBER
1476 ,p_dimension1_id NUMBER
1477 ,p_dimension2_id NUMBER
1478 ,p_dimension3_id NUMBER
1479 ,p_dimension4_id NUMBER
1480 ,p_dimension5_id NUMBER
1481 ,p_dimension6_id NUMBER
1482 ,p_dimension7_id NUMBER
1483 ,p_Measure_App_Id NUMBER := NULL
1484 ,p_Func_Area_Short_Name VARCHAR2 := NULL
1485 ,x_return_status OUT NOCOPY VARCHAR2
1486 ,x_msg_count OUT NOCOPY NUMBER
1487 ,x_msg_data OUT NOCOPY VARCHAR2
1488 )
1489 IS
1490
1491 l_actual_data_source VARCHAR2(1000) := NULL;
1492 l_measure_short_name VARCHAR2(100);
1493
1494 BEGIN
1495
1496 --DBMS_OUTPUT.PUT_LINE('STAGE 8B1');
1497
1498
1499 SAVEPOINT CreateMeasureSP;
1500 FND_MSG_PUB.Initialize;
1501 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1502
1503 --DBMS_OUTPUT.PUT_LINE('STAGE 8B1');
1504
1505 -- added exception handling for Bug#3755656
1506 BSC_BIS_MEASURE_PUB.Create_Measure(
1507 p_commit => p_commit
1508 ,x_dataset_id => x_dataset_id
1509 ,p_dataset_source => p_dataset_source --'BSC' data source
1510 ,p_dataset_name => p_measure_name
1511 ,p_dataset_help => p_measure_description
1512 ,p_dataset_measure_id1 => NULL
1513 ,p_dataset_operation => NULL
1514 ,p_dataset_measure_id2 => NULL
1515 ,p_dataset_format_id => p_dataset_format_id
1516 ,p_dataset_color_method => NULL
1517 ,p_dataset_autoscale_flag => p_dataset_autoscale_flag
1518 ,p_dataset_projection_flag => NULL
1519 ,p_measure_short_name => p_measure_short_name
1520 ,p_measure_act_data_src_type => NULL
1521 --,p_measure_act_data_src => l_actual_data_source
1522 ,p_measure_act_data_src => NULL
1523 ,p_measure_comparison_source => NULL
1524 ,p_measure_operation => p_measure_operation
1525 ,p_measure_uom_class => NULL
1526 ,p_measure_increase_in_measure => p_measure_increase_in_measure
1527 ,p_measure_random_style => p_measure_random_style
1528 ,p_measure_min_act_value => p_measure_min_act_value
1529 ,p_measure_max_act_value => p_measure_max_act_value
1530 ,p_measure_min_bud_value => NULL
1531 ,p_measure_max_bud_value => NULL
1532 ,p_measure_app_id => p_Measure_App_Id
1533 ,p_measure_col => NULL
1534 ,p_measure_group_id => p_measure_group_id
1535 ,p_measure_projection_id => BSC_BIS_KPI_CRUD_PUB.C_NO_PROJECTION
1536 ,p_measure_type => p_measure_type
1537 ,p_measure_apply_rollup => NULL
1538 ,p_measure_function_name => p_measure_function_name
1539 ,p_measure_enable_link => 'N'
1540 ,p_measure_obsolete => p_measure_obsolete
1541 ,p_type => p_type
1542 ,p_dimension1_id => p_dimension1_id
1543 ,p_dimension2_id => p_dimension2_id
1544 ,p_dimension3_id => p_dimension3_id
1545 ,p_dimension4_id => p_dimension4_id
1546 ,p_dimension5_id => p_dimension5_id
1547 ,p_dimension6_id => p_dimension6_id
1548 ,p_dimension7_id => p_dimension7_id
1549 ,p_y_axis_title => NULL
1550 ,p_func_area_short_name => p_Func_Area_Short_Name
1551 ,x_return_status => x_return_status
1552 ,x_msg_count => x_msg_count
1553 ,x_msg_data => x_msg_data);
1554 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1555 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1556 END IF;
1557
1558 --DBMS_OUTPUT.PUT_LINE('STAGE 8B2 - ' || x_dataset_id);
1559 --DBMS_OUTPUT.PUT_LINE('STAGE 8B3 - ' || p_measure_short_name);
1560 --use the sql statement to get the measure_short_name out.
1561
1562
1563 IF (p_measure_short_name IS NULL) THEN
1564 SELECT a.short_name
1565 INTO l_measure_short_name
1566 FROM bsc_sys_measures a
1567 WHERE a.measure_id =
1568 (SELECT b.measure_id1
1569 FROM bsc_sys_datasets_b b
1570 WHERE b.dataset_id = x_dataset_id);
1571
1572
1573 END IF;
1574 --DBMS_OUTPUT.PUT_LINE('STAGE 8B4 - ' || l_measure_short_name);
1575
1576
1577 EXCEPTION
1578 WHEN FND_API.G_EXC_ERROR THEN
1579 ROLLBACK TO CreateMeasureSP;
1580 IF (x_msg_data IS NULL) THEN
1581 FND_MSG_PUB.Count_And_Get
1582 ( p_encoded => FND_API.G_FALSE
1583 , p_count => x_msg_count
1584 , p_data => x_msg_data
1585 );
1586 END IF;
1587 x_Return_Status := FND_API.G_RET_STS_ERROR;
1588 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1589 ROLLBACK TO CreateMeasureSP;
1590 IF (x_msg_data IS NULL) THEN
1591 FND_MSG_PUB.Count_And_Get
1592 ( p_encoded => FND_API.G_FALSE
1593 , p_count => x_msg_count
1594 , p_data => x_msg_data
1595 );
1596 END IF;
1597 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1598 WHEN NO_DATA_FOUND THEN
1599 ROLLBACK TO CreateMeasureSP;
1600 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1601 IF (x_msg_data IS NOT NULL) THEN
1602 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Measure ';
1603 ELSE
1604 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Measure ';
1605 END IF;
1606 WHEN OTHERS THEN
1607 ROLLBACK TO CreateMeasureSP;
1608 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1609 IF (x_msg_data IS NOT NULL) THEN
1610 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Measure ';
1611 ELSE
1612 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Measure ';
1613 END IF;
1614 END Create_Measure;
1615
1616
1617 PROCEDURE Associate_KPI_To_AO(
1618 p_Commit VARCHAR2 := FND_API.G_FALSE
1619 ,p_Indicator NUMBER
1620 ,p_Dataset_Id NUMBER
1621 ,p_Measure_Name VARCHAR2
1622 ,p_Measure_Description VARCHAR2
1623 ,x_Measure_Short_Name OUT NOCOPY VARCHAR2
1624 ,x_Return_Status OUT NOCOPY VARCHAR2
1625 ,x_Msg_Count OUT NOCOPY NUMBER
1626 ,x_Msg_Data OUT NOCOPY VARCHAR2)
1627 IS
1628
1629 l_Measure_Short_Name VARCHAR2(1000);
1630 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
1631
1632
1633 BEGIN
1634 SAVEPOINT AssociateKPIToAO;
1635 FND_MSG_PUB.Initialize;
1636 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1637
1638 SELECT A.SHORT_NAME
1639 INTO l_Measure_Short_Name
1640 FROM BSC_SYS_MEASURES A
1641 WHERE A.MEASURE_ID =
1642 (SELECT B.MEASURE_ID1
1643 FROM BSC_SYS_DATASETS_B B
1644 WHERE B.DATASET_ID = p_Dataset_Id);
1645
1646 x_measure_short_name := l_measure_short_name;
1647
1648 --Call procedure to assign the real measure to the analysis option group.
1649 -- As of now passing AO Group Id as 0
1650 l_Region_Code := BSC_BIS_KPI_CRUD_PUB.Get_Next_Region_Code_By_AO(
1651 p_Kpi_Id => p_Indicator
1652 ,p_Analysis_Group0 => 0
1653 );
1654
1655 BSC_BIS_KPI_MEAS_PUB.Create_KPI_Analysis_Options(
1656 p_Commit => p_Commit
1657 ,p_Kpi_Id => p_Indicator
1658 ,p_Analysis_Group_Id => 0
1659 ,p_Data_Set_Id => p_Dataset_Id
1660 ,p_Measure_Short_Name => l_Measure_Short_Name
1661 ,p_Measure_Name => p_Measure_Name
1662 ,p_Measure_Help => p_Measure_Description
1663 ,p_Time_Stamp => NULL
1664 ,p_Short_Name => l_Region_Code
1665 ,x_Return_Status => x_Return_Status
1666 ,x_Msg_Count => x_Msg_Count
1667 ,x_Msg_Data => x_Msg_Data
1668 );
1669
1670 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1671 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1672 END IF;
1673
1674 -- Currently we need to indentify if the first analysis option will
1675 -- be replaced by the newly added AO or not, until that is figured out
1676 -- we call the API Refresh_Short_Names to set the Short_Names in place.
1677
1678 BSC_ANALYSIS_OPTION_PVT.Refresh_Short_Names
1679 (
1680 p_Commit => p_Commit
1681 , p_Kpi_Id => p_Indicator
1682 , x_Return_Status => x_return_status
1683 , x_Msg_Count => x_msg_count
1684 , x_Msg_Data => x_msg_data
1685 );
1686 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1687 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1688 END IF;
1689
1690
1691 EXCEPTION
1692 WHEN FND_API.G_EXC_ERROR THEN
1693 ROLLBACK TO AssociateKPIToAO;
1694 IF (x_msg_data IS NULL) THEN
1695 FND_MSG_PUB.Count_And_Get
1696 ( p_encoded => FND_API.G_FALSE
1697 , p_count => x_msg_count
1698 , p_data => x_msg_data
1699 );
1700 END IF;
1701 x_Return_Status := FND_API.G_RET_STS_ERROR;
1702 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1703 ROLLBACK TO AssociateKPIToAO;
1704 IF (x_msg_data IS NULL) THEN
1705 FND_MSG_PUB.Count_And_Get
1706 ( p_encoded => FND_API.G_FALSE
1707 , p_count => x_msg_count
1708 , p_data => x_msg_data
1709 );
1710 END IF;
1711 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1712 WHEN NO_DATA_FOUND THEN
1713 ROLLBACK TO AssociateKPIToAO;
1714 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1715 IF (x_msg_data IS NOT NULL) THEN
1716 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Associate_KPI_To_AO ';
1717 ELSE
1718 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Associate_KPI_To_AO ';
1719 END IF;
1720 WHEN OTHERS THEN
1721 ROLLBACK TO AssociateKPIToAO;
1722 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1723 IF (x_msg_data IS NOT NULL) THEN
1724 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Associate_KPI_To_AO ';
1725 ELSE
1726 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Associate_KPI_To_AO ';
1727 END IF;
1728 END Associate_KPI_To_AO;
1729
1730
1731 PROCEDURE Create_Measure_Region_Item(
1732 p_commit VARCHAR2,
1733 p_measure_short_name VARCHAR2,
1734 p_sequence_number NUMBER,
1735 p_kpi_id NUMBER,
1736 p_Analysis_Option NUMBER := NULL,
1737 p_dataset_format_id NUMBER,
1738 p_dataset_autoscale_flag NUMBER,
1739 p_Analysis_Option_Name VARCHAR2,
1740 x_return_status OUT NOCOPY VARCHAR2,
1741 x_msg_count OUT NOCOPY NUMBER,
1742 x_msg_data OUT NOCOPY VARCHAR2
1743 ) IS
1744
1745 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
1746 l_region_item_table_measure BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
1747 l_Region_Code VARCHAR2(80);
1748
1749 BEGIN
1750
1751 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(p_Kpi_Id, p_Analysis_Option);
1752
1753 --DBMS_OUTPUT.PUT_LINE('Create_Measure_Region_Item - region_code = ' || l_Region_Code);
1754
1755 l_region_item_rec.Attribute_Code := p_measure_short_name;
1756 l_region_item_rec.Attribute_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
1757 l_region_item_rec.Display_Sequence := p_sequence_number;
1758 l_region_item_rec.Node_Display_Flag := 'Y';
1759 l_region_item_rec.Required_Flag := ' ';
1760 l_region_item_rec.Queryable_Flag := ' ';
1761 l_region_item_rec.Display_Length := length(p_Analysis_Option_Name);
1762 l_region_item_rec.Long_Label := p_Analysis_Option_Name;
1763 l_region_item_rec.Sort_Sequence := NULL;
1764 l_region_item_rec.Initial_Sort_Sequence := NULL;
1765 l_region_item_rec.Sort_Direction := NULL;
1766 l_region_item_rec.Url := NULL;
1767 l_region_item_rec.Attribute_Type := BSC_BIS_KPI_CRUD_PUB.C_MEASURE_ATTRIBURE_TYPE;
1768 -- We need to reconvert the format_id to a correct mask
1769 l_region_item_rec.Display_Format := Get_Format_Mask(p_dataset_format_id);
1770 l_region_item_rec.Display_Type := NULL;
1771 l_region_item_rec.Measure_Level := p_measure_short_name;
1772 l_region_item_rec.Base_Column := p_kpi_id;
1773 l_region_item_rec.Lov_Where_Clause := NULL;
1774 l_region_item_rec.Graph_Position := NULL;
1775 l_region_item_rec.Graph_Style := NULL;
1776 l_region_item_rec.Lov_Table := NULL;
1777 l_region_item_rec.Aggregate_Function := NULL;
1778 l_region_item_rec.Display_Total := NULL;
1779 l_region_item_rec.Variance := NULL;
1780 l_region_item_rec.Schedule := NULL;
1781 l_region_item_rec.Override_Hierarchy := NULL;
1782 l_region_item_rec.Additional_View_By := NULL;
1783 l_region_item_rec.Rolling_Lookup := NULL;
1784 l_region_item_rec.Operator_Lookup := NULL;
1785 l_region_item_rec.Dual_YAxis_Graphs := NULL;
1786 l_region_item_rec.Custom_View_Name := NULL;
1787 l_region_item_rec.Graph_Measure_Type := NULL;
1788 l_region_item_rec.Hide_Target_In_Table := NULL;
1789 l_region_item_rec.Parameter_Render_Type := NULL;
1790 l_region_item_rec.Privilege := NULL;
1791
1792 l_region_item_table_measure(1) := l_region_item_rec;
1793
1794 BIS_PMV_REGION_ITEMS_PVT.CREATE_REGION_ITEMS(
1795 p_commit => p_commit
1796 ,p_region_code => l_Region_Code
1797 ,p_region_application_id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
1798 ,p_Region_Item_Tbl => l_region_item_table_measure
1799 ,x_return_status => x_return_status
1800 ,x_msg_count => x_msg_count
1801 ,x_msg_data => x_msg_data
1802 );
1803 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1804 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1805 END IF;
1806
1807
1808 END Create_Measure_Region_Item;
1809
1810
1811 FUNCTION Does_Dim_Grp_Exist(p_param_portlet_region_code VARCHAR2)
1812 RETURN BOOLEAN IS
1813 l_Has_One_Row NUMBER;
1814 BEGIN
1815
1816 SELECT COUNT(1)
1817 INTO l_Has_One_Row
1818 FROM BSC_SYS_DIM_GROUPS_TL A
1819 WHERE A.SHORT_NAME = p_Param_Portlet_Region_Code
1820 AND A.LANGUAGE = USERENV('LANG');
1821
1822 IF (l_Has_One_Row > 0) THEN
1823 RETURN TRUE;
1824 ELSE
1825 RETURN FALSE;
1826 END IF;
1827
1828 EXCEPTION
1829
1830 WHEN NO_DATA_FOUND THEN RETURN FALSE;
1831
1832 END Does_Dim_Grp_Exist;
1833
1834
1835 -- Modified API for Bug#3766260
1836
1837 FUNCTION Does_KPI_Exist(p_portlet_function_name VARCHAR2)
1838 RETURN BOOLEAN IS
1839 l_Has_One_Row NUMBER;
1840 BEGIN
1841 SELECT COUNT(1)
1842 INTO l_Has_One_Row
1843 FROM BSC_KPIS_B A
1844 WHERE A.SHORT_NAME = p_Portlet_Function_Name
1845 AND A.PROTOTYPE_FLAG <> BSC_KPI_PUB.DELETE_KPI_FLAG;
1846
1847 IF (l_Has_One_Row > 0) THEN
1848 RETURN TRUE;
1849 ELSE
1850 RETURN FALSE;
1851 END IF;
1852 EXCEPTION
1853 WHEN NO_DATA_FOUND THEN RETURN FALSE;
1854 END Does_KPI_Exist;
1855
1856
1857 FUNCTION Find_Max_Seq_Of_Region_Item(p_Region_Code VARCHAR2) RETURN NUMBER IS
1858
1859 l_max_seq_num NUMBER;
1860
1861 BEGIN
1862
1863 SELECT NVL(MAX(A.DISPLAY_SEQUENCE), 0)
1864 INTO l_max_seq_num
1865 FROM AK_REGION_ITEMS A
1866 WHERE A.REGION_CODE = p_Region_Code;
1867
1868 return l_max_seq_num;
1869
1870 END Find_Max_Seq_Of_Region_Item;
1871
1872
1873 -- adrao modified for Bug#3770986
1874 PROCEDURE RETRIEVE_DIMENSION_OBJECTS(p_region_code VARCHAR2,
1875 x_dim_obj_list OUT NOCOPY VARCHAR2,
1876 x_msg_data OUT NOCOPY VARCHAR2)
1877 IS
1878
1879 l_ak_attr2 VARCHAR2(1000);
1880 l_dimension_object VARCHAR2(1000);
1881 l_dimension_object_name VARCHAR2(1000);
1882 l_counter NUMBER := 1;
1883 l_dim_obj_short_names VARCHAR2(1000);
1884 x_return_status VARCHAR2(1000);
1885 x_msg_count NUMBER;
1886
1887 CURSOR c_dim(p_region_code varchar2) IS
1888 SELECT DISTINCT a.attribute2
1889 FROM ak_region_items a
1890 WHERE a.region_code = Get_Param_Portlet_By_Region(p_region_code)
1891 AND a.attribute2 like '%+%'
1892 AND a.attribute2 NOT LIKE 'TIME_COMPARISON_TYPE%'
1893 AND a.attribute1 <> C_COMP_TO_DIM_LEVEL
1894 UNION
1895 SELECT DISTINCT a.attribute2
1896 FROM ak_region_items a
1897 WHERE a.region_code = p_region_code
1898 AND a.attribute2 like '%+%'
1899 AND a.attribute2 NOT LIKE 'TIME_COMPARISON_TYPE%'
1900 AND a.attribute1 <> C_COMP_TO_DIM_LEVEL;
1901
1902 CURSOR c_DimObj_Name IS SELECT a.name
1903 FROM bsc_sys_dim_levels_tl a, bsc_sys_dim_levels_b b
1904 WHERE a.dim_level_id = b.dim_level_id
1905 AND a.language = USERENV('LANG')
1906 AND b.short_name = l_dimension_object;
1907
1908 BEGIN
1909
1910
1911 OPEN c_dim(p_region_code);
1912 LOOP
1913
1914 FETCH c_dim INTO l_ak_attr2; -- HRI_PERSON+HRI_PER_USRDR_H
1915 EXIT WHEN c_dim%NOTFOUND;
1916
1917 l_dimension_object := substr(l_ak_attr2, instr(l_ak_attr2, '+')+1);
1918
1919
1920 l_dimension_object_name := NULL;
1921 FOR cDimObjName IN c_DimObj_Name LOOP
1922 l_dimension_object_name := cDimObjName.NAME;
1923 END LOOP;
1924
1925 -- concatenate dimension object short name
1926 IF ((l_dimension_object_name IS NOT NULL) AND
1927 (Is_Excluded_Dimension_Object(l_dimension_object) = FND_API.G_FALSE)) THEN
1928 if (l_counter = 1) then
1929 l_dim_obj_short_names := l_dimension_object_name;
1930 else
1931 l_dim_obj_short_names := l_dim_obj_short_names || '!@#$' || l_dimension_object_name;
1932 end if;
1933 l_counter := l_counter + 1;
1934 END IF;
1935 END LOOP;
1936
1937 --DBMS_OUTPUT.PUT_LINE('final l_dim_obj_short_names = ' || l_dim_obj_short_names);
1938 CLOSE c_dim;
1939
1940 -- if no dimension set, raise exception
1941 IF (l_counter = 1) THEN
1942 FND_MESSAGE.SET_NAME('BSC','BSC_NO_DIM_OBJ_PARAM_PORTLET');
1943 FND_MSG_PUB.ADD;
1944 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1945 END IF;
1946
1947 x_dim_obj_list := l_dim_obj_short_names;
1948
1949
1950 EXCEPTION
1951
1952 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1953 --ROLLBACK TO BSCCrtKPIWBisDimWrp;
1954 IF (x_msg_data IS NULL) THEN
1955 FND_MSG_PUB.Count_And_Get
1956 ( p_encoded => FND_API.G_FALSE
1957 , p_count => x_msg_count
1958 , p_data => x_msg_data
1959 );
1960 END IF;
1961 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1962
1963 WHEN NO_DATA_FOUND THEN
1964 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1965 IF (x_msg_data IS NOT NULL) THEN
1966 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.RETRIEVE_DIMENSION_OBJECTS ';
1967 ELSE
1968 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.RETRIEVE_DIMENSION_OBJECTS ';
1969 END IF;
1970 WHEN OTHERS THEN
1971 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1972 IF (x_msg_data IS NOT NULL) THEN
1973 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.RETRIEVE_DIMENSION_OBJECTS ';
1974 ELSE
1975 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.RETRIEVE_DIMENSION_OBJECTS ';
1976 END IF;
1977
1978 END RETRIEVE_DIMENSION_OBJECTS;
1979
1980
1981 -- Returns the Tab Id of a Tab (aka Scorecard)
1982 FUNCTION Get_Tab_Id( p_page_function_name VARCHAR2)
1983 RETURN NUMBER IS
1984 l_tab_id NUMBER;
1985 BEGIN
1986 SELECT a.tab_id
1987 INTO l_tab_id
1988 FROM bsc_tabs_b a
1989 WHERE a.short_name = p_page_function_name;
1990
1991 RETURN l_tab_id;
1992
1993 EXCEPTION
1994 WHEN OTHERS THEN
1995 RETURN BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
1996 END Get_Tab_Id;
1997
1998
1999 -- Returns the KPI Group Id (aka Objective Group)
2000
2001 FUNCTION Get_Group_Id(p_kpi_portlet_function_name VARCHAR2)
2002 RETURN NUMBER IS
2003
2004 l_Group_Id NUMBER;
2005
2006 CURSOR c_GetId IS
2007 SELECT A.IND_GROUP_ID
2008 FROM BSC_TAB_IND_GROUPS_B A
2009 WHERE A.SHORT_NAME = p_Kpi_Portlet_Function_Name;
2010 BEGIN
2011 l_Group_Id := BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
2012 FOR cGetId IN c_GetId LOOP
2013 l_Group_Id := cGetId.IND_GROUP_ID;
2014 END LOOP;
2015 RETURN l_group_id;
2016
2017 EXCEPTION
2018 WHEN OTHERS THEN
2019 RETURN BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
2020
2021 END Get_Group_Id;
2022
2023
2024 -------------------------------
2025 -- william cano's code below
2026 -------------------------------
2027
2028
2029 FUNCTION Is_More
2030 (
2031 p_dim_short_names IN OUT NOCOPY VARCHAR2
2032 , p_dim_name OUT NOCOPY VARCHAR2
2033 ) RETURN BOOLEAN
2034 IS
2035 l_pos_ids NUMBER;
2036 l_pos_rel_types NUMBER;
2037 l_pos_rel_columns NUMBER;
2038 BEGIN
2039 IF (p_dim_short_names IS NOT NULL) THEN
2040 l_pos_ids := INSTR(p_dim_short_names, ','); -- adeulgao changed from ";" to ","
2041 IF (l_pos_ids > 0) THEN
2042 p_dim_name := TRIM(SUBSTR(p_dim_short_names, 1, l_pos_ids - 1));
2043
2044 p_dim_short_names := TRIM(SUBSTR(p_dim_short_names, l_pos_ids + 1));
2045 ELSE
2046 p_dim_name := TRIM(p_dim_short_names);
2047
2048 p_dim_short_names := NULL;
2049 END IF;
2050 RETURN TRUE;
2051 ELSE
2052 RETURN FALSE;
2053 END IF;
2054 END Is_More;
2055
2056
2057
2058
2059 Procedure Assign_Kpi_Periodicities(
2060 p_commit IN VARCHAR2 --:= FND_API.G_FALSE
2061 ,p_kpi_id IN NUMBER
2062 ,p_Time_Dim_obj_sns IN VARCHAR2 -- 'MONTH,QUATERLY'
2063 ,p_Dft_Dim_obj_sn IN VARCHAR2 --:= NULL
2064 ,p_Daily_Flag IN VARCHAR2 --:= FND_API.G_FALSE
2065 ,p_Is_XTD_Enabled IN VARCHAR2
2066 ,x_return_status OUT NOCOPY VARCHAR2
2067 ,x_msg_count OUT NOCOPY NUMBER
2068 ,x_msg_data OUT NOCOPY VARCHAR2
2069 ) IS
2070 l_Time_Dim_Obj_sh VARCHAR2(40);
2071 l_Time_Dim_obj_sns VARCHAR2(800);
2072 l_periodicity_id NUMBER;
2073 l_periodicity_ids VARCHAR2(400) := NULL;
2074 l_calendar_id NUMBER := NULL;
2075 l_calendar_id_aux NUMBER := NULL;
2076 l_Dft_periodicity_id NUMBER := NULL;
2077 l_message VARCHAR2(400);
2078 l_flag BOOLEAN;
2079 l_kpi_calendar_id NUMBER;
2080 l_Time_Dim_Object BIS_LEVELS.SHORT_NAME%TYPE;
2081
2082 CURSOR c_YearPeriodity IS
2083 SELECT a.PERIODICITY_ID
2084 FROM BSC_sys_periodicities a
2085 WHERE a.CALENDAR_id = l_calendar_id
2086 AND a.PERIODICITY_TYPE = 9;
2087
2088 CURSOR c1(p_Calendar NUMBER) IS
2089 SELECT CALENDAR_ID
2090 FROM BSC_SYS_CALENDARS_B
2091 WHERE EDW_CALENDAR_TYPE_ID = 1
2092 AND EDW_CALENDAR_ID = p_Calendar;
2093
2094 BEGIN
2095 x_return_status := FND_API.G_RET_STS_SUCCESS;
2096 SAVEPOINT BSCAsgnKpiPeriodicities;
2097 FND_MSG_PUB.Initialize;
2098 l_Time_Dim_obj_sns:= p_Time_Dim_obj_sns;
2099 IF (p_Time_Dim_obj_sns IS NULL AND p_Is_XTD_Enabled = FND_API.G_TRUE) THEN
2100 SELECT CALENDAR_ID
2101 INTO l_kpi_calendar_id
2102 FROM BSC_KPIS_B
2103 WHERE INDICATOR = p_kpi_id;
2104 IF (l_kpi_calendar_id IS NOT NULL) THEN
2105 l_Time_Dim_obj_sns := BSC_PERIODS_UTILITY_PKG.Get_Daily_Periodicity_Sht_Name(l_kpi_calendar_id);
2106 END IF;
2107 END IF;
2108
2109
2110 -- Convert Time Dimension Short Names into BCS-BIS Periodicities
2111 WHILE (is_more(p_dim_short_names => l_Time_Dim_obj_sns
2112 ,p_dim_name => l_Time_Dim_Obj_sh)) LOOP
2113 l_periodicity_id := NULL;
2114
2115 -- added condition for Calendar Enhancement#4376162
2116 IF (BSC_BIS_KPI_CRUD_PUB.Is_DimObj_Periodicity(l_Time_Dim_Obj_Sh) = FND_API.G_TRUE) THEN
2117 BSC_BIS_KPI_CRUD_PUB.Get_Non_DBI_Periodicities (
2118 p_Time_Short_Name => l_Time_Dim_Obj_Sh
2119 , x_Periodicity_Id => l_Periodicity_Id
2120 , x_Calendar_Id => l_Calendar_Id_Aux
2121 , x_Return_Status => x_Return_Status
2122 , x_Msg_Count => x_Msg_Count
2123 , x_Msg_Data => x_Msg_Data
2124 );
2125 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2126 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2127 END IF;
2128
2129 ELSE
2130
2131 -- Fixed for Bug#4566634
2132 l_Time_Dim_Object := l_Time_Dim_Obj_sh;
2133 l_flag := BSC_PERIODS_UTILITY_PKG.Get_Bsc_Periodicity(
2134 x_time_level_name => l_Time_Dim_Object
2135 ,x_periodicity_id => l_periodicity_Id
2136 ,x_calendar_id => l_calendar_id_aux
2137 ,x_message => l_message
2138 );
2139 END IF;
2140
2141
2142 IF l_periodicity_id IS NOT NULL THEN
2143 IF l_periodicity_ids IS NOT NULL THEN
2144 l_periodicity_ids := l_periodicity_ids || ',' || l_periodicity_id;
2145 ELSE
2146 l_periodicity_ids := l_periodicity_ids || l_periodicity_id;
2147 l_calendar_id := l_calendar_id_aux;
2148 END IF;
2149 IF l_Time_Dim_Obj_sh = p_Dft_Dim_obj_sn THEN
2150 l_Dft_periodicity_id := l_periodicity_id;
2151 END IF;
2152 ELSE
2153 FND_MESSAGE.SET_NAME('BSC','BSC_NO_PERIODICITY_FOUND_DL');
2154 FND_MESSAGE.SET_TOKEN('SHORT_NAME', l_Time_Dim_Obj_sh );
2155 FND_MSG_PUB.ADD;
2156 RAISE FND_API.G_EXC_ERROR;
2157 END IF;
2158 --DBMS_OUTPUT.PUT_LINE(' l_periodicity_ids = '||l_periodicity_ids);
2159 END LOOP;
2160 --DBMS_OUTPUT.PUT_LINE(' l_calendar_id = '||l_calendar_id);
2161 --DBMS_OUTPUT.PUT_LINE(' l_periodicity_ids = '||l_periodicity_ids);
2162
2163 IF l_calendar_id IS NOT NULL THEN
2164 --DBMS_OUTPUT.PUT_LINE(' p_Daily_Flag = '||p_Daily_Flag);
2165 IF p_Is_XTD_Enabled = FND_API.G_TRUE THEN
2166 --DBMS_OUTPUT.PUT_LINE(' before open c_YearPerioditY');
2167 OPEN c_YearPeriodity;
2168 --DBMS_OUTPUT.PUT_LINE(' AFTER open c_YearPerioditY');
2169 FETCH c_YearPeriodity into l_periodicity_id;
2170 IF (c_YearPeriodity%FOUND) THEN
2171 --DBMS_OUTPUT.PUT_LINE(' l_periodicity_id = '||l_periodicity_id);
2172 IF INSTR( ',' || l_periodicity_ids || ',', ',' || l_periodicity_id || ',') <= 0 THEN
2173 l_periodicity_ids := l_periodicity_ids || ',' || l_periodicity_id;
2174 END IF;
2175 END IF;
2176 CLOSE c_YearPeriodity;
2177 END IF;
2178
2179 -- Asisgn BSC-BIS Periodicities to the KPI
2180 BSC_PMF_UI_WRAPPER.Update_Kpi_Periodicities(
2181 p_commit => p_commit
2182 ,p_kpi_id => p_kpi_id
2183 ,p_calendar_id => l_calendar_id
2184 ,p_periodicity_ids => l_periodicity_ids
2185 ,p_Dft_periodicity_id => l_Dft_periodicity_id
2186 ,x_return_status => x_return_status
2187 ,x_msg_count => x_msg_count
2188 ,x_msg_data => x_msg_data
2189 );
2190 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2191 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2192 END IF;
2193
2194 ELSE -- if l_Calendar_Id is NULL added for Bug#3769227
2195 IF (p_Is_XTD_Enabled = FND_API.G_TRUE) THEN
2196 OPEN c1 (1001);
2197 FETCH c1 INTO l_Calendar_Id;
2198 CLOSE c1;
2199
2200 BSC_PMF_UI_WRAPPER.Update_Kpi_Periodicities(
2201 p_commit => p_Commit
2202 ,p_kpi_id => p_Kpi_Id
2203 ,p_calendar_id => l_Calendar_Id
2204 ,p_periodicity_ids => NULL
2205 ,p_Dft_periodicity_id => NULL
2206 ,x_return_status => x_Return_Status
2207 ,x_msg_count => x_Msg_Count
2208 ,x_msg_data => x_Msg_Data
2209 );
2210
2211 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
2212 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2213 END IF;
2214
2215 END IF;
2216 END IF;
2217 EXCEPTION
2218 WHEN FND_API.G_EXC_ERROR THEN
2219 ROLLBACK TO BSCAsgnKpiPeriodicities;
2220 IF (x_msg_data IS NULL) THEN
2221 FND_MSG_PUB.Count_And_Get
2222 ( p_encoded => FND_API.G_FALSE
2223 , p_count => x_msg_count
2224 , p_data => x_msg_data
2225 );
2226 END IF;
2227 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
2228 x_return_status := FND_API.G_RET_STS_ERROR;
2229 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2230 ROLLBACK TO BSCAsgnKpiPeriodicities;
2231 IF (x_msg_data IS NULL) THEN
2232 FND_MSG_PUB.Count_And_Get
2233 ( p_encoded => FND_API.G_FALSE
2234 , p_count => x_msg_count
2235 , p_data => x_msg_data
2236 );
2237 END IF;
2238 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2239 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
2240 WHEN OTHERS THEN
2241 ROLLBACK TO BSCAsgnKpiPeriodicities;
2242 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2243 IF (x_msg_data IS NOT NULL) THEN
2244 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Assign_Kpi_Periodicities ';
2245 ELSE
2246 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Assign_Kpi_Periodicities ';
2247 END IF;
2248 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
2249
2250 end Assign_Kpi_Periodicities;
2251
2252 PROCEDURE Update_Actual_Data_Source(
2253 p_Kpi_Id IN NUMBER
2254 , p_Dataset_Id IN NUMBER
2255 , p_Measure_Short_Name IN VARCHAR2
2256 , p_Create_Region_Per_AO IN VARCHAR2 := FND_API.G_FALSE
2257
2258 ) IS
2259
2260 l_value VARCHAR2(1000);
2261 l_Region_Code VARCHAR2(80);
2262 l_Analysis_Option NUMBER;
2263
2264 BEGIN
2265
2266
2267 l_Analysis_Option := NULL;
2268
2269 IF (p_Create_Region_Per_AO = FND_API.G_TRUE) THEN
2270 l_Analysis_Option := Get_AO_Id_By_Measure (
2271 p_Kpi_Id => p_kpi_id
2272 , p_Dataset_Id => p_dataset_id
2273 );
2274 END IF;
2275
2276
2277 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(
2278 p_Kpi_Id => p_kpi_id,
2279 p_AO_Id => l_Analysis_Option
2280 );
2281
2282 l_Value := l_Region_Code || '.' || p_Measure_Short_Name;
2283
2284
2285 UPDATE BIS_INDICATORS
2286 SET ACTUAL_DATA_SOURCE = l_Value
2287 , ACTUAL_DATA_SOURCE_TYPE = 'AK'
2288 , FUNCTION_NAME = l_Region_Code
2289 , ENABLE_LINK = 'Y'
2290 WHERE DATASET_ID = p_Dataset_Id;
2291
2292 END Update_Actual_Data_Source;
2293
2294
2295
2296 PROCEDURE Update_Dim_Dim_Level_Columns(
2297 p_dim_object_short_name VARCHAR2,
2298 p_non_time_dimension_objects bsc_varchar2_tbl_type,
2299 p_non_time_counter NUMBER,
2300 x_msg_data OUT NOCOPY VARCHAR2)
2301 IS
2302
2303
2304 l_index NUMBER;
2305 l_total_flag NUMBER;
2306 l_comparison_flag NUMBER;
2307 l_where_clause BSC_SYS_DIM_LEVELS_BY_GROUP.WHERE_CLAUSE%TYPE;
2308 l_dim_group_id NUMBER;
2309 l_dim_level_id NUMBER;
2310 x_return_status VARCHAR2(80);
2311 x_msg_count NUMBER;
2312
2313
2314 BEGIN
2315
2316 x_msg_data := NULL;
2317
2318 FOR l_index in 1..p_non_time_counter LOOP
2319
2320 x_Msg_Data := BSC_APPS.Get_Message('BSC_DIP_ERR_GET_GROUP_ID');
2321 SELECT d.total_flag, d.comparison_flag, d.where_clause
2322 INTO l_total_flag, l_comparison_flag, l_where_clause
2323 FROM bsc_sys_dim_groups_tl a,
2324 bis_dimensions b,
2325 bis_levels c,
2326 bsc_sys_dim_levels_by_group d,
2327 bsc_sys_dim_levels_b e
2328 WHERE c.short_name = p_non_time_dimension_objects(l_index)
2329 AND c.dimension_id = b.dimension_id
2330 AND b.short_name = a.short_name
2331 AND a.language = userenv('LANG')
2332 AND a.dim_group_id = d.dim_group_id
2333 AND e.short_name = p_non_time_dimension_objects(l_index)
2334 AND e.dim_level_id = d.dim_level_id;
2335
2336
2337 x_Msg_Data := BSC_APPS.Get_Message('BSC_DIP_ERR_GET_DIM_REL');
2338 SELECT d.dim_group_id, d.dim_level_id
2339 INTO l_dim_group_id, l_dim_level_id
2340 FROM bsc_sys_dim_groups_tl a,
2341 bsc_sys_dim_levels_by_group d,
2342 bsc_sys_dim_levels_b e
2343 WHERE d.dim_group_id = a.dim_group_id
2344 AND a.short_name = p_dim_object_short_name
2345 AND a.language = userenv('LANG')
2346 AND e.short_name = p_non_time_dimension_objects(l_index)
2347 AND e.dim_level_id = d.dim_level_id;
2348
2349 x_Msg_Data := BSC_APPS.Get_Message('BSC_DIP_ERR_UPDATE_DIM_REL');
2350 UPDATE bsc_sys_dim_levels_by_group
2351 SET total_flag = l_total_flag,
2352 comparison_flag = l_comparison_flag,
2353 where_clause = l_where_clause
2354 WHERE dim_group_id = l_dim_group_id
2355 AND dim_level_id = l_dim_level_id;
2356
2357
2358 END LOOP;
2359
2360 x_Msg_Data := NULL;
2361
2362 EXCEPTION
2363
2364 WHEN NO_DATA_FOUND THEN
2365 IF (x_msg_data IS NOT NULL) THEN
2366 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Dim_Dim_Level_Columns ';
2367 ELSE
2368 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Dim_Dim_Level_Columns ';
2369 END IF;
2370 WHEN OTHERS THEN
2371 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2372 IF (x_msg_data IS NOT NULL) THEN
2373 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Dim_Dim_Level_Columns ';
2374 ELSE
2375 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Dim_Dim_Level_Columns ';
2376 END IF;
2377
2378 END Update_Dim_Dim_Level_Columns;
2379
2380 /*
2381
2382 Update Section Added here
2383
2384 */
2385
2386
2387 /* -*********************************************** */
2388
2389 PROCEDURE Update_Measure_Region_Item(
2390 p_Commit VARCHAR2,
2391 p_Measure_Short_Name VARCHAR2,
2392 p_Sequence_Number NUMBER,
2393 p_Kpi_Id NUMBER,
2394 p_Analysis_Option NUMBER := NULL,
2395 p_Dataset_Format_Id NUMBER,
2396 p_Dataset_Autoscale_Flag NUMBER,
2397 p_Analysis_Option_Name VARCHAR2,
2398 x_Return_Status OUT NOCOPY VARCHAR2,
2399 x_Msg_Count OUT NOCOPY NUMBER,
2400 x_Msg_Data OUT NOCOPY VARCHAR2)
2401 IS
2402
2403 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
2404 l_region_item_table_measure BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
2405 l_Region_Code VARCHAR2(30);
2406 l_Colspan_Attr_Code VARCHAR2(30);
2407 BEGIN
2408
2409 --DBMS_OUTPUT.PUT_LINE( 'measure sequence = ' || p_sequence_number);
2410 -- Currently we cannot use Column Span Bug#3688263, its not supported.
2411
2412 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.get_Region_Code (p_Kpi_Id, p_Analysis_Option);
2413
2414 l_Colspan_Attr_Code := get_Unique_Attribute_Code (
2415 p_Region_Code => l_Region_Code
2416 , p_Measure_Short_Name => p_Measure_Short_Name
2417 , p_Append_String => BSC_BIS_KPI_CRUD_PUB.C_COLSPAN
2418 );
2419
2420 l_region_item_rec.Attribute_Code := p_measure_short_name;
2421 l_region_item_rec.Attribute_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
2422
2423 -- We currently do not have a retrive API to get the Sequence Numbers.
2424 l_region_item_rec.Display_Sequence := p_sequence_number;
2425
2426 -- Added Graph_Position = 1 for Bug#3742500
2427
2428 l_Region_Item_Rec.Node_Display_Flag := 'Y';
2429 l_Region_Item_Rec.Required_Flag := ' ';
2430 l_Region_Item_Rec.Queryable_Flag := ' ';
2431 l_Region_Item_Rec.Display_Length := LENGTH(p_Analysis_Option_Name);
2432 l_Region_Item_Rec.Long_Label := p_Analysis_Option_Name;
2433 l_Region_Item_Rec.Sort_Sequence := NULL;
2434 l_Region_Item_Rec.Initial_Sort_Sequence := NULL;
2435 l_Region_Item_Rec.Sort_Direction := NULL;
2436 l_Region_Item_Rec.Url := NULL;
2437 l_Region_Item_Rec.Attribute_Type := BSC_BIS_KPI_CRUD_PUB.C_MEASURE_ATTRIBURE_TYPE;
2438 l_Region_Item_Rec.Display_Format := Get_Format_Mask(p_Dataset_Format_Id);
2439 l_Region_Item_Rec.Display_Type := BSC_BIS_KPI_CRUD_PUB.C_AUTOFACTOR_GROUP1;
2440 l_Region_Item_Rec.Measure_Level := p_Measure_Short_Name; -- Earlier we were using l_Colspan_Attr_Code;
2441 l_Region_Item_Rec.Base_Column := NULL;
2442 l_Region_Item_Rec.Lov_Where_Clause := NULL;
2443 l_Region_Item_Rec.Graph_Position := 1;
2444 l_Region_Item_Rec.Graph_Style := NULL;
2445 l_Region_Item_Rec.Lov_Table := NULL;
2446 l_Region_Item_Rec.Aggregate_Function := NULL;
2447 l_Region_Item_Rec.Display_Total := 'Y' ;
2448 l_Region_Item_Rec.Variance := NULL;
2449 l_Region_Item_Rec.Schedule := NULL;
2450 l_Region_Item_Rec.Override_Hierarchy := NULL;
2451 l_Region_Item_Rec.Additional_View_By := NULL;
2452 l_Region_Item_Rec.Rolling_Lookup := NULL;
2453 l_Region_Item_Rec.Operator_Lookup := NULL;
2454 l_Region_Item_Rec.Dual_YAxis_Graphs := NULL;
2455 l_Region_Item_Rec.Custom_View_Name := NULL;
2456 l_Region_Item_Rec.Graph_Measure_Type := NULL;
2457 l_Region_Item_Rec.Hide_Target_In_Table := NULL;
2458 l_Region_Item_Rec.Parameter_Render_Type := NULL;
2459 l_Region_Item_Rec.Privilege := NULL;
2460 l_region_item_rec.Grand_Total_Flag := 'Y';
2461
2462 l_Region_Item_Table_Measure(1) := l_Region_Item_Rec;
2463
2464 BIS_PMV_REGION_ITEMS_PVT.UPDATE_REGION_ITEMS(
2465 p_Commit => p_Commit
2466 ,p_Region_Code => l_Region_Code
2467 ,p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
2468 ,p_Region_Item_Tbl => l_Region_Item_Table_Measure
2469 ,x_Return_Status => x_Return_Status
2470 ,x_Msg_Count => x_Msg_Count
2471 ,x_Msg_Data => x_Msg_Data
2472 );
2473 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
2474 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2475 END IF;
2476
2477 --DBMS_OUTPUT.PUT_LINE('region_code = ' || BSC_UTILITY.C_BSC_UNDERSCORE || p_kpi_id);
2478 --DBMS_OUTPUT.PUT_LINE('return_status_for measure_region_item = ' || x_return_status);
2479 EXCEPTION
2480 WHEN FND_API.G_EXC_ERROR THEN
2481 IF (x_msg_data IS NULL) THEN
2482 FND_MSG_PUB.Count_And_Get
2483 ( p_encoded => FND_API.G_FALSE
2484 , p_count => x_msg_count
2485 , p_data => x_msg_data
2486 );
2487 END IF;
2488 x_return_status := FND_API.G_RET_STS_ERROR;
2489 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2490 IF (x_msg_data IS NULL) THEN
2491 FND_MSG_PUB.Count_And_Get
2492 ( p_encoded => FND_API.G_FALSE
2493 , p_count => x_msg_count
2494 , p_data => x_msg_data
2495 );
2496 END IF;
2497 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2498
2499 WHEN NO_DATA_FOUND THEN
2500 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2501 IF (x_msg_data IS NOT NULL) THEN
2502 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Measure_Region_Item ';
2503 ELSE
2504 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Measure_Region_Item ';
2505 END IF;
2506 WHEN OTHERS THEN
2507 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2508 IF (x_msg_data IS NOT NULL) THEN
2509 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Measure_Region_Item ';
2510 ELSE
2511 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Measure_Region_Item ';
2512 END IF;
2513 END Update_Measure_Region_Item;
2514
2515
2516
2517
2518 /*
2519 Procedure to Delete the Measure Region Item
2520 */
2521
2522 PROCEDURE Delete_Measure_Region_Item(
2523 p_commit VARCHAR2 := FND_API.G_FALSE,
2524 p_Param_Portlet_Region_Code VARCHAR2,
2525 p_Measure_Short_Name VARCHAR2,
2526 p_Application_Id NUMBER,
2527 x_return_status OUT NOCOPY VARCHAR2,
2528 x_msg_count OUT NOCOPY NUMBER,
2529 x_msg_data OUT NOCOPY VARCHAR2)
2530 IS
2531 l_Attribute_Code_Tbl BISVIEWER.t_char ;
2532 l_Attribute_App_Id_Tbl BISVIEWER.t_num ;
2533 BEGIN
2534
2535 l_Attribute_Code_Tbl(1) := p_Measure_Short_Name;
2536 l_Attribute_App_Id_Tbl(1) := p_Application_Id;
2537
2538 BIS_PMV_REGION_ITEMS_PVT.DELETE_REGION_ITEMS
2539 ( p_commit => p_commit
2540 , p_region_code => p_Param_Portlet_Region_Code
2541 , p_region_application_id => p_Application_Id
2542 , p_Attribute_Code_Tbl => l_Attribute_Code_Tbl
2543 , p_Attribute_Appl_Id_Tbl => l_Attribute_App_Id_Tbl
2544 , x_return_status => x_return_status
2545 , x_msg_count => x_msg_count
2546 , x_msg_data => x_msg_data
2547 );
2548
2549 --DBMS_OUTPUT.PUT_LINE('Delete_Measure_Region_Item (x_msg_data) - ' || x_msg_data);
2550 --DBMS_OUTPUT.PUT_LINE('Delete_Measure_Region_Item (x_return_status) - ' || x_return_status);
2551
2552 END Delete_Measure_Region_Item;
2553
2554
2555
2556 PROCEDURE Unassign_Kpi_Analysis_Option (
2557 p_Commit VARCHAR2 := FND_API.G_FALSE
2558 ,p_Kpi_Id NUMBER
2559 ,p_Dataset_Id NUMBER
2560 ,x_return_status OUT NOCOPY VARCHAR2
2561 ,x_msg_count OUT NOCOPY NUMBER
2562 ,x_msg_data OUT NOCOPY VARCHAR2)
2563 IS
2564
2565 l_Option0 NUMBER;
2566 l_Option1 NUMBER;
2567 l_Option2 NUMBER;
2568 l_Series_Id NUMBER;
2569
2570 l_counter NUMBER;
2571
2572 CURSOR c_AO IS
2573 SELECT A.ANALYSIS_OPTION0
2574 , A.ANALYSIS_OPTION1
2575 , A.ANALYSIS_OPTION2
2576 , A.SERIES_ID
2577 FROM BSC_KPI_ANALYSIS_MEASURES_B A
2578 WHERE A.INDICATOR = p_Kpi_Id
2579 AND A.DATASET_ID = p_Dataset_Id;
2580
2581
2582 BEGIN
2583 --DBMS_OUTPUT.PUT_LINE('Inside Unassign_Kpi_Analysis_Option' );
2584
2585
2586 x_return_status := FND_API.G_RET_STS_SUCCESS;
2587
2588 l_counter := 0;
2589
2590 l_Option0 := 0;
2591 l_Option1 := 0;
2592 l_Option2 := 0;
2593 l_Series_Id := 0;
2594
2595 FOR AO IN c_AO LOOP
2596 l_Option0 := AO.ANALYSIS_OPTION0;
2597 l_Option1 := AO.ANALYSIS_OPTION1;
2598 l_Option2 := AO.ANALYSIS_OPTION2;
2599 l_Series_Id := AO.SERIES_ID;
2600
2601 l_counter := l_counter + 1;
2602
2603 --DBMS_OUTPUT.PUT_LINE('l_Option0 ' || l_Option0);
2604 --DBMS_OUTPUT.PUT_LINE('l_Option1 ' || l_Option1);
2605 --DBMS_OUTPUT.PUT_LINE('l_Option2 ' || l_Option2);
2606 --DBMS_OUTPUT.PUT_LINE('l_Series_Id ' || l_Series_Id);
2607 END LOOP;
2608
2609
2610 -- We need to ensure that we dont delete invalid entries, since
2611 -- currently we are querying only using (Indicator, Dataset_Id)
2612
2613 x_return_status := FND_API.G_RET_STS_SUCCESS;
2614
2615 IF (l_counter = 1) THEN
2616 BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts
2617 ( p_commit => p_Commit
2618 , p_kpi_id => p_Kpi_Id
2619 , p_data_source => BSC_BIS_MEASURE_PUB.c_BSC
2620 , p_Option_0 => l_Option0
2621 , p_Option_1 => l_Option1
2622 , p_Option_2 => l_Option2
2623 , p_Sid => l_Series_Id
2624 , p_time_stamp => NULL
2625 , x_return_status => x_return_status
2626 , x_msg_count => x_msg_count
2627 , x_msg_data => x_msg_data
2628 );
2629
2630 --DBMS_OUTPUT.PUT_LINE('BSC_BIS_KPI_MEAS_PUB.Delete_KPI_Multi_Groups_Opts - x_return_status ' || x_return_status);
2631 ELSE
2632 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2633 END IF;
2634
2635 END Unassign_Kpi_Analysis_Option;
2636
2637
2638
2639
2640
2641 FUNCTION Get_Num_Measures_By_Kpi(p_Kpi_Id NUMBER) RETURN NUMBER
2642 IS
2643 l_count NUMBER;
2644 BEGIN
2645
2646 l_count := 0 ;
2647
2648
2649 SELECT COUNT(1)
2650 INTO l_count
2651 FROM BSC_KPI_ANALYSIS_MEASURES_B K
2652 WHERE K.INDICATOR = p_Kpi_Id;
2653
2654 RETURN l_count;
2655 END Get_Num_Measures_By_Kpi;
2656
2657
2658 FUNCTION Get_Kpi_Id(p_Page_Function_Name VARCHAR2) RETURN NUMBER
2659 IS
2660 l_kpi_id NUMBER;
2661 BEGIN
2662 -- when there is no matching, return -1000 to inform the caller
2663 -- Fixed for Bug#3781764 added PROTOTYPE_FLAG
2664 SELECT K.INDICATOR
2665 INTO l_Kpi_Id
2666 FROM BSC_KPIS_B K
2667 WHERE K.SHORT_NAME = p_Page_Function_Name
2668 AND K.PROTOTYPE_FLAG <> BSC_KPI_PUB.DELETE_KPI_FLAG;
2669
2670 RETURN l_kpi_id;
2671 EXCEPTION
2672 WHEN OTHERS THEN RETURN -1000;
2673 END Get_Kpi_Id;
2674
2675
2676 PROCEDURE Delete_Dim_Level_Region_Item(
2677 p_commit VARCHAR2 := FND_API.G_FALSE
2678 ,p_Application_Id NUMBER
2679 ,p_Non_Time_Counter NUMBER
2680 ,p_Non_Time_Dimension_Objects bsc_varchar2_tbl_type
2681 ,p_Non_Time_Dimension_Groups bsc_varchar2_tbl_type
2682 ,p_Time_Counter NUMBER
2683 ,p_Time_Dimension_Objects bsc_varchar2_tbl_type
2684 ,p_Time_Dimension_Groups bsc_varchar2_tbl_type
2685 ,p_Region_Code VARCHAR2
2686 ,x_Return_Status OUT NOCOPY VARCHAR2
2687 ,x_Msg_Count OUT NOCOPY NUMBER
2688 ,x_Msg_Data OUT NOCOPY VARCHAR2)
2689 IS
2690 l_Attribute_Code_Tbl BISVIEWER.t_char ;
2691 l_Attribute_App_Id_Tbl BISVIEWER.t_num ;
2692 l_Dim NUMBER;
2693 l_Real_Counter NUMBER;
2694 BEGIN
2695
2696 l_real_counter := 1;
2697
2698 FOR l_dim IN 1..p_non_time_counter LOOP
2699 l_Attribute_Code_Tbl(l_real_counter) := p_non_time_dimension_objects(l_dim);
2700 l_Attribute_App_Id_Tbl(l_real_counter) := p_Application_Id;
2701
2702 l_real_counter := l_real_counter + 1;
2703 END LOOP;
2704
2705
2706 FOR l_dim IN 1..p_time_counter LOOP
2707 l_Attribute_Code_Tbl(l_real_counter) := p_time_dimension_objects(l_dim);
2708 l_Attribute_App_Id_Tbl(l_real_counter) := p_Application_Id;
2709
2710 l_real_counter := l_real_counter + 1;
2711 END LOOP;
2712
2713 BIS_PMV_REGION_ITEMS_PVT.DELETE_REGION_ITEMS
2714 ( p_commit => p_commit
2715 , p_region_code => p_Region_Code
2716 , p_region_application_id => p_Application_Id
2717 , p_Attribute_Code_Tbl => l_Attribute_Code_Tbl
2718 , p_Attribute_Appl_Id_Tbl => l_Attribute_App_Id_Tbl
2719 , x_return_status => x_return_status
2720 , x_msg_count => x_msg_count
2721 , x_msg_data => x_msg_data
2722 );
2723
2724 --DBMS_OUTPUT.PUT_LINE('Delete_Dim_Level_Region_Item (x_msg_data) - ' || x_msg_data);
2725 --DBMS_OUTPUT.PUT_LINE('Delete_Dim_Level_Region_Item (x_return_status) - ' || x_return_status);
2726
2727 END Delete_Dim_Level_Region_Item;
2728
2729
2730 /*
2731 Function to get the FunctionId, when Function name is passed.
2732 */
2733
2734 FUNCTION Get_Function_Id_By_Name(p_kpi_portlet_function_name VARCHAR2) RETURN NUMBER
2735 IS
2736 l_fun_id NUMBER;
2737 BEGIN
2738 -- when there is no matching, return -1000 to inform the caller
2739 SELECT F.Function_Id
2740 INTO l_Fun_Id
2741 FROM FND_FORM_FUNCTIONS F
2742 WHERE F.Function_Name = p_Kpi_Portlet_Function_Name;
2743
2744 RETURN l_Fun_Id;
2745 EXCEPTION
2746 WHEN NO_DATA_FOUND THEN RETURN -1000;
2747 END Get_Function_Id_By_Name;
2748
2749
2750 /*
2751 Update_Kpi_Analysis_Option - Updates the KPI Analysis Option Name and Description..
2752 */
2753
2754
2755 PROCEDURE Update_Kpi_Analysis_Option (
2756 p_Commit VARCHAR2 := FND_API.G_FALSE
2757 ,p_Kpi_Id NUMBER
2758 ,p_Dataset_Id NUMBER
2759 ,p_Measure_Name VARCHAR2
2760 ,p_Measure_Description VARCHAR2
2761 ,x_return_status OUT NOCOPY VARCHAR2
2762 ,x_msg_count OUT NOCOPY NUMBER
2763 ,x_msg_data OUT NOCOPY VARCHAR2)
2764 IS
2765
2766 l_Option0 NUMBER;
2767
2768 l_counter NUMBER;
2769
2770 CURSOR c_AO IS
2771 SELECT A.ANALYSIS_OPTION0
2772 FROM BSC_KPI_ANALYSIS_MEASURES_B A
2773 WHERE A.INDICATOR = p_Kpi_Id
2774 AND A.DATASET_ID = p_Dataset_Id;
2775
2776
2777 BEGIN
2778 --DBMS_OUTPUT.PUT_LINE('Inside Update_Kpi_Analysis_Option' );
2779
2780 l_counter := 0;
2781
2782 l_Option0 := 0;
2783
2784 FOR AO IN c_AO LOOP
2785 l_Option0 := AO.ANALYSIS_OPTION0;
2786
2787 l_counter := l_counter + 1;
2788
2789 --DBMS_OUTPUT.PUT_LINE('l_Option0 ' || l_Option0);
2790 END LOOP;
2791
2792
2793 -- We need to ensure that we dont delete invalid entries, since
2794 -- currently we are querying only using (Indicator, Dataset_Id)
2795
2796 x_return_status := FND_API.G_RET_STS_SUCCESS;
2797
2798 IF (l_Counter = 1) THEN
2799 UPDATE BSC_KPI_ANALYSIS_OPTIONS_TL
2800 SET NAME = p_Measure_Name
2801 ,HELP = p_Measure_Description
2802 ,SOURCE_LANG = USERENV('LANG')
2803 WHERE INDICATOR = p_Kpi_Id
2804 AND ANALYSIS_GROUP_ID = 0
2805 AND OPTION_ID = l_Option0
2806 AND PARENT_OPTION_ID = 0
2807 AND GRANDPARENT_OPTION_ID = 0
2808 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
2809
2810 UPDATE BSC_KPI_ANALYSIS_MEASURES_TL
2811 SET NAME = p_Measure_Name
2812 ,HELP = p_Measure_Description
2813 ,SOURCE_LANG = USERENV('LANG')
2814 WHERE INDICATOR = p_Kpi_Id
2815 AND ANALYSIS_OPTION0 = l_Option0
2816 AND ANALYSIS_OPTION1 = 0
2817 AND ANALYSIS_OPTION2 = 0
2818 AND SERIES_ID = 0
2819 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
2820
2821 ELSE
2822 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2823 END IF;
2824
2825
2826 END Update_Kpi_Analysis_Option;
2827
2828
2829
2830 FUNCTION Get_Sequence_Id_By_Region(
2831 p_Region_Code VARCHAR2
2832 , p_Region_Application_Id NUMBER
2833 , p_Attribute_Code VARCHAR2
2834 , p_Attribute_Application_Id NUMBER
2835 ) RETURN NUMBER
2836 IS
2837 l_Sequence_Id NUMBER;
2838 BEGIN
2839 -- when there is no matching, return -1000 to inform the caller
2840 SELECT A.Display_Sequence
2841 INTO l_Sequence_Id
2842 FROM AK_REGION_ITEMS A
2843 WHERE A.REGION_APPLICATION_ID = p_Region_Application_Id
2844 AND A.REGION_CODE = p_Region_Code
2845 AND A.ATTRIBUTE_APPLICATION_ID = p_Attribute_Application_Id
2846 AND A.ATTRIBUTE_CODE = p_Attribute_Code;
2847
2848 RETURN l_Sequence_Id;
2849
2850 EXCEPTION
2851 WHEN NO_DATA_FOUND THEN RETURN -1;
2852
2853 END Get_Sequence_Id_By_Region;
2854
2855 -- Gets the Dataset Id
2856
2857 FUNCTION Get_Dataset_Id(
2858 p_measure_short_name IN VARCHAR2
2859 ) RETURN NUMBER IS
2860 l_dataset_id NUMBER;
2861 BEGIN
2862 SELECT
2863 i.dataset_id
2864 INTO l_dataset_id
2865 FROM
2866 bis_indicators i
2867 WHERE
2868 i.short_name = p_Measure_Short_Name;
2869
2870 RETURN l_dataset_id;
2871 EXCEPTION
2872 WHEN OTHERS THEN
2873 RETURN -1000;
2874 END Get_Dataset_Id;
2875
2876 PROCEDURE Get_Page_Name (
2877 p_Page_Function_Name IN VARCHAR2
2878 , p_Kpi_Portlet_Function_Name IN VARCHAR2
2879 , x_Page_Names OUT NOCOPY VARCHAR2
2880 ) IS
2881
2882 l_Tab_Id NUMBER;
2883 l_Kpi_Id NUMBER;
2884 l_Count NUMBER;
2885
2886 CURSOR c_PageNames IS
2887 SELECT T.NAME
2888 FROM BSC_TABS_VL T, BSC_TAB_INDICATORS K
2889 WHERE T.TAB_ID = K.TAB_ID
2890 AND T.TAB_ID <> l_Tab_Id
2891 AND K.INDICATOR = l_Kpi_Id;
2892
2893 BEGIN
2894 x_Page_Names := NULL;
2895 l_Count := 0;
2896
2897 l_tab_id := Get_Tab_Id(p_Page_Function_Name);
2898 l_Kpi_Id := Get_Kpi_Id(p_Page_Function_Name);
2899
2900 FOR cname IN c_PageNames LOOP
2901 IF(l_Count = 0) THEN
2902 x_Page_Names := cname.NAME;
2903 ELSE
2904 x_Page_Names := x_Page_Names || ', ' || cname.NAME;
2905 END IF;
2906 l_Count := 1;
2907 END LOOP;
2908
2909 END Get_Page_Name;
2910
2911
2912 FUNCTION Get_AO_Id_By_Measure (
2913 p_Kpi_Id NUMBER
2914 ,p_Dataset_Id NUMBER
2915 ) RETURN NUMBER IS
2916 l_AO_Id NUMBER;
2917
2918 CURSOR c_AO IS
2919 SELECT ANALYSIS_OPTION0
2920 FROM BSC_KPI_ANALYSIS_MEASURES_B
2921 WHERE DATASET_ID = p_Dataset_Id
2922 AND INDICATOR = p_Kpi_Id;
2923 BEGIN
2924
2925 l_AO_id := -1;
2926
2927 FOR ao IN c_AO LOOP
2928 l_AO_Id := ao.Analysis_Option0;
2929 END LOOP;
2930
2931 RETURN l_AO_id;
2932 END Get_AO_Id_By_Measure;
2933
2934
2935 PROCEDURE Create_Region_By_AO (
2936 p_Commit VARCHAR2 := FND_API.G_FALSE
2937 , p_Kpi_Id IN NUMBER
2938 , p_Analysis_Option_Id IN NUMBER := NULL
2939 , p_Dim_Set_Id IN NUMBER
2940 , p_Region_Name IN VARCHAR2
2941 , p_Region_Description IN VARCHAR2
2942 , p_Region_Application_Id IN NUMBER
2943 , p_Disable_View_By IN VARCHAR2 := 'N'
2944 , x_return_status OUT NOCOPY VARCHAR2
2945 , x_msg_count OUT NOCOPY NUMBER
2946 , x_msg_data OUT NOCOPY VARCHAR2
2947 ) IS
2948
2949 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
2950
2951 BEGIN
2952
2953
2954
2955 --DBMS_OUTPUT.PUT_LINE('p_Kpi_Id = ' || p_Kpi_Id);
2956 --DBMS_OUTPUT.PUT_LINE('p_Analysis_Option_Id = ' || p_Analysis_Option_Id);
2957
2958 l_report_region_rec.Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(
2959 p_Kpi_Id => p_Kpi_Id,
2960 p_AO_Id => p_Analysis_Option_Id
2961 );
2962 --DBMS_OUTPUT.PUT_LINE('l_report_region_rec.Region_Code = ' || l_report_region_rec.Region_Code);
2963
2964 l_report_region_rec.Region_Name := p_Region_Name;
2965 l_report_region_rec.Region_Description := p_Region_Description;
2966 l_report_region_rec.Region_Application_Id := p_Region_Application_Id;
2967 l_report_region_rec.Database_Object_Name := 'ICX_PROMPTS';
2968 l_report_region_rec.Region_Style := 'TABLE';
2969 l_report_region_rec.Region_Object_Type := NULL;
2970 l_report_region_rec.Help_Target := NULL;
2971 l_report_region_rec.Display_Rows := NULL;
2972 l_report_region_rec.Disable_View_By := p_Disable_View_By;
2973 l_report_region_rec.No_Of_Portlet_Rows := NULL;
2974 l_report_region_rec.Schedule := NULL;
2975 l_report_region_rec.Header_File_Procedure := NULL;
2976 l_report_region_rec.Footer_File_Procedure := NULL;
2977 l_report_region_rec.Group_By := NULL;
2978 l_report_region_rec.Order_By := NULL;
2979 l_report_region_rec.Plsql_For_Report_Query := p_Kpi_Id||'.'||p_Analysis_Option_Id;
2980 l_report_region_rec.Display_Subtotals := NULL;
2981 l_report_region_rec.Data_Source := BSC_BIS_KPI_CRUD_PUB.C_BSC_SOURCE;
2982 l_report_region_rec.Where_Clause := NULL;
2983 l_report_region_rec.Dimension_Group := NULL;
2984 l_report_region_rec.Parameter_Layout := NULL;
2985 l_report_region_rec.Kpi_Id := p_Kpi_Id;
2986 l_report_region_rec.Analysis_Option_Id := p_Analysis_Option_Id;
2987 l_report_region_rec.Dim_Set_Id := p_Dim_Set_Id;
2988
2989 BIS_PMV_REGION_PVT.CREATE_REGION
2990 (
2991 p_commit => p_commit
2992 ,p_Report_Region_Rec => l_report_region_rec
2993 ,x_return_status => x_return_status
2994 ,x_msg_count => x_msg_count
2995 ,x_msg_data => x_msg_data
2996 );
2997 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2998 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2999 END IF;
3000
3001 EXCEPTION
3002 WHEN FND_API.G_EXC_ERROR THEN
3003 IF (x_msg_data IS NULL) THEN
3004 FND_MSG_PUB.Count_And_Get
3005 ( p_encoded => FND_API.G_FALSE
3006 , p_count => x_msg_count
3007 , p_data => x_msg_data
3008 );
3009 END IF;
3010 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3011 IF (x_msg_data IS NULL) THEN
3012 FND_MSG_PUB.Count_And_Get
3013 ( p_encoded => FND_API.G_FALSE
3014 , p_count => x_msg_count
3015 , p_data => x_msg_data
3016 );
3017 END IF;
3018
3019 WHEN NO_DATA_FOUND THEN
3020 IF (x_msg_data IS NOT NULL) THEN
3021 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Region_By_AO ';
3022 ELSE
3023 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Region_By_AO ';
3024 END IF;
3025 WHEN OTHERS THEN
3026 IF (x_msg_data IS NOT NULL) THEN
3027 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Region_By_AO ';
3028 ELSE
3029 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Region_By_AO ';
3030 END IF;
3031
3032 END Create_Region_By_AO;
3033
3034
3035 -- Update Region By Analysis Option ID
3036
3037 PROCEDURE Update_Region_By_AO (
3038 p_Commit VARCHAR2 := FND_API.G_FALSE
3039 , p_Kpi_Id IN NUMBER
3040 , p_Analysis_Option_Id IN NUMBER
3041 , p_Dim_Set_Id IN NUMBER
3042 , p_Region_Name IN VARCHAR2
3043 , p_Region_Description IN VARCHAR2
3044 , p_Region_Application_Id IN NUMBER
3045 , p_Disable_View_By IN VARCHAR2 := 'N'
3046 , x_return_status OUT NOCOPY VARCHAR2
3047 , x_msg_count OUT NOCOPY NUMBER
3048 , x_msg_data OUT NOCOPY VARCHAR2
3049 ) IS
3050
3051 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
3052
3053 BEGIN
3054
3055
3056 l_report_region_rec.Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(
3057 p_Kpi_Id => p_Kpi_Id,
3058 p_AO_Id => p_Analysis_Option_Id
3059 );
3060 l_report_region_rec.Region_Name := p_Region_Name;
3061 l_report_region_rec.Region_Description := p_Region_Description;
3062 l_report_region_rec.Region_Application_Id := p_Region_Application_Id;
3063 l_report_region_rec.Database_Object_Name := 'ICX_PROMPTS';
3064 l_report_region_rec.Region_Style := 'TABLE';
3065 l_report_region_rec.Region_Object_Type := NULL;
3066 l_report_region_rec.Help_Target := NULL;
3067 l_report_region_rec.Display_Rows := NULL;
3068 l_report_region_rec.Disable_View_By := p_Disable_View_By;
3069 l_report_region_rec.No_Of_Portlet_Rows := NULL;
3070 l_report_region_rec.Schedule := NULL;
3071 l_report_region_rec.Header_File_Procedure := NULL;
3072 l_report_region_rec.Footer_File_Procedure := NULL;
3073 l_report_region_rec.Group_By := NULL;
3074 l_report_region_rec.Order_By := NULL;
3075 l_report_region_rec.Plsql_For_Report_Query := p_Kpi_Id||'.'||p_Analysis_Option_Id;
3076 l_report_region_rec.Display_Subtotals := NULL;
3077 l_report_region_rec.Data_Source := BSC_BIS_KPI_CRUD_PUB.C_BSC_SOURCE;
3078 l_report_region_rec.Where_Clause := NULL;
3079 l_report_region_rec.Dimension_Group := NULL;
3080 l_report_region_rec.Parameter_Layout := NULL;
3081 l_report_region_rec.Kpi_Id := p_Kpi_Id;
3082 l_report_region_rec.Analysis_Option_Id := p_Analysis_Option_Id;
3083 l_report_region_rec.Dim_Set_Id := p_Dim_Set_Id;
3084
3085 BIS_PMV_REGION_PVT.UPDATE_REGION
3086 (
3087 p_commit => p_Commit
3088 ,p_Report_Region_Rec => l_report_region_rec
3089 ,x_return_status => x_return_status
3090 ,x_msg_count => x_msg_count
3091 ,x_msg_data => x_msg_data
3092 );
3093 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3094 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3095 END IF;
3096
3097 EXCEPTION
3098 WHEN FND_API.G_EXC_ERROR THEN
3099 IF (x_msg_data IS NULL) THEN
3100 FND_MSG_PUB.Count_And_Get
3101 ( p_encoded => FND_API.G_FALSE
3102 , p_count => x_msg_count
3103 , p_data => x_msg_data
3104 );
3105 END IF;
3106 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3107 IF (x_msg_data IS NULL) THEN
3108 FND_MSG_PUB.Count_And_Get
3109 ( p_encoded => FND_API.G_FALSE
3110 , p_count => x_msg_count
3111 , p_data => x_msg_data
3112 );
3113 END IF;
3114
3115 WHEN NO_DATA_FOUND THEN
3116 IF (x_msg_data IS NOT NULL) THEN
3117 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Region_By_AO ';
3118 ELSE
3119 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Region_By_AO ';
3120 END IF;
3121 WHEN OTHERS THEN
3122 IF (x_msg_data IS NOT NULL) THEN
3123 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Region_By_AO ';
3124 ELSE
3125 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Region_By_AO ';
3126 END IF;
3127
3128
3129 END Update_Region_By_AO;
3130
3131
3132 /*
3133 Get the KPI_ID and OPTION_ID from the Region_Code
3134 Also, specify if the Region Has been created per Analysis Option
3135 */
3136
3137 PROCEDURE Get_KPI_AO_From_Region(
3138 p_Region_Code IN VARCHAR2
3139 , x_Kpi_Id OUT NOCOPY NUMBER
3140 , x_Analysis_Option_Id OUT NOCOPY NUMBER
3141 ) IS
3142
3143 BEGIN
3144 x_Kpi_Id := -1;
3145 x_Analysis_Option_Id := -1;
3146
3147 IF p_Region_Code IS NOT NULL THEN
3148 x_Kpi_Id := SUBSTR(p_Region_Code, (LENGTH(BSC_UTILITY.C_BSC_UNDERSCORE)+1), (INSTR(p_Region_Code, '_', '5') - (LENGTH(BSC_UTILITY.C_BSC_UNDERSCORE)+1)));
3149 x_Analysis_Option_Id := SUBSTR(p_Region_Code, (INSTR(p_Region_Code, '_', '5')+1)) ;
3150 END IF;
3151
3152 END Get_KPI_AO_From_Region;
3153
3154
3155 /*
3156 RETURNS if the region_code has an analysis option associated with the region.
3157 */
3158
3159 FUNCTION has_Region_Per_Measure (
3160 p_Region_Code IN VARCHAR2
3161 ) RETURN BOOLEAN IS
3162 BEGIN
3163 IF (NVL(INSTR(SUBSTR(p_Region_Code, LENGTH(BSC_UTILITY.C_BSC_UNDERSCORE)+1), '_'), -1) > 0) THEN
3164 RETURN TRUE;
3165 ELSE
3166 RETURN FALSE;
3167 END IF;
3168
3169 END has_Region_Per_Measure;
3170
3171
3172 /*
3173 Checks if the region code is valid or not
3174 */
3175
3176 FUNCTION is_Valid_Region_Code (
3177 p_Region_Code IN VARCHAR2
3178 ) RETURN BOOLEAN IS
3179 l_Count NUMBER;
3180 BEGIN
3181 l_Count := 0;
3182
3183 SELECT COUNT(1)
3184 INTO l_Count
3185 FROM AK_REGIONS
3186 WHERE REGION_CODE = p_Region_Code;
3187
3188 IF (l_Count > 0) THEN
3189 RETURN TRUE;
3190 ELSE
3191 RETURN FALSE;
3192 END IF;
3193
3194 END is_Valid_Region_Code;
3195
3196
3197 /*
3198 Checks to see if the Measure p_Dataset_Id has its own region item
3199 for the Analysis Option for which it is associated with the KPI.
3200 */
3201
3202 FUNCTION has_Measure_AK_Region (
3203 p_Kpi_Id NUMBER
3204 ,p_Dataset_Id NUMBER
3205 ) RETURN BOOLEAN IS
3206
3207 l_Analysis_Option NUMBER;
3208 l_Region_Code VARCHAR2(30);
3209
3210 BEGIN
3211
3212 l_Analysis_Option := Get_AO_Id_By_Measure(p_Kpi_Id, p_Dataset_Id);
3213 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(p_Kpi_Id, l_Analysis_Option);
3214
3215 IF is_Valid_Region_Code(l_Region_Code) THEN
3216 RETURN TRUE;
3217 ELSE
3218 RETURN FALSE;
3219 END IF;
3220
3221 END has_Measure_AK_Region;
3222
3223 FUNCTION has_Dim_Level (
3224 p_Region_Code VARCHAR2
3225 ) RETURN BOOLEAN IS
3226
3227 l_Count NUMBER;
3228
3229 BEGIN
3230
3231 l_Count := 0;
3232
3233 SELECT COUNT(1)
3234 INTO l_Count
3235 FROM AK_REGION_ITEMS
3236 WHERE REGION_CODE = p_Region_Code
3237 AND ( (ATTRIBUTE1 = 'DIMENSION LEVEL') OR
3238 (ATTRIBUTE1 = 'DIM LEVEL SINGLE VALUE') OR
3239 (ATTRIBUTE1 = 'DIMENSION VALUE') OR
3240 (ATTRIBUTE1 = 'HIDE_VIEW_BY') OR
3241 (ATTRIBUTE1 = 'HIDE_VIEW_BY_SINGLE') OR
3242 (ATTRIBUTE1 = 'HIDE PARAMETER') OR
3243 (ATTRIBUTE1 = 'VIEWBY PARAMETER') OR
3244 (ATTRIBUTE1 = 'HIDE_DIM_LVL') OR
3245 (ATTRIBUTE1 = 'HIDE DIMENSION LEVEL') OR
3246 (ATTRIBUTE1 = 'HIDE VIEW BY DIMENSION') OR
3247 (ATTRIBUTE1 = 'HIDE_VIEW_BY_DIM_SINGLE'))
3248 AND attribute2 NOT LIKE 'TIME_COMPARISON_TYPE%';
3249
3250
3251 IF l_Count = 0 THEN
3252 RETURN FALSE;
3253 ELSE
3254 RETURN TRUE;
3255 END IF;
3256 END has_Dim_Level;
3257
3258 -- Gets the Region Application ID for any AK Region
3259
3260 FUNCTION Get_Region_Application_Id (
3261 p_Region_Code VARCHAR2
3262 ) RETURN NUMBER IS
3263 l_App_Id NUMBER;
3264 BEGIN
3265
3266 l_App_Id := -1;
3267
3268 SELECT A.REGION_APPLICATION_ID
3269 INTO l_App_Id
3270 FROM AK_REGIONS A
3271 WHERE A.REGION_CODE = p_Region_Code;
3272
3273
3274 RETURN l_App_Id;
3275 EXCEPTION
3276 WHEN OTHERS THEN
3277 RETURN -1;
3278 END Get_Region_Application_Id;
3279
3280
3281 FUNCTION Get_Format_Mask (
3282 p_Format_Id NUMBER
3283 ) RETURN VARCHAR2 IS
3284 BEGIN
3285 RETURN BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Format_Mask(p_Format_Id);
3286 END Get_Format_Mask;
3287
3288
3289 PROCEDURE Create_Nested_Region_Item(
3290 p_commit IN VARCHAR2
3291 , p_Root_AK_Region_Code IN VARCHAR2
3292 , p_Param_Portlet_Region_Code IN VARCHAR2
3293 , p_sequence_number IN NUMBER
3294 , x_return_status OUT NOCOPY VARCHAR2
3295 , x_msg_count OUT NOCOPY NUMBER
3296 , x_msg_data OUT NOCOPY VARCHAR2
3297 )
3298 IS
3299
3300 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
3301 l_region_item_table_nest BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
3302
3303 BEGIN
3304
3305 l_region_item_rec.Attribute_Code := p_Param_Portlet_Region_Code;
3306 l_region_item_rec.Attribute_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
3307 l_region_item_rec.Display_Sequence := p_sequence_number;
3308 l_region_item_rec.Node_Display_Flag := 'Y';
3309 l_region_item_rec.Required_Flag := ' ';
3310 l_region_item_rec.Queryable_Flag := ' ';
3311 l_region_item_rec.Display_Length := 0;
3312 l_region_item_rec.Long_Label := NULL;
3313 l_region_item_rec.Sort_Sequence := NULL;
3314 l_region_item_rec.Initial_Sort_Sequence := NULL;
3315 l_region_item_rec.Sort_Direction := NULL;
3316
3317 l_region_item_rec.Item_Style := BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE;
3318 l_region_item_rec.Nested_Region_Code := p_Param_Portlet_Region_Code;
3319 l_region_item_rec.Nested_Region_Application_Id := Get_Region_Application_Id(p_Param_Portlet_Region_Code);
3320
3321 l_region_item_rec.Url := NULL;
3322 l_region_item_rec.Attribute_Type := NULL;
3323 l_region_item_rec.Display_Format := NULL;
3324 l_region_item_rec.Display_Type := NULL;
3325 l_region_item_rec.Measure_Level := NULL;
3326 l_region_item_rec.Base_Column := NULL;
3327 l_region_item_rec.Lov_Where_Clause := NULL;
3328 l_region_item_rec.Graph_Position := NULL;
3329 l_region_item_rec.Graph_Style := NULL;
3330 l_region_item_rec.Lov_Table := NULL;
3331 l_region_item_rec.Aggregate_Function := NULL;
3332 l_region_item_rec.Display_Total := NULL;
3333 l_region_item_rec.Variance := NULL;
3334 l_region_item_rec.Schedule := NULL;
3335 l_region_item_rec.Override_Hierarchy := NULL;
3336 l_region_item_rec.Additional_View_By := NULL;
3337 l_region_item_rec.Rolling_Lookup := NULL;
3338 l_region_item_rec.Operator_Lookup := NULL;
3339 l_region_item_rec.Dual_YAxis_Graphs := NULL;
3340 l_region_item_rec.Custom_View_Name := NULL;
3341 l_region_item_rec.Graph_Measure_Type := NULL;
3342 l_region_item_rec.Hide_Target_In_Table := NULL;
3343 l_region_item_rec.Parameter_Render_Type := NULL;
3344 l_region_item_rec.Privilege := NULL;
3345
3346 l_region_item_table_nest(1) := l_region_item_rec;
3347
3348 BIS_PMV_REGION_ITEMS_PVT.CREATE_REGION_ITEMS(
3349 p_commit => p_commit
3350 ,p_region_code => p_Root_AK_Region_Code
3351 ,p_region_application_id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3352 ,p_Region_Item_Tbl => l_region_item_table_nest
3353 ,x_return_status => x_return_status
3354 ,x_msg_count => x_msg_count
3355 ,x_msg_data => x_msg_data
3356 );
3357
3358 --DBMS_OUTPUT.PUT_LINE('x_return_status = ' || x_return_status);
3359 --DBMS_OUTPUT.PUT_LINE('x_msg_data = ' || x_msg_data);
3360
3361 END Create_Nested_Region_Item;
3362
3363
3364 PROCEDURE Delete_Nested_Region_Item(
3365 p_commit VARCHAR2 := FND_API.G_FALSE,
3366 p_Root_AK_Region VARCHAR2,
3367 p_Application_Id NUMBER,
3368 p_Nested_Region_Code VARCHAR2,
3369 x_return_status OUT NOCOPY VARCHAR2,
3370 x_msg_count OUT NOCOPY NUMBER,
3371 x_msg_data OUT NOCOPY VARCHAR2
3372 ) IS
3373 l_Attribute_Code_Tbl BISVIEWER.t_char ;
3374 l_Attribute_App_Id_Tbl BISVIEWER.t_num ;
3375 BEGIN
3376
3377 l_Attribute_Code_Tbl(1) := p_Nested_Region_Code;
3378 l_Attribute_App_Id_Tbl(1) := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
3379
3380 BIS_PMV_REGION_ITEMS_PVT.DELETE_REGION_ITEMS
3381 ( p_commit => p_commit
3382 , p_region_code => p_Root_AK_Region
3383 , p_region_application_id => p_Application_Id
3384 , p_Attribute_Code_Tbl => l_Attribute_Code_Tbl
3385 , p_Attribute_Appl_Id_Tbl => l_Attribute_App_Id_Tbl
3386 , x_return_status => x_return_status
3387 , x_msg_count => x_msg_count
3388 , x_msg_data => x_msg_data
3389 );
3390
3391 END Delete_Nested_Region_Item;
3392
3393 /*
3394 This private function is to test whether parameter is null or not.
3395 */
3396 FUNCTION IS_NOT_NULL(p_name VARCHAR2)
3397 RETURN VARCHAR2 IS
3398 BEGIN
3399 IF (p_name IS NULL) THEN
3400 RETURN FND_API.G_FALSE;
3401 END IF;
3402 RETURN FND_API.G_TRUE;
3403 END IS_NOT_NULL;
3404
3405
3406 /*this function will return 'T' (FND_API.G_TRUE) if the passed short_name of KPI Group
3407 is created through KPI End to End module otherwise 'F' (FND_API.G_FALSE)
3408
3409 This function assumes the Short_Name passed is valid and exists in
3410 BSC Metadata. It will not be checked from BSC tables due to performance reasons.
3411
3412 p_Short_Name Corresponds to BSC_TAB_IND_GROUPS_B.Short_Name
3413 */
3414 FUNCTION is_KPI_EndToEnd_Group(p_Short_Name VARCHAR2)
3415 RETURN VARCHAR2 IS
3416 BEGIN
3417 RETURN IS_NOT_NULL(p_Short_Name);
3418 EXCEPTION
3419 WHEN OTHERS THEN
3420 RETURN FND_API.G_FALSE;
3421 END is_KPI_EndToEnd_Group;
3422
3423
3424 /*this function will return 'T' (FND_API.G_TRUE) if the passed short_name of KPI
3425 is created through KPI End to End module otherwise 'F' (FND_API.G_FALSE)
3426
3427 This function assumes the Short_Name passed is valid and exists in
3428 BSC Metadata. It will not be checked from BSC tables due to performance reasons.
3429
3430 p_Short_Name Corresponds to BSC_KPIS_B.Short_Name
3431 */
3432 FUNCTION is_KPI_EndToEnd_KPI(p_Short_Name VARCHAR2)
3433 RETURN VARCHAR2 IS
3434 BEGIN
3435 RETURN IS_NOT_NULL(p_Short_Name);
3436 EXCEPTION
3437 WHEN OTHERS THEN
3438 RETURN FND_API.G_FALSE;
3439 END is_KPI_EndToEnd_KPI;
3440
3441 FUNCTION is_KPI_EndToEnd_AnaOpt(p_Short_Name VARCHAR2)
3442 RETURN VARCHAR2 IS
3443 BEGIN
3444 RETURN IS_NOT_NULL(p_Short_Name);
3445 EXCEPTION
3446 WHEN OTHERS THEN
3447 RETURN FND_API.G_FALSE;
3448 END is_KPI_EndToEnd_AnaOpt;
3449
3450
3451
3452 /*this function will return 'T' (FND_API.G_TRUE) if the passed short_name of Dimension Object
3453 is created through KPI End to End module otherwise 'F' (FND_API.G_FALSE)
3454
3455 This function assumes the Short_Name passed is valid and exists in
3456 BSC Metadata. It will not be checked from BSC tables due to performance reasons.
3457
3458 p_Short_Name Corresponds to BSC_SYS_DIM_LEVELS_B.Short_Name
3459 */
3460 FUNCTION is_KPI_EndToEnd_DimObject(p_Short_Name VARCHAR2)
3461 RETURN VARCHAR2 IS
3462 l_Count NUMBER;
3463 BEGIN
3464 IF (p_Short_Name IS NULL) THEN
3465 RETURN FND_API.G_FALSE;
3466 END IF;
3467
3468 l_Count := 0;
3469
3470 SELECT COUNT(1) INTO l_Count
3471 FROM AK_REGION_ITEMS
3472 WHERE Attribute_Code = p_Short_Name;
3473 --AND Attribute_Application_Id = 271;
3474
3475 IF (l_Count = 0) THEN
3476 RETURN FND_API.G_FALSE;
3477 ELSE
3478 RETURN FND_API.G_TRUE;
3479 END IF;
3480 EXCEPTION
3481 WHEN OTHERS THEN
3482 RETURN FND_API.G_FALSE;
3483 END is_KPI_EndToEnd_DimObject;
3484
3485
3486 /*this function will return 'T' (FND_API.G_TRUE) if the passed short_name of Dimension
3487 is created through KPI End to End module otherwise 'F' (FND_API.G_FALSE)
3488
3489 This function assumes the Short_Name passed is valid and exists in
3490 BSC Metadata. It will not be checked from BSC tables due to performance reasons.
3491
3492 p_Short_Name Corresponds to BSC_SYS_DIM_GROUPS_TL.Short_Name
3493 */
3494 FUNCTION is_KPI_EndToEnd_Dimension(p_Short_Name VARCHAR2)
3495 RETURN VARCHAR2 IS
3496 l_Count NUMBER;
3497 BEGIN
3498 IF (p_Short_Name IS NULL) THEN
3499 RETURN FND_API.G_FALSE;
3500 END IF;
3501
3502 l_Count := 0;
3503
3504 SELECT COUNT(1) INTO l_Count
3505 FROM AK_REGIONS
3506 WHERE Region_Code = p_Short_Name;
3507 --AND Region_Application_Id = 271;--hardcoded application id will be removed with a constant
3508
3509 IF (l_Count = 0) THEN
3510 RETURN FND_API.G_FALSE;
3511 ELSE
3512 RETURN FND_API.G_TRUE;
3513 END IF;
3514 EXCEPTION
3515 WHEN OTHERS THEN
3516 RETURN FND_API.G_FALSE;
3517 END is_KPI_EndToEnd_Dimension;
3518
3519
3520 -- This function is scalable only to 99 region items for any regions,
3521 -- if more is required, then we need to modify the API
3522
3523 FUNCTION get_Unique_Attribute_Code (
3524 p_Region_Code IN VARCHAR2
3525 , p_Measure_Short_Name IN VARCHAR2
3526 , p_Append_String IN VARCHAR2
3527 ) RETURN VARCHAR2 IS
3528
3529 l_short_name VARCHAR2(30);
3530 l_attr_code VARCHAR2(30);
3531
3532 l_temp1 VARCHAR2(30);
3533 l_temp2 VARCHAR2(30);
3534 l_appended VARCHAR2(30);
3535
3536 l_append_string VARCHAR2(5);
3537
3538 l_final_string VARCHAR2(30);
3539
3540 l_len1 NUMBER;
3541 l_len2 NUMBER;
3542
3543 l_exist_cnt NUMBER;
3544 BEGIN
3545
3546 l_short_name := p_Measure_Short_Name;
3547 l_append_string := p_Append_String;
3548
3549 l_len1 := LENGTH(l_short_name);
3550 l_len2 := LENGTH(l_append_string);
3551
3552 l_exist_cnt := 1;
3553 --bug 4525431 handled cases where l_short_name length is 28 or 30
3554
3555 IF((l_len1 + l_len2) > 30) THEN
3556 l_temp1 := SUBSTR(l_short_name, 1, (l_len1-(LENGTH(l_Append_String)+2)));
3557 l_appended := l_temp1;
3558
3559 WHILE (l_exist_cnt <> 0) LOOP
3560 l_appended := BSC_UTILITY.get_Next_DispName(l_appended);
3561 l_temp2 := REPLACE(l_appended , ' ', '_');
3562 l_Final_String := l_temp2 || l_Append_String;
3563
3564 SELECT COUNT(1) INTO l_exist_cnt
3565 FROM AK_REGION_ITEMS
3566 WHERE REGION_CODE = p_Region_Code
3567 AND ATTRIBUTE_CODE = l_final_string;
3568 END LOOP;
3569 ELSE
3570 l_final_string := l_short_name || l_append_string;
3571 END IF;
3572
3573 RETURN l_final_string;
3574
3575 END get_Unique_Attribute_Code;
3576
3577 /*
3578 Create Wrapper for Generic Region Item Creation
3579 */
3580
3581 PROCEDURE Create_Sim_Generic_Region_Item(
3582 p_commit IN VARCHAR2 := FND_API.G_FALSE
3583 , p_Region_Code IN VARCHAR2
3584 , p_Region_Application_Id IN NUMBER
3585 , p_Attribute_Code IN VARCHAR2
3586 , p_Attribute_Application_Id IN NUMBER
3587 , p_Display_Sequence IN NUMBER
3588 , p_Node_Display_Flag IN VARCHAR2
3589 , p_Required_Flag IN VARCHAR2
3590 , p_Queryable_Flag IN VARCHAR2
3591 , p_Display_Length IN NUMBER
3592 , p_Long_Label IN VARCHAR2
3593 , p_Url IN VARCHAR2
3594 , p_Attribute_Type IN VARCHAR2
3595 , p_Display_Format IN VARCHAR2
3596 , p_Display_Type IN VARCHAR2
3597 , p_Measure_Level IN VARCHAR2
3598 , p_Base_Column IN VARCHAR2
3599 , p_Graph_Position IN NUMBER
3600 , p_Graph_Style IN VARCHAR2
3601 , p_Aggregate_Function IN VARCHAR2
3602 , p_Display_Total IN VARCHAR2
3603 , p_Graph_Measure_Type IN VARCHAR2
3604 , p_Item_Style IN VARCHAR2
3605 , p_Grand_Total_Flag IN VARCHAR2
3606 , p_Nested_Region_Code IN VARCHAR2
3607 , p_Nested_Region_Application_Id IN NUMBER
3608 , x_return_status OUT NOCOPY VARCHAR2
3609 , x_msg_count OUT NOCOPY NUMBER
3610 , x_msg_data OUT NOCOPY VARCHAR2
3611 ) IS
3612
3613 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
3614 l_region_item_table_measure BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
3615 BEGIN
3616
3617 l_region_item_rec.Attribute_Code := p_Attribute_Code;
3618 l_region_item_rec.Attribute_Application_Id := p_Attribute_Application_Id;
3619 l_region_item_rec.Display_Sequence := p_Display_Sequence;
3620 l_region_item_rec.Node_Display_Flag := p_Node_Display_Flag;
3621 l_region_item_rec.Required_Flag := p_Required_Flag;
3622 l_region_item_rec.Queryable_Flag := p_Queryable_Flag;
3623 l_region_item_rec.Display_Length := p_Display_Length;
3624 l_region_item_rec.Long_Label := p_Long_Label;
3625 l_region_item_rec.Sort_Sequence := NULL;
3626 l_region_item_rec.Initial_Sort_Sequence := NULL;
3627 l_region_item_rec.Sort_Direction := NULL;
3628 l_region_item_rec.Url := p_Url;
3629 l_region_item_rec.Attribute_Type := p_Attribute_Type;
3630 l_region_item_rec.Display_Format := p_Display_Format;
3631 l_region_item_rec.Display_Type := p_Display_Type;
3632 l_region_item_rec.Measure_Level := p_Measure_Level;
3633 l_region_item_rec.Base_Column := p_Base_Column;
3634 l_region_item_rec.Lov_Where_Clause := NULL;
3635 l_region_item_rec.Graph_Position := p_Graph_Position;
3636 l_region_item_rec.Graph_Style := NULL;
3637 l_region_item_rec.Lov_Table := NULL;
3638 l_region_item_rec.Aggregate_Function := p_Aggregate_Function;
3639 l_region_item_rec.Display_Total := p_Display_Total;
3640 l_region_item_rec.Variance := NULL;
3641 l_region_item_rec.Schedule := NULL;
3642 l_region_item_rec.Override_Hierarchy := NULL;
3643 l_region_item_rec.Additional_View_By := NULL;
3644 l_region_item_rec.Rolling_Lookup := NULL;
3645 l_region_item_rec.Operator_Lookup := NULL;
3646 l_region_item_rec.Dual_YAxis_Graphs := NULL;
3647 l_region_item_rec.Custom_View_Name := NULL;
3648 l_region_item_rec.Graph_Measure_Type := p_Graph_Measure_Type;
3649 l_region_item_rec.Hide_Target_In_Table := NULL;
3650 l_region_item_rec.Parameter_Render_Type := NULL;
3651 l_region_item_rec.Privilege := NULL;
3652 l_region_item_rec.Item_Style := p_Item_Style;
3653 l_region_item_rec.Grand_Total_Flag := p_Grand_Total_Flag;
3654 l_region_item_rec.Nested_Region_Code := p_Nested_Region_Code;
3655 l_region_item_rec.Nested_Region_Application_Id := p_Nested_Region_Application_Id;
3656
3657
3658 l_region_item_table_measure(1) := l_region_item_rec;
3659
3660 BIS_PMV_REGION_ITEMS_PVT.CREATE_REGION_ITEMS(
3661 p_commit => p_commit
3662 ,p_region_code => p_Region_Code
3663 ,p_region_application_id => p_Region_Application_Id
3664 ,p_Region_Item_Tbl => l_region_item_table_measure
3665 ,x_return_status => x_return_status
3666 ,x_msg_count => x_msg_count
3667 ,x_msg_data => x_msg_data
3668 );
3669
3670 END Create_Sim_Generic_Region_Item;
3671
3672 /*
3673 The API creates a All additional Region Items for the specified
3674 AK Region
3675 */
3676 PROCEDURE Create_Addl_Ak_Region_Items(
3677 p_commit IN VARCHAR2 := FND_API.G_FALSE
3678 , p_Region_Code IN VARCHAR2
3679 , p_Region_Application_Id IN NUMBER
3680 , p_Display_Sequence IN NUMBER
3681 , p_Display_Format IN VARCHAR2
3682 , p_Format_Id IN NUMBER
3683 , p_Measure_Short_Name IN VARCHAR2
3684 , p_Param_Portlet_Region_Code IN VARCHAR2
3685 , p_Analysis_Option_Name IN VARCHAR2
3686 , p_Kpi_Id IN NUMBER
3687 , x_return_status OUT NOCOPY VARCHAR2
3688 , x_msg_count OUT NOCOPY NUMBER
3689 , x_msg_data OUT NOCOPY VARCHAR2
3690 ) IS
3691 l_Attribute_Code VARCHAR2(30);
3692 l_Compare_Column VARCHAR2(30);
3693 l_Lookup_Meaning VARCHAR2(80);
3694 l_Colspan_Attr_Code VARCHAR2(30);
3695 l_Format_Type VARCHAR2(3);
3696 l_Base_Column NUMBER;
3697 l_has_comp_or_plan BOOLEAN;
3698 l_non_time_dimension_groups BSC_BIS_KPI_CRUD_PUB.BSC_VARCHAR2_TBL_TYPE;
3699 l_non_time_dimension_objects BSC_BIS_KPI_CRUD_PUB.BSC_VARCHAR2_TBL_TYPE;
3700 l_non_time_dim_obj_short_names VARCHAR2(32000);
3701 l_all_dim_group_ids BSC_BIS_KPI_CRUD_PUB.BSC_NUMBER_TBL_TYPE;
3702 l_non_time_counter NUMBER;
3703 l_time_dimension_groups BSC_BIS_KPI_CRUD_PUB.BSC_VARCHAR2_TBL_TYPE;
3704 l_time_dimension_objects BSC_BIS_KPI_CRUD_PUB.BSC_VARCHAR2_TBL_TYPE;
3705 l_time_dim_obj_short_names VARCHAR2(32000);
3706 l_time_counter NUMBER;
3707 l_msg_data VARCHAR2(2000);
3708 BEGIN
3709
3710 FND_MSG_PUB.Initialize;
3711 x_return_status := FND_API.G_RET_STS_SUCCESS;
3712 l_has_comp_or_plan := BSC_BIS_KPI_CRUD_PUB.Has_Compare_To_Or_Plan (p_Param_Portlet_Region_Code);
3713
3714 -- Create a new Nested Region Item (with Param Region Code)
3715 Create_Sim_Generic_Region_Item(
3716 p_commit => p_Commit
3717 , p_Region_Code => p_Region_Code
3718 , p_Region_Application_Id => p_Region_Application_Id
3719 , p_Attribute_Code => p_Param_Portlet_Region_Code
3720 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3721 , p_Display_Sequence => (p_Display_Sequence + 10)
3722 , p_Node_Display_Flag => 'Y'
3723 , p_Required_Flag => ' '
3724 , p_Queryable_Flag => ' '
3725 , p_Display_Length => 0
3726 , p_Long_Label => NULL
3727 , p_Url => NULL
3728 , p_Attribute_Type => NULL
3729 , p_Display_Format => NULL
3730 , p_Display_Type => NULL
3731 , p_Measure_Level => NULL
3732 , p_Base_Column => NULL
3733 , p_Graph_Position => NULL
3734 , p_Graph_Style => NULL
3735 , p_Aggregate_Function => NULL
3736 , p_Display_Total => NULL
3737 , p_Graph_Measure_Type => NULL
3738 , p_Item_Style => BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE
3739 , p_Grand_Total_Flag => NULL
3740 , p_Nested_Region_Code => p_Param_Portlet_Region_Code
3741 , p_Nested_Region_Application_Id => Get_Region_Application_Id(p_Param_Portlet_Region_Code)
3742 , x_return_status => x_return_status
3743 , x_msg_count => x_msg_count
3744 , x_msg_data => x_msg_data
3745 );
3746 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3747 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3748 END IF;
3749
3750 ---------------------------------------------------------------------
3751 /*
3752 If time parameter is not present in parameter portlet, we need to create a
3753 Daily Periodicity time parameter and pass it on to PMV
3754 Added by visuri for Enhancement 4065098
3755 */
3756
3757 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code(
3758 p_param_portlet_region_code=>p_Param_Portlet_Region_Code
3759 ,x_non_time_dimension_groups=>l_non_time_dimension_groups
3760 ,x_non_time_dimension_objects=>l_non_time_dimension_objects
3761 ,x_non_time_dim_obj_short_names=> l_non_time_dim_obj_short_names
3762 ,x_all_dim_group_ids=>l_all_dim_group_ids
3763 ,x_non_time_counter=>l_non_time_counter
3764 ,x_time_dimension_groups=>l_time_dimension_groups
3765 ,x_time_dimension_objects=>l_time_dimension_objects
3766 ,x_time_dim_obj_short_names=>l_time_dim_obj_short_names
3767 ,x_time_counter=>l_time_counter
3768 ,x_msg_data=>l_msg_data
3769 );
3770
3771 IF (l_msg_data IS NOT NULL) THEN
3772 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3773 END IF;
3774
3775 IF (l_time_dim_obj_short_names IS NULL) THEN
3776
3777 BSC_BIS_KPI_CRUD_PUB.Create_Sim_Generic_Region_Item(
3778 p_commit => p_Commit
3779 , p_Region_Code => p_Region_Code
3780 , p_Region_Application_Id => p_Region_Application_Id
3781 , p_Attribute_Code => BSC_BIS_KPI_CRUD_PUB.C_DAILY_PERIOD_ATTR_CODE
3782 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BIS_APPLICATION_ID
3783 , p_Display_Sequence =>(p_Display_Sequence + 15)
3784 , p_Node_Display_Flag => 'N'
3785 , p_Required_Flag => 'N'
3786 , p_Queryable_Flag => 'Y'
3787 , p_Display_Length => 0
3788 , p_Long_Label => NULL
3789 , p_Url => NULL
3790 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_HIDE_PARAMETER
3791 , p_Display_Format => NULL
3792 , p_Display_Type => NULL
3793 , p_Measure_Level => BSC_BIS_KPI_CRUD_PUB.C_DAILY_PERIOD_ATTR2
3794 , p_Base_Column => NULL
3795 , p_Graph_Position => NULL
3796 , p_Graph_Style => NULL
3797 , p_Aggregate_Function => NULL
3798 , p_Display_Total => NULL
3799 , p_Graph_Measure_Type => NULL
3800 , p_Item_Style => NULL
3801 , p_Grand_Total_Flag => NULL
3802 , p_Nested_Region_Code => NULL
3803 , p_Nested_Region_Application_Id=> NULL
3804 , x_return_status => x_return_status
3805 , x_msg_count => x_msg_count
3806 , x_msg_data => x_msg_data
3807 );
3808
3809
3810 END IF;
3811
3812 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3813 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3814 END IF;
3815
3816 ---------------------------------------------------------------------
3817
3818 -- Get the column spand attribute code.
3819 l_Colspan_Attr_Code := get_Unique_Attribute_Code (
3820 p_Region_Code => p_Region_Code
3821 , p_Measure_Short_Name => p_Measure_Short_Name
3822 , p_Append_String => BSC_BIS_KPI_CRUD_PUB.C_COLSPAN
3823 );
3824
3825
3826 -- Create a new Measure Region Item
3827 -- Added Graph_Position = 1 for Bug#3742500
3828 Create_Sim_Generic_Region_Item(
3829 p_commit => p_Commit
3830 , p_Region_Code => p_Region_Code
3831 , p_Region_Application_Id => p_Region_Application_Id
3832 , p_Attribute_Code => p_Measure_Short_Name
3833 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3834 , p_Display_Sequence => (p_Display_Sequence + 20)
3835 , p_Node_Display_Flag => 'Y'
3836 , p_Required_Flag => ' '
3837 , p_Queryable_Flag => ' '
3838 , p_Display_Length => NVL(LENGTH(p_Analysis_Option_Name), 0)
3839 , p_Long_Label => p_Analysis_Option_Name
3840 , p_Url => NULL
3841 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_MEASURE_ATTRIBURE_TYPE
3842 , p_Display_Format => p_Display_Format
3843 , p_Display_Type => BSC_BIS_KPI_CRUD_PUB.C_AUTOFACTOR_GROUP1
3844 , p_Measure_Level => p_Measure_Short_Name --Earlier COLSPAN l_Colspan_Attr_Code -- COLSPAN Attribute as level
3845 , p_Base_Column => NULL
3846 , p_Graph_Position => 1
3847 , p_Graph_Style => NULL
3848 , p_Aggregate_Function => NULL
3849 , p_Display_Total => 'Y'
3850 , p_Graph_Measure_Type => NULL
3851 , p_Item_Style => NULL
3852 , p_Grand_Total_Flag => 'Y'
3853 , p_Nested_Region_Code => NULL
3854 , p_Nested_Region_Application_Id => NULL
3855 , x_return_status => x_return_status
3856 , x_msg_count => x_msg_count
3857 , x_msg_data => x_msg_data
3858 );
3859 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3860 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3861 END IF;
3862
3863
3864 -- Create a Compare-To Region Item
3865 IF (l_has_comp_or_plan) THEN
3866 l_Attribute_Code := get_Unique_Attribute_Code (
3867 p_Region_Code => p_Region_Code
3868 , p_Measure_Short_Name => p_Measure_Short_Name
3869 , p_Append_String => BSC_BIS_KPI_CRUD_PUB.C_COMPARISON_APPEND_STRING
3870 );
3871 l_Compare_Column := l_Attribute_Code;
3872
3873 l_Lookup_Meaning := BSC_APPS.GET_LOOKUP_VALUE('BSC_UI_BACKEND', 'COMPARE_TO'); -- creates Prior
3874 -- No lookup for Compare To
3875 Create_Sim_Generic_Region_Item(
3876 p_commit => p_Commit
3877 , p_Region_Code => p_Region_Code
3878 , p_Region_Application_Id => p_Region_Application_Id
3879 , p_Attribute_Code => l_Attribute_Code
3880 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3881 , p_Display_Sequence => p_Display_Sequence + 30
3882 , p_Node_Display_Flag => 'Y'
3883 , p_Required_Flag => ' '
3884 , p_Queryable_Flag => ' '
3885 , p_Display_Length => NVL(LENGTH(l_Lookup_Meaning), 0)
3886 , p_Long_Label => l_Lookup_Meaning
3887 , p_Url => NULL
3888 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_COMPARE_ATTRIBURE_TYPE
3889 , p_Display_Format => p_Display_Format
3890 , p_Display_Type => BSC_BIS_KPI_CRUD_PUB.C_AUTOFACTOR_GROUP1
3891 , p_Measure_Level => p_Measure_Short_Name
3892 , p_Base_Column => NULL
3893 , p_Graph_Position => 1
3894 , p_Graph_Style => NULL
3895 , p_Aggregate_Function => NULL
3896 , p_Display_Total => 'Y'
3897 , p_Graph_Measure_Type => NULL
3898 , p_Item_Style => NULL
3899 , p_Grand_Total_Flag => 'Y'
3900 , p_Nested_Region_Code => NULL
3901 , p_Nested_Region_Application_Id => NULL
3902 , x_return_status => x_return_status
3903 , x_msg_count => x_msg_count
3904 , x_msg_data => x_msg_data
3905 );
3906
3907 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3908 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3909 END IF;
3910
3911
3912 -- Create a Change Region Item
3913
3914 -- Added for Bug#3919666
3915 l_Format_Type := BSC_BIS_KPI_CRUD_PUB.Get_Change_Disp_Type_By_Mask(p_Format_Id);
3916
3917 IF (l_Format_Type = BSC_BIS_KPI_CRUD_PUB.C_FORMAT_INTEGER) THEN
3918 l_Base_Column := BSC_BIS_KPI_CRUD_PUB.C_CHANGE_TYPE_INTEGER;
3919 ELSE
3920 l_Base_Column := BSC_BIS_KPI_CRUD_PUB.C_CHANGE_TYPE_PERCENT;
3921 END IF;
3922
3923 l_Attribute_Code := get_Unique_Attribute_Code (
3924 p_Region_Code => p_Region_Code
3925 , p_Measure_Short_Name => p_Measure_Short_Name
3926 , p_Append_String => BSC_BIS_KPI_CRUD_PUB.C_CHANGE_APPEND_STRING
3927 );
3928
3929 l_Lookup_Meaning := BSC_APPS.GET_LOOKUP_VALUE('BSC_UI_BACKEND', 'CHANGE');
3930 Create_Sim_Generic_Region_Item(
3931 p_commit => p_Commit
3932 , p_Region_Code => p_Region_Code
3933 , p_Region_Application_Id => p_Region_Application_Id
3934 , p_Attribute_Code => l_Attribute_Code
3935 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3936 , p_Display_Sequence => (p_Display_Sequence + 40)
3937 , p_Node_Display_Flag => 'Y'
3938 , p_Required_Flag => ' '
3939 , p_Queryable_Flag => ' '
3940 , p_Display_Length => NVL(LENGTH(l_Lookup_Meaning), 0)
3941 , p_Long_Label => l_Lookup_Meaning
3942 , p_Url => NULL
3943 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_CHANGE_ATTRIBURE_TYPE
3944 , p_Display_Format => NULL
3945 , p_Display_Type => l_Format_Type
3946 , p_Measure_Level => p_Measure_Short_Name -- Earlier using l_Colspan_Attr_Code -- COLSPAN Attribute as level
3947 , p_Base_Column => l_Base_Column
3948 , p_Graph_Position => NULL
3949 , p_Graph_Style => NULL
3950 , p_Aggregate_Function => NULL
3951 , p_Display_Total => NULL
3952 , p_Graph_Measure_Type => NULL
3953 , p_Item_Style => NULL
3954 , p_Grand_Total_Flag => NULL
3955 , p_Nested_Region_Code => NULL
3956 , p_Nested_Region_Application_Id => NULL
3957 , x_return_status => x_return_status
3958 , x_msg_count => x_msg_count
3959 , x_msg_data => x_msg_data
3960 );
3961
3962 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3963 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3964 END IF;
3965 END IF;
3966
3967
3968 -- Create a Region Item for COULMN SPAN
3969 -- As of now, we do not need Column Spanning as per Bug#3688263
3970
3971 /*Create_Sim_Generic_Region_Item(
3972 p_commit => p_Commit
3973 , p_Region_Code => p_Region_Code
3974 , p_Region_Application_Id => p_Region_Application_Id
3975 , p_Attribute_Code => l_Colspan_Attr_Code
3976 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
3977 , p_Display_Sequence => (p_Display_Sequence + 70)
3978 , p_Node_Display_Flag => 'Y'
3979 , p_Required_Flag => ' '
3980 , p_Queryable_Flag => ' '
3981 , p_Display_Length => NVL(LENGTH(l_Colspan_Attr_Code), 0)
3982 , p_Long_Label => l_Colspan_Attr_Code
3983 , p_Url => NULL
3984 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_COLUMN_SPAN_ATTRIBURE_TYPE
3985 , p_Display_Format => NULL
3986 , p_Display_Type => NULL
3987 , p_Measure_Level => NULL
3988 , p_Base_Column => NULL
3989 , p_Graph_Position => NULL
3990 , p_Graph_Style => NULL
3991 , p_Aggregate_Function => NULL
3992 , p_Display_Total => NULL
3993 , p_Graph_Measure_Type => NULL
3994 , p_Item_Style => NULL
3995 , p_Nested_Region_Code => NULL
3996 , p_Nested_Region_Application_Id => NULL
3997 , x_return_status => x_return_status
3998 , x_msg_count => x_msg_count
3999 , x_msg_data => x_msg_data
4000 );
4001
4002 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4003 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4004 END IF; */
4005
4006 EXCEPTION
4007 WHEN FND_API.G_EXC_ERROR THEN
4008 IF (x_msg_data IS NULL) THEN
4009 FND_MSG_PUB.Count_And_Get
4010 ( p_encoded => FND_API.G_FALSE
4011 , p_count => x_msg_count
4012 , p_data => x_msg_data
4013 );
4014 END IF;
4015 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4016 IF (x_msg_data IS NULL) THEN
4017 FND_MSG_PUB.Count_And_Get
4018 ( p_encoded => FND_API.G_FALSE
4019 , p_count => x_msg_count
4020 , p_data => x_msg_data
4021 );
4022 END IF;
4023
4024 WHEN NO_DATA_FOUND THEN
4025 IF (x_msg_data IS NOT NULL) THEN
4026 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Addl_Ak_Region_Items ';
4027 ELSE
4028 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Addl_Ak_Region_Items ';
4029 END IF;
4030 WHEN OTHERS THEN
4031 IF (x_msg_data IS NOT NULL) THEN
4032 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Addl_Ak_Region_Items ';
4033 ELSE
4034 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Addl_Ak_Region_Items ';
4035 END IF;
4036 END Create_Addl_Ak_Region_Items;
4037
4038
4039 PROCEDURE Delete_Misc_Region_Items(
4040 p_commit VARCHAR2 := FND_API.G_FALSE,
4041 p_Region_Code VARCHAR2,
4042 p_Application_Id NUMBER,
4043 x_return_status OUT NOCOPY VARCHAR2,
4044 x_msg_count OUT NOCOPY NUMBER,
4045 x_msg_data OUT NOCOPY VARCHAR2
4046 ) IS
4047 l_Attribute_Code_Tbl BISVIEWER.t_char ;
4048 l_Attribute_App_Id_Tbl BISVIEWER.t_num ;
4049
4050 l_index NUMBER;
4051
4052 CURSOR c_Attrs IS
4053 SELECT ATTRIBUTE_CODE, ATTRIBUTE_APPLICATION_ID
4054 FROM AK_REGION_ITEMS
4055 WHERE REGION_CODE = p_Region_Code;
4056 BEGIN
4057 l_index := 1;
4058
4059 FOR cattr IN c_Attrs LOOP
4060 l_Attribute_Code_Tbl(l_index) := cattr.ATTRIBUTE_CODE;
4061 l_Attribute_App_Id_Tbl(l_index) := cattr.ATTRIBUTE_APPLICATION_ID;
4062
4063 l_index := l_index + 1;
4064 END LOOP;
4065
4066 BIS_PMV_REGION_ITEMS_PVT.DELETE_REGION_ITEMS
4067 ( p_commit => p_commit
4068 , p_region_code => p_Region_Code
4069 , p_region_application_id => p_Application_Id
4070 , p_Attribute_Code_Tbl => l_Attribute_Code_Tbl
4071 , p_Attribute_Appl_Id_Tbl => l_Attribute_App_Id_Tbl
4072 , x_return_status => x_return_status
4073 , x_msg_count => x_msg_count
4074 , x_msg_data => x_msg_data
4075 );
4076
4077
4078
4079 --DBMS_OUTPUT.PUT_LINE('Delete_Misc_Region_Items (x_msg_data) - ' || x_msg_data);
4080 --DBMS_OUTPUT.PUT_LINE('Delete_Misc_Region_Items (x_return_status) - ' || x_return_status);
4081
4082 END Delete_Misc_Region_Items;
4083
4084
4085
4086 /*
4087 Update Wrapper for Generic Region Item Creation
4088 */
4089
4090 PROCEDURE Update_Sim_Generic_Region_Item(
4091 p_commit IN VARCHAR2 := FND_API.G_FALSE
4092 , p_Region_Code IN VARCHAR2
4093 , p_Region_Application_Id IN NUMBER
4094 , p_Attribute_Code IN VARCHAR2
4095 , p_Attribute_Application_Id IN NUMBER
4096 , p_Display_Sequence IN NUMBER
4097 , p_Node_Display_Flag IN VARCHAR2
4098 , p_Required_Flag IN VARCHAR2
4099 , p_Queryable_Flag IN VARCHAR2
4100 , p_Display_Length IN NUMBER
4101 , p_Long_Label IN VARCHAR2
4102 , p_Url IN VARCHAR2
4103 , p_Attribute_Type IN VARCHAR2
4104 , p_Display_Format IN VARCHAR2
4105 , p_Display_Type IN VARCHAR2
4106 , p_Measure_Level IN VARCHAR2
4107 , p_Base_Column IN VARCHAR2
4108 , p_Graph_Position IN NUMBER
4109 , p_Graph_Style IN VARCHAR2
4110 , p_Aggregate_Function IN VARCHAR2
4111 , p_Display_Total IN VARCHAR2
4112 , p_Graph_Measure_Type IN VARCHAR2
4113 , p_Item_Style IN VARCHAR2
4114 , p_Grand_Total_Flag IN VARCHAR2
4115 , p_Nested_Region_Code IN VARCHAR2
4116 , p_Nested_Region_Application_Id IN NUMBER
4117 , x_return_status OUT NOCOPY VARCHAR2
4118 , x_msg_count OUT NOCOPY NUMBER
4119 , x_msg_data OUT NOCOPY VARCHAR2
4120 ) IS
4121
4122 l_region_item_rec BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type;
4123 l_region_item_table_measure BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
4124
4125
4126 BEGIN
4127
4128 l_region_item_rec.Attribute_Code := p_Attribute_Code;
4129 l_region_item_rec.Attribute_Application_Id := p_Attribute_Application_Id;
4130 l_region_item_rec.Display_Sequence := p_Display_Sequence;
4131 l_region_item_rec.Node_Display_Flag := p_Node_Display_Flag;
4132 l_region_item_rec.Required_Flag := p_Required_Flag;
4133 l_region_item_rec.Queryable_Flag := p_Queryable_Flag;
4134 l_region_item_rec.Display_Length := p_Display_Length;
4135 l_region_item_rec.Long_Label := p_Long_Label;
4136 l_region_item_rec.Sort_Sequence := NULL;
4137 l_region_item_rec.Initial_Sort_Sequence := NULL;
4138 l_region_item_rec.Sort_Direction := NULL;
4139 l_region_item_rec.Url := p_Url;
4140 l_region_item_rec.Attribute_Type := p_Attribute_Type;
4141 l_region_item_rec.Display_Format := p_Display_Format;
4142 l_region_item_rec.Display_Type := p_Display_Type;
4143 l_region_item_rec.Measure_Level := p_Measure_Level;
4144 l_region_item_rec.Base_Column := p_Base_Column;
4145 l_region_item_rec.Lov_Where_Clause := NULL;
4146 l_region_item_rec.Graph_Position := p_Graph_Position;
4147 l_region_item_rec.Graph_Style := NULL;
4148 l_region_item_rec.Lov_Table := NULL;
4149 l_region_item_rec.Aggregate_Function := p_Aggregate_Function;
4150 l_region_item_rec.Display_Total := p_Display_Total;
4151 l_region_item_rec.Variance := NULL;
4152 l_region_item_rec.Schedule := NULL;
4153 l_region_item_rec.Override_Hierarchy := NULL;
4154 l_region_item_rec.Additional_View_By := NULL;
4155 l_region_item_rec.Rolling_Lookup := NULL;
4156 l_region_item_rec.Operator_Lookup := NULL;
4157 l_region_item_rec.Dual_YAxis_Graphs := NULL;
4158 l_region_item_rec.Custom_View_Name := NULL;
4159 l_region_item_rec.Graph_Measure_Type := p_Graph_Measure_Type;
4160 l_region_item_rec.Hide_Target_In_Table := NULL;
4161 l_region_item_rec.Parameter_Render_Type := NULL;
4162 l_region_item_rec.Privilege := NULL;
4163 l_region_item_rec.Item_Style := p_Item_Style;
4164 l_region_item_rec.Grand_Total_Flag := p_Grand_Total_Flag;
4165 l_region_item_rec.Nested_Region_Code := p_Nested_Region_Code;
4166 l_region_item_rec.Nested_Region_Application_Id := p_Nested_Region_Application_Id;
4167
4168
4169 l_region_item_table_measure(1) := l_region_item_rec;
4170
4171 BIS_PMV_REGION_ITEMS_PVT.UPDATE_REGION_ITEMS(
4172 p_commit => p_commit
4173 ,p_region_code => p_Region_Code
4174 ,p_region_application_id => p_Region_Application_Id
4175 ,p_Region_Item_Tbl => l_region_item_table_measure
4176 ,x_return_status => x_return_status
4177 ,x_msg_count => x_msg_count
4178 ,x_msg_data => x_msg_data
4179 );
4180
4181
4182 END Update_Sim_Generic_Region_Item;
4183
4184
4185
4186 PROCEDURE Update_Addl_Ak_Region_Items(
4187 p_commit IN VARCHAR2 := FND_API.G_FALSE
4188 , p_Region_Code IN VARCHAR2
4189 , p_Region_Application_Id IN NUMBER
4190 , p_Display_Format IN VARCHAR2
4191 , p_Format_id IN NUMBER
4192 , p_Measure_Short_Name IN VARCHAR2
4193 , x_return_status OUT NOCOPY VARCHAR2
4194 , x_msg_count OUT NOCOPY NUMBER
4195 , x_msg_data OUT NOCOPY VARCHAR2
4196 ) IS
4197 l_Attribute_Code VARCHAR2(30);
4198 l_Compare_Column VARCHAR2(30);
4199 l_Display_Sequence NUMBER;
4200 l_Lookup_Value VARCHAR2(80);
4201 l_Colspan_Attr_Code VARCHAR2(30);
4202
4203 l_Format_Type VARCHAR2(3);
4204 l_Base_Column NUMBER;
4205
4206 CURSOR c_Upd_Change IS
4207 SELECT ATTRIBUTE_CODE
4208 FROM AK_REGION_ITEMS
4209 WHERE REGION_CODE = p_Region_Code
4210 AND ATTRIBUTE1 = BSC_BIS_KPI_CRUD_PUB.C_CHANGE_ATTRIBURE_TYPE;
4211
4212 CURSOR c_Upd_CompareTo IS
4213 SELECT ATTRIBUTE_CODE
4214 FROM AK_REGION_ITEMS
4215 WHERE REGION_CODE = p_Region_Code
4216 AND ATTRIBUTE1 = BSC_BIS_KPI_CRUD_PUB.C_COMPARE_ATTRIBURE_TYPE;
4217
4218 CURSOR c_Upd_GT_Actual IS
4219 SELECT ATTRIBUTE_CODE
4220 FROM AK_REGION_ITEMS
4221 WHERE REGION_CODE = p_Region_Code
4222 AND ATTRIBUTE1 = BSC_BIS_KPI_CRUD_PUB.C_GRAND_TOTAL_ATTRIBURE_TYPE
4223 AND ATTRIBUTE3 = p_Measure_Short_Name;
4224
4225 CURSOR c_Upd_GT_Compare IS
4226 SELECT ATTRIBUTE_CODE
4227 FROM AK_REGION_ITEMS
4228 WHERE REGION_CODE = p_Region_Code
4229 AND ATTRIBUTE1 = BSC_BIS_KPI_CRUD_PUB.C_GRAND_TOTAL_ATTRIBURE_TYPE
4230 AND ATTRIBUTE3 = l_Compare_Column;
4231
4232 BEGIN
4233
4234 FND_MSG_PUB.Initialize;
4235 x_return_status := FND_API.G_RET_STS_SUCCESS;
4236
4237
4238
4239 l_Colspan_Attr_Code := get_Unique_Attribute_Code (
4240 p_Region_Code => p_Region_Code
4241 , p_Measure_Short_Name => p_Measure_Short_Name
4242 , p_Append_String => BSC_BIS_KPI_CRUD_PUB.C_COLSPAN
4243 );
4244
4245 -- Update a Compare-To Region Item
4246 FOR cUComp IN c_Upd_CompareTo LOOP
4247
4248 l_Attribute_Code := cUComp.Attribute_Code;
4249 l_Compare_Column := l_Attribute_Code;
4250 l_Display_Sequence := Get_Sequence_Id_By_Region(
4251 p_Region_Code => p_Region_Code
4252 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4253 , p_Attribute_Code => l_Attribute_Code
4254 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4255 );
4256
4257 -- currently we do not have lookup for "Compare To"
4258 l_Lookup_Value := BSC_APPS.GET_LOOKUP_VALUE('BSC_UI_BACKEND', 'COMPARE_TO');
4259
4260 Update_Sim_Generic_Region_Item(
4261 p_commit => p_Commit
4262 , p_Region_Code => p_Region_Code
4263 , p_Region_Application_Id => p_Region_Application_Id
4264 , p_Attribute_Code => l_Attribute_Code
4265 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4266 , p_Display_Sequence => l_Display_Sequence
4267 , p_Node_Display_Flag => 'Y'
4268 , p_Required_Flag => ' '
4269 , p_Queryable_Flag => ' '
4270 , p_Display_Length => LENGTH(l_Lookup_Value)
4271 , p_Long_Label => l_Lookup_Value
4272 , p_Url => NULL
4273 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_COMPARE_ATTRIBURE_TYPE
4274 , p_Display_Format => p_Display_Format
4275 , p_Display_Type => BSC_BIS_KPI_CRUD_PUB.C_AUTOFACTOR_GROUP1
4276 , p_Measure_Level => p_Measure_Short_Name
4277 , p_Base_Column => NULL
4278 , p_Graph_Position => 1
4279 , p_Graph_Style => NULL
4280 , p_Aggregate_Function => NULL
4281 , p_Display_Total => 'Y'
4282 , p_Graph_Measure_Type => NULL
4283 , p_Item_Style => NULL
4284 , p_Grand_Total_Flag => 'Y'
4285 , p_Nested_Region_Code => NULL
4286 , p_Nested_Region_Application_Id => NULL
4287 , x_return_status => x_return_status
4288 , x_msg_count => x_msg_count
4289 , x_msg_data => x_msg_data
4290 );
4291
4292 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4293 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4294 END IF;
4295 END LOOP;
4296
4297
4298 -- Update a Change Region Item
4299 -- Bug#3688263, should not be using Column Spanning.
4300
4301 FOR cUChange IN c_Upd_Change LOOP
4302
4303 l_Attribute_Code := cUChange.Attribute_Code;
4304
4305 l_Display_Sequence := Get_Sequence_Id_By_Region(
4306 p_Region_Code => p_Region_Code
4307 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4308 , p_Attribute_Code => l_Attribute_Code
4309 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4310 );
4311
4312
4313 l_Lookup_Value := BSC_APPS.GET_LOOKUP_VALUE('BSC_UI_BACKEND', 'CHANGE');
4314
4315 -- Added for Bug#3919666
4316 l_Format_Type := BSC_BIS_KPI_CRUD_PUB.Get_Change_Disp_Type_By_Mask(p_Format_Id);
4317
4318 IF (l_Format_Type = BSC_BIS_KPI_CRUD_PUB.C_FORMAT_INTEGER) THEN
4319 l_Base_Column := BSC_BIS_KPI_CRUD_PUB.C_CHANGE_TYPE_INTEGER;
4320 ELSE
4321 l_Base_Column := BSC_BIS_KPI_CRUD_PUB.C_CHANGE_TYPE_PERCENT;
4322 END IF;
4323
4324
4325 Update_Sim_Generic_Region_Item(
4326 p_commit => p_Commit
4327 , p_Region_Code => p_Region_Code
4328 , p_Region_Application_Id => p_Region_Application_Id
4329 , p_Attribute_Code => l_Attribute_Code
4330 , p_Attribute_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4331 , p_Display_Sequence => l_Display_Sequence
4332 , p_Node_Display_Flag => 'Y'
4333 , p_Required_Flag => ' '
4334 , p_Queryable_Flag => ' '
4335 , p_Display_Length => LENGTH(l_Lookup_Value)
4336 , p_Long_Label => l_Lookup_Value
4337 , p_Url => NULL
4338 , p_Attribute_Type => BSC_BIS_KPI_CRUD_PUB.C_CHANGE_ATTRIBURE_TYPE
4339 , p_Display_Format => NULL
4340 , p_Display_Type => l_Format_Type
4341 , p_Measure_Level => p_Measure_Short_Name
4342 , p_Base_Column => l_Base_Column
4343 , p_Graph_Position => NULL
4344 , p_Graph_Style => NULL
4345 , p_Aggregate_Function => NULL
4346 , p_Display_Total => NULL
4347 , p_Graph_Measure_Type => NULL
4348 , p_Item_Style => NULL
4349 , p_Grand_Total_Flag => NULL
4350 , p_Nested_Region_Code => NULL
4351 , p_Nested_Region_Application_Id => NULL
4352 , x_return_status => x_return_status
4353 , x_msg_count => x_msg_count
4354 , x_msg_data => x_msg_data
4355 );
4356
4357 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4358 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4359 END IF;
4360 END LOOP;
4361
4362
4363
4364
4365 EXCEPTION
4366 WHEN FND_API.G_EXC_ERROR THEN
4367 IF (x_msg_data IS NULL) THEN
4368 FND_MSG_PUB.Count_And_Get
4369 ( p_encoded => FND_API.G_FALSE
4370 , p_count => x_msg_count
4371 , p_data => x_msg_data
4372 );
4373 END IF;
4374 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4375 IF (x_msg_data IS NULL) THEN
4376 FND_MSG_PUB.Count_And_Get
4377 ( p_encoded => FND_API.G_FALSE
4378 , p_count => x_msg_count
4379 , p_data => x_msg_data
4380 );
4381 END IF;
4382
4383 WHEN NO_DATA_FOUND THEN
4384 IF (x_msg_data IS NOT NULL) THEN
4385 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Addl_Ak_Region_Items ';
4386 ELSE
4387 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Addl_Ak_Region_Items ';
4388 END IF;
4389 WHEN OTHERS THEN
4390 IF (x_msg_data IS NOT NULL) THEN
4391 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Update_Addl_Ak_Region_Items ';
4392 ELSE
4393 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Update_Addl_Ak_Region_Items ';
4394 END IF;
4395 END Update_Addl_Ak_Region_Items;
4396
4397
4398 FUNCTION Get_Measure_Group_Id (
4399 p_Kpi_Portlet_Function_Name IN VARCHAR2,
4400 x_Return_Status OUT NOCOPY VARCHAR2,
4401 x_Msg_Data OUT NOCOPY VARCHAR2
4402
4403 ) RETURN NUMBER
4404 IS
4405
4406 l_Measure_Group_Id NUMBER;
4407 x_Measure_Group_Id NUMBER;
4408
4409 BEGIN
4410
4411 SELECT MEASURE_GROUP_ID
4412 INTO l_Measure_Group_Id
4413 FROM BSC_DB_MEASURE_GROUPS_VL
4414 WHERE UPPER(HELP) = UPPER(p_Kpi_Portlet_Function_Name);
4415
4416 -- reason: help is used as name, and it's not unique. We are trying to
4417 -- avoid the situation of having two same names with different cases.
4418
4419
4420 RETURN l_measure_group_id;
4421
4422
4423
4424 EXCEPTION
4425
4426 WHEN NO_DATA_FOUND THEN
4427
4428 -- insert a new row for the measure group
4429 BSC_DB_MEASURE_GROUPS_PKG.INSERT_ROW( x_Measure_Group_Id => x_Measure_Group_Id
4430 ,x_Help => p_Kpi_Portlet_Function_Name
4431 ,x_Short_Name => p_Kpi_Portlet_Function_Name);
4432
4433 RETURN x_measure_group_id;
4434
4435 WHEN OTHERS THEN
4436 x_return_status := FND_API.G_RET_STS_ERROR;
4437 x_msg_data := BSC_APPS.GET_MESSAGE( 'BSC_KPI_ETE_MEASURE_GROUP_ERR');
4438
4439 RETURN BSC_BIS_KPI_CRUD_PUB.c_measure_group_id_error;
4440
4441
4442 END get_measure_group_id;
4443
4444
4445 PROCEDURE is_Kpi_In_Production(
4446 p_Page_Function_Name IN VARCHAR2
4447 , x_Is_Kpi_In_Production OUT NOCOPY VARCHAR2
4448 ) IS
4449 l_Prototype_Flag NUMBER;
4450 l_Kpi_Id NUMBER;
4451
4452 CURSOR c_Production IS
4453 SELECT PROTOTYPE_FLAG
4454 FROM BSC_KPIS_B
4455 WHERE INDICATOR = l_Kpi_Id;
4456
4457 BEGIN
4458 l_Prototype_Flag := 3;
4459
4460 l_Kpi_Id := Get_Kpi_Id(p_Page_Function_Name);
4461
4462 FOR ckpi IN c_Production LOOP
4463 l_Prototype_Flag := ckpi.Prototype_Flag;
4464 END LOOP;
4465
4466 IF (l_Prototype_Flag = 0) THEN
4467 x_Is_Kpi_In_Production := 'T';
4468 ELSE
4469 x_Is_Kpi_In_Production := 'F';
4470 END IF;
4471 END is_Kpi_In_Production;
4472
4473
4474 /*
4475
4476 Create a dimension for Parameter Portlet and associates
4477 Dimension Object Properties with Dimensions.
4478
4479 */
4480
4481 PROCEDURE Create_Dimension(
4482 p_Commit IN VARCHAR2 := FND_API.G_FALSE
4483 ,p_Dim_Short_Name IN VARCHAR2
4484 ,p_Display_Name IN VARCHAR2
4485 ,p_Description IN VARCHAR2
4486 ,p_Dim_Objs_Record IN BSC_BIS_KPI_CRUD_PUB.BSC_VARCHAR2_TBL_TYPE
4487 ,p_Dim_Obj_Short_Names IN VARCHAR2
4488 ,p_Dim_Objects_Counter IN NUMBER
4489 ,p_Application_Id IN NUMBER
4490 ,p_hide IN VARCHAR2 := FND_API.G_FALSE
4491 ,x_Return_Status OUT NOCOPY VARCHAR2
4492 ,x_Msg_Count OUT NOCOPY NUMBER
4493 ,x_Msg_Data OUT NOCOPY VARCHAR2
4494 ) IS
4495 l_Index NUMBER;
4496 l_Total_Flag NUMBER;
4497 l_Comparison_Flag NUMBER;
4498 l_Where_Clause BSC_SYS_DIM_LEVELS_BY_GROUP.WHERE_CLAUSE%TYPE;
4499 l_Dim_Obj_Short_Name VARCHAR2(30);
4500
4501 CURSOR c_Get_Prop_Dim IS
4502 SELECT D.TOTAL_FLAG,
4503 D.COMPARISON_FLAG,
4504 D.WHERE_CLAUSE
4505 FROM BSC_SYS_DIM_GROUPS_TL A,
4506 BIS_DIMENSIONS B,
4507 BIS_LEVELS C,
4508 BSC_SYS_DIM_LEVELS_BY_GROUP D,
4509 BSC_SYS_DIM_LEVELS_B E
4510 WHERE C.SHORT_NAME = l_Dim_Obj_Short_Name
4511 AND C.DIMENSION_ID = B.DIMENSION_ID
4512 AND B.SHORT_NAME = A.SHORT_NAME
4513 AND A.LANGUAGE = USERENV('LANG')
4514 AND A.DIM_GROUP_ID = D.DIM_GROUP_ID
4515 AND E.SHORT_NAME = l_Dim_Obj_Short_Name
4516 AND E.DIM_LEVEL_ID = D.DIM_LEVEL_ID;
4517
4518 /* CURSOR c_temp IS
4519 select dim_group_id, dim_level_id, dim_level_index
4520 from bsc_sys_dim_levels_by_group
4521 where dim_group_id in
4522 (select dim_group_id
4523 from bsc_sys_dim_groups_vl
4524 where short_name = p_Dim_Short_Name);*/
4525
4526
4527 BEGIN
4528 SAVEPOINT KpiCrudCreateDimension;
4529 FND_MSG_PUB.Initialize;
4530 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
4531
4532
4533 -- Attempt to create a Dimension for the Parameter Portlet RegionCode.
4534 BSC_BIS_DIMENSION_PUB.Create_Dimension(
4535 p_commit => p_Commit
4536 ,p_dim_short_name => p_Dim_Short_Name
4537 ,p_display_name => p_Dim_Short_Name
4538 ,p_description => p_Dim_Short_Name
4539 ,p_dim_obj_short_names => p_Dim_Obj_Short_Names
4540 ,p_application_id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID -- BSC
4541 ,p_hide => p_hide
4542 ,x_return_status => x_Return_Status
4543 ,x_msg_count => x_Msg_Count
4544 ,x_msg_data => x_Msg_Data
4545 );
4546
4547 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4549 END IF;
4550
4551 IF (c_Get_Prop_Dim%ISOPEN) THEN
4552 CLOSE c_Get_Prop_Dim;
4553 END IF;
4554
4555 --DBMS_OUTPUT.PUT_LINE('(step 13 b)p_Dim_Objects_Counter - ' || p_Dim_Objects_Counter);
4556
4557 -- Assoicate Dimnension Object Properties within Dimension
4558 /* FOR l_Index in 1..p_Dim_Objects_Counter LOOP
4559 l_Dim_Obj_Short_Name := p_Dim_Objs_Record(l_Index);
4560
4561 --DBMS_OUTPUT.PUT_LINE('(step 13 b)l_Dim_Obj_Short_Name - ' || l_Dim_Obj_Short_Name);
4562
4563 OPEN c_Get_Prop_Dim;
4564 FETCH c_Get_Prop_Dim INTO l_Total_Flag, l_Comparison_Flag, l_Where_Clause;
4565
4566 IF(c_Get_Prop_Dim%NOTFOUND) THEN
4567 FND_MESSAGE.SET_NAME('BSC','BSC_DIP_ERR_GET_GROUP_ID');
4568 FND_MSG_PUB.ADD;
4569 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4570 END IF;
4571
4572 CLOSE c_Get_Prop_Dim;
4573
4574 -- ADRAO added condition for Bug#3770986
4575 IF (Is_Excluded_Dimension_Object(l_Dim_Obj_Short_Name) = FND_API.G_FALSE) THEN
4576 BSC_BIS_DIMENSION_PUB.Assign_Dimension_Object
4577 ( p_commit => FND_API.G_FALSE
4578 , p_dim_short_name => p_Dim_Short_Name
4579 , p_dim_obj_short_name => l_Dim_Obj_Short_Name
4580 , p_comp_flag => l_Comparison_Flag -- this value is acting like a flag
4581 , p_no_items => 0
4582 , p_parent_in_tot => 2
4583 , p_total_flag => l_Total_Flag
4584 , p_default_value => 'T'
4585 , p_time_stamp => NULL
4586 , p_where_clause => l_Where_Clause
4587 , x_return_status => x_return_status
4588 , x_msg_count => x_msg_count
4589 , x_msg_data => x_msg_data
4590 );
4591 --DBMS_OUTPUT.PUT_LINE('(step 13 c)l_Dim_Obj_Short_Name - ' || l_Dim_Obj_Short_Name);
4592 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4593 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4594 END IF;
4595 END IF;
4596 END LOOP;*/
4597
4598 /*for ctmp in C_Temp LOOP
4599 DBMS_OUTPUT.PUT_LINE (' dim_group_id - ' || ctmp.dim_group_id);
4600 DBMS_OUTPUT.PUT_LINE (' dim_level_id - ' || ctmp.dim_level_id);
4601 DBMS_OUTPUT.PUT_LINE (' dim_level_index - ' || ctmp.dim_level_index);
4602 END LOOP; */
4603
4604
4605 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
4606
4607 EXCEPTION
4608 WHEN FND_API.G_EXC_ERROR THEN
4609 ROLLBACK TO KpiCrudCreateDimension;
4610 IF (c_Get_Prop_Dim%ISOPEN) THEN
4611 CLOSE c_Get_Prop_Dim;
4612 END IF;
4613 IF (x_msg_data IS NULL) THEN
4614 FND_MSG_PUB.Count_And_Get
4615 ( p_encoded => FND_API.G_FALSE
4616 , p_count => x_msg_count
4617 , p_data => x_msg_data
4618 );
4619 END IF;
4620 x_return_status := FND_API.G_RET_STS_ERROR;
4621 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4622 ROLLBACK TO KpiCrudCreateDimension;
4623 IF (c_Get_Prop_Dim%ISOPEN) THEN
4624 CLOSE c_Get_Prop_Dim;
4625 END IF;
4626 IF (x_msg_data IS NULL) THEN
4627 FND_MSG_PUB.Count_And_Get
4628 ( p_encoded => FND_API.G_FALSE
4629 , p_count => x_msg_count
4630 , p_data => x_msg_data
4631 );
4632 END IF;
4633 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4634 WHEN NO_DATA_FOUND THEN
4635 ROLLBACK TO KpiCrudCreateDimension;
4636 IF (c_Get_Prop_Dim%ISOPEN) THEN
4637 CLOSE c_Get_Prop_Dim;
4638 END IF;
4639 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4640 IF (x_msg_data IS NOT NULL) THEN
4641 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Dimension ';
4642 ELSE
4643 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Dimension ';
4644 END IF;
4645 WHEN OTHERS THEN
4646 ROLLBACK TO KpiCrudCreateDimension;
4647 IF (c_Get_Prop_Dim%ISOPEN) THEN
4648 CLOSE c_Get_Prop_Dim;
4649 END IF;
4650 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4651 IF (x_msg_data IS NOT NULL) THEN
4652 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Dimension ';
4653 ELSE
4654 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Dimension ';
4655 END IF;
4656 END Create_Dimension;
4657
4658
4659 /*
4660 Creates all the AK Metadata Required by an KPI, Analysis Options combination.
4661 */
4662
4663 PROCEDURE Create_Ak_Metadata(
4664 p_Commit IN VARCHAR2 := FND_API.G_FALSE
4665 , p_Create_Region_Per_AO IN VARCHAR2 := FND_API.G_TRUE
4666 , p_Kpi_Id IN NUMBER
4667 , p_Analysis_Option_Id IN NUMBER
4668 , p_Dim_Set_Id IN NUMBER
4669 , p_Measure_Short_Name IN VARCHAR2
4670 , p_Measure_Name IN VARCHAR2
4671 , p_Measure_Description IN VARCHAR2
4672 , p_User_Portlet_Name IN VARCHAR2
4673 , p_Dataset_Format_Id IN NUMBER
4674 , p_Application_Id IN NUMBER
4675 , p_Disable_View_By IN VARCHAR2
4676 , p_Param_Portlet_Region_Code IN VARCHAR2
4677 , x_Return_Status OUT NOCOPY VARCHAR2
4678 , x_Msg_Count OUT NOCOPY NUMBER
4679 , x_Msg_Data OUT NOCOPY VARCHAR2
4680 ) IS
4681 l_fid NUMBER;
4682 l_rowid ROWID;
4683 l_Form_Parameters VARCHAR2(1000);
4684 l_Max_Seq_Number NUMBER;
4685 l_Sequence NUMBER := 10;
4686 l_Region_Code VARCHAR2(80);
4687 l_Count NUMBER;
4688 l_Function_Name VARCHAR2(80);
4689 BEGIN
4690 SAVEPOINT CreateAkMetadata;
4691 FND_MSG_PUB.Initialize;
4692
4693 -- Initialize Procedure Variables.
4694 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
4695
4696 Create_Region_By_AO (
4697 p_Commit => p_Commit
4698 , p_Kpi_Id => p_Kpi_Id
4699 , p_Analysis_Option_Id => p_Analysis_Option_Id
4700 , p_Dim_Set_Id => p_Dim_Set_Id
4701 , p_Region_Name => p_Measure_Name
4702 , p_Region_Description => p_Measure_Description
4703 , p_Region_Application_Id => p_Application_Id
4704 , p_Disable_View_By => p_Disable_View_By
4705 , x_return_status => x_Return_Status
4706 , x_msg_count => x_Msg_Count
4707 , x_msg_data => x_Msg_Data
4708 );
4709 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4710 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4711 END IF;
4712
4713
4714 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(p_Kpi_Id, p_Analysis_Option_Id);
4715 --DBMS_OUTPUT.PUT_LINE('Region Code - ' || l_Region_Code);
4716
4717 -- Create a Nested Region Item for a Parameter Portlet Region.
4718 l_Max_Seq_Number := Find_Max_Seq_Of_Region_Item(l_Region_Code);
4719 l_Max_Seq_Number := l_Max_Seq_Number + 10;
4720
4721
4722 -- Passed p_measure_name instead of Page Name for Measure Long Label AK_REGION_ITEMS_VL
4723 -- for Bug#3802192
4724 -- Create Compare TO and Change Region Items
4725 Create_Addl_Ak_Region_Items(
4726 p_commit => p_Commit
4727 , p_Region_Code => l_Region_Code
4728 , p_Region_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
4729 , p_Display_Sequence => l_Max_Seq_Number
4730 , p_Display_Format => Get_Format_Mask(p_Dataset_Format_Id)
4731 , p_Format_Id => p_Dataset_Format_Id
4732 , p_Measure_Short_Name => p_Measure_Short_Name
4733 , p_Param_Portlet_Region_Code => p_Param_Portlet_Region_Code
4734 , p_Analysis_Option_Name => p_Measure_Name
4735 , p_Kpi_Id => p_Kpi_Id
4736 , x_return_status => x_Return_Status
4737 , x_msg_count => x_Msg_Count
4738 , x_msg_data => x_Msg_Data
4739 );
4740
4741 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4742 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4743 END IF;
4744 --DBMS_OUTPUT.PUT_LINE('Outside Create_Measure_Region_Item ' );
4745
4746 -- udpate the actual data source column in
4747 -- bis_indicators as the api validate the akregion
4748
4749 Update_Actual_Data_Source(
4750 p_kpi_id => p_Kpi_Id
4751 , p_dataset_id => Get_Dataset_Id(p_Measure_Short_Name)
4752 , p_measure_short_name => p_Measure_Short_Name
4753 , p_Create_Region_Per_AO => p_Create_Region_Per_AO
4754 );
4755
4756 --DBMS_OUTPUT.PUT_LINE('Outside Update_Actual_Data_Source ' );
4757 -- Create a new Form Function
4758 -- Need to modularize.
4759
4760
4761 SELECT FND_FORM_FUNCTIONS_S.nextval
4762 INTO l_fid
4763 FROM SYS.DUAL;
4764
4765 l_Form_Parameters := 'pForceRun=Y' || '&' || 'pRegionCode=' || l_Region_Code
4766 || '&' || 'pFunctionName=' || l_Region_Code
4767 || '&' || 'pParameters=pParamIds@Y';
4768
4769 --DBMS_OUTPUT.PUT_LINE('Creating Form Function ' );
4770
4771 FND_FORM_FUNCTIONS_PKG.INSERT_ROW
4772 ( X_ROWID => l_Rowid
4773 ,X_FUNCTION_ID => l_Fid
4774 ,X_WEB_HOST_NAME => ''
4775 ,X_WEB_AGENT_NAME => ''
4776 ,X_WEB_HTML_CALL => BSC_BIS_KPI_CRUD_PUB.c_bisreportpg
4777 ,X_WEB_ENCRYPT_PARAMETERS => 'N'
4778 ,X_WEB_SECURED => 'N'
4779 ,X_WEB_ICON => ''
4780 ,X_OBJECT_ID => NULL
4781 ,X_REGION_APPLICATION_ID => NULL
4782 ,X_REGION_CODE => ''
4783 ,X_FUNCTION_NAME => l_Region_Code
4784 ,X_APPLICATION_ID => NULL
4785 ,X_FORM_ID => NULL
4786 ,X_PARAMETERS => l_Form_Parameters
4787 ,X_TYPE => 'JSP'
4788 ,X_USER_FUNCTION_NAME => p_Measure_Name
4789 ,X_DESCRIPTION => p_Measure_Description
4790 ,X_CREATION_DATE => SYSDATE
4791 ,X_CREATED_BY => FND_GLOBAL.USER_ID
4792 ,X_LAST_UPDATE_DATE => SYSDATE
4793 ,X_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
4794 ,X_LAST_UPDATE_LOGIN => FND_GLOBAL.LOGIN_ID
4795 ,X_MAINTENANCE_MODE_SUPPORT => 'NONE'
4796 ,X_CONTEXT_DEPENDENCE => 'RESP'
4797 );
4798
4799 EXCEPTION
4800 WHEN FND_API.G_EXC_ERROR THEN
4801 ROLLBACK TO CreateAkMetadata;
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 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4811 ROLLBACK TO CreateAkMetadata;
4812 IF (x_msg_data IS NULL) THEN
4813 FND_MSG_PUB.Count_And_Get
4814 ( p_encoded => FND_API.G_FALSE
4815 , p_count => x_msg_count
4816 , p_data => x_msg_data
4817 );
4818 END IF;
4819 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4820 WHEN NO_DATA_FOUND THEN
4821 ROLLBACK TO CreateAkMetadata;
4822 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4823 IF (x_msg_data IS NOT NULL) THEN
4824 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata ';
4825 ELSE
4826 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata ';
4827 END IF;
4828 WHEN OTHERS THEN
4829 ROLLBACK TO CreateAkMetadata;
4830 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4831 IF (x_msg_data IS NOT NULL) THEN
4832 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata ';
4833 ELSE
4834 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata ';
4835 END IF;
4836
4837 END Create_Ak_Metadata;
4838
4839
4840 -- Creates all the Required BSC and BIS AK Metadata
4841
4842 /*
4843
4844 */
4845
4846 PROCEDURE Create_Bsc_Bis_Metadata(
4847 p_Commit IN VARCHAR2
4848 , p_Create_Region_Per_Ao IN VARCHAR2
4849 , p_Param_Portlet_Region_Code IN VARCHAR2
4850 , p_Page_Function_Name IN VARCHAR2
4851 , p_Kpi_Portlet_Function_Name IN VARCHAR2
4852 , p_Region_Function_Name IN VARCHAR2 -- added for AGRD
4853 , p_Region_User_Function_Name IN VARCHAR2 -- added for AGRD
4854 , p_Dim_Obj_Short_Names IN VARCHAR2 -- added for AGRD
4855 , p_Force_Create_Dim IN VARCHAR2 -- added for AGRD
4856 , p_Measure_Short_Name IN VARCHAR2 -- added for AGRD
4857 , p_Responsibility_Id IN NUMBER
4858 , p_Measure_Name IN VARCHAR2
4859 , p_Measure_Description IN VARCHAR2
4860 , p_Dataset_Format_Id IN NUMBER
4861 , p_Dataset_Autoscale_Flag IN NUMBER
4862 , p_Measure_Operation IN VARCHAR2
4863 , p_Measure_Increase_In_Measure IN VARCHAR2
4864 , p_Measure_Obsolete IN VARCHAR2 := FND_API.G_FALSE
4865 , p_Type IN VARCHAR2-- This is used for weighted kpis,This can take values CDS_SCORE,CDS_PERF or Null
4866 , p_Measure_Random_Style IN NUMBER
4867 , p_Measure_Min_Act_Value IN NUMBER
4868 , p_Measure_Max_Act_Value IN NUMBER
4869 , p_Measure_Type IN NUMBER
4870 , p_Measure_App_Id IN NUMBER := NULL
4871 , p_Func_Area_Short_Name IN VARCHAR2 := NULL
4872 , p_Obj_Grp_Id IN NUMBER --Added for Simulation Designer
4873 , p_Obj_Tab_Id IN NUMBER --Added for Simulation Designer
4874 , p_Obj_Type IN NUMBER --Added for Simulation Designer
4875 , x_Measure_Short_Name OUT NOCOPY VARCHAR2
4876 , x_Kpi_Id OUT NOCOPY NUMBER
4877 , x_Return_Status OUT NOCOPY VARCHAR2
4878 , x_Msg_Count OUT NOCOPY NUMBER
4879 , x_Msg_Data OUT NOCOPY VARCHAR2
4880 ) IS
4881 l_Commit VARCHAR2(2);
4882 x_Non_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
4883 x_Non_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
4884 x_Non_Time_Dim_Obj_Short_Names VARCHAR2(2056);
4885 x_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
4886 x_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
4887 x_Time_Dim_Obj_Short_Names VARCHAR2(2056);
4888 x_All_Dim_Group_Ids BSC_NUMBER_TBL_TYPE;
4889 x_Non_Time_Counter NUMBER;
4890 x_Time_Counter NUMBER;
4891 l_Dataset_Source BSC_SYS_MEASURES.SOURCE%TYPE;
4892 l_Dataset_Id NUMBER;
4893 l_Does_Dim_Group_Exist BOOLEAN;
4894 l_Does_Kpi_Exist BOOLEAN;
4895 l_Indicator NUMBER;
4896 l_Tab_Id NUMBER;
4897 l_Kpi_Group_Id NUMBER;
4898 l_Kpi_Id NUMBER;
4899 l_Real_Kpi_Name BSC_SYS_DATASETS_TL.NAME%TYPE;
4900 l_Fid NUMBER;
4901 l_Rowid ROWID;
4902 l_Form_Parameters FND_FORM_FUNCTIONS.PARAMETERS%TYPE;
4903 l_Max_Seq_Number NUMBER;
4904 l_Sequence NUMBER;
4905 l_Report_Region_Rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
4906 l_User_Page_Report_Name FND_FORM_FUNCTIONS_VL.USER_FUNCTION_NAME%TYPE;
4907 l_User_Portlet_Name FND_FORM_FUNCTIONS_VL.USER_FUNCTION_NAME%TYPE;
4908 l_Analysis_Option NUMBER;
4909 l_Measure_Function_Name BIS_INDICATORS.FUNCTION_NAME%TYPE;
4910 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
4911 l_Count NUMBER;
4912 l_Function_Name FND_FORM_FUNCTIONS_VL.USER_FUNCTION_NAME%TYPE;
4913 l_Measure_Group_Id NUMBER;
4914
4915 l_Measure_Short_Name BSC_SYS_MEASURES.SHORT_NAME%TYPE;
4916
4917 --added for bug#4057761
4918 l_tab_name BSC_TABS_TL.NAME%TYPE;
4919 l_group_name BSC_TAB_IND_GROUPS_TL.NAME%TYPE;
4920
4921 -- added for AGRD
4922 l_Is_From_Report_Designer BOOLEAN;
4923 l_Key_Short_Name FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE;
4924 l_Anal_Opt_Rec APPS.BSC_ANALYSIS_OPTION_PUB.BSC_OPTION_REC_TYPE;
4925 x_Anal_Opt_Rec APPS.BSC_ANALYSIS_OPTION_PUB.BSC_OPTION_REC_TYPE;
4926 l_Dimension_Short_Name BSC_SYS_DIM_GROUPS_TL.SHORT_NAME%TYPE;
4927 l_Is_XTD_Enabled VARCHAR2(1);
4928 l_Bsc_Measure_Id NUMBER;
4929 l_Measure_Source BSC_SYS_MEASURES.SOURCE%TYPE;
4930 l_Returned_Kpi_Id NUMBER;
4931 l_Actual_Data_Source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
4932 l_Actual_Data_Source_Type BIS_INDICATORS.ACTUAL_DATA_SOURCE_TYPE%TYPE;
4933 l_Count1 NUMBER;
4934 l_attribute_code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
4935 l_Comparison_Source BIS_INDICATORS.COMPARISON_SOURCE%TYPE;
4936 l_Compare_Attribute_Code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
4937 l_as_of_date VARCHAR2(1);
4938
4939 l_obj_type NUMBER;
4940
4941 BEGIN
4942 SAVEPOINT CreateBscBisMetadata;
4943
4944 FND_MSG_PUB.Initialize;
4945
4946 -- Initialize Procedure Variables.
4947 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
4948
4949
4950
4951
4952 -- procedure block to check if the updatable measure being passed is of AG type or not,
4953 -- if not AG type, then the procedure just roll back with staus "S"
4954 BEGIN
4955 IF (p_Measure_Short_Name IS NOT NULL) THEN
4956 SELECT
4957 M.SOURCE
4958 INTO
4959 l_Measure_Source
4960 FROM
4961 bsc_sys_measures m,
4962 bsc_sys_datasets_vl d,
4963 bis_indicators i
4964 WHERE
4965 i.dataset_id = d.dataset_id AND
4966 d.measure_id1 = m.measure_id AND
4967 i.short_name = p_Measure_Short_Name;
4968
4969
4970 --DBMS_OUTPUT.PUT_LINE('STAGE 1A - l_Measure_Source - ' || l_Measure_Source);
4971 --DBMS_OUTPUT.PUT_LINE('STAGE 1A - p_Measure_Short_Name - ' || p_Measure_Short_Name);
4972
4973 /*IF (NVL(l_Measure_Source, 'PMF') <> BSC_BIS_MEASURE_PUB.c_BSC) THEN
4974 ROLLBACK TO CreateBscBisMetadata;
4975 RETURN;
4976 END IF;*/
4977
4978 END IF;
4979 EXCEPTION
4980 WHEN NO_DATA_FOUND THEN
4981 NULL;
4982 WHEN OTHERS THEN
4983 ROLLBACK TO CreateBscBisMetadata;
4984 RETURN;
4985 END;
4986
4987 -- Initialize if the code is coming from report designer
4988
4989 --DBMS_OUTPUT.PUT_LINE('STAGE 1');
4990
4991 IF (p_Region_Function_Name IS NOT NULL) THEN
4992 l_Is_From_Report_Designer := TRUE;
4993 l_Key_Short_Name := p_Region_Function_Name;
4994 ELSE
4995 l_Is_From_Report_Designer := FALSE;
4996 l_Key_Short_Name := p_Page_Function_Name;
4997 END IF;
4998
4999 -- This is fix for Bug#4327887
5000 -- Check if AS_OF_DATE is enabled at the Paramter Portlet
5001 IF ((is_XTD_Enabled(p_Param_Portlet_Region_Code) = FND_API.G_TRUE) OR (l_Is_From_Report_Designer)) THEN
5002 -- Check if Advance Summarization Profile > 1, else throw and error.
5003 IF (BSC_UTILITY.Is_Adv_Summarization_Enabled = FND_API.G_FALSE) THEN
5004 FND_MESSAGE.SET_NAME('BSC','BSC_ENABLE_ADV_SUMMARIZATION');
5005 FND_MSG_PUB.ADD;
5006 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5007 END IF;
5008 END IF;
5009
5010 x_Non_Time_Dim_Obj_Short_Names := NULL;
5011 x_Time_Dim_Obj_Short_Names := NULL;
5012 l_Dataset_Source := NULL;
5013 l_Sequence := 10;
5014 l_Dataset_Source := BSC_BIS_MEASURE_PUB.c_BSC;
5015 l_Measure_Short_Name := NULL;
5016 x_All_Dim_Group_Ids(1) := NULL;
5017 x_All_Dim_Group_Ids(2) := NULL;
5018 x_All_Dim_Group_Ids(3) := NULL;
5019 x_All_Dim_Group_Ids(4) := NULL;
5020 x_All_Dim_Group_Ids(5) := NULL;
5021 x_All_Dim_Group_Ids(6) := NULL;
5022 x_All_Dim_Group_Ids(7) := NULL;
5023
5024
5025 IF (l_Is_From_Report_Designer = FALSE) THEN
5026 -- Get the Dimenension Object Info from the Parameter Portler Region
5027 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code(
5028 p_Param_Portlet_Region_Code => p_Param_Portlet_Region_Code
5029 , x_Non_Time_Dimension_Groups => x_Non_Time_Dimension_Groups
5030 , x_Non_Time_Dimension_Objects => x_Non_Time_Dimension_Objects
5031 , x_Non_Time_Dim_Obj_Short_Names => x_Non_Time_Dim_Obj_Short_Names
5032 , x_All_Dim_Group_Ids => x_All_Dim_Group_Ids
5033 , x_Non_Time_Counter => x_Non_Time_Counter
5034 , x_Time_Dimension_Groups => x_Time_Dimension_Groups
5035 , x_Time_Dimension_Objects => x_Time_Dimension_Objects
5036 , x_Time_Dim_Obj_Short_Names => x_Time_Dim_Obj_Short_Names
5037 , x_Time_Counter => x_Time_Counter
5038 , x_Msg_Data => x_Msg_Data
5039 );
5040 IF (x_msg_data IS NOT NULL) THEN
5041 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5042 END IF;
5043 ELSE
5044 IF (p_Dim_Obj_Short_Names IS NOT NULL) THEN
5045 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet(
5046 p_Dimension_Info => p_Dim_Obj_Short_Names
5047 ,x_non_time_dimension_groups => x_Non_Time_Dimension_Groups
5048 ,x_non_time_dimension_objects => x_Non_Time_Dimension_Objects
5049 ,x_non_time_dim_obj_short_names => x_Non_Time_Dim_Obj_Short_Names
5050 ,x_all_dim_group_ids => x_All_Dim_Group_Ids
5051 ,x_non_time_counter => x_Non_Time_Counter
5052 ,x_time_dimension_groups => x_Time_Dimension_Groups
5053 ,x_time_dimension_objects => x_Time_Dimension_Objects
5054 ,x_time_dim_obj_short_names => x_Time_Dim_Obj_Short_Names
5055 ,x_time_counter => x_Time_Counter
5056 ,x_msg_data => x_Msg_Data
5057 ,x_is_as_of_date => l_as_of_date
5058 );
5059 END IF;
5060 END IF;
5061
5062 --DBMS_OUTPUT.PUT_LINE('STAGE 2');
5063
5064 -- Get the User DBI Page name to be populated into Scorecards (a.k.a Tabs)
5065 l_User_Page_Report_Name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_User_Function_Name(l_Key_Short_Name);
5066
5067 IF(p_Obj_Tab_Id IS NOT NULL) THEN
5068 l_tab_name := Get_Tab_Name(p_Obj_Tab_Id);
5069 ELSE
5070 l_tab_name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Unqiue_Tab_Name(l_User_Page_Report_Name);
5071 END IF;
5072
5073 IF(p_Obj_Grp_Id IS NOT NULL)THEN
5074 l_group_name := Get_Objective_Group_Name(p_Obj_Grp_Id);
5075 ELSE
5076 l_group_name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Unqiue_Tab_Group_Name(l_User_Page_Report_Name);
5077 END IF;
5078 -- need to verify why this will be used in future.
5079 l_User_Portlet_Name := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_User_Function_Name(p_Kpi_Portlet_Function_Name);
5080
5081 IF (l_Is_From_Report_Designer = TRUE) THEN
5082 l_Measure_Group_Id := BSC_BIS_KPI_CRUD_PUB.C_DEFAULT_MEASURE_GROUP_ID;
5083 ELSE
5084 -- Get the Source Group ID to be populated to BSC_DB_MEASURE_COLS_VL
5085 l_Measure_Group_Id := Get_Measure_Group_Id(l_Key_Short_Name, x_Return_Status, x_Msg_Data);
5086 IF (x_Msg_Data IS NOT NULL) THEN
5087 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5088 END IF;
5089 END IF;
5090
5091
5092 --DBMS_OUTPUT.PUT_LINE('STAGE 3 - ' || l_Key_Short_Name);
5093
5094 -- Get the existance of Dimension and KPI (a.k.a Indicator, Objective)
5095 l_Does_Kpi_Exist := Does_KPI_Exist(l_Key_Short_Name);
5096 --DBMS_OUTPUT.PUT_LINE('STAGE 3 - ' || l_Key_Short_Name);
5097
5098
5099 IF (l_Does_Kpi_Exist = FALSE) THEN
5100 -- Create a new Tab, aka Scorecard
5101
5102 --DBMS_OUTPUT.PUT_LINE('STAGE 3A - ');
5103 IF(p_Obj_Tab_Id IS NULL ) THEN
5104
5105 l_Tab_Id := Get_Tab_Id(l_Key_Short_Name);
5106
5107 --DBMS_OUTPUT.PUT_LINE('STAGE 4 - ' ||l_Tab_Id);
5108
5109 IF (l_Tab_Id = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY AND p_Obj_Type = BSC_BIS_KPI_CRUD_PUB.C_MULTI_BAR_INDICATOR) THEN
5110 BSC_PMF_UI_WRAPPER.Create_Tab(
5111 p_Commit => p_Commit
5112 ,p_Responsibility_Id => p_Responsibility_Id
5113 ,p_Parent_Tab_Id => NULL
5114 ,p_Owner_Id => NULL
5115 ,p_Short_Name => l_Key_Short_Name
5116 ,x_Tab_Id => l_Tab_Id
5117 ,x_Return_Status => x_Return_Status
5118 ,x_Msg_Count => x_Msg_Count
5119 ,x_Msg_Data => x_Msg_Data
5120 ,p_Tab_Name => l_tab_name
5121 ,p_Tab_Help => l_User_Page_Report_Name
5122 ,p_Tab_Info => l_User_Page_Report_Name
5123 );
5124 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5125 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5126 END IF;
5127 END IF;
5128 ELSE
5129 l_Tab_Id :=p_Obj_Tab_Id;
5130 END IF;
5131
5132 IF(p_Obj_Grp_Id IS NULL)THEN
5133
5134 l_Kpi_Group_Id := Get_Group_Id(l_Key_Short_Name);
5135 --DBMS_OUTPUT.PUT_LINE('STAGE 5 - ' ||l_Kpi_Group_Id);
5136
5137 IF (l_Kpi_Group_Id = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
5138 -- Create a new KPI Group, aka Objective Group
5139 BSC_PMF_UI_WRAPPER.Create_Kpi_Group(
5140 p_Commit => p_Commit
5141 ,p_Tab_Id => NULL
5142 ,p_Kpi_Group_Id => NULL
5143 ,p_Kpi_Group_Short_Name => l_Key_Short_Name
5144 ,p_Kpi_Group_Name => l_group_name
5145 ,p_Kpi_Group_Help => l_User_Page_Report_Name
5146 ,x_Kpi_Group_Id => l_Kpi_Group_Id
5147 ,x_Return_Status => x_Return_Status
5148 ,x_Msg_Count => x_Msg_Count
5149 ,x_Msg_Data => x_Msg_Data
5150 );
5151 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5152 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5153 END IF;
5154 END IF;
5155 ELSE
5156 l_Kpi_Group_Id := p_Obj_Grp_Id;
5157 END IF;
5158
5159 --DBMS_OUTPUT.PUT_LINE('STAGE 5A - ' ||l_Kpi_Group_Id);
5160
5161 -- Create a new KPI, aka Objective
5162 -- Bug#4064587 - l_Kpi_Id will exist till the end.
5163
5164 l_obj_type := p_Obj_Type;
5165
5166
5167
5168 BSC_PMF_UI_WRAPPER.Create_Kpi(
5169 p_Commit => p_Commit
5170 ,p_Group_Id => l_Kpi_Group_Id
5171 ,p_Responsibility_Id => p_Responsibility_Id
5172 ,p_Kpi_Name => l_User_Page_Report_Name
5173 ,p_Kpi_Help => l_User_Page_Report_Name
5174 ,p_Kpi_Short_Name => l_Key_Short_Name
5175 ,p_Kpi_Indicator_Type => l_obj_type
5176 ,x_Kpi_Id => l_Kpi_Id
5177 ,x_Return_Status => x_Return_Status
5178 ,x_Msg_Count => x_Msg_Count
5179 ,x_Msg_Data => x_Msg_Data
5180 );
5181 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5182 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5183 END IF;
5184
5185
5186
5187 --DBMS_OUTPUT.PUT_LINE('STAGE 6 - ' ||l_Kpi_Id);
5188 -- API to enable XTD, iViewer will show XTD Checked default.
5189 -- Enable XTD if enabled at the Parameter Portlet level only.
5190 -- added condition for AGRD
5191 IF (l_Is_From_Report_Designer = FALSE) THEN
5192 IF (is_XTD_Enabled(p_Param_Portlet_Region_Code) = FND_API.G_TRUE) THEN
5193
5194 BSC_BIS_KPI_CRUD_PUB.Enable_Kpi_Calculation (
5195 p_Commit => p_Commit
5196 , p_Kpi_Id => l_Kpi_Id
5197 , p_Calculation_Id => BSC_BIS_KPI_CRUD_PUB.C_CALC_XTD
5198 , p_Default_Checked => BSC_BIS_KPI_CRUD_PUB.C_ENABLE_CALC_KPI
5199 , x_Return_Status => x_Return_Status
5200 , x_Msg_Count => x_Msg_Count
5201 , x_Msg_Data => x_Msg_Data
5202 );
5203 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5204 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5205 END IF;
5206 END IF;
5207 END IF;
5208
5209 --DBMS_OUTPUT.PUT_LINE('STAGE 7');
5210 --For simulation Tree Enhancement tabid is not mandatory.
5211 --So in that case we don't need to call the api which creates the
5212 -- association between objective and tab
5213 -- only if tab_id is valid then only call this api
5214
5215 --DBMS_OUTPUT.PUT_LINE('l_Tab_Id - ' ||l_Tab_Id);
5216
5217
5218
5219 IF(l_Tab_Id <> BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
5220
5221 --DBMS_OUTPUT.PUT_LINE('INSIDE l_Kpi_Group_Id - ' ||l_Kpi_Group_Id);
5222 IF(l_obj_type = BSC_BIS_KPI_CRUD_PUB.C_SIMULATION_INDICATOR) THEN
5223
5224 BSC_PMF_UI_WRAPPER.Assign_KPI(
5225 p_Commit => FND_API.G_FALSE
5226 ,p_kpi_id => l_kpi_id
5227 ,p_tab_id => l_Tab_Id
5228 ,x_return_status => x_return_status
5229 ,x_msg_count => x_msg_count
5230 ,x_msg_data => x_msg_data
5231 );
5232
5233 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5234 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5235 END IF;
5236
5237 ELSE
5238 BSC_PMF_UI_WRAPPER.Assign_KPI_Group(
5239 p_Commit => p_Commit
5240 ,p_Kpi_Group_Id => l_Kpi_Group_Id
5241 ,p_Tab_Id => l_Tab_Id
5242 ,x_Return_Status => x_Return_Status
5243 ,x_Msg_Count => x_Msg_Count
5244 ,x_Msg_Data => x_Msg_Data
5245 );
5246 END IF;
5247 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5248 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5249 END IF;
5250 END IF;
5251 END IF;
5252
5253
5254 IF(p_Obj_Type = BSC_BIS_KPI_CRUD_PUB.C_SIMULATION_INDICATOR AND p_Obj_Tab_Id IS NOT NULL) THEN
5255
5256 --Check if the indicator is attahced to the scorecard or not
5257 --if not then attach it
5258 --
5259
5260 l_kpi_id := Get_Kpi_Id(l_Key_Short_Name);
5261
5262 IF(l_kpi_id <> -1000 AND Is_Assign_To_Tab(l_kpi_id,p_Obj_Tab_Id)=FND_API.G_FALSE)THEN
5263 BSC_PMF_UI_WRAPPER.Assign_KPI(
5264 p_Commit => FND_API.G_FALSE
5265 ,p_kpi_id => l_kpi_id
5266 ,p_tab_id => p_Obj_Tab_Id
5267 ,x_return_status => x_return_status
5268 ,x_msg_count => x_msg_count
5269 ,x_msg_data => x_msg_data
5270 );
5271 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5273 END IF;
5274 END IF;
5275 END IF;
5276
5277
5278 --DBMS_OUTPUT.PUT_LINE('STAGE 7A');
5279
5280 -- Create a BSC and BIS Measure (aka KPI)
5281 -- the KPI Should always be created for the current page.
5282 l_Kpi_Id := Get_Kpi_Id(l_Key_Short_Name);
5283
5284 --DBMS_OUTPUT.PUT_LINE('STAGE 7B - ' || l_Kpi_Id);
5285 --DBMS_OUTPUT.PUT_LINE('STAGE 7B - ' || l_Kpi_Id);
5286
5287 -- Check if measure exists
5288 -- If measure exists
5289 -- ) Update Measure Properties
5290 -- ) Update Objective Analysis Measures metadata.
5291 -- Create normal measure.
5292 SELECT COUNT(1) INTO l_Count
5293 FROM BIS_INDICATORS
5294 WHERE SHORT_NAME = p_measure_short_name;
5295
5296 l_Region_Code := BIS_PMV_UTIL.GetReportRegion(p_Region_Function_Name);
5297 l_attribute_code := BSC_BIS_KPI_CRUD_PUB.Get_Attribute_Code_For_Measure(l_Region_Code,p_Measure_Short_Name);
5298 IF (l_Count <> 0 AND l_Is_From_Report_Designer = TRUE) THEN
5299 l_Returned_Kpi_Id := BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_AGKpi(p_Measure_Short_Name);
5300
5301
5302
5303 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(p_Measure_Short_Name);
5304
5305 -- the Update_Measure API expects Measure_Id1 to be present as a non-Null parameter.
5306 SELECT
5307 m.measure_id
5308 INTO
5309 l_Bsc_Measure_Id
5310 FROM
5311 bsc_sys_measures m,
5312 bsc_sys_datasets_vl d,
5313 bis_indicators i
5314 WHERE
5315 i.dataset_id = d.dataset_id AND
5316 d.measure_id1 = m.measure_id AND
5317 i.short_name = p_measure_short_name;
5318 --DBMS_OUTPUT.PUT_LINE('STAGE 7C - ' || l_Dataset_Id);
5319 --DBMS_OUTPUT.PUT_LINE('STAGE 7D - ' || BSC_BIS_MEASURE_PUB.c_BSC);
5320 --DBMS_OUTPUT.PUT_LINE('STAGE 7E - ' || l_Bsc_Measure_Id);
5321 --DBMS_OUTPUT.PUT_LINE('STAGE 7F - ' || p_Region_Function_Name || '.' || p_Measure_Short_Name);
5322
5323 l_Actual_Data_Source := BSC_BIS_KPI_CRUD_PUB.Get_Actual_Source_Data(p_Measure_Short_Name);
5324 l_Actual_Data_Source_Type := BSC_BIS_KPI_CRUD_PUB.Get_Actual_Source_Data_Type(p_Measure_Short_Name);
5325 l_Function_Name := BSC_BIS_KPI_CRUD_PUB.Get_Measure_Function_Name(p_Measure_Short_Name);
5326
5327 IF (l_Actual_Data_Source IS NULL) THEN
5328 l_Actual_Data_Source := l_Region_Code || '.' || l_attribute_code;
5329 END IF;
5330
5331 IF (l_Function_Name IS NULL) THEN
5332 l_Function_Name := p_Region_Function_Name;
5333 END IF;
5334
5335 -- Bug#5201116
5336 IF (l_Region_Code = SUBSTR(l_Actual_Data_Source, 1, INSTR(l_Actual_Data_Source, '.') - 1)) THEN
5337 -- Primary Data Source
5338 l_Compare_Attribute_Code := Get_Compare_Attribute_Code(p_Region_Function_Name, p_Measure_Short_Name);
5339
5340 IF (l_Compare_Attribute_Code IS NOT NULL) THEN
5341 l_Comparison_Source := l_Region_Code || '.' || l_Compare_Attribute_Code;
5342 ELSE
5343 l_Comparison_Source := NULL;
5344 END IF;
5345
5346 ELSE
5347 l_Comparison_Source := BSC_BIS_KPI_CRUD_PUB.Get_Comparison_Source(p_Measure_Short_Name);
5348 END IF;
5349
5350 -- Passed AK type and AK source (pl/sql), since they were getting updated to null
5351 -- modified condition for Bug#4599432
5352
5353
5354 IF (BSC_UTILITY.Is_Measure_Seeded(p_Measure_Short_Name) = FND_API.G_FALSE AND BSC_UTILITY.is_Calculated_kpi(p_Measure_Short_Name)= FND_API.G_FALSE) THEN
5355
5356 BSC_BIS_MEASURE_PUB.Update_Measure(
5357 p_Commit => p_Commit
5358 ,p_Dataset_Id => l_Dataset_Id
5359 ,p_Dataset_Source => l_Measure_Source
5360 ,p_Dataset_Name => p_Measure_Name
5361 ,p_Dataset_Help => p_Measure_Description
5362 ,p_Dataset_Measure_Id1 => l_Bsc_Measure_Id
5363 ,p_Dataset_Operation => NULL
5364 ,p_Dataset_Measure_Id2 => NULL
5365 ,p_Dataset_Format_Id => p_Dataset_Format_Id
5366 ,p_Dataset_Color_Method => NULL
5367 ,p_Dataset_Autoscale_Flag => p_Dataset_Autoscale_Flag
5368 ,p_Dataset_Projection_Flag => NULL
5369 ,p_Measure_Short_Name => p_Measure_Short_Name
5370 ,p_Measure_Act_Data_Src_Type => l_Actual_Data_Source_Type
5371 ,p_Measure_Act_Data_Src => l_Actual_Data_Source
5372 ,p_Measure_Comparison_Source => l_Comparison_Source
5373 ,p_Measure_Operation => p_Measure_Operation
5374 ,p_Measure_Uom_Class => NULL
5375 ,p_Measure_Increase_In_Measure => p_Measure_Increase_In_Measure
5376 ,p_Measure_Random_Style => p_Measure_Random_Style
5377 ,p_Measure_Min_Act_Value => p_Measure_Min_Act_Value
5378 ,p_Measure_Max_Act_Value => p_Measure_Max_Act_Value
5379 ,p_Measure_Min_Bud_Value => NULL
5380 ,p_Measure_Max_Bud_Value => NULL
5381 ,p_Measure_App_Id => p_Measure_App_Id
5382 ,p_Measure_Col => NULL
5383 ,p_Measure_Group_Id => NULL
5384 ,p_Measure_Projection_Id => BSC_BIS_KPI_CRUD_PUB.C_NO_PROJECTION
5385 ,p_Measure_Type => p_Measure_Type
5386 ,p_Measure_Apply_Rollup => NULL
5387 ,p_Measure_Function_Name => l_Function_Name
5388 ,p_Measure_Enable_Link => 'Y'
5389 ,p_Measure_Obsolete => p_Measure_Obsolete
5390 ,p_Type => p_Type
5391 ,p_Time_Stamp => NULL
5392 ,p_Dimension1_Id => x_All_Dim_Group_Ids(1)
5393 ,p_Dimension2_Id => x_All_Dim_Group_Ids(2)
5394 ,p_Dimension3_Id => x_All_Dim_Group_Ids(3)
5395 ,p_Dimension4_Id => x_All_Dim_Group_Ids(4)
5396 ,p_Dimension5_Id => x_All_Dim_Group_Ids(5)
5397 ,p_Dimension6_Id => x_All_Dim_Group_Ids(6)
5398 ,p_Dimension7_Id => x_All_Dim_Group_Ids(7)
5399 ,p_Y_Axis_Title => NULL
5400 ,p_Func_Area_Short_Name => p_Func_Area_Short_Name
5401 ,x_Return_Status => x_Return_Status
5402 ,x_Msg_Count => x_Msg_Count
5403 ,x_Msg_Data => x_Msg_Data
5404 );
5405
5406 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5407 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5408 END IF;
5409 END IF;
5410
5411
5412 -- if the measure added is of type Exisitng, then add the
5413 -- same to the list of data series.
5414 SELECT COUNT(1) INTO l_Count1
5415 FROM BSC_KPI_ANALYSIS_MEASURES_B B
5416 WHERE B.DATASET_ID = l_Dataset_Id
5417 AND B.INDICATOR = l_Kpi_id;
5418
5419 IF((l_Returned_Kpi_Id =BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY AND l_Measure_Source =BSC_BIS_MEASURE_PUB.c_BSC) OR l_Count1 = 0) THEN
5420 l_Anal_Opt_Rec.Bsc_Kpi_Id := l_Kpi_Id;
5421 l_Anal_Opt_Rec.Bsc_Dataset_Id := l_Dataset_Id;
5422 l_Anal_Opt_Rec.Bsc_Dataset_Default_Value := 1;
5423 l_Anal_Opt_Rec.Bsc_Measure_Long_Name := p_Measure_Name;
5424 l_Anal_Opt_Rec.Bsc_Measure_Help := p_Measure_Description;
5425
5426 --DBMS_OUTPUT.PUT_LINE('STAGE 10 - Create_Data_Series');
5427 --DBMS_OUTPUT.PUT_LINE('p_Commit -->'|| p_Commit);
5428
5429
5430
5431 BSC_ANALYSIS_OPTION_PUB.Create_Data_Series(
5432 p_Commit => p_Commit
5433 , p_Anal_Opt_Rec => l_Anal_Opt_Rec
5434 , x_Anal_Opt_Rec => x_Anal_Opt_Rec
5435 , x_Return_Status => x_Return_Status
5436 , x_Msg_Count => x_Msg_Count
5437 , x_Msg_Data => x_Msg_Data
5438 );
5439 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5441 END IF;
5442
5443
5444
5445 ELSE
5446 l_Anal_Opt_Rec.Bsc_Kpi_Id := l_Kpi_Id;
5447 l_Anal_Opt_Rec.Bsc_Dataset_Series_Id := BSC_BIS_KPI_CRUD_PUB.Get_Data_Series_Id(l_Kpi_Id, l_Dataset_Id);
5448 l_Anal_Opt_Rec.Bsc_Option_Group0 := 0;
5449 l_Anal_Opt_Rec.Bsc_Option_Group1 := 0;
5450 l_Anal_Opt_Rec.Bsc_Option_Group2 := 0;
5451 l_Anal_Opt_Rec.Bsc_Dataset_Default_Value := 1;
5452 l_Anal_Opt_Rec.Bsc_Measure_Long_Name := p_Measure_Name;
5453 l_Anal_Opt_Rec.Bsc_Measure_Help := p_Measure_Description;
5454
5455 --DBMS_OUTPUT.PUT_LINE('STAGE 10 - Update_Data_Series');
5456
5457 BSC_ANALYSIS_OPTION_PUB.Update_Data_Series(
5458 p_Commit => p_Commit
5459 , p_Anal_Opt_Rec => l_Anal_Opt_Rec
5460 , x_Return_Status => x_Return_Status
5461 , x_Msg_Count => x_Msg_Count
5462 , x_Msg_Data => x_Msg_Data
5463 );
5464 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5465 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5466 END IF;
5467
5468 END IF;
5469
5470 ELSE
5471 IF ((p_Measure_Short_Name IS NOT NULL) OR (l_Is_From_Report_Designer = FALSE)) THEN -- check if the report is null
5472 -- Changed from l_Measure_Short_Name to p_Measure_Short_Name
5473 BSC_BIS_KPI_CRUD_PUB.Create_Measure(
5474 p_Commit => p_Commit
5475 ,x_Dataset_Id => l_Dataset_Id
5476 ,p_Kpi_Id => l_Kpi_Id
5477 ,p_Dataset_Source => l_Dataset_Source
5478 ,p_Measure_Name => p_Measure_Name
5479 ,p_Measure_Short_Name => p_Measure_Short_Name
5480 ,p_Measure_Description => p_Measure_Description
5481 ,p_Dataset_Format_Id => p_Dataset_Format_Id
5482 ,p_Dataset_Autoscale_Flag => p_Dataset_Autoscale_Flag
5483 ,p_Measure_Operation => p_Measure_Operation
5484 ,p_Measure_Increase_In_Measure => p_Measure_Increase_In_Measure
5485 ,p_Measure_Obsolete => p_Measure_Obsolete
5486 ,p_Type => p_Type
5487 ,p_Measure_Random_Style => p_Measure_Random_Style
5488 ,p_Measure_Min_Act_Value => p_Measure_Min_Act_Value
5489 ,p_Measure_Max_Act_Value => p_Measure_Max_Act_Value
5490 ,p_Measure_Type => p_Measure_Type
5491 ,p_Measure_Function_Name => NULL
5492 ,p_Measure_Group_Id => l_Measure_Group_Id
5493 ,p_Dimension1_Id => x_All_Dim_Group_Ids(1)
5494 ,p_Dimension2_Id => x_All_Dim_Group_Ids(2)
5495 ,p_Dimension3_Id => x_All_Dim_Group_Ids(3)
5496 ,p_Dimension4_Id => x_All_Dim_Group_Ids(4)
5497 ,p_Dimension5_Id => x_All_Dim_Group_Ids(5)
5498 ,p_Dimension6_Id => x_All_Dim_Group_Ids(6)
5499 ,p_Dimension7_Id => x_All_Dim_Group_Ids(7)
5500 ,p_Measure_App_Id => p_Measure_App_Id
5501 ,p_Func_Area_Short_Name => p_Func_Area_Short_Name
5502 ,x_Return_Status => x_Return_Status
5503 ,x_Msg_Count => x_Msg_Count
5504 ,x_Msg_Data => x_Msg_Data
5505 );
5506 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5507 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5508 END IF;
5509
5510 --DBMS_OUTPUT.PUT_LINE('STAGE 8');
5511
5512 -- Update Disabled Calcuations -- Pending Approval
5513 BSC_BIS_KPI_CRUD_PUB.Apply_Disabled_Calculations (
5514 p_Commit => p_Commit
5515 , p_Dataset_Id => l_Dataset_Id
5516 , x_Return_Status => x_Return_Status
5517 , x_Msg_Count => x_Msg_Count
5518 , x_Msg_Data => x_Msg_Data
5519 );
5520 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5522 END IF;
5523
5524 -- Assign the above Measure (aka KPI) to the Analysis Option (aka Measure)
5525 -- of the KPI (aka Objective)
5526 --DBMS_OUTPUT.PUT_LINE('STAGE 9');
5527 -- added for Report Designer (AG Measures) AGRD
5528 -- added logic to call Pl/SQL API BSC_ANALYSIS_OPTION_PUB.Create_Data_Series to create Data Series
5529 IF (l_Is_From_Report_Designer) THEN
5530
5531 l_Anal_Opt_Rec.Bsc_Kpi_Id := l_Kpi_Id;
5532 l_Anal_Opt_Rec.Bsc_Dataset_Id := l_Dataset_Id;
5533 l_Anal_Opt_Rec.Bsc_Dataset_Default_Value := 1;
5534 l_Anal_Opt_Rec.Bsc_Measure_Long_Name := p_Measure_Name;
5535 l_Anal_Opt_Rec.Bsc_Measure_Help := p_Measure_Description;
5536
5537 --DBMS_OUTPUT.PUT_LINE('STAGE 10 - Create_Data_Series');
5538 --DBMS_OUTPUT.PUT_LINE('l_Anal_Opt_Rec.Bsc_Kpi_Id - ' || l_Anal_Opt_Rec.Bsc_Kpi_Id);
5539 --DBMS_OUTPUT.PUT_LINE('l_Anal_Opt_Rec.Bsc_Dataset_Default_Value - ' || l_Anal_Opt_Rec.Bsc_Dataset_Default_Value);
5540 --DBMS_OUTPUT.PUT_LINE('l_Anal_Opt_Rec.Bsc_Measure_Long_Name - ' || l_Anal_Opt_Rec.Bsc_Measure_Long_Name);
5541 --DBMS_OUTPUT.PUT_LINE('l_Anal_Opt_Rec.Bsc_Measure_Help - ' || l_Anal_Opt_Rec.Bsc_Measure_Help);
5542
5543 --DBMS_OUTPUT.PUT_LINE('p_Commit -->'|| p_Commit);
5544
5545
5546
5547
5548 BSC_ANALYSIS_OPTION_PUB.Create_Data_Series(
5549 p_Commit => p_Commit
5550 , p_Anal_Opt_Rec => l_Anal_Opt_Rec
5551 , x_Anal_Opt_Rec => x_Anal_Opt_Rec
5552 , x_Return_Status => x_Return_Status
5553 , x_Msg_Count => x_Msg_Count
5554 , x_Msg_Data => x_Msg_Data
5555 );
5556 --DBMS_OUTPUT.PUT_LINE('(10) x_Return_Status ' || x_Return_Status);
5557 --DBMS_OUTPUT.PUT_LINE('(10) x_msg_data ' || x_Msg_Data);
5558
5559 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5561 END IF;
5562
5563 /*
5564 Need to move the below to a new PL/SQL API - TODO
5565 */
5566
5567 BEGIN
5568 SELECT A.SHORT_NAME
5569 INTO x_Measure_Short_Name
5570 FROM BSC_SYS_MEASURES A
5571 WHERE A.MEASURE_ID =
5572 (
5573 SELECT B.MEASURE_ID1
5574 FROM BSC_SYS_DATASETS_B B
5575 WHERE B.DATASET_ID = l_Dataset_Id
5576 );
5577 EXCEPTION
5578 WHEN OTHERS THEN
5579 x_Measure_Short_Name := NULL;
5580 END;
5581
5582 -- added for Bug#4638384
5583 l_Compare_Attribute_Code := Get_Compare_Attribute_Code(p_Region_Function_Name, p_Measure_Short_Name);
5584
5585 IF (l_Compare_Attribute_Code IS NOT NULL) THEN
5586 l_Comparison_Source := p_Region_Function_Name || '.' || l_Compare_Attribute_Code;
5587 END IF;
5588
5589 UPDATE BIS_INDICATORS
5590 SET ACTUAL_DATA_SOURCE = p_Region_Function_Name || '.' || l_attribute_code
5591 , ACTUAL_DATA_SOURCE_TYPE = 'AK'
5592 , FUNCTION_NAME = p_Region_Function_Name
5593 , COMPARISON_SOURCE = l_Comparison_Source
5594 , ENABLE_LINK = 'Y'
5595 WHERE DATASET_ID = l_Dataset_Id;
5596
5597
5598 ELSE
5599
5600 BSC_BIS_KPI_CRUD_PUB.Associate_KPI_To_AO(
5601 p_Commit => p_Commit
5602 , p_Indicator => l_Kpi_Id
5603 , p_Dataset_Id => l_Dataset_Id
5604 , p_Measure_Name => p_Measure_Name
5605 , p_Measure_Description => p_Measure_Description
5606 , x_Measure_Short_Name => x_Measure_Short_Name
5607 , x_Return_Status => x_Return_Status
5608 , x_Msg_Count => x_Msg_Count
5609 , x_Msg_Data => x_Msg_Data
5610 );
5611 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5612 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5613 END IF;
5614
5615
5616 END IF;
5617 END IF;
5618 END IF;
5619
5620 --DBMS_OUTPUT.PUT_LINE('STAGE 11');
5621
5622 IF (l_Is_From_Report_Designer) THEN
5623 l_Dimension_Short_Name := l_Key_Short_Name;
5624 l_Is_XTD_Enabled := BSC_BIS_KPI_CRUD_PUB.is_XTD_Enabled(BIS_PMV_UTIL.GetReportRegion(p_Region_Function_Name));
5625 ELSE
5626 l_Dimension_Short_Name := p_Param_Portlet_Region_Code;
5627 l_Is_XTD_Enabled := BSC_BIS_KPI_CRUD_PUB.is_XTD_Enabled(p_Param_Portlet_Region_Code);
5628 END IF;
5629 l_Does_Dim_Group_Exist := Does_Dim_Grp_Exist(l_Dimension_Short_Name);
5630
5631
5632 IF (l_Does_Kpi_Exist = FALSE) THEN
5633 --DBMS_OUTPUT.PUT_LINE('STAGE 11E1');
5634 IF (l_Does_Dim_Group_Exist = FALSE) THEN
5635 --DBMS_OUTPUT.PUT_LINE('STAGE 11E');
5636
5637 -- Create a Dimension Group, if it does not exist for
5638 -- Parameter Portlet. It updates the Dimension Object Properties as well.
5639
5640 BSC_BIS_KPI_CRUD_PUB.Create_Dimension(
5641 p_Commit => p_Commit
5642 ,p_Dim_Short_Name => l_Dimension_Short_Name
5643 ,p_Display_Name => l_Dimension_Short_Name
5644 ,p_Description => l_Dimension_Short_Name
5645 ,p_Dim_Objs_Record => x_Non_Time_Dimension_Objects
5646 ,p_Dim_Obj_Short_Names => x_Non_Time_Dim_Obj_Short_Names
5647 ,p_Dim_Objects_Counter => NVL(x_Non_Time_Counter, 0)
5648 ,p_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
5649 ,p_hide => FND_API.G_TRUE
5650 ,x_Return_Status => x_Return_Status
5651 ,x_Msg_Count => x_Msg_Count
5652 ,x_Msg_Data => x_Msg_Data
5653 );
5654 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5655 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5656 END IF;
5657
5658 END IF;
5659
5660 --DBMS_OUTPUT.PUT_LINE('STAGE 12');
5661
5662 -- Assign the Time dimension peroidicities to the KPI (Objective)
5663 BSC_BIS_KPI_CRUD_PUB.Assign_KPI_Periodicities(
5664 p_Commit => p_Commit
5665 ,p_Kpi_Id => l_Kpi_Id
5666 ,p_Time_Dim_Obj_Sns => x_Time_Dim_Obj_Short_Names
5667 ,p_Dft_Dim_Obj_Sn => NULL
5668 ,p_Daily_Flag => FND_API.G_TRUE
5669 ,p_Is_XTD_Enabled => l_Is_XTD_Enabled
5670 ,x_Return_Status => x_Return_Status
5671 ,x_Msg_Count => x_Msg_Count
5672 ,x_Msg_Data => x_Msg_Data
5673 );
5674 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5675 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5676 END IF;
5677
5678
5679
5680 --DBMS_OUTPUT.PUT_LINE('STAGE 13');
5681
5682 SELECT COUNT(1) INTO l_Count
5683 FROM BSC_SYS_DIM_LEVELS_BY_GROUP
5684 WHERE DIM_GROUP_ID IN
5685 (
5686 SELECT DIM_GROUP_ID
5687 FROM BSC_SYS_DIM_GROUPS_VL
5688 WHERE SHORT_NAME = l_Dimension_Short_Name
5689 );
5690
5691
5692 --DBMS_OUTPUT.PUT_LINE('STAGE 13 - ' || l_Count);
5693
5694
5695 -- Assign the Dimension Created to the KPI via a Dimension Set (defaulted to 0)
5696 BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set(
5697 p_Commit => p_Commit
5698 ,p_Kpi_Id => l_Kpi_Id
5699 ,p_Dim_Set_Id => 0
5700 ,p_Dim_Short_Names => l_Dimension_Short_Name
5701 ,p_Time_Stamp => NULL
5702 ,x_Return_Status => x_Return_Status
5703 ,x_Msg_Count => x_Msg_Count
5704 ,x_Msg_Data => x_Msg_Data
5705 );
5706
5707
5708 --DBMS_OUTPUT.PUT_LINE('(13) x_Return_Status ' || x_Return_Status);
5709 --DBMS_OUTPUT.PUT_LINE('(13) x_msg_data ' || x_Msg_Data);
5710 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5711 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5712 END IF;
5713 ELSIF ((l_Is_From_Report_Designer) AND (l_Does_Dim_Group_Exist) AND (p_Force_Create_Dim = FND_API.G_TRUE)) THEN
5714 -- should we add a condition to check for existance of dimension here?
5715 BSC_BIS_DIMENSION_PUB.Assign_Dimension_Objects
5716 ( p_commit => p_Commit
5717 , p_dim_short_name => l_Dimension_Short_Name
5718 , p_dim_obj_short_names => x_Non_Time_Dim_Obj_Short_Names
5719 , p_time_stamp => NULL
5720 , p_create_view => 0
5721 , x_return_status => x_Return_Status
5722 , x_msg_count => x_Msg_Count
5723 , x_msg_data => x_Msg_Data
5724 );
5725 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5726 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5727 END IF;
5728
5729
5730
5731 --DBMS_OUTPUT.PUT_LINE('STAGE 11A');
5732
5733 -- code to recreate Periodicities goes here.
5734
5735 BSC_BIS_KPI_CRUD_PUB.Assign_KPI_Periodicities(
5736 p_Commit => p_Commit
5737 ,p_Kpi_Id => l_Kpi_Id
5738 ,p_Time_Dim_Obj_Sns => x_Time_Dim_Obj_Short_Names
5739 ,p_Dft_Dim_Obj_Sn => NULL
5740 ,p_Daily_Flag => FND_API.G_TRUE
5741 ,p_Is_XTD_Enabled => l_Is_XTD_Enabled
5742 ,x_Return_Status => x_Return_Status
5743 ,x_Msg_Count => x_Msg_Count
5744 ,x_Msg_Data => x_Msg_Data
5745 );
5746 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5747 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5748 END IF;
5749 --DBMS_OUTPUT.PUT_LINE('STAGE 11B');
5750
5751 END IF;
5752
5753 --DBMS_OUTPUT.PUT_LINE('STAGE 14');
5754
5755 -- Pass the KPI Back;
5756 x_Kpi_Id := l_Kpi_Id;
5757
5758 -- called Delete_Kpi_AT() to remove AT created KPI base metadata, Bug#4064587
5759 -- its necessary to be called, since there would be still metadata left in BSC_KPIS_B/TL table.
5760 EXCEPTION
5761 WHEN FND_API.G_EXC_ERROR THEN
5762
5763 ROLLBACK TO CreateBscBisMetadata;
5764
5765 IF (x_msg_data IS NULL) THEN
5766 FND_MSG_PUB.Count_And_Get
5767 ( p_encoded => FND_API.G_FALSE
5768 , p_count => x_msg_count
5769 , p_data => x_msg_data
5770 );
5771 END IF;
5772
5773 x_Return_Status := FND_API.G_RET_STS_ERROR;
5774 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5775
5776 ROLLBACK TO CreateBscBisMetadata;
5777
5778 IF (x_msg_data IS NULL) THEN
5779 FND_MSG_PUB.Count_And_Get
5780 ( p_encoded => FND_API.G_FALSE
5781 , p_count => x_msg_count
5782 , p_data => x_msg_data
5783 );
5784 END IF;
5785 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5786 WHEN NO_DATA_FOUND THEN
5787
5788 ROLLBACK TO CreateBscBisMetadata;
5789 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5790 IF (x_msg_data IS NOT NULL) THEN
5791 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata ';
5792 ELSE
5793 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata ';
5794 END IF;
5795 WHEN OTHERS THEN
5796
5797 ROLLBACK TO CreateBscBisMetadata;
5798 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5799 IF (x_msg_data IS NOT NULL) THEN
5800 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata ';
5801 ELSE
5802 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata ';
5803 END IF;
5804 END Create_Bsc_Bis_Metadata;
5805
5806
5807 -- Deletes all the AK Metadata Corresponding to a Region Code
5808
5809 PROCEDURE Delete_AK_Metadata(
5810 p_Commit IN VARCHAR2
5811 , p_Region_Code IN VARCHAR2
5812 , p_Region_Code_Application_Id IN NUMBER
5813 , x_Return_Status OUT NOCOPY VARCHAR2
5814 , x_Msg_Count OUT NOCOPY NUMBER
5815 , x_Msg_Data OUT NOCOPY VARCHAR2
5816 ) IS
5817 BEGIN
5818 SAVEPOINT DeleteAKMetadata;
5819 FND_MSG_PUB.Initialize;
5820
5821 -- Initialize Procedure Variables.
5822 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
5823
5824 BSC_BIS_KPI_CRUD_PUB.Delete_Misc_Region_Items(
5825 p_commit => p_commit
5826 , p_Region_Code => p_Region_Code
5827 , p_Application_Id => p_Region_Code_Application_Id
5828 , x_return_status => x_return_status
5829 , x_msg_count => x_msg_count
5830 , x_msg_data => x_msg_data
5831 );
5832 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5833 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5834 END IF;
5835
5836
5837 BIS_PMV_REGION_PVT.DELETE_REGION
5838 ( p_commit => p_commit
5839 , p_Region_Code => p_Region_Code
5840 , p_Region_Application_Id => p_Region_Code_Application_Id
5841 , x_return_status => x_return_status
5842 , x_msg_count => x_msg_count
5843 , x_msg_data => x_msg_data
5844 );
5845 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5846 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5847 END IF;
5848
5849 FND_FORM_FUNCTIONS_PKG.DELETE_ROW (
5850 X_FUNCTION_ID => BSC_BIS_KPI_CRUD_PUB.Get_Function_Id_By_Name(p_Region_Code)
5851 );
5852
5853 EXCEPTION
5854 WHEN FND_API.G_EXC_ERROR THEN
5855 ROLLBACK TO DeleteAKMetadata;
5856 IF (x_msg_data IS NULL) THEN
5857 FND_MSG_PUB.Count_And_Get
5858 ( p_encoded => FND_API.G_FALSE
5859 , p_count => x_msg_count
5860 , p_data => x_msg_data
5861 );
5862 END IF;
5863 x_Return_Status := FND_API.G_RET_STS_ERROR;
5864 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5865 ROLLBACK TO DeleteAKMetadata;
5866 IF (x_msg_data IS NULL) THEN
5867 FND_MSG_PUB.Count_And_Get
5868 ( p_encoded => FND_API.G_FALSE
5869 , p_count => x_msg_count
5870 , p_data => x_msg_data
5871 );
5872 END IF;
5873 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5874 WHEN NO_DATA_FOUND THEN
5875 ROLLBACK TO DeleteAKMetadata;
5876 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5877 IF (x_msg_data IS NOT NULL) THEN
5878 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata ';
5879 ELSE
5880 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata ';
5881 END IF;
5882 WHEN OTHERS THEN
5883 ROLLBACK TO DeleteAKMetadata;
5884 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5885 IF (x_msg_data IS NOT NULL) THEN
5886 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata ';
5887 ELSE
5888 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata ';
5889 END IF;
5890
5891 END Delete_AK_Metadata;
5892
5893
5894 -- Refreshes AK Metadata Repository with correct Analysis Option combination.
5895
5896 PROCEDURE Referesh_AK_Metadata (
5897 p_Commit IN VARCHAR2
5898 , p_Kpi_Id IN NUMBER
5899 , p_Deleted_AO_Index IN NUMBER
5900 , p_Param_Portlet_Region_Code IN VARCHAR2
5901 , x_Return_Status OUT NOCOPY VARCHAR2
5902 , x_Msg_Count OUT NOCOPY NUMBER
5903 , x_Msg_Data OUT NOCOPY VARCHAR2
5904 ) IS
5905 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
5906
5907 CURSOR c_RefreshAK IS
5908 SELECT A.ANALYSIS_OPTION0 ,
5909 A.DATASET_ID,
5910 D.NAME,
5911 D.HELP,
5912 M.SHORT_NAME,
5913 D.FORMAT_ID
5914 FROM BSC_KPI_ANALYSIS_MEASURES_VL A,
5915 BIS_INDICATORS M,
5916 BSC_SYS_DATASETS_VL D
5917 WHERE A.ANALYSIS_OPTION0 >= p_Deleted_AO_Index
5918 AND A.ANALYSIS_OPTION1 = 0
5919 AND A.ANALYSIS_OPTION2 = 0
5920 AND A.SERIES_ID = 0
5921 AND A.INDICATOR = p_Kpi_Id
5922 AND D.DATASET_ID = A.DATASET_ID
5923 AND M.DATASET_ID = D.DATASET_ID;
5924 BEGIN
5925
5926 SAVEPOINT RefereshAKMetadata;
5927 FND_MSG_PUB.Initialize;
5928 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
5929
5930 -- Delete all AK Data Starting from p_Deleted_AO_Index (Analysis Option Index + 1)
5931 FOR cRefresh IN c_RefreshAK LOOP
5932 l_Region_Code := BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_Region_Code(p_Kpi_Id, (cRefresh.ANALYSIS_OPTION0)+1);
5933 BSC_BIS_KPI_CRUD_PUB.Delete_AK_Metadata(
5934 p_Commit => p_Commit
5935 , p_Region_Code => l_Region_Code
5936 , p_Region_Code_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
5937 , x_Return_Status => x_Return_Status
5938 , x_Msg_Count => x_Msg_Count
5939 , x_Msg_Data => x_Msg_Data
5940 );
5941 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5942 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5943 END IF;
5944 END LOOP;
5945
5946
5947 -- Recreate AK Metadata with new Analysis Option combination
5948 FOR cRefresh IN c_RefreshAK LOOP
5949 BSC_BIS_KPI_CRUD_PUB.Create_Ak_Metadata(
5950 p_Commit => p_Commit
5951 , p_Create_Region_Per_AO => FND_API.G_TRUE
5952 , p_Kpi_Id => p_Kpi_Id
5953 , p_Analysis_Option_Id => cRefresh.ANALYSIS_OPTION0
5954 , p_Dim_Set_Id => 0
5955 , p_Measure_Short_Name => cRefresh.SHORT_NAME
5956 , p_Measure_Name => cRefresh.NAME
5957 , p_Measure_Description => cRefresh.HELP
5958 , p_User_Portlet_Name => cRefresh.NAME
5959 , p_Dataset_Format_Id => cRefresh.FORMAT_ID
5960 , p_Application_Id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
5961 , p_Disable_View_By => 'N'
5962 , p_Param_Portlet_Region_Code => p_Param_Portlet_Region_Code
5963 , x_Return_Status => x_Return_Status
5964 , x_Msg_Count => x_Msg_Count
5965 , x_Msg_Data => x_Msg_Data
5966 );
5967 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5968 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5969 END IF;
5970 END LOOP;
5971
5972 EXCEPTION
5973 WHEN FND_API.G_EXC_ERROR THEN
5974 ROLLBACK TO RefereshAKMetadata;
5975 IF (x_msg_data IS NULL) THEN
5976 FND_MSG_PUB.Count_And_Get
5977 ( p_encoded => FND_API.G_FALSE
5978 , p_count => x_msg_count
5979 , p_data => x_msg_data
5980 );
5981 END IF;
5982 x_Return_Status := FND_API.G_RET_STS_ERROR;
5983 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5984 ROLLBACK TO RefereshAKMetadata;
5985 IF (x_msg_data IS NULL) THEN
5986 FND_MSG_PUB.Count_And_Get
5987 ( p_encoded => FND_API.G_FALSE
5988 , p_count => x_msg_count
5989 , p_data => x_msg_data
5990 );
5991 END IF;
5992 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5993 WHEN NO_DATA_FOUND THEN
5994 ROLLBACK TO RefereshAKMetadata;
5995 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
5996 IF (x_msg_data IS NOT NULL) THEN
5997 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Referesh_AK_Metadata ';
5998 ELSE
5999 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Referesh_AK_Metadata ';
6000 END IF;
6001 WHEN OTHERS THEN
6002 ROLLBACK TO RefereshAKMetadata;
6003 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6004 IF (x_msg_data IS NOT NULL) THEN
6005 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Referesh_AK_Metadata ';
6006 ELSE
6007 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Referesh_AK_Metadata ';
6008 END IF;
6009
6010 END Referesh_AK_Metadata;
6011
6012
6013 -- Applies Disabled Calculation by Measure (DATASET_ID)
6014 PROCEDURE Apply_Disabled_Calculations (
6015 p_Commit IN VARCHAR2
6016 , p_Dataset_Id IN NUMBER
6017 , x_Return_Status OUT NOCOPY VARCHAR2
6018 , x_Msg_Count OUT NOCOPY NUMBER
6019 , x_Msg_Data OUT NOCOPY VARCHAR2
6020 ) IS
6021
6022 l_Disable_Calc_List BSC_NUM_LIST;
6023
6024 BEGIN
6025
6026 SAVEPOINT ApplyDisableCalculations;
6027 FND_MSG_PUB.Initialize;
6028 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6029
6030 -- Call type Constructor.
6031 l_Disable_Calc_List := BSC_NUM_LIST(
6032 BSC_BIS_KPI_CRUD_PUB.C_CALC_TC
6033 , BSC_BIS_KPI_CRUD_PUB.C_CALC_GROWTH
6034 , BSC_BIS_KPI_CRUD_PUB.C_CALC_QTD
6035 , BSC_BIS_KPI_CRUD_PUB.C_CALC_YDG
6036 , BSC_BIS_KPI_CRUD_PUB.C_CALC_AVG
6037 , BSC_BIS_KPI_CRUD_PUB.C_CALC_YYG
6038 , BSC_BIS_KPI_CRUD_PUB.C_CALC_DV
6039 );
6040
6041 -- Apply the disabled Calculations.
6042 BSC_BIS_MEASURE_PUB.Apply_Dataset_Calc(
6043 p_commit => p_Commit
6044 ,p_dataset_id => p_Dataset_Id
6045 ,p_disabled_calc_table => l_Disable_Calc_List
6046 ,x_return_status => x_Return_Status
6047 ,x_msg_count => x_Msg_Count
6048 ,x_msg_data => x_Msg_Data
6049 );
6050 IF ((x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
6051 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6052 END IF;
6053
6054 EXCEPTION
6055 WHEN FND_API.G_EXC_ERROR THEN
6056 ROLLBACK TO ApplyDisableCalculations;
6057 IF (x_msg_data IS NULL) THEN
6058 FND_MSG_PUB.Count_And_Get
6059 ( p_encoded => FND_API.G_FALSE
6060 , p_count => x_msg_count
6061 , p_data => x_msg_data
6062 );
6063 END IF;
6064 x_Return_Status := FND_API.G_RET_STS_ERROR;
6065 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6066 ROLLBACK TO ApplyDisableCalculations;
6067 IF (x_msg_data IS NULL) THEN
6068 FND_MSG_PUB.Count_And_Get
6069 ( p_encoded => FND_API.G_FALSE
6070 , p_count => x_msg_count
6071 , p_data => x_msg_data
6072 );
6073 END IF;
6074 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6075 WHEN NO_DATA_FOUND THEN
6076 ROLLBACK TO ApplyDisableCalculations;
6077 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6078 IF (x_msg_data IS NOT NULL) THEN
6079 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Apply_Disable_Calculations ';
6080 ELSE
6081 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Apply_Disable_Calculations ';
6082 END IF;
6083 WHEN OTHERS THEN
6084 ROLLBACK TO ApplyDisableCalculations;
6085 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6086 IF (x_msg_data IS NOT NULL) THEN
6087 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Apply_Disable_Calculations ';
6088 ELSE
6089 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Apply_Disable_Calculations ';
6090 END IF;
6091 END Apply_Disabled_Calculations;
6092
6093
6094
6095 -- Enables any KPI Calculation, by KPI for the specified Calculation Id
6096 -- Default_Checked, enables or disables the Calculation by default in iViewer
6097 -- 1 Enables by default and 0 disables at the KPI Level
6098
6099 PROCEDURE Enable_Kpi_Calculation (
6100 p_Commit IN VARCHAR2
6101 , p_Kpi_Id IN NUMBER
6102 , p_Calculation_Id IN NUMBER
6103 , p_Default_Checked IN NUMBER
6104 , x_Return_Status OUT NOCOPY VARCHAR2
6105 , x_Msg_Count OUT NOCOPY NUMBER
6106 , x_Msg_Data OUT NOCOPY VARCHAR2
6107 ) IS
6108 l_Bsc_Kpi_Entity_Rec BSC_KPI_PUB.Bsc_Kpi_Entity_Rec;
6109 BEGIN
6110 SAVEPOINT EnableKpiCalculation;
6111 FND_MSG_PUB.Initialize;
6112 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6113
6114 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Id := p_Kpi_Id;
6115 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Calculation_Id := p_Calculation_Id;
6116 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_User_Level0 := BSC_BIS_KPI_CRUD_PUB.C_ENABLE_CALC_U0;
6117 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_User_Level1 := BSC_BIS_KPI_CRUD_PUB.C_ENABLE_CALC_U1;
6118 l_Bsc_Kpi_Entity_Rec.Bsc_Kpi_Default_Value := p_Default_Checked;
6119
6120 -- Call the private API to update BSC_KPI_CALCULATIONS.DEFAULT_VALUE, USER_LEVEL0, USER_LEVEL1
6121 BSC_KPI_PVT.Update_Kpi_Calculations(
6122 p_commit => p_commit
6123 ,p_Bsc_Kpi_Entity_Rec => l_Bsc_Kpi_Entity_Rec
6124 ,x_Return_Status => x_Return_Status
6125 ,x_Msg_Count => x_Msg_Count
6126 ,x_Msg_Data => x_Msg_Data
6127 );
6128 IF ((x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
6129 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6130 END IF;
6131
6132 EXCEPTION
6133 WHEN FND_API.G_EXC_ERROR THEN
6134 ROLLBACK TO EnableKpiCalculation;
6135 IF (x_msg_data IS NULL) THEN
6136 FND_MSG_PUB.Count_And_Get
6137 ( p_encoded => FND_API.G_FALSE
6138 , p_count => x_msg_count
6139 , p_data => x_msg_data
6140 );
6141 END IF;
6142 x_Return_Status := FND_API.G_RET_STS_ERROR;
6143 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6144 ROLLBACK TO EnableKpiCalculation;
6145 IF (x_msg_data IS NULL) THEN
6146 FND_MSG_PUB.Count_And_Get
6147 ( p_encoded => FND_API.G_FALSE
6148 , p_count => x_msg_count
6149 , p_data => x_msg_data
6150 );
6151 END IF;
6152 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6153 WHEN NO_DATA_FOUND THEN
6154 ROLLBACK TO EnableKpiCalculation;
6155 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6156 IF (x_msg_data IS NOT NULL) THEN
6157 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Enable_Kpi_Calculation ';
6158 ELSE
6159 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Enable_Kpi_Calculation ';
6160 END IF;
6161 WHEN OTHERS THEN
6162 ROLLBACK TO EnableKpiCalculation;
6163 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6164 IF (x_msg_data IS NOT NULL) THEN
6165 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Enable_Kpi_Calculation ';
6166 ELSE
6167 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Enable_Kpi_Calculation ';
6168 END IF;
6169 END Enable_Kpi_Calculation;
6170
6171
6172
6173
6174
6175 /*
6176 FUN : Returns the list of Time Dimension Objects associated with any Dimension.
6177 */
6178
6179
6180 PROCEDURE Get_Time_Dim_Obj_By_Dim (
6181 p_Dim_Short_Name IN VARCHAR2
6182 , x_Time_Dim_Obj_Short_Names OUT NOCOPY VARCHAR2
6183 , x_Time_Dim_Obj_Counter OUT NOCOPY NUMBER
6184 , x_Return_Status OUT NOCOPY VARCHAR2
6185 , x_Msg_Count OUT NOCOPY NUMBER
6186 , x_Msg_Data OUT NOCOPY VARCHAR2
6187 ) IS
6188 l_Dummy_Non_Time_Dims VARCHAR2(32000);
6189 l_Dummy_Non_Time_Counter NUMBER;
6190 BEGIN
6191 FND_MSG_PUB.Initialize;
6192 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6193
6194 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Obj_By_Dimension (
6195 p_Dim_Short_Name => p_Dim_Short_Name
6196 , x_Time_Dim_Obj_Short_Names => x_Time_Dim_Obj_Short_Names
6197 , x_Time_Dim_Obj_Counter => x_Time_Dim_Obj_Counter
6198 , x_Non_Time_Dim_Obj_Short_Names => l_Dummy_Non_Time_Dims
6199 , x_Non_Time_Dim_Obj_Counter => l_Dummy_Non_Time_Counter
6200 , x_Return_Status => x_Return_Status
6201 , x_Msg_Count => x_Msg_Count
6202 , x_Msg_Data => x_Msg_Data
6203 );
6204 IF ((x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
6205 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6206 END IF;
6207
6208
6209 EXCEPTION
6210 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6211 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6212 IF (x_msg_data IS NULL) THEN
6213 FND_MSG_PUB.Count_And_Get
6214 ( p_encoded => FND_API.G_FALSE
6215 , p_count => x_msg_count
6216 , p_data => x_msg_data
6217 );
6218 END IF;
6219 WHEN OTHERS THEN
6220 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6221 IF (x_msg_data IS NOT NULL) THEN
6222 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Time_Dim_Obj_By_Dim ';
6223 ELSE
6224 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Time_Dim_Obj_By_Dim ';
6225 END IF;
6226 END Get_Time_Dim_Obj_By_Dim;
6227
6228
6229
6230 /*
6231 Returns the list of Non Time Dimension Objects associated with any Dimension.
6232 */
6233
6234
6235 PROCEDURE Get_Non_Time_Dim_Obj_By_Dim (
6236 p_Dim_Short_Name IN VARCHAR2
6237 , x_Non_Time_Dim_Obj_Short_Names OUT NOCOPY VARCHAR2
6238 , x_Non_Time_Dim_Obj_Counter OUT NOCOPY NUMBER
6239 , x_Return_Status OUT NOCOPY VARCHAR2
6240 , x_Msg_Count OUT NOCOPY NUMBER
6241 , x_Msg_Data OUT NOCOPY VARCHAR2
6242 ) IS
6243 l_Dummy_Time_Dims VARCHAR2(32000);
6244 l_Dummy_Time_Counter NUMBER;
6245 BEGIN
6246
6247 FND_MSG_PUB.Initialize;
6248 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6249
6250 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Obj_By_Dimension (
6251 p_Dim_Short_Name => p_Dim_Short_Name
6252 , x_Time_Dim_Obj_Short_Names => l_Dummy_Time_Dims
6253 , x_Time_Dim_Obj_Counter => l_Dummy_Time_Counter
6254 , x_Non_Time_Dim_Obj_Short_Names => x_Non_Time_Dim_Obj_Short_Names
6255 , x_Non_Time_Dim_Obj_Counter => x_Non_Time_Dim_Obj_Counter
6256 , x_Return_Status => x_Return_Status
6257 , x_Msg_Count => x_Msg_Count
6258 , x_Msg_Data => x_Msg_Data
6259 );
6260 IF ((x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
6261 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6262 END IF;
6263
6264
6265 EXCEPTION
6266 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6267 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6268 IF (x_msg_data IS NULL) THEN
6269 FND_MSG_PUB.Count_And_Get
6270 ( p_encoded => FND_API.G_FALSE
6271 , p_count => x_msg_count
6272 , p_data => x_msg_data
6273 );
6274 END IF;
6275 WHEN OTHERS THEN
6276 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6277 IF (x_msg_data IS NOT NULL) THEN
6278 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Non_Time_Dim_Obj_By_Dim ';
6279 ELSE
6280 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Non_Time_Dim_Obj_By_Dim ';
6281 END IF;
6282 END Get_Non_Time_Dim_Obj_By_Dim;
6283
6284
6285 /*
6286 Returns both Time and Non_Time Dimension Objects Associated with Dimension
6287 */
6288
6289 PROCEDURE Get_Dim_Obj_By_Dimension (
6290 p_Dim_Short_Name IN VARCHAR2
6291 , x_Time_Dim_Obj_Short_Names OUT NOCOPY VARCHAR2
6292 , x_Time_Dim_Obj_Counter OUT NOCOPY NUMBER
6293 , x_Non_Time_Dim_Obj_Short_Names OUT NOCOPY VARCHAR2
6294 , x_Non_Time_Dim_Obj_Counter OUT NOCOPY NUMBER
6295 , x_Return_Status OUT NOCOPY VARCHAR2
6296 , x_Msg_Count OUT NOCOPY NUMBER
6297 , x_Msg_Data OUT NOCOPY VARCHAR2
6298 ) IS
6299
6300 CURSOR c_Dim_Obj_Short_Name IS
6301 SELECT DO.SHORT_NAME
6302 FROM BSC_SYS_DIM_GROUPS_VL DG
6303 , BSC_SYS_DIM_LEVELS_BY_GROUP DD
6304 , BSC_SYS_DIM_LEVELS_B DO
6305 WHERE DG.DIM_GROUP_ID = DD.DIM_GROUP_ID
6306 AND DD.DIM_LEVEL_ID = DO.DIM_LEVEL_ID
6307 AND DG.SHORT_NAME = p_Dim_Short_Name;
6308
6309 l_Count NUMBER;
6310
6311 BEGIN
6312 FND_MSG_PUB.Initialize;
6313 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6314
6315 x_Time_Dim_Obj_Counter := 0;
6316 x_Non_Time_Dim_Obj_Counter := 0;
6317
6318 SELECT COUNT(1) INTO l_Count
6319 FROM BSC_SYS_DIM_GROUPS_VL
6320 WHERE SHORT_NAME = p_Dim_Short_Name;
6321
6322 IF l_Count = 0 THEN
6323 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
6324 FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME', p_Dim_Short_Name, TRUE);
6325 FND_MSG_PUB.ADD;
6326 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6327 END IF;
6328
6329 FOR c_DSN IN c_Dim_Obj_Short_Name LOOP
6330 IF(BSC_BIS_KPI_CRUD_PUB.Is_Time_Dim_Obj(c_DSN.SHORT_NAME) = FND_API.G_TRUE) THEN
6331 IF(x_Time_Dim_Obj_Counter = 0) THEN
6332 x_Time_Dim_Obj_Short_Names := c_DSN.SHORT_NAME;
6333 ELSE
6334 x_Time_Dim_Obj_Short_Names := x_Time_Dim_Obj_Short_Names || ',' || c_DSN.SHORT_NAME;
6335 END IF;
6336 x_Time_Dim_Obj_Counter := x_Time_Dim_Obj_Counter + 1;
6337 ELSE
6338 IF(x_Non_Time_Dim_Obj_Counter = 0) THEN
6339 x_Non_Time_Dim_Obj_Short_Names := c_DSN.SHORT_NAME;
6340 ELSE
6341 x_Non_Time_Dim_Obj_Short_Names := x_Non_Time_Dim_Obj_Short_Names || ',' || c_DSN.SHORT_NAME;
6342 END IF;
6343 x_Non_Time_Dim_Obj_Counter := x_Non_Time_Dim_Obj_Counter + 1;
6344 END IF;
6345 END LOOP;
6346
6347
6348 EXCEPTION
6349 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6350 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6351 IF (x_msg_data IS NULL) THEN
6352 FND_MSG_PUB.Count_And_Get
6353 ( p_encoded => FND_API.G_FALSE
6354 , p_count => x_msg_count
6355 , p_data => x_msg_data
6356 );
6357 END IF;
6358 WHEN OTHERS THEN
6359 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
6360 IF (x_msg_data IS NOT NULL) THEN
6361 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Dim_Obj_By_Dimension ';
6362 ELSE
6363 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Dim_Obj_By_Dimension ';
6364 END IF;
6365 END Get_Dim_Obj_By_Dimension;
6366
6367
6368
6369 /*
6370 Returns "T" if the current Dimension Object is a Time Dimension Object, else returns "F"
6371 */
6372
6373
6374 FUNCTION Is_Time_Dim_Obj (
6375 p_Dim_Obj_Short_Name IN VARCHAR2
6376 ) RETURN VARCHAR2
6377 IS
6378 l_Is_Time_Dim_Obj VARCHAR2(2);
6379 BEGIN
6380 NULL;
6381 SELECT DECODE(COUNT(1), 0, FND_API.G_FALSE, FND_API.G_TRUE)
6382 INTO l_Is_Time_Dim_Obj
6383 FROM BSC_SYS_DIM_GROUPS_VL DG,
6384 BSC_SYS_DIM_LEVELS_BY_GROUP DD,
6385 BSC_SYS_DIM_LEVELS_B DO
6386 WHERE DG.DIM_GROUP_ID = DD.DIM_GROUP_ID
6387 AND DD.DIM_LEVEL_ID = DO.DIM_LEVEL_ID
6388 AND ((DG.SHORT_NAME = BSC_BIS_KPI_CRUD_PUB.C_OLTP_TIME) OR (DG.SHORT_NAME = BSC_BIS_KPI_CRUD_PUB.C_EDW_TIME))
6389 AND DO.SHORT_NAME = p_Dim_Obj_Short_Name;
6390
6391 RETURN l_Is_Time_Dim_Obj;
6392
6393 END Is_Time_Dim_Obj;
6394
6395
6396 /*
6397 Procedure version of is_Time_Dim_Obj
6398 */
6399
6400 PROCEDURE Is_Time_Dim_Obj (
6401 p_Dim_Obj_Short_Name IN VARCHAR2
6402 , x_Is_Time_Dim_Obj OUT NOCOPY VARCHAR2
6403 ) IS
6404 BEGIN
6405
6406 x_Is_Time_Dim_Obj := NULL;
6407
6408 SELECT DECODE(COUNT(1), 0, FND_API.G_FALSE, FND_API.G_TRUE)
6409 INTO x_Is_Time_Dim_Obj
6410 FROM BSC_SYS_DIM_GROUPS_VL DG,
6411 BSC_SYS_DIM_LEVELS_BY_GROUP DD,
6412 BSC_SYS_DIM_LEVELS_B DO
6413 WHERE DG.DIM_GROUP_ID = DD.DIM_GROUP_ID
6414 AND DD.DIM_LEVEL_ID = DO.DIM_LEVEL_ID
6415 AND ((DG.SHORT_NAME = BSC_BIS_KPI_CRUD_PUB.C_OLTP_TIME) OR (DG.SHORT_NAME = BSC_BIS_KPI_CRUD_PUB.C_EDW_TIME))
6416 AND DO.SHORT_NAME = p_Dim_Obj_Short_Name;
6417
6418 END Is_Time_Dim_Obj;
6419
6420
6421 -- Checks if the Dimension Passed is a Time Dimension or Not.
6422
6423 PROCEDURE Is_Time_Dimension (
6424 p_Dimension_Short_Name IN VARCHAR2
6425 , x_Is_Time_Dimension OUT NOCOPY VARCHAR2
6426 ) IS
6427 BEGIN
6428
6429 IF((p_Dimension_Short_Name = BSC_BIS_KPI_CRUD_PUB.C_OLTP_TIME) OR
6430 (p_Dimension_Short_Name = BSC_BIS_KPI_CRUD_PUB.C_EDW_TIME)) THEN
6431 x_Is_Time_Dimension := FND_API.G_TRUE;
6432 ELSE
6433 x_Is_Time_Dimension := FND_API.G_FALSE;
6434 END IF;
6435 END Is_Time_Dimension;
6436
6437
6438 /*
6439 Returns the region code that will be associated with the next Analysis Option
6440 This will be populated as the SHORT_NAME to the table BSC_KPI_ANALYSIS_OPTIONS_B
6441
6442 This API is specific to Start-to-End KPI, do not use it when we have Multiple AO Groups.
6443 */
6444 FUNCTION Get_Next_Region_Code_By_AO (
6445 p_Kpi_Id IN NUMBER
6446 , p_Analysis_Group0 IN NUMBER
6447 ) RETURN VARCHAR2
6448 IS
6449 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
6450 l_Next_Analysis_Option NUMBER;
6451 l_Count NUMBER;
6452 BEGIN
6453
6454 l_Region_Code := NULL;
6455 l_Count := 0;
6456
6457 SELECT (NVL(MAX(OPTION_ID), -1)+1)
6458 INTO l_Next_Analysis_Option
6459 FROM BSC_KPI_ANALYSIS_OPTIONS_B
6460 WHERE INDICATOR = p_Kpi_Id
6461 AND ANALYSIS_GROUP_ID = NVL(p_Analysis_Group0, 0);
6462
6463
6464 l_Region_Code := BSC_UTILITY.C_BSC_UNDERSCORE || p_Kpi_Id || '_' || l_Next_Analysis_Option;
6465
6466 RETURN l_Region_Code;
6467
6468 EXCEPTION
6469 WHEN OTHERS THEN
6470 RETURN NULL;
6471 END Get_Next_Region_Code_By_AO;
6472
6473 -- Gets BSC_KPIS_VL.INDICATOR using BIS_INDICATORS.SHORT_NAME
6474 -- Used in UI
6475
6476 FUNCTION Get_Objective_By_Kpi(
6477 p_Short_Name IN VARCHAR2
6478 ) RETURN VARCHAR2
6479 IS
6480 l_Count NUMBER;
6481 l_Kpi_Id VARCHAR2(10);
6482 BEGIN
6483 l_Count := 0;
6484
6485 SELECT
6486 COUNT(1)
6487 INTO
6488 l_Count
6489 FROM
6490 bsc_sys_measures m,
6491 bsc_sys_datasets_vl d,
6492 bis_indicators i
6493 WHERE
6494 i.dataset_id = d.dataset_id AND
6495 d.measure_id1 = m.measure_id AND
6496 i.short_name = p_Short_Name AND
6497 m.source = BSC_BIS_MEASURE_PUB.c_BSC;
6498
6499 -- Measure Does not exist or not a BSC Measure
6500 IF l_Count = 0 THEN
6501 RETURN NULL;
6502 END IF;
6503
6504 SELECT DISTINCT INDICATOR
6505 INTO l_Kpi_Id
6506 FROM BSC_KPI_ANALYSIS_OPTIONS_B
6507 WHERE SHORT_NAME = (SELECT SUBSTR(ACTUAL_DATA_SOURCE, 1, INSTR(ACTUAL_DATA_SOURCE, '.') - 1) REGION_CODE
6508 FROM BIS_INDICATORS
6509 WHERE SHORT_NAME = p_Short_Name);
6510
6511 RETURN l_Kpi_Id;
6512
6513 EXCEPTION
6514 WHEN OTHERS THEN
6515 RETURN NULL;
6516
6517 END Get_Objective_By_Kpi;
6518
6519
6520 -- Gets the parameter portlet associated with the current AK Region.
6521 FUNCTION Get_Param_Portlet_By_Region (
6522 p_Region_Code IN VARCHAR2
6523 ) RETURN VARCHAR2
6524 IS
6525 l_Region_Code VARCHAR2(30);
6526
6527 CURSOR cAttrCode IS
6528 SELECT ATTRIBUTE_CODE
6529 FROM AK_REGION_ITEMS
6530 WHERE REGION_CODE = p_Region_Code
6531 AND ITEM_STYLE = BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE
6532 AND NESTED_REGION_CODE IS NOT NULL;
6533 BEGIN
6534
6535 l_Region_Code := NULL;
6536
6537 FOR cAC IN cAttrCode LOOP
6538 l_Region_Code := cAC.ATTRIBUTE_CODE;
6539 END LOOP;
6540
6541 RETURN l_Region_Code;
6542
6543 EXCEPTION
6544 WHEN OTHERS THEN
6545 RETURN NULL;
6546 END Get_Param_Portlet_By_Region;
6547
6548
6549
6550 -- Checks if AS_OF_DATE is enabled for the Parameter Portlet
6551 -- Its recommended that this API be used only for validating Paramter Portlets.
6552 -- Added for Bug#3767168
6553
6554 FUNCTION is_XTD_Enabled (
6555 p_Region_Code IN VARCHAR2
6556 ) RETURN VARCHAR2
6557 IS
6558 l_Count NUMBER;
6559 BEGIN
6560
6561 l_Count := 0;
6562
6563 SELECT COUNT(1)
6564 INTO l_Count
6565 FROM AK_REGION_ITEMS
6566 WHERE REGION_CODE = p_Region_Code
6567 AND ATTRIBUTE_CODE = BSC_BIS_KPI_CRUD_PUB.C_AS_OF_DATE;
6568
6569 IF (l_Count = 0) THEN
6570 RETURN FND_API.G_FALSE;
6571 ELSE
6572 RETURN FND_API.G_TRUE;
6573 END IF;
6574
6575 EXCEPTION
6576 WHEN OTHERS THEN
6577 RETURN FND_API.G_FALSE;
6578 END is_XTD_Enabled;
6579
6580
6581 -- Checks if AS_OF_DATE is enabled for the Parameter Portlet
6582 -- Overloaded for AGRD
6583 FUNCTION is_XTD_Enabled (
6584 p_Time_Dimension_Objects IN BSC_VARCHAR2_TBL_TYPE
6585 ) RETURN VARCHAR2
6586 IS
6587 BEGIN
6588
6589 FOR i IN 1..p_Time_Dimension_Objects.COUNT LOOP
6590 IF (p_Time_Dimension_Objects(i) = BSC_BIS_KPI_CRUD_PUB.C_AS_OF_DATE) THEN
6591 RETURN FND_API.G_TRUE;
6592 END IF;
6593 END LOOP;
6594
6595
6596 RETURN FND_API.G_FALSE;
6597
6598 EXCEPTION
6599 WHEN OTHERS THEN
6600 RETURN FND_API.G_FALSE;
6601 END is_XTD_Enabled;
6602
6603
6604
6605 /*
6606 Which will return a VARCHAR2 as follows, with objectives ordered by Objective ID
6607 (BSC_KPIS_VL.INDICATOR)
6608
6609 "3001 - Sales Overview Page, 3002 - Email Classification Page, 3003 - ASO BIL Page"
6610
6611 Added for Bug#3780082
6612 */
6613
6614
6615 FUNCTION Get_S2EObjective_With_XTD
6616 RETURN VARCHAR2 IS
6617
6618 l_Name_Holder VARCHAR2(32000); -- needs to be large enough
6619 l_Count NUMBER;
6620
6621 CURSOR c_Obj_Names IS
6622 SELECT (KV.INDICATOR || ' - ' || KV.NAME) XTDOBJECTIVE
6623 FROM BSC_KPIS_VL KV
6624 ,BSC_KPI_CALCULATIONS KC
6625 WHERE KC.INDICATOR = KV.INDICATOR
6626 AND KC.CALCULATION_ID = BSC_BIS_KPI_CRUD_PUB.C_CALC_XTD
6627 AND KC.USER_LEVEL0 = BSC_BIS_KPI_CRUD_PUB.C_ENABLE_CALC_U0
6628 AND KC.USER_LEVEL1 = BSC_BIS_KPI_CRUD_PUB.C_ENABLE_CALC_U1
6629 AND KV.SHORT_NAME IS NOT NULL
6630 ORDER BY KV.INDICATOR;
6631
6632 BEGIN
6633
6634 l_Name_Holder := NULL;
6635 l_Count := 0;
6636
6637
6638 FOR cObjNames IN c_Obj_Names LOOP
6639 IF (l_Count = 0) THEN
6640 l_Name_Holder := cObjNames.XTDOBJECTIVE;
6641 ELSE
6642 l_Name_Holder := l_Name_Holder || ', ' || cObjNames.XTDOBJECTIVE;
6643 END IF;
6644 l_Count := l_Count + 1;
6645
6646 -- We are restricting display to a maximum of 200 Objectives.
6647 IF (l_Count > BSC_BIS_KPI_CRUD_PUB.C_MAX_OBJECTIVES_DISPLAY) THEN
6648 EXIT;
6649 END IF;
6650 END LOOP;
6651
6652 RETURN l_Name_Holder;
6653
6654
6655 EXCEPTION
6656 WHEN OTHERS THEN
6657 RETURN NULL;
6658 END Get_S2EObjective_With_XTD;
6659
6660
6661 --
6662 -- Returns if the Dimension Object(level) has been excluded from Constant Class
6663 -- BSC_BIS_KPI_CRUD_PUB.G_EXCLUDE_DIMOBJ_CLASS
6664 --
6665 -- Returns "T" if Dimension Object is excluded, else returns "F"
6666 -- Example : PLAN_SNAPSHOT will return "T"
6667 --
6668
6669 FUNCTION Is_Excluded_Dimension_Object(
6670 p_Short_Name IN VARCHAR2
6671 ) RETURN VARCHAR2 IS
6672
6673 l_Index NUMBER;
6674 l_Return VARCHAR2(3);
6675
6676 BEGIN
6677 l_Return := FND_API.G_FALSE;
6678
6679 FOR l_Index IN 1..G_EXCLUDE_DIMOBJ_CLASS.LAST LOOP
6680 IF (p_Short_Name = G_EXCLUDE_DIMOBJ_CLASS(l_Index)) THEN
6681 l_Return := FND_API.G_TRUE;
6682 EXIT;
6683 END IF;
6684 END LOOP;
6685
6686 RETURN l_Return;
6687
6688 EXCEPTION
6689 WHEN OTHERS THEN
6690 RETURN FND_API.G_FALSE;
6691 END Is_Excluded_Dimension_Object;
6692
6693
6694
6695 -- Validates of the Start-to-End KPI can be deleted using the Delete button from Update KPI Page.
6696 -- This implementation is not complete at this point of time
6697 -- None of the messages have been approved by PM, so please do not modify the API
6698 PROCEDURE Validate_Kpi_Delete
6699 (
6700 p_Measure_Short_Name IN VARCHAR2
6701 , x_Return_Status OUT NOCOPY VARCHAR2
6702 , x_Msg_Count OUT NOCOPY NUMBER
6703 , x_Msg_Data OUT NOCOPY VARCHAR2
6704 ) IS
6705 l_Return_Status VARCHAR2(3);
6706 l_Msg_Count NUMBER;
6707 l_Return_Msg VARCHAR2(32000);
6708 l_Message VARCHAR2(32000);
6709 l_Temp_Message VARCHAR2(32000);
6710 l_Dep_Message VARCHAR2(32000);
6711 l_Measure_Short_Name BIS_INDICATORS.SHORT_NAME%TYPE;
6712 l_Report_Function_Name BIS_INDICATORS.FUNCTION_NAME%TYPE;
6713 l_Parent_Obj_Table BIS_RSG_PUB_API_PKG.t_BIA_RSG_Obj_Table;
6714 l_Index_Count NUMBER;
6715 l_Trigger_Exception BOOLEAN;
6716 l_Trigger_Warning BOOLEAN;
6717 l_Loop NUMBER;
6718 l_Parent_Object_Type VARCHAR2(10);
6719 l_Kpi_Name BIS_INDICATORS_TL.NAME%TYPE;
6720
6721 l_Msg_Count_Size NUMBER;
6722 l_Msg_Max_Count_Size NUMBER;
6723 l_Msg_Exceeds_Size BOOLEAN;
6724 l_Tmp_Msg_Count_Size NUMBER;
6725
6726 CURSOR c_Tab_List IS
6727 SELECT T.NAME
6728 FROM BSC_TABS_VL T
6729 , BSC_TAB_INDICATORS TI
6730 , BSC_KPI_ANALYSIS_MEASURES_B AM
6731 , BIS_INDICATORS BI
6732 WHERE BI.SHORT_NAME = l_Measure_Short_Name
6733 AND AM.DATASET_ID = BI.DATASET_ID
6734 AND TI.INDICATOR = AM.INDICATOR
6735 AND T.TAB_ID = TI.TAB_ID;
6736
6737 CURSOR c_Report_List IS
6738 SELECT B.FUNCTION_NAME
6739 FROM BIS_INDICATORS B
6740 WHERE B.SHORT_NAME = l_Measure_Short_Name;
6741
6742 CURSOR c_Kpi_Report_List IS
6743 SELECT K.NAME || ' [' || K.INDICATOR || ']' NAME
6744 FROM BSC_KPIS_VL K
6745 , BSC_KPI_ANALYSIS_MEASURES_B A
6746 , BIS_INDICATORS B
6747 WHERE K.INDICATOR = A.INDICATOR
6748 AND A.DATASET_ID = B.DATASET_ID
6749 AND B.SHORT_NAME = l_Measure_Short_Name;
6750
6751 CURSOR c_PMV_Report_List IS
6752 SELECT DISTINCT R.NAME NAME
6753 FROM AK_REGION_ITEMS RI,
6754 AK_REGIONS_VL R
6755 WHERE RI.ATTRIBUTE1 IN ('MEASURE', 'MEASURE_NOTARGET')
6756 AND RI.ATTRIBUTE2 = l_Measure_Short_Name
6757 AND RI.REGION_CODE = R.REGION_CODE;
6758 BEGIN
6759
6760 FND_MSG_PUB.Initialize;
6761 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6762
6763
6764 l_Index_Count := 0;
6765 l_Measure_Short_Name := p_Measure_Short_Name;
6766 l_Trigger_Exception := FALSE;
6767 l_Trigger_Warning := FALSE;
6768
6769 l_Msg_Count_Size := 0;
6770 l_Tmp_Msg_Count_Size := 0;
6771 l_Msg_Max_Count_Size := BSC_BIS_KPI_CRUD_PUB.C_MAX_MESSAGE_SIZE;
6772 l_Msg_Exceeds_Size := FALSE;
6773
6774 FOR cReportList IN c_Report_List LOOP
6775 l_Report_Function_Name := cReportList.FUNCTION_NAME;
6776 END LOOP;
6777
6778 l_Message := '<ol>';
6779
6780
6781 -- The same code needs to be executed for KPI Portlets and DBI Pages, hence the look 1..2
6782 FOR l_Loop IN 1..2 LOOP
6783
6784 IF (NOT l_Msg_Exceeds_Size) THEN
6785 IF l_Loop = 1 THEN
6786 l_Parent_Object_Type := 'PAGE';
6787 ELSE
6788 l_Parent_Object_Type := 'PORTLET';
6789 END IF;
6790
6791 l_Index_Count := 0;
6792 -- Get a list of Pages associated with the (RSG BIA Cache table)
6793 l_Parent_Obj_Table := BIS_RSG_PUB_API_PKG.GetParentObjects
6794 (
6795 p_Dep_Obj_Name => l_Report_Function_Name
6796 , p_Dep_Obj_Type => 'REPORT'
6797 , p_Obj_Type => l_Parent_Object_Type
6798 , x_Return_Status => l_Return_Status
6799 , x_Msg_Data => l_Return_Msg
6800 );
6801 IF ((l_Return_Status IS NOT NULL) AND (l_Return_Status <> FND_API.G_RET_STS_SUCCESS)) THEN
6802 FND_MSG_PUB.Initialize;
6803 FND_MESSAGE.SET_NAME('BIS',l_Return_Msg);
6804 FND_MSG_PUB.ADD;
6805 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6806 END IF;
6807
6808 -- If the Report is associated with more than 1 Overview pages/KPI List.
6809 IF (l_Parent_Obj_Table.COUNT > 1) THEN
6810
6811
6812 l_Index_Count := l_Parent_Obj_Table.FIRST;
6813
6814 LOOP
6815 IF l_Loop = 1 THEN
6816 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DEP_DBIPAGE'); -- Need to use BSC_KPI_DEP_DBIPAGE
6817 l_Trigger_Warning := TRUE;
6818 ELSE
6819 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DEP_KPI_REGION'); -- Message here is correct BSC_KPI_DEP_KPI_REGION
6820 l_Trigger_Exception := TRUE;
6821
6822 END IF;
6823
6824 FND_MESSAGE.SET_TOKEN('DEP_OBJECT',BSC_BIS_CUSTOM_KPI_UTIL_PUB.Get_User_Function_Name(l_Parent_Obj_Table(l_Index_Count).Object_Name));
6825 l_Dep_Message := '<li type=1>'||FND_MESSAGE.GET || '</li>';
6826
6827
6828 IF (LENGTH(l_Message||l_Dep_Message) >= l_Msg_Max_Count_Size) THEN
6829 l_Msg_Exceeds_Size := TRUE;
6830 EXIT;
6831 ELSE
6832 l_Message := l_Message || l_Dep_Message;
6833 END IF;
6834
6835 EXIT WHEN l_Index_Count = l_Parent_Obj_Table.LAST;
6836 l_Index_Count := l_Parent_Obj_Table.NEXT(l_Index_Count);
6837 END LOOP;
6838
6839 END IF;
6840 END IF;
6841 END LOOP;
6842
6843 -- Case #1
6844 -- Check for Scorecards
6845 IF (NOT l_Msg_Exceeds_Size) THEN
6846 OPEN c_Tab_List;
6847 LOOP
6848 FETCH c_Tab_List INTO l_Dep_Message;
6849 EXIT WHEN c_Tab_List%NOTFOUND;
6850
6851 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DEP_SCORECARD'); -- Need to use BSC_KPI_DEP_SCORECARD
6852 FND_MESSAGE.SET_TOKEN('DEP_OBJECT', l_Dep_Message);
6853 l_Dep_Message := FND_MESSAGE.GET;
6854
6855 l_Temp_Message := l_Temp_Message || '<li type=1>'||l_Dep_Message || '</li>';
6856 END LOOP;
6857
6858
6859 -- There is no need to log message if we have only 1 or 0 Scorecards associated to the KPI
6860 IF c_Tab_List%ROWCOUNT > 1 THEN
6861 IF(LENGTH(l_Message || l_Temp_Message) >= l_Msg_Max_Count_Size) THEN
6862 l_Msg_Exceeds_Size := TRUE;
6863 ELSE
6864 l_Trigger_Exception := TRUE;
6865 l_Message := l_Message || l_Temp_Message;
6866 END IF;
6867 END IF;
6868 CLOSE c_Tab_List;
6869 END IF;
6870
6871 -- Case #2
6872 -- Check for KPI reports in iViewer
6873 IF (NOT l_Msg_Exceeds_Size) THEN
6874 OPEN c_Kpi_Report_List;
6875 LOOP
6876 FETCH c_Kpi_Report_List INTO l_Dep_Message;
6877 EXIT WHEN c_Kpi_Report_List%NOTFOUND;
6878
6879 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DEP_KPIREPORT'); -- Need to use BSC_KPI_DEP_KPIREPORT
6880 FND_MESSAGE.SET_TOKEN('DEP_OBJECT', l_Dep_Message);
6881 l_Dep_Message := FND_MESSAGE.GET;
6882
6883 l_Temp_Message := l_Temp_Message || '<li type=1>'||l_Dep_Message || '</li>';
6884
6885 END LOOP;
6886
6887 -- There is no need to log message if we have only 1 Objective(s) associated to the KPI
6888 IF c_Kpi_Report_List%ROWCOUNT > 1 THEN
6889 IF(LENGTH(l_Message || l_Temp_Message) >= l_Msg_Max_Count_Size) THEN
6890 l_Msg_Exceeds_Size := TRUE;
6891 ELSE
6892 l_Trigger_Exception := TRUE;
6893 l_Message := l_Message || l_Temp_Message;
6894 END IF;
6895 END IF;
6896 CLOSE c_Kpi_Report_List;
6897 END IF;
6898
6899
6900 -- Case #3
6901 -- Check for PMV Reports
6902 IF (NOT l_Msg_Exceeds_Size) THEN
6903 OPEN c_PMV_Report_List;
6904 LOOP
6905 FETCH c_PMV_Report_List INTO l_Dep_Message;
6906 EXIT WHEN c_PMV_Report_List%NOTFOUND;
6907
6908 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DEP_KPI_REGION'); -- Need to use BSC_KPI_DEP_PMVREPORT
6909 FND_MESSAGE.SET_TOKEN('DEP_OBJECT', l_Dep_Message);
6910 l_Dep_Message := FND_MESSAGE.GET;
6911
6912 l_Temp_Message := l_Temp_Message || '<li type=1>'||l_Dep_Message || '</li>';
6913
6914 END LOOP;
6915
6916 -- There is no need to log message if we have only 1 Report(s) associated to the KPI
6917 IF c_PMV_Report_List%ROWCOUNT > 1 THEN
6918 IF(LENGTH(l_Message || l_Temp_Message) >= l_Msg_Max_Count_Size) THEN
6919 l_Msg_Exceeds_Size := TRUE;
6920 ELSE
6921 l_Trigger_Exception := TRUE;
6922 l_Message := l_Message || l_Temp_Message;
6923 END IF;
6924 END IF;
6925 CLOSE c_PMV_Report_List;
6926 END IF;
6927
6928 l_Message := l_Message || '</ol>';
6929
6930 BEGIN
6931 SELECT NAME
6932 INTO l_Kpi_Name
6933 FROM BIS_INDICATORS_VL
6934 WHERE SHORT_NAME = l_Measure_Short_Name;
6935 EXCEPTION WHEN OTHERS THEN
6936 l_Kpi_Name := l_Measure_Short_Name;
6937 END;
6938
6939 IF (l_Trigger_Warning = TRUE AND l_Trigger_Exception = FALSE) THEN
6940 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_DELETE_WARNING');
6941 FND_MESSAGE.SET_TOKEN('OBJ_NAME', l_Kpi_Name);
6942 FND_MESSAGE.SET_TOKEN('DEP_OBJ_LIST', l_Message);
6943 FND_MSG_PUB.ADD;
6944 FND_MSG_PUB.Count_And_Get
6945 ( p_encoded => FND_API.G_FALSE
6946 , p_count => x_Msg_Count
6947 , p_data => x_Msg_Data
6948 );
6949 END IF;
6950
6951 IF (l_Trigger_Exception = TRUE ) THEN
6952 FND_MESSAGE.SET_NAME('BSC','BSC_KPI_IN_USE');
6953 FND_MESSAGE.SET_TOKEN('OBJ_NAME', l_Kpi_Name);
6954 FND_MESSAGE.SET_TOKEN('DEP_OBJ_LIST', l_Message);
6955 FND_MSG_PUB.ADD;
6956 RAISE FND_API.G_EXC_ERROR;
6957 END IF;
6958
6959 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
6960
6961 EXCEPTION
6962 WHEN FND_API.G_EXC_ERROR THEN
6963 IF (c_Kpi_Report_List%ISOPEN) THEN
6964 CLOSE c_Kpi_Report_List;
6965 END IF;
6966
6967 IF (c_Tab_List%ISOPEN) THEN
6968 CLOSE c_Tab_List;
6969 END IF;
6970
6971 IF (c_PMV_Report_List%ISOPEN) THEN
6972 CLOSE c_PMV_Report_List;
6973 END IF;
6974
6975 FND_MSG_PUB.Count_And_Get
6976 ( p_encoded => FND_API.G_FALSE
6977 , p_count => x_Msg_Count
6978 , p_data => x_Msg_Data
6979 );
6980
6981 x_Return_Status := FND_API.G_RET_STS_ERROR;
6982 WHEN OTHERS THEN
6983 IF (c_Kpi_Report_List%ISOPEN) THEN
6984 CLOSE c_Kpi_Report_List;
6985 END IF;
6986
6987 IF (c_Tab_List%ISOPEN) THEN
6988 CLOSE c_Tab_List;
6989 END IF;
6990
6991 IF (c_PMV_Report_List%ISOPEN) THEN
6992 CLOSE c_PMV_Report_List;
6993 END IF;
6994
6995 FND_MSG_PUB.Count_And_Get
6996 ( p_encoded => FND_API.G_FALSE
6997 , p_count => x_Msg_Count
6998 , p_data => x_Msg_Data
6999 );
7000
7001 IF (x_Msg_Data IS NOT NULL) THEN
7002 x_Msg_Data := x_Msg_Data; --||' -> BSC_BIS_KPI_CRUD_PUB.Validate_Kpi_Delete ';
7003 ELSE
7004 x_Msg_Data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Validate_Kpi_Delete ';
7005 END IF;
7006 x_Return_Status := FND_API.G_RET_STS_ERROR;
7007
7008
7009 END Validate_Kpi_Delete;
7010
7011
7012 -- Loads DBI calendar required for Start-to-End KPI.
7013 PROCEDURE Populate_DBI_Calendar
7014 (
7015 x_Return_Status OUT NOCOPY VARCHAR2
7016 , x_Msg_Count OUT NOCOPY NUMBER
7017 , x_Msg_Data OUT NOCOPY VARCHAR2
7018 ) IS
7019
7020 l_Error_Msg VARCHAR2(255);
7021 BEGIN
7022
7023 FND_MSG_PUB.Initialize;
7024 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
7025
7026 -- call the DBI API to populate DBI Calendars into BSC_SYS_CALENDARS and BSC_SYS_PERIODICITIES.
7027 BSC_DBI_CALENDAR.Load_Dbi_Cal_Metadata(l_Error_Msg);
7028
7029 IF (l_Error_Msg IS NOT NULL) THEN
7030 FND_MESSAGE.SET_NAME('BSC','BSC_ERR_LOAD_DBI_CAL_METADATA');
7031 FND_MESSAGE.SET_TOKEN('ERRMSG', l_Error_Msg);
7032 FND_MSG_PUB.ADD;
7033 RAISE FND_API.G_EXC_ERROR;
7034 END IF;
7035
7036 EXCEPTION
7037 WHEN FND_API.G_EXC_ERROR THEN
7038 FND_MSG_PUB.Count_And_Get
7039 ( p_encoded => FND_API.G_FALSE
7040 , p_count => x_Msg_Count
7041 , p_data => x_Msg_Data
7042 );
7043
7044 x_Return_Status := FND_API.G_RET_STS_ERROR;
7045 WHEN OTHERS THEN
7046 FND_MSG_PUB.Count_And_Get
7047 ( p_encoded => FND_API.G_FALSE
7048 , p_count => x_Msg_Count
7049 , p_data => x_Msg_Data
7050 );
7051
7052 IF (x_Msg_Data IS NOT NULL) THEN
7053 x_Msg_Data := x_Msg_Data||' -> BSC_BIS_KPI_CRUD_PUB.Populate_DBI_Calendar ';
7054 ELSE
7055 x_Msg_Data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Populate_DBI_Calendar ';
7056 END IF;
7057 x_Return_Status := FND_API.G_RET_STS_ERROR;
7058
7059 END Populate_DBI_Calendar;
7060
7061 -- added for Bug#3777647
7062 PROCEDURE Get_Region_Codes_By_Short_Name (
7063 p_Short_Name IN VARCHAR
7064 , x_Region_Codes OUT NOCOPY VARCHAR2
7065 ) IS
7066
7067 l_Kpi_Id NUMBER;
7068 l_Count NUMBER;
7069
7070 -- short_name now stores the AK Region codes for the Objective AOs
7071 CURSOR c_Regions IS
7072 SELECT SHORT_NAME
7073 FROM BSC_KPI_ANALYSIS_OPTIONS_B
7074 WHERE INDICATOR = l_Kpi_Id;
7075
7076 BEGIN
7077
7078 l_Count := 0;
7079 x_Region_Codes := NULL;
7080
7081 l_Kpi_Id := NVL(Get_Objective_By_Kpi(p_Short_Name), BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY);
7082
7083 IF l_Kpi_Id <> BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY THEN
7084 FOR cRgn IN c_Regions LOOP
7085 IF l_Count = 0 THEN
7086 x_Region_Codes := cRgn.SHORT_NAME;
7087 ELSE
7088 x_Region_Codes := x_Region_Codes || ','|| cRgn.SHORT_NAME;
7089 END IF;
7090 l_Count := l_Count + 1;
7091 END LOOP;
7092 END IF;
7093
7094
7095 EXCEPTION
7096 WHEN OTHERS THEN
7097 x_Region_Codes := NULL;
7098 END Get_Region_Codes_By_Short_Name;
7099
7100
7101 /*
7102 Check_XTD_Summarization returns the error message, when the XTD is available at the
7103 Parameter Portlet level and the profile ADV Summarization is truned off.
7104 */
7105
7106 PROCEDURE Check_XTD_Summarization
7107 (
7108 p_Param_Portlet_Region_Code IN VARCHAR2
7109 , x_Return_Status OUT NOCOPY VARCHAR2
7110 , x_Msg_Count OUT NOCOPY NUMBER
7111 , x_Msg_Data OUT NOCOPY VARCHAR2
7112 )
7113 IS
7114 BEGIN
7115 FND_MSG_PUB.Initialize;
7116
7117 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
7118
7119 IF (p_Param_Portlet_Region_Code IS NULL) THEN
7120 FND_MESSAGE.SET_NAME('BSC','BSC_NO_PARAM_PORTLET');
7121 FND_MSG_PUB.ADD;
7122 RAISE FND_API.G_EXC_ERROR;
7123 END IF;
7124
7125 -- Check if AS_OF_DATE is enabled at the Paramter Portlet
7126 IF (is_XTD_Enabled(p_Param_Portlet_Region_Code) = FND_API.G_TRUE) THEN
7127 -- Check if Advance Summarization Profile >= 0, else throw and error.
7128 IF (BSC_UTILITY.Is_Adv_Summarization_Enabled = FND_API.G_FALSE) THEN
7129 FND_MESSAGE.SET_NAME('BSC','BSC_ENABLE_ADV_SUMMARIZATION');
7130 FND_MSG_PUB.ADD;
7131 RAISE FND_API.G_EXC_ERROR;
7132 END IF;
7133 END IF;
7134
7135 EXCEPTION
7136 WHEN FND_API.G_EXC_ERROR THEN
7137 FND_MSG_PUB.Count_And_Get
7138 ( p_encoded => FND_API.G_FALSE
7139 , p_count => x_Msg_Count
7140 , p_data => x_Msg_Data
7141 );
7142
7143 x_Return_Status := FND_API.G_RET_STS_ERROR;
7144 WHEN OTHERS THEN
7145 FND_MSG_PUB.Count_And_Get
7146 ( p_encoded => FND_API.G_FALSE
7147 , p_count => x_Msg_Count
7148 , p_data => x_Msg_Data
7149 );
7150
7151 IF (x_Msg_Data IS NOT NULL) THEN
7152 x_Msg_Data := x_Msg_Data||' -> BSC_BIS_KPI_CRUD_PUB.Check_XTD_Summarization ';
7153 ELSE
7154 x_Msg_Data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Check_XTD_Summarization ';
7155 END IF;
7156 x_Return_Status := FND_API.G_RET_STS_ERROR;
7157
7158 END Check_XTD_Summarization;
7159
7160 -- Return the Custom KPI details for Bug#3814292
7161 PROCEDURE Get_Kpi_Details
7162 (
7163 p_Measure_Short_Name IN VARCHAR2
7164 , x_Kpi_Name OUT NOCOPY VARCHAR2
7165 , x_Report_Code OUT NOCOPY VARCHAR2
7166 ) IS
7167 BEGIN
7168 BEGIN
7169 SELECT NAME
7170 INTO x_Kpi_Name
7171 FROM BSC_SYS_DATASETS_VL
7172 WHERE DATASET_ID = Get_Dataset_Id(p_Measure_Short_Name);
7173 EXCEPTION
7174 WHEN OTHERS THEN
7175 x_Kpi_Name := NULL;
7176 END;
7177
7178
7179 BEGIN
7180 SELECT SUBSTR(ACTUAL_DATA_SOURCE, 1, INSTR(ACTUAL_DATA_SOURCE, '.') - 1)
7181 INTO x_Report_Code
7182 FROM BIS_INDICATORS
7183 WHERE SHORT_NAME = p_Measure_Short_Name;
7184 EXCEPTION
7185 WHEN OTHERS THEN
7186 x_Report_Code := NULL;
7187 END;
7188
7189 EXCEPTION
7190 WHEN OTHERS THEN
7191 NULL;
7192 END Get_Kpi_Details;
7193
7194
7195 /*
7196 This API takes the format ID.
7197 The format id 0, 1, 2 in BSC represents percentage format and the rest is of non-percent
7198 type
7199
7200 This API returns the display type for the Change Attribute for a PMV report and
7201 implements the standard has been for change to be displayed in units if actual
7202 is in percent, and change displayed in percent if actual displayed in units.
7203
7204 */
7205
7206 FUNCTION Get_Change_Disp_Type_By_Mask (
7207 p_Format_Id NUMBER
7208 ) RETURN VARCHAR2 IS
7209
7210 l_Display_Type VARCHAR2(5);
7211 l_Format_Id NUMBER;
7212
7213 BEGIN
7214
7215 l_Format_Id := p_Format_Id;
7216 l_Display_Type := BSC_BIS_KPI_CRUD_PUB.C_FORMAT_POINTER; -- displays %age
7217
7218 -- Check for standard format ids
7219 IF (p_Format_Id NOT IN (0, 1, 2, 5, 6, 7)) THEN
7220 l_Format_Id := 0;
7221 END IF;
7222
7223 -- If format_id is 0, 1 or 2 it means that the Display Mask is
7224 -- percentage, we then should return integer, else we must return
7225 -- percentage as the display type
7226
7227 IF (l_Format_Id IN (0, 1, 2)) THEN
7228 l_Display_Type := BSC_BIS_KPI_CRUD_PUB.C_FORMAT_INTEGER;
7229 ELSE
7230 l_Display_Type := BSC_BIS_KPI_CRUD_PUB.C_FORMAT_POINTER;
7231 END IF;
7232
7233
7234 RETURN l_Display_Type;
7235
7236 EXCEPTION
7237 WHEN OTHERS THEN
7238 RETURN l_Display_Type;
7239 END Get_Change_Disp_Type_By_Mask;
7240
7241
7242 -- added for bug#3893949
7243
7244 /*
7245 API to delete S2E Objective and all the analysis options under the Objective
7246 deleting each analysis option will delete the assosiated base Measure,
7247 Fnd Form function and Report.
7248 */
7249 PROCEDURE Delete_S2E_Objective(
7250 p_commit IN VARCHAR2 := FND_API.G_FALSE
7251 ,p_indicator IN NUMBER
7252 ,x_return_status OUT NOCOPY VARCHAR2
7253 ,x_msg_count OUT NOCOPY NUMBER
7254 ,x_msg_data OUT NOCOPY VARCHAR2
7255 ) IS
7256
7257 l_measure_shortname BIS_INDICATORS.SHORT_NAME%TYPE;
7258 l_ana_option0 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION0%TYPE;
7259 l_ana_option1 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION1%TYPE;
7260 l_ana_option2 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION2%TYPE;
7261 l_series_id BSC_KPI_ANALYSIS_MEASURES_B.SERIES_ID%TYPE;
7262
7263 CURSOR c_get_ana_options IS
7264 SELECT a.indicator,a.analysis_option0,a.analysis_option1,a.analysis_option2,a.series_id
7265 FROM bsc_oaf_analysys_opt_comb_v a
7266 WHERE a.indicator = p_indicator;
7267
7268 CURSOR c_get_measure_short_name(p_ana_option0 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION0%TYPE
7269 ,p_ana_option1 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION1%TYPE
7270 ,p_ana_option2 BSC_KPI_ANALYSIS_MEASURES_B.ANALYSIS_OPTION2%TYPE
7271 ,p_series_id BSC_KPI_ANALYSIS_MEASURES_B.SERIES_ID%TYPE) IS
7272 SELECT a.short_name FROM bis_indicators a,bsc_kpi_analysis_measures_b b
7273 WHERE a.dataset_id = b.dataset_id
7274 AND B.INDICATOR = p_indicator
7275 AND B.ANALYSIS_OPTION0 = p_ana_option0
7276 AND B.ANALYSIS_OPTION1 = p_ana_option1
7277 AND B.ANALYSIS_OPTION2 = p_ana_option2
7278 AND B.SERIES_ID = p_series_id;
7279
7280 TYPE shortnames_array IS TABLE OF BIS_INDICATORS.SHORT_NAME%TYPE INDEX BY BINARY_INTEGER;
7281 l_measure_names shortnames_array;
7282 l_index pls_integer;
7283
7284 BEGIN
7285 x_return_status := FND_API.G_RET_STS_SUCCESS;
7286 l_index := 1;
7287
7288 FOR cd_get_analysis_option IN c_get_ana_options LOOP
7289 l_ana_option0 := cd_get_analysis_option.analysis_option0;
7290 l_ana_option1 := cd_get_analysis_option.analysis_option1;
7291 l_ana_option2 := cd_get_analysis_option.analysis_option2;
7292 l_series_id := cd_get_analysis_option.series_id;
7293
7294 IF (c_get_measure_short_name%ISOPEN) THEN
7295 CLOSE c_get_measure_short_name;
7296 END IF;
7297
7298 OPEN c_get_measure_short_name(l_ana_option0,l_ana_option1,l_ana_option2,l_series_id);
7299 FETCH c_get_measure_short_name INTO l_measure_shortname;
7300 CLOSE c_get_measure_short_name;
7301
7302 l_measure_names(l_index) := l_measure_shortname;
7303 l_index := l_index +1;
7304 END LOOP;
7305
7306 l_index := l_measure_names.first;
7307 WHILE l_index IS NOT NULL
7308 LOOP
7309 l_measure_shortname := l_measure_names(l_index);
7310 BSC_BIS_KPI_CRUD_PUB.Delete_Kpi_End_To_End(
7311 p_Commit => p_commit,
7312 p_Param_Portlet_Region_Code => 'DUMMY',
7313 p_Measure_Short_Name => l_measure_shortname,
7314 p_Page_Function_Name => NULL,
7315 p_Kpi_Portlet_Function_Name => NULL,
7316 x_Return_Status => x_return_status ,
7317 x_Msg_Count => x_msg_count ,
7318 x_Msg_Data => x_msg_data);
7319 l_index := l_measure_names.next(l_index);
7320 END LOOP;
7321
7322 IF(p_Commit = FND_API.G_TRUE) THEN
7323 commit;
7324 END IF;
7325
7326 EXCEPTION
7327 WHEN FND_API.G_EXC_ERROR THEN
7328 IF (x_msg_data IS NULL) THEN
7329 FND_MSG_PUB.Count_And_Get
7330 ( p_encoded => FND_API.G_FALSE
7331 ,p_count => x_msg_count
7332 ,p_data => x_msg_data
7333 );
7334 END IF;
7335 x_return_status := FND_API.G_RET_STS_ERROR;
7336 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7337 IF (x_msg_data IS NULL) THEN
7338 FND_MSG_PUB.Count_And_Get
7339 ( p_encoded => FND_API.G_FALSE
7340 ,p_count => x_msg_count
7341 ,p_data => x_msg_data
7342 );
7343 END IF;
7344 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7345 WHEN NO_DATA_FOUND THEN
7346 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7347 IF (x_msg_data IS NOT NULL) THEN
7348 x_msg_data := x_msg_data||' -> Delete_S2E_Objective ';
7349 ELSE
7350 x_msg_data := SQLERRM||' at Delete_S2E_Objective ';
7351 END IF;
7352 WHEN OTHERS THEN
7353 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7354 IF (x_msg_data IS NOT NULL) THEN
7355 x_msg_data := x_msg_data||' -> Delete_S2E_Objective ';
7356 ELSE
7357 x_msg_data := SQLERRM||' at Delete_S2E_Objective ';
7358 END IF;
7359 END Delete_S2E_Objective;
7360
7361
7362 /*
7363 API to delete S2E Objective Group. This is wrapper API to delete Objective group after
7364 deleting all objectives under this group.
7365 */
7366
7367 PROCEDURE Delete_S2E_ObjectiveGroup(
7368 p_commit IN VARCHAR2 := FND_API.G_FALSE
7369 ,p_tabId IN NUMBER
7370 ,x_return_status OUT NOCOPY VARCHAR2
7371 ,x_msg_count OUT NOCOPY NUMBER
7372 ,x_msg_data OUT NOCOPY VARCHAR2
7373 ) IS
7374
7375 l_kpiGroup_id bsc_tab_ind_groups_vl.IND_GROUP_ID%TYPE;
7376
7377 CURSOR c_get_kpiGroup IS
7378 SELECT ind_group_id FROM bsc_tab_ind_groups_vl
7379 WHERE tab_id = p_tabId;
7380
7381 BEGIN
7382
7383 IF(c_get_kpiGroup%ISOPEN) THEN
7384 CLOSE c_get_kpiGroup;
7385 END IF;
7386
7387 OPEN c_get_kpiGroup;
7388 FETCH c_get_kpiGroup INTO l_kpiGroup_id;
7389 CLOSE c_get_kpiGroup;
7390
7391 BSC_PMF_UI_WRAPPER.Delete_Kpi_Group(
7392 p_kpi_group_id => l_kpiGroup_id
7393 , p_tab_id => -1
7394 , x_return_status => x_return_status
7395 , x_msg_count => x_msg_count
7396 , x_msg_data => x_msg_data
7397 );
7398
7399 IF(p_Commit = FND_API.G_TRUE) THEN
7400 commit;
7401 END IF;
7402
7403 EXCEPTION
7404 WHEN FND_API.G_EXC_ERROR THEN
7405 IF (x_msg_data IS NULL) THEN
7406 FND_MSG_PUB.Count_And_Get
7407 ( p_encoded => FND_API.G_FALSE
7408 ,p_count => x_msg_count
7409 ,p_data => x_msg_data
7410 );
7411 END IF;
7412 x_return_status := FND_API.G_RET_STS_ERROR;
7413 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7414 IF (x_msg_data IS NULL) THEN
7415 FND_MSG_PUB.Count_And_Get
7416 ( p_encoded => FND_API.G_FALSE
7417 ,p_count => x_msg_count
7418 ,p_data => x_msg_data
7419 );
7420 END IF;
7421 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7422 WHEN NO_DATA_FOUND THEN
7423 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7424 IF (x_msg_data IS NOT NULL) THEN
7425 x_msg_data := x_msg_data||' -> Delete_S2E_ObjectiveGroup';
7426 ELSE
7427 x_msg_data := SQLERRM||' at Delete_S2E_ObjectiveGroup ';
7428 END IF;
7429 WHEN OTHERS THEN
7430 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7431 IF (x_msg_data IS NOT NULL) THEN
7432 x_msg_data := x_msg_data||' -> Delete_S2E_ObjectiveGroup ';
7433 ELSE
7434 x_msg_data := SQLERRM||' at Delete_S2E_ObjectiveGroup ';
7435 END IF;
7436 END Delete_S2E_ObjectiveGroup;
7437
7438 /*
7439 API to delete S2E Scorecard. This is wrapper API to delete scorecard
7440 */
7441 PROCEDURE Delete_S2E_Scorecard(
7442 p_commit IN VARCHAR2 := FND_API.G_FALSE
7443 ,p_tabId IN number
7444 ,x_return_status OUT NOCOPY varchar2
7445 ,x_msg_count OUT NOCOPY number
7446 ,x_msg_data OUT NOCOPY varchar2
7447 ) IS
7448 BEGIN
7449 BSC_PMF_UI_WRAPPER.Delete_Tab(
7450 p_tab_id => p_tabId
7451 , x_return_status => x_return_status
7452 , x_msg_count => x_msg_count
7453 , x_msg_data => x_msg_data
7454 );
7455
7456 IF(p_Commit = FND_API.G_TRUE) THEN
7457 commit;
7458 END IF;
7459
7460 EXCEPTION
7461 WHEN FND_API.G_EXC_ERROR THEN
7462 IF (x_msg_data IS NULL) THEN
7463 FND_MSG_PUB.Count_And_Get
7464 ( p_encoded => FND_API.G_FALSE
7465 ,p_count => x_msg_count
7466 ,p_data => x_msg_data
7467 );
7468 END IF;
7469 x_return_status := FND_API.G_RET_STS_ERROR;
7470 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7471 IF (x_msg_data IS NULL) THEN
7472 FND_MSG_PUB.Count_And_Get
7473 ( p_encoded => FND_API.G_FALSE
7474 ,p_count => x_msg_count
7475 ,p_data => x_msg_data
7476 );
7477 END IF;
7478 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7479 WHEN NO_DATA_FOUND THEN
7480 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7481 IF (x_msg_data IS NOT NULL) THEN
7482 x_msg_data := x_msg_data||' -> BSC_PMF_UI_WRAPPER.Delete_Tab ';
7483 ELSE
7484 x_msg_data := SQLERRM||' at BSC_PMF_UI_WRAPPER.Delete_Tab ';
7485 END IF;
7486 WHEN OTHERS THEN
7487 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7488 IF (x_msg_data IS NOT NULL) THEN
7489 x_msg_data := x_msg_data||' -> BSC_PMF_UI_WRAPPER.Delete_Tab ';
7490 ELSE
7491 x_msg_data := SQLERRM||' at BSC_PMF_UI_WRAPPER.Delete_Tab ';
7492 END IF;
7493 END Delete_S2E_Scorecard;
7494
7495
7496 procedure Delete_S2E_Metadata(
7497 p_commit IN VARCHAR2 := FND_API.G_FALSE
7498 ,p_tab_id IN number
7499 ,x_return_status OUT NOCOPY varchar2
7500 ,x_msg_count OUT NOCOPY number
7501 ,x_msg_data OUT NOCOPY varchar2
7502 ) IS
7503
7504 l_ret_status varchar2(10);
7505 l_msg_data varchar2(2000);
7506 l_msg_count number(5);
7507
7508 l_indicator bsc_tab_indicators.indicator%TYPE;
7509
7510
7511 CURSOR c_tab_indicators IS
7512 SELECT indicator FROM bsc_tab_indicators
7513 WHERE tab_id = p_tab_id;
7514
7515 BEGIN
7516 FND_MSG_PUB.Initialize;
7517 x_return_status := FND_API.G_RET_STS_SUCCESS;
7518
7519 IF (c_tab_indicators%ISOPEN) THEN
7520 CLOSE c_tab_indicators;
7521 END IF;
7522
7523 OPEN c_tab_indicators ;
7524 FETCH c_tab_indicators INTO l_indicator;
7525 CLOSE c_tab_indicators;
7526
7527 Delete_S2E_Objective(
7528 p_commit => FND_API.G_FALSE
7529 ,p_indicator => l_indicator
7530 ,x_return_status => l_ret_status
7531 ,x_msg_count => l_msg_count
7532 ,x_msg_data => l_msg_data );
7533
7534 IF (l_ret_status is not null AND l_ret_status <> FND_API.G_RET_STS_SUCCESS ) THEN
7535 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7536 END IF;
7537
7538 Delete_S2E_ObjectiveGroup(
7539 p_commit => FND_API.G_FALSE
7540 ,p_tabId => p_tab_id
7541 ,x_return_status => l_ret_status
7542 ,x_msg_count => l_msg_count
7543 ,x_msg_data => l_msg_data );
7544
7545
7546 IF (l_ret_status is not null AND l_ret_status <> FND_API.G_RET_STS_SUCCESS ) THEN
7547 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7548 END IF;
7549
7550 Delete_S2E_Scorecard(
7551 p_commit => FND_API.G_FALSE
7552 ,p_tabId => p_tab_id
7553 ,x_return_status => l_ret_status
7554 ,x_msg_count => l_msg_count
7555 ,x_msg_data => l_msg_data );
7556
7557
7558 IF (l_ret_status is not null AND l_ret_status <> FND_API.G_RET_STS_SUCCESS ) THEN
7559 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7560 END IF;
7561
7562 IF(p_Commit = FND_API.G_TRUE) THEN
7563 commit;
7564 END IF;
7565
7566 EXCEPTION
7567 WHEN FND_API.G_EXC_ERROR THEN
7568 IF (x_msg_data IS NULL) THEN
7569 FND_MSG_PUB.Count_And_Get
7570 ( p_encoded => FND_API.G_FALSE
7571 ,p_count => x_msg_count
7572 ,p_data => x_msg_data
7573 );
7574 END IF;
7575 x_return_status := FND_API.G_RET_STS_ERROR;
7576 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7577 IF (x_msg_data IS NULL) THEN
7578 FND_MSG_PUB.Count_And_Get
7579 ( p_encoded => FND_API.G_FALSE
7580 ,p_count => x_msg_count
7581 ,p_data => x_msg_data
7582 );
7583 END IF;
7584 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7585 WHEN NO_DATA_FOUND THEN
7586 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7587 IF (x_msg_data IS NOT NULL) THEN
7588 x_msg_data := x_msg_data||' -> Delete_S2E_Metadata ';
7589 ELSE
7590 x_msg_data := SQLERRM||' at Delete_S2E_Metadata ';
7591 END IF;
7592 WHEN OTHERS THEN
7593 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7594 IF (x_msg_data IS NOT NULL) THEN
7595 x_msg_data := x_msg_data||' -> Delete_S2E_Metadata ';
7596 ELSE
7597 x_msg_data := SQLERRM||' at Delete_S2E_Metadata ';
7598 END IF;
7599 END Delete_S2E_Metadata;
7600
7601 PROCEDURE Get_S2ESCR_DeleteMessage(
7602 p_tabId IN number
7603 ,x_return_status OUT NOCOPY varchar2
7604 ,x_msg_count OUT NOCOPY number
7605 ,x_msg_data OUT NOCOPY varchar2
7606 ) IS
7607
7608 l_objective_name BSC_KPIS_VL.NAME%TYPE;
7609 l_indicator BSC_KPIS_VL.INDICATOR%TYPE;
7610 l_cust_kpi_name bsc_oaf_analysys_opt_comb_v.full_name%TYPE;
7611 l_cust_kpis varchar2(1000) := '';
7612
7613 CURSOR c_get_objective IS
7614 SELECT a.name,a.indicator FROM BSC_KPIS_VL a,BSC_TAB_INDICATORS b
7615 WHERE a.indicator = b.indicator
7616 AND b.tab_id = p_tabId;
7617
7618 CURSOR c_get_custom_Kpis(p_indicator bsc_oaf_analysys_opt_comb_v.indicator%TYPE) IS
7619 SELECT a.full_name FROM bsc_oaf_analysys_opt_comb_v a
7620 WHERE a.indicator = p_indicator;
7621
7622 BEGIN
7623 FND_MSG_PUB.Initialize;
7624 x_return_status := FND_API.G_RET_STS_SUCCESS;
7625
7626 IF(c_get_objective%ISOPEN) THEN
7627 CLOSE c_get_objective;
7628 END IF;
7629 OPEN c_get_objective;
7630 FETCH c_get_objective INTO l_objective_name,l_indicator;
7631 CLOSE c_get_objective;
7632
7633 FOR cd_get_custom_Kpis IN c_get_custom_Kpis(l_indicator) LOOP
7634 l_cust_kpi_name := cd_get_custom_Kpis.full_name;
7635 IF ( l_cust_kpis = '' OR l_cust_kpis IS NULL ) THEN
7636 l_cust_kpis := l_cust_kpi_name;
7637 ELSE
7638 l_cust_kpis := l_cust_kpis || ',' || l_cust_kpi_name;
7639 END IF;
7640 END LOOP;
7641
7642 FND_MESSAGE.SET_NAME('BSC','BSC_SCR_DELETE_WARN');
7643 FND_MESSAGE.SET_TOKEN('OBJECTIVE', l_objective_name);
7644 FND_MESSAGE.SET_TOKEN('CUST_KPI_LIST',l_cust_kpis);
7645 FND_MSG_PUB.ADD;
7646
7647 FND_MSG_PUB.Count_And_Get
7648 ( p_encoded => FND_API.G_FALSE
7649 , p_count => x_msg_count
7650 , p_data => x_msg_data
7651 );
7652
7653 EXCEPTION
7654 WHEN NO_DATA_FOUND THEN
7655 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7656 IF (x_msg_data IS NOT NULL) THEN
7657 x_msg_data := x_msg_data||' -> Get_S2E_Scorecard_DeleteMessage ';
7658 ELSE
7659 x_msg_data := SQLERRM||' at ';
7660 END IF;
7661 WHEN OTHERS THEN
7662 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7663 IF (x_msg_data IS NOT NULL) THEN
7664 x_msg_data := x_msg_data||' -> Get_S2E_Scorecard_DeleteMessage ';
7665 ELSE
7666 x_msg_data := SQLERRM||' at Get_S2E_Scorecard_DeleteMessage ';
7667 END IF;
7668 END Get_S2ESCR_DeleteMessage;
7669
7670
7671 ----added by visuri for Enh. 4035089
7672 FUNCTION Has_Compare_To_Or_Plan (p_param_portlet_region_code IN VARCHAR2)
7673 RETURN BOOLEAN IS
7674 l_count NUMBER;
7675
7676 BEGIN
7677
7678 SELECT COUNT(1)
7679 INTO l_count
7680 FROM ak_region_items AK
7681 WHERE AK.region_code = p_param_portlet_region_code
7682 AND ATTRIBUTE1 IN ('DIMENSION LEVEL',
7683 'DIM LEVEL SINGLE VALUE',
7684 'DIMENSION VALUE',
7685 'HIDE_VIEW_BY',
7686 'HIDE_VIEW_BY_SINGLE',
7687 'HIDE PARAMETER',
7688 'VIEWBY PARAMETER',
7689 'HIDE_DIM_LVL',
7690 'HIDE DIMENSION LEVEL',
7691 'HIDE VIEW BY DIMENSION',
7692 'HIDE_VIEW_BY_DIM_SINGLE')
7693 AND AK.attribute2 LIKE '%+%'
7694 AND (AK.attribute2 LIKE '%TIME_COMPARISON_TYPE%' OR AK.attribute2 LIKE '%PLAN_SNAPSHOT%');
7695
7696
7697 IF (l_count = 0) THEN
7698 RETURN FALSE;
7699 ELSE
7700 RETURN TRUE;
7701 END IF;
7702
7703 EXCEPTION
7704 WHEN OTHERS THEN
7705 RETURN TRUE;
7706 END Has_Compare_To_Or_Plan;
7707
7708
7709 -- added for AGRD
7710 -- Modified for Calendar Enhancement (Bug#4376162)
7711 PROCEDURE Get_Dim_Info_From_ParamPortlet(
7712 p_Dimension_Info IN VARCHAR2
7713 ,x_non_time_dimension_groups OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
7714 ,x_non_time_dimension_objects OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
7715 ,x_non_time_dim_obj_short_names OUT NOCOPY VARCHAR2
7716 ,x_all_dim_group_ids OUT NOCOPY BSC_NUMBER_TBL_TYPE
7717 ,x_non_time_counter OUT NOCOPY NUMBER
7718 ,x_time_dimension_groups OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
7719 ,x_time_dimension_objects OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
7720 ,x_time_dim_obj_short_names OUT NOCOPY VARCHAR2
7721 ,x_time_counter OUT NOCOPY NUMBER
7722 ,x_msg_data OUT NOCOPY VARCHAR2
7723 ,x_is_as_of_date OUT NOCOPY VARCHAR2
7724 ) IS
7725
7726 l_Dimension_Info VARCHAR2(8000);
7727 l_Dim_Plus_DimObj_Info VARCHAR2(512);
7728 l_Display_Sequence NUMBER;
7729 l_Dimension_Grp BSC_VARCHAR2_TBL_TYPE;
7730 l_Dimension_Object BSC_VARCHAR2_TBL_TYPE;
7731 l_Counter NUMBER := 1;
7732 l_Dimension_Grp_Id NUMBER;
7733 l_Msg_Count NUMBER;
7734 l_Dim_Id_Cnt NUMBER;
7735
7736 CURSOR c_DimId IS
7737 SELECT a.DIMENSION_ID
7738 FROM BIS_DIMENSIONS A
7739 WHERE UPPER(a.SHORT_NAME) = UPPER(l_Dimension_Grp(l_Counter));
7740
7741
7742
7743 BEGIN
7744
7745 x_Non_Time_Dim_Obj_Short_Names := NULL;
7746 x_Non_Time_Counter := 1;
7747 x_Time_Counter := 1;
7748 l_Dim_Id_Cnt := 0;
7749 l_Dimension_Info := p_Dimension_Info;
7750 x_All_Dim_Group_Ids(1) := NULL;
7751 x_All_Dim_Group_Ids(2) := NULL;
7752 x_All_Dim_Group_Ids(3) := NULL;
7753 x_All_Dim_Group_Ids(4) := NULL;
7754 x_All_Dim_Group_Ids(5) := NULL;
7755 x_All_Dim_Group_Ids(6) := NULL;
7756 x_All_Dim_Group_Ids(7) := NULL;
7757 x_is_as_of_date := FND_API.G_FALSE;
7758
7759 WHILE (
7760 is_More( p_dim_short_names => l_Dimension_Info
7761 , p_dim_name => l_Dim_Plus_DimObj_Info
7762 )
7763 ) LOOP
7764
7765 l_Dimension_Grp(l_counter) := SUBSTR(l_Dim_Plus_DimObj_Info, 1, INSTR(l_Dim_Plus_DimObj_Info,'+') - 1);
7766 l_Dimension_Object(l_counter) := SUBSTR(l_Dim_Plus_DimObj_Info, INSTR(l_Dim_Plus_DimObj_Info,'+') + 1);
7767
7768 IF (l_Dimension_Grp(l_counter) = C_AS_OF_DATE OR l_Dimension_Object(l_counter) = C_AS_OF_DATE) THEN
7769 x_is_as_of_date := FND_API.G_TRUE;
7770 END IF;
7771
7772 IF ((l_Dimension_Grp(l_counter) <> C_TIME_COMPARISON)
7773 AND ( NOT((l_Dimension_Grp(l_counter) = C_AS_OF_DATE) OR (l_Dimension_Object(l_counter) = C_AS_OF_DATE)))) THEN
7774 IF ((l_Dimension_Grp(l_Counter) <> BSC_BIS_KPI_CRUD_PUB.C_OLTP_TIME) AND
7775 (l_Dimension_Grp(l_Counter) <> BSC_BIS_KPI_CRUD_PUB.C_EDW_TIME) AND
7776 (BSC_BIS_KPI_CRUD_PUB.Is_Dimension_Calendar(l_Dimension_Grp(l_Counter)) <> FND_API.G_TRUE)) THEN
7777
7778 x_Non_Time_Dimension_Groups(x_Non_Time_Counter) := l_Dimension_Grp(l_Counter);
7779 x_Non_Time_Dimension_Objects(x_Non_Time_Counter) := l_dimension_object(l_Counter);
7780
7781 -- concatenate non time dimension object short name
7782 IF (x_Non_Time_Dim_Obj_Short_Names IS NULL) THEN
7783 x_Non_Time_Dim_Obj_Short_Names := l_Dimension_Object(l_Counter);
7784 ELSE
7785 x_Non_Time_Dim_Obj_Short_Names := x_Non_Time_Dim_Obj_Short_Names || ',' || l_Dimension_Object(l_counter);
7786 END IF;
7787
7788 x_Non_Time_Counter := x_Non_Time_Counter + 1;
7789
7790 ELSE -- for time dimension
7791 x_Time_Dimension_Groups(x_Time_Counter) := l_Dimension_Grp(l_Counter);
7792 x_Time_Dimension_Objects(x_Time_Counter) := l_Dimension_Object(l_Counter);
7793
7794 x_Time_Counter := x_time_counter + 1;
7795
7796 -- concatenate time dimension object short name
7797 IF (x_Time_Dim_Obj_Short_Names IS NULL) THEN
7798 x_Time_Dim_Obj_Short_Names := l_Dimension_Object(l_Counter);
7799 ELSE
7800 x_Time_Dim_Obj_Short_Names := x_Time_Dim_Obj_Short_Names || ',' || l_Dimension_Object(l_Counter);
7801 END IF;
7802 END IF;
7803
7804 FOR cDimId IN c_DimId LOOP
7805 l_Dimension_Grp_Id := cDimId.DIMENSION_ID;
7806 l_Dim_Id_Cnt := l_Dim_Id_Cnt + 1;
7807 END LOOP;
7808
7809 IF l_Dim_Id_Cnt <> 1 THEN
7810 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
7811 FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME', l_dimension_grp(l_counter), TRUE);
7812 FND_MSG_PUB.ADD;
7813 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7814 END IF;
7815
7816 l_Dim_Id_Cnt := 0;
7817
7818 x_All_Dim_Group_Ids(l_counter) := l_Dimension_Grp_Id;
7819 l_Counter := l_Counter + 1;
7820 END IF;
7821 END LOOP;
7822
7823 -- decrement by one to match the actual number of elements
7824 x_Non_Time_Counter := x_Non_Time_Counter - 1;
7825 x_Time_Counter := x_Time_Counter - 1;
7826
7827 EXCEPTION
7828 WHEN FND_API.G_EXC_ERROR THEN
7829 IF (x_msg_data IS NULL) THEN
7830 FND_MSG_PUB.Count_And_Get
7831 ( p_encoded => FND_API.G_FALSE
7832 , p_count => l_msg_count
7833 , p_data => x_msg_data
7834 );
7835 END IF;
7836 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7837 IF (x_msg_data IS NULL) THEN
7838 FND_MSG_PUB.Count_And_Get
7839 ( p_encoded => FND_API.G_FALSE
7840 , p_count => l_msg_count
7841 , p_data => x_msg_data
7842 );
7843 END IF;
7844
7845 WHEN NO_DATA_FOUND THEN
7846 IF (x_msg_data IS NOT NULL) THEN
7847 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet ';
7848 ELSE
7849 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet ';
7850 END IF;
7851 WHEN OTHERS THEN
7852 IF (x_msg_data IS NOT NULL) THEN
7853 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet ';
7854 ELSE
7855 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet ';
7856 END IF;
7857
7858 END Get_Dim_Info_From_ParamPortlet;
7859
7860 PROCEDURE Refresh_Ak_Bsc_Bis_Metadata(
7861 p_Commit IN VARCHAR2
7862 , p_Region_Code IN VARCHAR2
7863 , p_Region_Application_Id IN NUMBER
7864 , p_Kpi_Id IN NUMBER
7865 , p_Analysis_Option_Id IN NUMBER
7866 , p_Dim_Set_Id IN NUMBER
7867 , p_Dim_Obj_Short_Names IN VARCHAR2
7868 , p_Force_Create_Dim IN VARCHAR2
7869 , x_Return_Status OUT NOCOPY VARCHAR2
7870 , x_Msg_Count OUT NOCOPY NUMBER
7871 , x_Msg_Data OUT NOCOPY VARCHAR2
7872 ) IS
7873 l_Global_Menu VARCHAR2(150);
7874 l_Global_Title VARCHAR2(150);
7875 BEGIN
7876
7877 Get_Global_Menu_Title(
7878 p_Region_Code => p_Region_Code
7879 , p_Region_Application_Id => p_Region_Application_Id
7880 , x_Global_Menu => l_Global_Menu
7881 , x_Global_Title => l_Global_Title
7882 );
7883
7884 REFRESH_AK_BSC_BIS_METADATA(
7885 p_Commit => p_Commit
7886 , p_Region_Code => p_Region_Code
7887 , p_Region_Application_Id => p_Region_Application_Id
7888 , p_Kpi_Id => p_Kpi_Id
7889 , p_Analysis_Option_Id => p_Analysis_Option_Id
7890 , p_Dim_Set_id => p_Dim_Set_Id
7891 , p_Global_Menu => l_Global_Menu
7892 , p_Global_Title => l_Global_Title
7893 , p_Dim_Obj_Short_Names => p_Dim_Obj_Short_Names
7894 , p_Force_Create_Dim => p_Force_Create_Dim
7895 , x_Return_Status => x_Return_Status
7896 , x_Msg_Count => x_Msg_Count
7897 , x_Msg_Data => x_Msg_Data
7898 );
7899 --SAVEPOINT RefreshAkBscBisMeta;
7900
7901
7902
7903 EXCEPTION
7904 WHEN FND_API.G_EXC_ERROR THEN
7905
7906 IF (x_msg_data IS NULL) THEN
7907 FND_MSG_PUB.Count_And_Get
7908 ( p_encoded => FND_API.G_FALSE
7909 , p_count => x_msg_count
7910 , p_data => x_msg_data
7911 );
7912 END IF;
7913 x_Return_Status := FND_API.G_RET_STS_ERROR;
7914
7915 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7916
7917 IF (x_msg_data IS NULL) THEN
7918 FND_MSG_PUB.Count_And_Get
7919 ( p_encoded => FND_API.G_FALSE
7920 , p_count => x_msg_count
7921 , p_data => x_msg_data
7922 );
7923 END IF;
7924 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7925
7926 WHEN NO_DATA_FOUND THEN
7927
7928 IF (x_msg_data IS NOT NULL) THEN
7929 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
7930 ELSE
7931 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
7932 END IF;
7933 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7934
7935 WHEN OTHERS THEN
7936
7937 IF (x_msg_data IS NOT NULL) THEN
7938 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
7939 ELSE
7940 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
7941 END IF;
7942 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
7943
7944 END Refresh_Ak_Bsc_Bis_Metadata;
7945
7946 PROCEDURE Refresh_Ak_Bsc_Bis_Metadata(
7947 p_Commit IN VARCHAR2
7948 , p_Region_Code IN VARCHAR2
7949 , p_Region_Application_Id IN NUMBER
7950 , p_Kpi_Id IN NUMBER
7951 , p_Analysis_Option_Id IN NUMBER
7952 , p_Dim_Set_Id IN NUMBER
7953 , p_Global_Menu IN VARCHAR2
7954 , p_Global_Title IN VARCHAR2
7955 , p_Dim_Obj_Short_Names IN VARCHAR2
7956 , p_Force_Create_Dim IN VARCHAR2
7957 , x_Return_Status OUT NOCOPY VARCHAR2
7958 , x_Msg_Count OUT NOCOPY NUMBER
7959 , x_Msg_Data OUT NOCOPY VARCHAR2
7960 ) IS
7961 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
7962 x_Non_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
7963 x_Non_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
7964 x_Non_Time_Dim_Obj_Short_Names VARCHAR2(2056);
7965 x_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
7966 x_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
7967 x_Time_Dim_Obj_Short_Names VARCHAR2(2056);
7968 x_All_Dim_Group_Ids BSC_NUMBER_TBL_TYPE;
7969 x_Non_Time_Counter NUMBER;
7970 x_Time_Counter NUMBER;
7971 l_Measure_Short_Names VARCHAR2(4096);
7972
7973 l_Region_Name Ak_Regions_Tl.NAME%TYPE;
7974 l_Region_Description Ak_Regions_Tl.DESCRIPTION%TYPE;
7975 l_Region_Created_By Ak_Regions_Tl.CREATED_BY%TYPE;
7976 l_Region_Creation_Date Ak_Regions_Tl.CREATION_DATE%TYPE;
7977 l_Region_Last_Updated_By Ak_Regions_Tl.LAST_UPDATED_BY%TYPE;
7978 l_Region_Last_Update_Date Ak_Regions_Tl.LAST_UPDATE_DATE%TYPE;
7979 l_Region_Last_Update_Login Ak_Regions_Tl.LAST_UPDATE_LOGIN%TYPE;
7980 l_Is_XTD_Enabled VARCHAR2(1);
7981
7982 BEGIN
7983 SAVEPOINT RefreshAkBscBisMeta;
7984
7985 FND_MSG_PUB.Initialize;
7986 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
7987
7988 -- 1) Cascaded back to AK Metadata (AK_REGIONS, AK_REGION_ITEMS, FND_FORM_FUNCTIONS_VL
7989 l_report_region_rec.Region_Code := p_Region_Code;
7990 l_report_region_rec.Region_Name := BIS_COMMON_UTILS.G_DEF_CHAR;
7991 l_report_region_rec.Region_Description := BIS_COMMON_UTILS.G_DEF_CHAR;
7992 l_report_region_rec.Region_Application_Id := p_Region_Application_Id;
7993 l_report_region_rec.Database_Object_Name := 'ICX_PROMPTS';
7994 l_report_region_rec.Region_Style := BIS_COMMON_UTILS.G_DEF_CHAR;
7995 l_report_region_rec.Region_Object_Type := NULL;
7996 l_report_region_rec.Help_Target := NULL;
7997 l_report_region_rec.Display_Rows := BIS_COMMON_UTILS.G_DEF_NUM;
7998 l_report_region_rec.Disable_View_By := BIS_COMMON_UTILS.G_DEF_CHAR;
7999 l_report_region_rec.No_Of_Portlet_Rows := NULL;
8000 l_report_region_rec.Schedule := NULL;
8001 l_report_region_rec.Header_File_Procedure := NULL;
8002 l_report_region_rec.Footer_File_Procedure := NULL;
8003 l_report_region_rec.Group_By := NULL;
8004 l_report_region_rec.Order_By := NULL;
8005 l_report_region_rec.Plsql_For_Report_Query := p_Kpi_Id||'.'||p_Analysis_Option_Id;
8006 l_report_region_rec.Display_Subtotals := NULL;
8007 l_report_region_rec.Data_Source := BSC_BIS_KPI_CRUD_PUB.C_BSC_SOURCE;
8008 l_report_region_rec.Where_Clause := NULL;
8009 l_report_region_rec.Dimension_Group := NULL;
8010 l_report_region_rec.Parameter_Layout := NULL;
8011 l_report_region_rec.Kpi_Id := p_Kpi_Id;
8012 l_report_region_rec.Analysis_Option_Id := p_Analysis_Option_Id;
8013 l_report_region_rec.Dim_Set_Id := p_Dim_Set_Id;
8014 l_report_region_rec.Global_Menu := p_Global_Menu;
8015 l_report_region_rec.Global_Title := p_Global_Title;
8016
8017 BIS_PMV_REGION_PVT.UPDATE_REGION
8018 (
8019 p_commit => p_Commit
8020 ,p_Report_Region_Rec => l_report_region_rec
8021 ,x_return_status => x_return_status
8022 ,x_msg_count => x_msg_count
8023 ,x_msg_data => x_msg_data
8024 );
8025 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8026 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8027 END IF;
8028
8029
8030 -- 2) Sequence the Data Series
8031
8032 -- awaiting PL/SQL from William.
8033
8034 -- 3) Refresh Dimension Metadata
8035 IF (p_Force_Create_Dim = FND_API.G_TRUE) THEN
8036
8037 x_Non_Time_Dim_Obj_Short_Names := NULL;
8038
8039 IF (p_Dim_Obj_Short_Names IS NOT NULL) THEN
8040 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_ParamPortlet(
8041 p_Dimension_Info => p_Dim_Obj_Short_Names
8042 ,x_non_time_dimension_groups => x_Non_Time_Dimension_Groups
8043 ,x_non_time_dimension_objects => x_Non_Time_Dimension_Objects
8044 ,x_non_time_dim_obj_short_names => x_Non_Time_Dim_Obj_Short_Names
8045 ,x_all_dim_group_ids => x_All_Dim_Group_Ids
8046 ,x_non_time_counter => x_Non_Time_Counter
8047 ,x_time_dimension_groups => x_Time_Dimension_Groups
8048 ,x_time_dimension_objects => x_Time_Dimension_Objects
8049 ,x_time_dim_obj_short_names => x_Time_Dim_Obj_Short_Names
8050 ,x_time_counter => x_Time_Counter
8051 ,x_msg_data => x_Msg_Data
8052 ,x_is_as_of_date => l_Is_XTD_Enabled
8053 );
8054
8055 -- code to recreate Periodicities goes here.
8056
8057 IF (Has_Time_Dim_Obj_Changed(x_Time_Dim_Obj_Short_Names, p_Kpi_Id, l_Is_XTD_Enabled) = FND_API.G_TRUE) THEN
8058 BSC_BIS_KPI_CRUD_PUB.Assign_KPI_Periodicities(
8059 p_Commit => p_Commit
8060 ,p_Kpi_Id => p_Kpi_Id
8061 ,p_Time_Dim_Obj_Sns => x_Time_Dim_Obj_Short_Names
8062 ,p_Dft_Dim_Obj_Sn => NULL
8063 ,p_Daily_Flag => l_Is_XTD_Enabled
8064 ,p_Is_XTD_Enabled => l_Is_XTD_Enabled
8065 ,x_Return_Status => x_Return_Status
8066 ,x_Msg_Count => x_Msg_Count
8067 ,x_Msg_Data => x_Msg_Data
8068 );
8069 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
8070 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8071 END IF;
8072 END IF;
8073 END IF;
8074
8075 IF (Has_Non_Time_Dim_Obj_Changed(x_Non_Time_Dim_Obj_Short_Names, p_Kpi_Id)= FND_API.G_TRUE) THEN
8076 BSC_BIS_DIMENSION_PUB.Update_Dimension
8077 ( p_commit => p_Commit
8078 , p_dim_short_name => p_Region_Code
8079 , p_display_name => p_Region_Code
8080 , p_description => p_Region_Code
8081 , p_application_id => p_Region_Application_Id
8082 , p_dim_obj_short_names => x_Non_Time_Dim_Obj_Short_Names
8083 , p_time_stamp => NULL
8084 , p_hide => FND_API.G_TRUE
8085 , x_return_status => x_Return_Status
8086 , x_msg_count => x_Msg_Count
8087 , x_msg_data => x_Msg_Data
8088 );
8089 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8090 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8091 END IF;
8092
8093 -- added for Bug#4923006
8094 IF (Is_Dim_Associated_To_Objective (p_Region_Code, p_Kpi_Id) = FND_API.G_FALSE) THEN
8095 BSC_BIS_KPI_MEAS_PUB.Assign_Dims_To_Dim_Set(
8096 p_Commit => p_Commit
8097 ,p_Kpi_Id => p_Kpi_Id
8098 ,p_Dim_Set_Id => 0
8099 ,p_Dim_Short_Names => p_Region_Code
8100 ,p_Time_Stamp => NULL
8101 ,x_Return_Status => x_Return_Status
8102 ,x_Msg_Count => x_Msg_Count
8103 ,x_Msg_Data => x_Msg_Data
8104 );
8105 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
8106 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8107 END IF;
8108 END IF;
8109 END IF;
8110 END IF;
8111
8112
8113 -- reorder the Measure at the series level (Including delete/add)
8114 l_Measure_Short_Names := BSC_BIS_KPI_CRUD_PUB.Get_DS_Sequence_From_AK(p_Region_Code, p_Kpi_Id);
8115
8116 IF (Has_Measure_Column_Changed(l_Measure_Short_Names, p_Kpi_Id) = FND_API.G_TRUE) THEN
8117 BSC_ANALYSIS_OPTION_PUB.Rearrange_Data_Series(
8118 p_commit => FND_API.G_FALSE
8119 ,p_Kpi_Id => p_Kpi_Id
8120 ,p_option_group0 => 0
8121 ,p_option_group1 => 0
8122 ,p_option_group2 => 0
8123 ,p_Measure_Seq => l_Measure_Short_Names
8124 ,p_add_flag => FND_API.G_TRUE
8125 ,p_remove_flag => FND_API.G_TRUE
8126 ,x_return_status => x_return_status
8127 ,x_msg_count => x_msg_count
8128 ,x_msg_data => x_msg_data
8129 );
8130 IF ((x_Return_Status IS NOT NULL) AND (x_Return_Status <> FND_API.G_RET_STS_SUCCESS)) THEN
8131 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8132 END IF;
8133 END IF;
8134
8135 -- Update the Objective Name to correspond with the AK Region Code
8136 -- Modification for Bug#4448994
8137
8138 BIS_AK_REGION_PUB.Get_Region_Code_TL_Data (
8139 p_Region_Code => p_Region_Code
8140 , p_Region_Application_Id => p_Region_Application_Id
8141 , x_Region_Name => l_Region_Name
8142 , x_Region_Description => l_Region_Description
8143 , x_Region_Created_By => l_Region_Created_By
8144 , x_Region_Creation_Date => l_Region_Creation_Date
8145 , x_Region_Last_Updated_By => l_Region_Last_Updated_By
8146 , x_Region_Last_Update_Date => l_Region_Last_Update_Date
8147 , x_Region_Last_Update_Login => l_Region_Last_Update_Login
8148 , x_return_status => x_return_status
8149 , x_msg_count => x_msg_count
8150 , x_msg_data => x_msg_data
8151 );
8152 IF ((x_Return_Status IS NOT NULL) AND (x_Return_Status <> FND_API.G_RET_STS_SUCCESS)) THEN
8153 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8154 END IF;
8155
8156 -- We have BSC_KPIS_TL.HELP is VARCHAR2(150);
8157 l_Region_Description := SUBSTR(l_Region_Description, 1, 150);
8158
8159 BSC_PMF_UI_WRAPPER.Update_Kpi(
8160 p_Commit => p_Commit
8161 ,p_Kpi_Id => p_Kpi_Id
8162 ,x_Return_Status => x_return_status
8163 ,x_Msg_Count => x_msg_count
8164 ,x_Msg_Data => x_msg_data
8165 ,p_Kpi_Name => l_Region_Name
8166 ,p_Kpi_Help => l_Region_Description
8167 );
8168 IF ((x_Return_Status IS NOT NULL) AND (x_Return_Status <> FND_API.G_RET_STS_SUCCESS)) THEN
8169 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8170 END IF;
8171
8172 EXCEPTION
8173 WHEN FND_API.G_EXC_ERROR THEN
8174 ROLLBACK TO RefreshAkBscBisMeta;
8175
8176 IF (x_msg_data IS NULL) THEN
8177 FND_MSG_PUB.Count_And_Get
8178 ( p_encoded => FND_API.G_FALSE
8179 , p_count => x_msg_count
8180 , p_data => x_msg_data
8181 );
8182 END IF;
8183 x_Return_Status := FND_API.G_RET_STS_ERROR;
8184
8185 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8186 ROLLBACK TO RefreshAkBscBisMeta;
8187
8188 IF (x_msg_data IS NULL) THEN
8189 FND_MSG_PUB.Count_And_Get
8190 ( p_encoded => FND_API.G_FALSE
8191 , p_count => x_msg_count
8192 , p_data => x_msg_data
8193 );
8194 END IF;
8195 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
8196
8197 WHEN NO_DATA_FOUND THEN
8198 ROLLBACK TO RefreshAkBscBisMeta;
8199
8200 IF (x_msg_data IS NOT NULL) THEN
8201 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
8202 ELSE
8203 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
8204 END IF;
8205 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
8206
8207 WHEN OTHERS THEN
8208 ROLLBACK TO RefreshAkBscBisMeta;
8209
8210 IF (x_msg_data IS NOT NULL) THEN
8211 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
8212 ELSE
8213 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Refresh_Ak_Bsc_Bis_Metadata ';
8214 END IF;
8215 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
8216
8217 END Refresh_Ak_Bsc_Bis_Metadata;
8218
8219
8220 -- Gets the short_names of the AUTOGENERATED measures in the AK_REGION SPECIFICED.
8221
8222 FUNCTION Get_DS_Sequence_From_AK (
8223 p_Region_Code IN VARCHAR2
8224 , p_Kpi_Id IN VARCHAR2
8225 ) RETURN VARCHAR2 IS
8226 CURSOR cMeasureShortNames IS
8227 SELECT ATTRIBUTE2
8228 FROM AK_REGION_ITEMS
8229 WHERE REGION_CODE = p_Region_Code
8230 AND ATTRIBUTE1 IN ('BUCKET_MEASURE', 'MEASURE', 'MEASURE_NOTARGET', 'SUB MEASURE')
8231 ORDER BY DISPLAY_SEQUENCE;
8232
8233 l_Measure_Short_Names VARCHAR2(4096);
8234 l_Measure_Short_Name BIS_INDICATORS.SHORT_NAME%TYPE;
8235 l_Kpi_Id NUMBER;
8236 l_Dataset_Id NUMBER;
8237 l_Count NUMBER;
8238 BEGIN
8239 l_Measure_Short_Name := NULL;
8240 l_Count := 0;
8241
8242 FOR cMSN IN cMeasureShortNames LOOP
8243 l_Measure_Short_Name := cMSN.ATTRIBUTE2;
8244
8245 l_Kpi_Id := BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_AGKpi(l_Measure_Short_Name);
8246
8247 IF(p_Kpi_Id = l_Kpi_Id) THEN
8248 IF (l_Measure_Short_Names IS NULL) THEN
8249 l_Measure_Short_Names := l_Measure_Short_Name;
8250 ELSE
8251 l_Measure_Short_Names := l_Measure_Short_Names || ',' || l_Measure_Short_Name;
8252 END IF;
8253 ELSE
8254 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(l_Measure_Short_Name);
8255
8256 SELECT COUNT(1) INTO l_Count
8257 FROM BSC_KPI_ANALYSIS_MEASURES_B B
8258 WHERE B.DATASET_ID = l_Dataset_Id
8259 AND B.INDICATOR = p_Kpi_Id;
8260
8261 -- the dataset already belongs to the current indicator data series.
8262 IF (l_Count <> 0) THEN
8263 IF (l_Measure_Short_Names IS NULL) THEN
8264 l_Measure_Short_Names := l_Measure_Short_Name;
8265 ELSE
8266 l_Measure_Short_Names := l_Measure_Short_Names || ',' || l_Measure_Short_Name;
8267 END IF;
8268 END IF;
8269 END IF;
8270 END LOOP;
8271
8272 RETURN l_Measure_Short_Names;
8273 EXCEPTION
8274 WHEN OTHERS THEN
8275 RETURN NULL;
8276 END Get_DS_Sequence_From_AK;
8277
8278
8279 -- The following Utility API gets the
8280 -- This API should not be used for Muliple Analysis Options, since only default AO is used.
8281
8282 FUNCTION Get_Data_Series_Id(
8283 p_Kpi_Id IN NUMBER
8284 , p_Dataset_Id IN NUMBER
8285 ) RETURN NUMBER IS
8286
8287 l_Data_Series_Id NUMBER;
8288 BEGIN
8289
8290 SELECT A.SERIES_ID
8291 INTO l_Data_Series_Id
8292 FROM BSC_KPI_ANALYSIS_MEASURES_B A
8293 WHERE A.INDICATOR = p_Kpi_Id
8294 AND A.ANALYSIS_OPTION0 = 0
8295 AND A.ANALYSIS_OPTION1 = 0
8296 AND A.ANALYSIS_OPTION2 = 0
8297 AND A.DATASET_ID = p_Dataset_Id;
8298
8299 RETURN l_Data_Series_Id;
8300
8301 EXCEPTION
8302 WHEN OTHERS THEN
8303 RETURN BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
8304 END Get_Data_Series_Id;
8305
8306
8307 PROCEDURE Get_Dep_Obj_Func_Name( p_dep_object_name IN VARCHAR2
8308 ,p_dep_object_type IN VARCHAR2
8309 ,p_object_type IN VARCHAR2
8310 ,x_ret_status OUT NOCOPY VARCHAR2
8311 ,x_mesg_data OUT NOCOPY VARCHAR2
8312 ) IS
8313
8314 parent_object_table bis_rsg_pub_api_pkg.t_BIA_RSG_Obj_Table;
8315 l_Index_Count NUMBER;
8316 result VARCHAR2(1000);
8317 object_name VARCHAR2(100);
8318
8319 BEGIN
8320 parent_object_table := bis_rsg_pub_api_pkg.GetParentObjects
8321 (
8322 p_dep_obj_name => p_dep_object_name
8323 ,p_dep_obj_type => p_dep_object_type
8324 ,p_obj_type => p_object_type
8325 ,x_return_status => x_ret_status
8326 ,x_msg_data => x_mesg_data
8327 );
8328
8329 l_Index_Count := 0;
8330 result := '';
8331
8332 IF (parent_object_table.COUNT > 0) THEN
8333 l_Index_Count := parent_object_table.FIRST;
8334 LOOP
8335 object_name := parent_object_table(l_Index_Count).object_name;
8336 result := result || object_name || ',';
8337 EXIT WHEN l_Index_Count = parent_object_table.LAST;
8338 l_Index_Count := parent_object_table.NEXT(l_Index_Count);
8339 END LOOP;
8340 END IF;
8341 x_mesg_data := result;
8342
8343
8344 END Get_Dep_Obj_Func_Name;
8345
8346
8347 -- Gets BSC_KPIS_VL.INDICATOR using BIS_INDICATORS.SHORT_NAME
8348 -- Used in UI
8349
8350 FUNCTION Get_Objective_By_AGKpi(
8351 p_Short_Name IN VARCHAR2
8352 ) RETURN VARCHAR2
8353 IS
8354 l_Count NUMBER;
8355 l_Kpi_Id VARCHAR2(10);
8356 BEGIN
8357 l_Count := 0;
8358
8359 SELECT
8360 COUNT(1)
8361 INTO
8362 l_Count
8363 FROM
8364 bsc_sys_measures m,
8365 bsc_sys_datasets_vl d,
8366 bis_indicators i
8367 WHERE
8368 i.dataset_id = d.dataset_id AND
8369 d.measure_id1 = m.measure_id AND
8370 i.short_name = p_Short_Name AND
8371 m.source = BSC_BIS_MEASURE_PUB.c_BSC;
8372
8373 -- Measure Does not exist or not a BSC Measure
8374 IF l_Count = 0 THEN
8375 RETURN BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
8376 END IF;
8377
8378 SELECT DISTINCT INDICATOR
8379 INTO l_Kpi_Id
8380 FROM BSC_KPIS_B
8381 WHERE SHORT_NAME = (SELECT SUBSTR(ACTUAL_DATA_SOURCE, 1, INSTR(ACTUAL_DATA_SOURCE, '.') - 1) REGION_CODE
8382 FROM BIS_INDICATORS
8383 WHERE SHORT_NAME = p_Short_Name);
8384
8385 RETURN l_Kpi_Id;
8386
8387 EXCEPTION
8388 WHEN OTHERS THEN
8389 RETURN BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY;
8390
8391 END Get_Objective_By_AGKpi;
8392
8393
8394 --IF AG Report is NOT in Production Mode
8395 PROCEDURE Convert_AutoGen_To_ViewBased (
8396 p_Commit IN VARCHAR2 := FND_API.G_FALSE
8397 , p_Region_Code IN VARCHAR2
8398 , p_Region_Application_Id IN NUMBER
8399 , x_Return_Status OUT NOCOPY VARCHAR
8400 , x_Msg_Count OUT NOCOPY NUMBER
8401 , x_Msg_Data OUT NOCOPY VARCHAR
8402 ) IS
8403 l_Kpi_Id NUMBER;
8404 l_Kpi_Group_Id NUMBER;
8405 l_Tab_Id NUMBER;
8406 l_Measure_Id NUMBER;
8407 l_Measure_Group_Id NUMBER;
8408 l_Count NUMBER;
8409 l_Measure_List BSC_VARCHAR2_TBL_TYPE;
8410 l_Measure_Col BSC_SYS_MEASURES.MEASURE_COL%TYPE;
8411 l_Delete_Measure VARCHAR2(1);
8412 l_Delete_Dimensions VARCHAR2(1);
8413
8414 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
8415
8416
8417 CURSOR c_Measure_Short_Names IS
8418 SELECT I.SHORT_NAME
8419 FROM BIS_INDICATORS I,
8420 BSC_KPI_ANALYSIS_MEASURES_VL A
8421 WHERE A.INDICATOR = l_Kpi_Id
8422 AND I.DATASET_ID = A.DATASET_ID;
8423
8424 BEGIN
8425 SAVEPOINT MigAGRVBR;
8426 x_return_status := FND_API.G_RET_STS_SUCCESS;
8427
8428 l_Kpi_Id := BSC_BIS_KPI_CRUD_PUB.Get_Kpi_Id(p_Region_Code);
8429
8430 IF (l_Kpi_Id = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
8431 FND_MESSAGE.SET_NAME('BSC','BSC_SETUP_REPORT_DEF');
8432 FND_MSG_PUB.ADD;
8433 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8434 END IF;
8435
8436 l_Count := 0;
8437 FOR cMSN IN c_Measure_Short_Names LOOP
8438 l_Measure_List(l_Count) := cMSN.SHORT_NAME;
8439 l_Count := l_Count + 1;
8440 --DBMS_OUTPUT.PUT_LINE('l_Measure_List(' || l_Count || ') - ' || cMSN.SHORT_NAME);
8441 END LOOP;
8442
8443 l_Delete_Measure := FND_API.G_FALSE;
8444 l_Delete_Dimensions := FND_API.G_FALSE;
8445
8446 BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata (
8447 p_Commit => p_Commit
8448 , p_Region_Code => p_Region_Code
8449 , p_Delete_Measures => l_Delete_Measure
8450 , p_Delete_Dimensions => l_Delete_Dimensions
8451 , x_Return_Status => x_Return_Status
8452 , x_Msg_Count => x_Msg_Count
8453 , x_Msg_Data => x_Msg_Data
8454 );
8455
8456 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8457 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8458 END IF;
8459
8460 /*
8461
8462 o PHASE 2 - Delete/Convert Measure to PMF type
8463 + Update BSC_SYS_DATASETS_B.SOURCE and BSC_SYS_MEASURES.SOURCE to "PMF"
8464 For each l_Measure_List, update BSC_SYS_MEASURES.SOURCE and BSC_SYS_DATASETS_B.SOURCE
8465 to PMF.
8466 + Delete entries in BSC_DB_MEASURE_COLS_TL and BSC_DB_MEASURE_GROUPS_TL
8467 for the Measure Column (Identified by BSC_SYS_MEASURES.MEASURE_COL)
8468 For each l_Measure_List, with its BSC_SYS_DATASETS_B.MEASURE_ID1 maps to BSC_SYS_MEASURES.MEASURE_ID.
8469 We need to call the following APIs ..
8470
8471 Measure_Group_Id can be found out by querying BSC_DB_MEASURE_GROUPS_TL.SHORT_NAME
8472 with the passed REGION_CODE
8473
8474 BSC_DB_MEASURE_GROUPS_PKG.DELETE_ROW(L_Measure_Group_Id)
8475
8476 + Retain BIS_INDICATORS.ACTUAL_DATA_SOURCE_TYPE to "AK"
8477 + Retain BIS_INDICATORS.FUNCTION_NAME to the current function - no changes
8478 + Manipulate BIS_INDICATORS.ACTUAL_DATA_SOURCE - Open Issue
8479
8480 */
8481 --DBMS_OUTPUT.PUT_LINE('Coming to ... BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type');
8482
8483 IF (l_Delete_Measure = FND_API.G_FALSE) THEN
8484 FOR iCount IN 0..l_Measure_List.LAST LOOP
8485 --DBMS_OUTPUT.PUT_LINE('loop ... BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type ... ' || l_Measure_List(iCount));
8486 BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type (
8487 p_Commit => p_Commit
8488 , p_Measure_Short_Name => l_Measure_List(iCount)
8489 , p_Target_Source => BSC_BIS_MEASURE_PUB.c_PMF
8490 , p_Delete_Columns => FND_API.G_FALSE
8491 , p_Clean_Measure_Date_Source => FND_API.G_TRUE
8492 , x_Return_Status => x_Return_Status
8493 , x_Msg_Count => x_Msg_Count
8494 , x_Msg_Data => x_Msg_Data
8495 );
8496 --DBMS_OUTPUT.PUT_LINE(' loop ... x_Return_Status ' || x_Return_Status);
8497 --DBMS_OUTPUT.PUT_LINE(' loop ... x_Msg_Data ' || x_Msg_Data);
8498 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8499 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8500 END IF;
8501 END LOOP;
8502 END IF;
8503
8504 /*
8505 Currently for AG and S2E based reports, we use the ACTUAL_DATA_SOURCE
8506 to be of the form REGION_CODE.ATRRIBUTE_CODE, In AG Reports we use it
8507 as <REGION_CODE>.<MEASURE_SHORT_NAME>.
8508 */
8509 l_report_region_rec.Region_Code := p_Region_Code;
8510 l_report_region_rec.Region_Name := BIS_COMMON_UTILS.G_DEF_CHAR;
8511 l_report_region_rec.Region_Description := BIS_COMMON_UTILS.G_DEF_CHAR;
8512 l_report_region_rec.Region_Application_Id := p_Region_Application_Id;
8513 l_report_region_rec.Database_Object_Name := 'ICX_PROMPTS';
8514 l_report_region_rec.Region_Style := BIS_COMMON_UTILS.G_DEF_CHAR;
8515 l_report_region_rec.Region_Object_Type := NULL;
8516 l_report_region_rec.Help_Target := NULL;
8517 l_report_region_rec.Display_Rows := NULL;
8518 l_report_region_rec.Disable_View_By := BIS_COMMON_UTILS.G_DEF_CHAR;
8519 l_report_region_rec.No_Of_Portlet_Rows := NULL;
8520 l_report_region_rec.Schedule := NULL;
8521 l_report_region_rec.Header_File_Procedure := NULL;
8522 l_report_region_rec.Footer_File_Procedure := NULL;
8523 l_report_region_rec.Group_By := NULL;
8524 l_report_region_rec.Order_By := NULL;
8525 l_report_region_rec.Plsql_For_Report_Query := ' ';
8526 l_report_region_rec.Display_Subtotals := NULL;
8527 l_report_region_rec.Data_Source := ' ';
8528 l_report_region_rec.Where_Clause := NULL;
8529 l_report_region_rec.Dimension_Group := NULL;
8530 l_report_region_rec.Parameter_Layout := NULL;
8531 l_report_region_rec.Kpi_Id := NULL;
8532 l_report_region_rec.Analysis_Option_Id := NULL;
8533 l_report_region_rec.Dim_Set_Id := NULL;
8534
8535 BIS_PMV_REGION_PVT.UPDATE_REGION
8536 (
8537 p_commit => p_Commit
8538 ,p_Report_Region_Rec => l_report_region_rec
8539 ,x_return_status => x_return_status
8540 ,x_msg_count => x_msg_count
8541 ,x_msg_data => x_msg_data
8542 );
8543
8544 --DBMS_OUTPUT.PUT_LINE(' AK ... x_Return_Status ' || x_Return_Status);
8545 --DBMS_OUTPUT.PUT_LINE(' AK ... x_Msg_Data ' || x_Msg_Data);
8546
8547 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8549 END IF;
8550
8551
8552 EXCEPTION
8553 WHEN FND_API.G_EXC_ERROR THEN
8554 IF (x_msg_data IS NULL) THEN
8555 FND_MSG_PUB.Count_And_Get
8556 ( p_encoded => FND_API.G_FALSE
8557 , p_count => x_msg_count
8558 , p_data => x_msg_data
8559 );
8560 END IF;
8561 x_return_status := FND_API.G_RET_STS_ERROR;
8562 ROLLBACK TO MigAGRVBR;
8563 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8564 IF (x_msg_data IS NULL) THEN
8565 FND_MSG_PUB.Count_And_Get
8566 ( p_encoded => FND_API.G_FALSE
8567 , p_count => x_msg_count
8568 , p_data => x_msg_data
8569 );
8570 END IF;
8571 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8572 ROLLBACK TO MigAGRVBR;
8573 WHEN NO_DATA_FOUND THEN
8574 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8575 IF (x_msg_data IS NOT NULL) THEN
8576 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Convert_AutoGen_To_ViewBased ';
8577 ELSE
8578 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Convert_AutoGen_To_ViewBased ';
8579 END IF;
8580 ROLLBACK TO MigAGRVBR;
8581 WHEN OTHERS THEN
8582 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8583 IF (x_msg_data IS NOT NULL) THEN
8584 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Convert_AutoGen_To_ViewBased ';
8585 ELSE
8586 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Convert_AutoGen_To_ViewBased ';
8587 END IF;
8588 ROLLBACK TO MigAGRVBR;
8589
8590 END Convert_AutoGen_To_ViewBased;
8591
8592
8593 -- Delete's all the BSC metadata associated with Report designer, with Measure optionally
8594 PROCEDURE Delete_AG_Bsc_Metadata (
8595 p_Commit IN VARCHAR2 := FND_API.G_FALSE
8596 , p_Region_Code IN VARCHAR2
8597 , p_Delete_Measures IN VARCHAR2
8598 , p_Delete_Dimensions IN VARCHAR2
8599 , x_Return_Status OUT NOCOPY VARCHAR
8600 , x_Msg_Count OUT NOCOPY NUMBER
8601 , x_Msg_Data OUT NOCOPY VARCHAR
8602 ) IS
8603 l_Kpi_Id NUMBER;
8604 l_Kpi_Group_Id NUMBER;
8605 l_Tab_Id NUMBER;
8606 l_Measure_Id NUMBER;
8607 l_Measure_Group_Id NUMBER;
8608 l_Count NUMBER;
8609 l_Measure_List BSC_VARCHAR2_TBL_TYPE;
8610 l_Measure_Col BSC_SYS_MEASURES.MEASURE_COL%TYPE;
8611 l_Dataset_Id NUMBER;
8612 iCount NUMBER;
8613 l_Delete_Dimension VARCHAR2(1);
8614
8615 CURSOR c_Measure_Short_Names IS
8616 SELECT I.SHORT_NAME
8617 FROM BIS_INDICATORS I,
8618 BSC_KPI_ANALYSIS_MEASURES_VL A
8619 WHERE A.INDICATOR = l_Kpi_Id
8620 AND I.DATASET_ID = A.DATASET_ID;
8621
8622 BEGIN
8623
8624 SAVEPOINT DelAGRBscMD;
8625 x_return_status := FND_API.G_RET_STS_SUCCESS;
8626
8627
8628 -- Deleting of the Dimension has been disabled since, it will from now on have the
8629 -- where clase and during conversion from AG to PLSQL we need to retain the whereclase,
8630 l_Delete_Dimension := FND_API.G_FALSE;
8631
8632 l_Kpi_Id := BSC_BIS_KPI_CRUD_PUB.Get_Kpi_Id(p_Region_Code);
8633
8634 IF (l_Kpi_Id = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
8635 FND_MESSAGE.SET_NAME('BSC','BSC_SETUP_REPORT_DEF');
8636 FND_MSG_PUB.ADD;
8637 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8638 END IF;
8639
8640 l_Count := 0;
8641 FOR cMSN IN c_Measure_Short_Names LOOP
8642 l_Measure_List(l_Count) := cMSN.SHORT_NAME;
8643 l_Count := l_Count + 1;
8644
8645 --DBMS_OUTPUT.PUT_LINE('l_Measure_List(' || l_Count || ') - ' || cMSN.SHORT_NAME);
8646 END LOOP;
8647
8648
8649 l_Tab_Id := BSC_BIS_KPI_CRUD_PUB.Get_Tab_Id(p_Region_Code);
8650 l_kpi_Group_Id := BSC_BIS_KPI_CRUD_PUB.Get_Group_Id(p_Region_Code);
8651
8652 --DBMS_OUTPUT.PUT_LINE(' l_Tab_Id - ' || l_Tab_Id);
8653 --DBMS_OUTPUT.PUT_LINE(' l_kpi_Group_Id - ' || l_kpi_Group_Id);
8654
8655 /*
8656 o PHASE 1 - Delete Base BSC Metadata
8657
8658 1) The Kpi_Id, Kpi_Group_Id and Tab_Id should be obtained from the Region_Code level
8659 2) The list of Measures associated to the Objective must be noted down (Comma separated SHORT_NAME)
8660 and store it in l_Measure_List
8661 3) The Dimension Short_Name is the REGION_CODE.
8662
8663 + Disassociate the 2 AG Measures associated to the Objective -
8664 from Data Series (BSC_KPI_ANALSYSIS_MEASURES_B) (we dont want
8665 to delete the measure, but convert it rather)
8666
8667 + Delete the Objective created for the Report (Deletes all
8668 Objecitve Metadata including Dataseries, Analysis Options,
8669 Objective-Dimension assiciation, Periodicities at the Objective
8670 Level). All BSC_KPI% tables are cleaned up.
8671
8672 */
8673
8674
8675 BSC_PMF_UI_WRAPPER.Delete_Kpi(
8676 p_commit => p_commit
8677 ,p_Kpi_Id => l_Kpi_Id
8678 ,x_Return_Status => x_Return_Status
8679 ,x_Msg_Count => x_Msg_Count
8680 ,x_Msg_Data => x_Msg_Data
8681 );
8682 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8683 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8684 END IF;
8685
8686 /*****************************************88
8687 For Simulation Tree Enhancement we will not have the tab_id and
8688 kpi group created for the objective.. so corresponding tab_id and kpi
8689 group id will not be there for region code.so we need to check for null
8690 condition here.
8691
8692 /*****************************************/
8693
8694 /*
8695 + Delete the Objective Group created for the AG Report
8696 */
8697 IF(l_Tab_Id <> BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY AND l_kpi_Group_Id <> BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
8698
8699 BSC_PMF_UI_WRAPPER.Delete_Kpi_Group(
8700 p_commit => p_Commit
8701 ,p_kpi_group_id => l_kpi_Group_Id
8702 ,p_tab_id => l_Tab_Id
8703 ,x_return_status => x_Return_Status
8704 ,x_msg_count => x_Msg_Count
8705 ,x_msg_data => x_Msg_Data
8706 );
8707 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8708 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8709 END IF;
8710
8711
8712 -- Delete the -1 entry as well.
8713 BSC_PMF_UI_WRAPPER.Delete_Kpi_Group(
8714 p_commit => p_Commit
8715 ,p_kpi_group_id => l_kpi_Group_Id
8716 ,p_tab_id => -1
8717 ,x_return_status => x_Return_Status
8718 ,x_msg_count => x_Msg_Count
8719 ,x_msg_data => x_Msg_Data
8720 );
8721 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8723 END IF;
8724
8725 /*
8726 + Delete the Scorecard Created for the AG Report
8727 */
8728
8729 BSC_PMF_UI_WRAPPER.Delete_Tab(
8730 p_commit => p_Commit
8731 , p_tab_id => l_Tab_Id
8732 , x_Return_Status => x_Return_Status
8733 , x_Msg_Count => x_Msg_Count
8734 , x_Msg_Data => x_Msg_Data
8735 );
8736 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8737 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8738 END IF;
8739 END IF;
8740
8741 /*
8742 + Delete the Dimension created for the AG Report.
8743 */
8744
8745 -- This Dimension should not be deleted since it is currently being used
8746 -- for the 'where clauses'
8747
8748 -- Added for Bug#5081180 to ensure Delete_Dimension API is not called when
8749 -- the Dimension does not exist.
8750
8751 SELECT COUNT(1) INTO l_Count
8752 FROM BSC_SYS_DIM_GROUPS_VL G
8753 WHERE G.SHORT_NAME = p_Region_Code;
8754
8755 IF ((p_Delete_Dimensions = FND_API.G_TRUE) AND (l_Count <> 0)) THEN
8756 BSC_BIS_DIMENSION_PUB.Delete_Dimension
8757 ( p_commit => p_Commit
8758 , p_dim_short_name => p_Region_Code
8759 , x_return_status => x_Return_Status
8760 , x_msg_count => x_Msg_Count
8761 , x_msg_data => x_Msg_Data
8762 );
8763 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8764 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8765 END IF;
8766 END IF;
8767
8768 -- Delete completely all measures associated to the report.
8769 /*
8770 This feature is best *not* used under any circumstances, except
8771 when a complete cleanup is required at the backend layer
8772 */
8773
8774 IF (p_Delete_Measures = FND_API.G_TRUE) THEN
8775 --DBMS_OUTPUT.PUT_LINE(' Step 1');
8776 --DBMS_OUTPUT.PUT_LINE(' l_Measure_List.COUNT - ' || l_Measure_List.COUNT);
8777 --DBMS_OUTPUT.PUT_LINE(' l_Measure_List.LAST - ' || l_Measure_List.LAST);
8778
8779 FOR iCount IN 0..l_Measure_List.LAST LOOP
8780
8781 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(l_Measure_List(iCount));
8782
8783 --DBMS_OUTPUT.PUT_LINE(' l_Dataset_Id - ' || l_Dataset_Id);
8784 --DBMS_OUTPUT.PUT_LINE(' l_Measure_List(iCount) - ' || l_Measure_List(iCount));
8785
8786
8787
8788 BSC_BIS_MEASURE_PUB.Delete_Measure(
8789 p_Commit => p_commit
8790 ,p_Dataset_Id => l_Dataset_Id
8791 ,x_return_status => x_return_status
8792 ,x_msg_count => x_msg_count
8793 ,x_msg_data => x_msg_data
8794 );
8795 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8796 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8797 END IF;
8798 END LOOP;
8799 END IF;
8800
8801 IF (p_Commit = FND_API.G_TRUE) THEN
8802 COMMIT;
8803 END IF;
8804
8805
8806 EXCEPTION
8807 WHEN FND_API.G_EXC_ERROR THEN
8808 IF (x_msg_data IS NULL) THEN
8809 FND_MSG_PUB.Count_And_Get
8810 ( p_encoded => FND_API.G_FALSE
8811 , p_count => x_msg_count
8812 , p_data => x_msg_data
8813 );
8814 END IF;
8815 x_return_status := FND_API.G_RET_STS_ERROR;
8816 ROLLBACK TO DelAGRBscMD;
8817 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8818 IF (x_msg_data IS NULL) THEN
8819 FND_MSG_PUB.Count_And_Get
8820 ( p_encoded => FND_API.G_FALSE
8821 , p_count => x_msg_count
8822 , p_data => x_msg_data
8823 );
8824 END IF;
8825 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8826 ROLLBACK TO DelAGRBscMD;
8827 WHEN NO_DATA_FOUND THEN
8828 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8829 IF (x_msg_data IS NOT NULL) THEN
8830 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
8831 ELSE
8832 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
8833 END IF;
8834 ROLLBACK TO DelAGRBscMD;
8835 WHEN OTHERS THEN
8836 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8837 IF (x_msg_data IS NOT NULL) THEN
8838 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
8839 ELSE
8840 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
8841 END IF;
8842 ROLLBACK TO DelAGRBscMD;
8843
8844 END Delete_AG_Bsc_Metadata;
8845
8846
8847 -- Converts a measure from AG to Existing Source with the following option
8848 -- Deletes the source groups
8849 -- Empties the BIS_INDICATORS source and type.
8850 PROCEDURE Switch_Measure_Type (
8851 p_Commit IN VARCHAR2 := FND_API.G_FALSE
8852 , p_Measure_Short_Name IN VARCHAR2
8853 , p_Target_Source IN VARCHAR2
8854 , p_Delete_Columns IN VARCHAR2
8855 , p_Clean_Measure_Date_Source IN VARCHAR2
8856 , x_Return_Status OUT NOCOPY VARCHAR
8857 , x_Msg_Count OUT NOCOPY NUMBER
8858 , x_Msg_Data OUT NOCOPY VARCHAR
8859 ) IS
8860
8861 l_Measure_Source BSC_SYS_MEASURES.SOURCE%TYPE;
8862 l_Measure_Column BSC_SYS_MEASURES.MEASURE_COL%TYPE;
8863 l_Dataset_Id NUMBER;
8864
8865 BEGIN
8866 SAVEPOINT SwitchMeasureType;
8867 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
8868 l_Measure_Source := Get_Measure_Source(p_Measure_Short_Name);
8869
8870 IF((p_Target_Source = BSC_BIS_MEASURE_PUB.c_BSC) OR (p_Target_Source = l_Measure_Source)) THEN
8871 --- Conversion from PMF to BSC is currently not supported,
8872 RETURN;
8873 END IF;
8874
8875 IF (p_Target_Source = BSC_BIS_MEASURE_PUB.c_PMF) THEN
8876 -- begin the UPDATE process
8877 BEGIN
8878 UPDATE BSC_SYS_MEASURES M
8879 SET M.SOURCE = BSC_BIS_MEASURE_PUB.c_PMF
8880 WHERE M.SHORT_NAME = p_Measure_Short_Name;
8881
8882 l_Dataset_Id := BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(p_Measure_Short_Name);
8883 --DBMS_OUTPUT.PUT_LINE('Suceess - Update - BSC_SYS_MEASURES - ' || l_Dataset_Id);
8884
8885 UPDATE BSC_SYS_DATASETS_B D
8886 SET D.SOURCE = BSC_BIS_MEASURE_PUB.c_PMF
8887 WHERE D.DATASET_ID = l_Dataset_Id;
8888
8889 --DBMS_OUTPUT.PUT_LINE('Suceess - Update - BSC_SYS_DATASETS_B -- ' || BSC_BIS_KPI_CRUD_PUB.Get_Dataset_Id(p_Measure_Short_Name));
8890
8891 EXCEPTION
8892 WHEN OTHERS THEN
8893 --DBMS_OUTPUT.PUT_LINE('Error - ' || SQLERRM);
8894 NULL;
8895 END;
8896
8897 IF(p_Delete_Columns = FND_API.G_TRUE) THEN
8898 -- delete the measure columns
8899 BSC_DB_MEASURE_COLS_PKG.DELETE_ROW(l_Measure_Column);
8900 END IF;
8901
8902 IF (p_Clean_Measure_Date_Source = FND_API.G_TRUE) THEN
8903 BEGIN
8904
8905 UPDATE BIS_INDICATORS B
8906 SET B.ACTUAL_DATA_SOURCE = NULL
8907 WHERE B.SHORT_NAME = p_Measure_Short_Name;
8908
8909 EXCEPTION
8910 WHEN OTHERS THEN
8911 NULL;
8912 END;
8913 END IF;
8914 END IF;
8915
8916 EXCEPTION
8917 WHEN FND_API.G_EXC_ERROR THEN
8918 IF (x_msg_data IS NULL) THEN
8919 FND_MSG_PUB.Count_And_Get
8920 ( p_encoded => FND_API.G_FALSE
8921 , p_count => x_msg_count
8922 , p_data => x_msg_data
8923 );
8924 END IF;
8925 x_return_status := FND_API.G_RET_STS_ERROR;
8926 ROLLBACK TO SwitchMeasureType;
8927 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8928 IF (x_msg_data IS NULL) THEN
8929 FND_MSG_PUB.Count_And_Get
8930 ( p_encoded => FND_API.G_FALSE
8931 , p_count => x_msg_count
8932 , p_data => x_msg_data
8933 );
8934 END IF;
8935 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8936 ROLLBACK TO SwitchMeasureType;
8937 WHEN NO_DATA_FOUND THEN
8938 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8939 IF (x_msg_data IS NOT NULL) THEN
8940 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type ';
8941 ELSE
8942 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type ';
8943 END IF;
8944 ROLLBACK TO SwitchMeasureType;
8945 WHEN OTHERS THEN
8946 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8947 IF (x_msg_data IS NOT NULL) THEN
8948 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type ';
8949 ELSE
8950 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Switch_Measure_Type ';
8951 END IF;
8952 ROLLBACK TO SwitchMeasureType;
8953 END Switch_Measure_Type;
8954
8955
8956 FUNCTION Get_Measure_Source (
8957 p_Measure_Short_Name IN VARCHAR2
8958 ) RETURN VARCHAR2
8959 IS
8960 l_Measure_Source BSC_SYS_MEASURES.SOURCE%TYPE;
8961 BEGIN
8962 l_Measure_Source := BSC_BIS_MEASURE_PUB.c_BSC;
8963
8964 SELECT
8965 m.source
8966 INTO
8967 l_Measure_Source
8968 FROM
8969 bsc_sys_measures m,
8970 bsc_sys_datasets_vl d,
8971 bis_indicators i
8972 WHERE
8973 i.dataset_id = d.dataset_id AND
8974 d.measure_id1 = m.measure_id AND
8975 i.short_name = p_Measure_Short_Name;
8976
8977 RETURN l_Measure_Source;
8978
8979 EXCEPTION
8980 WHEN OTHERS THEN
8981 RETURN BSC_BIS_MEASURE_PUB.c_BSC;
8982 END Get_Measure_Source;
8983
8984
8985 FUNCTION Is_Measure_Data_Source_Valid(
8986 p_Measures_Short_Name IN VARCHAR2 ,
8987 p_Actual_Data_Source IN VARCHAR2
8988 ) RETURN VARCHAR2
8989 IS
8990 l_meas_source BSC_SYS_MEASURES.SOURCE%TYPE;
8991 l_count NUMBER := 0;
8992 l_region_code AK_REGIONS.REGION_CODE%TYPE;
8993 BEGIN
8994
8995 l_region_code := SUBSTR(p_Actual_Data_Source, 1, INSTR(p_Actual_Data_Source, '.') - 1);
8996
8997 SELECT COUNT(1)
8998 INTO l_count
8999 FROM ak_regions
9000 WHERE region_code = l_region_code;
9001
9002 -- When AG Report is deleted the actual_data_source of measures having this report as primary
9003 -- data source was not getting updated .This condition will check for such measures.
9004 l_meas_source := Get_Measure_Source(p_Measures_Short_Name);
9005 IF (l_count = 0 AND (BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_AGKpi(p_Measures_Short_Name) = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) AND
9006 (l_meas_source = BSC_BIS_MEASURE_PUB.c_PMF OR l_meas_source = BSC_BIS_MEASURE_PUB.c_BSC)) THEN
9007 RETURN FND_API.G_FALSE;
9008 END IF;
9009
9010 RETURN FND_API.G_TRUE;
9011
9012 EXCEPTION
9013 WHEN OTHERS THEN
9014 RETURN FND_API.G_FALSE;
9015 END Is_Measure_Data_Source_Valid;
9016
9017
9018 -- changed the if condition for Bug#4642136
9019 FUNCTION Get_Actual_Source_Data (
9020 p_Measures_Short_Name IN VARCHAR2
9021 ) RETURN VARCHAR2
9022 IS
9023 l_Actual_Data_Source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
9024 BEGIN
9025
9026 l_Actual_Data_Source := NULL;
9027
9028 SELECT B.ACTUAL_DATA_SOURCE
9029 INTO l_Actual_Data_Source
9030 FROM BIS_INDICATORS B
9031 WHERE B.SHORT_NAME = p_Measures_Short_Name;
9032
9033
9034 -- Invalid Data sources should be returned as NULL (so that they are updatable)
9035 IF (Is_Measure_Data_Source_Valid(p_Measures_Short_Name,l_Actual_Data_Source) = FND_API.G_FALSE) THEN
9036 RETURN NULL;
9037 ELSE
9038 RETURN l_Actual_Data_Source;
9039 END IF;
9040
9041 EXCEPTION
9042 WHEN OTHERS THEN
9043 RETURN l_Actual_Data_Source;
9044 END Get_Actual_Source_Data;
9045
9046 -- changed the if condition for Bug#4642136
9047 FUNCTION Get_Measure_Function_Name (
9048 p_Measures_Short_Name IN VARCHAR2
9049 ) RETURN VARCHAR2
9050 IS
9051 l_Measure_Function_Name BIS_INDICATORS.FUNCTION_NAME%TYPE;
9052 l_Count NUMBER := 0;
9053 BEGIN
9054
9055 l_Measure_Function_Name := NULL;
9056
9057 SELECT B.FUNCTION_NAME
9058 INTO l_Measure_Function_Name
9059 FROM BIS_INDICATORS B
9060 WHERE B.SHORT_NAME = p_Measures_Short_Name;
9061
9062 IF(l_Measure_Function_Name IS NULL) THEN
9063 RETURN NULL;
9064 END IF;
9065
9066 SELECT COUNT(1)
9067 INTO l_Count
9068 FROM fnd_form_functions
9069 WHERE function_name = l_Measure_Function_Name;
9070
9071 -- For BSC Type of measure an invalid function name should be overwritten.
9072 --This happens only if the report with this function name is deleted
9073 IF (l_Count = 0 AND (BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_AGKpi(p_Measures_Short_Name) = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) AND
9074 Get_Measure_Source(p_Measures_Short_Name) = BSC_BIS_MEASURE_PUB.c_BSC) THEN
9075 RETURN NULL;
9076 ELSE
9077 RETURN l_Measure_Function_Name;
9078 END IF;
9079
9080 EXCEPTION
9081 WHEN OTHERS THEN
9082 RETURN l_Measure_Function_Name;
9083 END Get_Measure_Function_Name;
9084
9085 -- changed the if condition for Bug#4642136
9086 -- Added for Bug#4599432
9087 FUNCTION Get_Actual_Source_Data_Type (
9088 p_Measures_Short_Name IN VARCHAR2
9089 ) RETURN VARCHAR2
9090 IS
9091 l_Actual_Data_Source_Type BIS_INDICATORS.ACTUAL_DATA_SOURCE_TYPE%TYPE;
9092 l_Actual_Data_Source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
9093 BEGIN
9094
9095 l_Actual_Data_Source_Type := NULL;
9096
9097 SELECT B.ACTUAL_DATA_SOURCE_TYPE, B.ACTUAL_DATA_SOURCE
9098 INTO l_Actual_Data_Source_Type, l_Actual_Data_Source
9099 FROM BIS_INDICATORS B
9100 WHERE B.SHORT_NAME = p_Measures_Short_Name;
9101
9102 -- Invalid Data sources should be returned as NULL (so that they are updatable)
9103 IF (Is_Measure_Data_Source_Valid(p_Measures_Short_Name,l_Actual_Data_Source) = FND_API.G_FALSE) THEN
9104 RETURN NULL;
9105 ELSE
9106 RETURN l_Actual_Data_Source_Type;
9107 END IF;
9108
9109 EXCEPTION
9110 WHEN OTHERS THEN
9111 RETURN l_Actual_Data_Source_Type;
9112 END Get_Actual_Source_Data_Type;
9113
9114
9115 -- API added for Bug#4339686
9116 FUNCTION is_Scorecard_From_AG_Report (
9117 p_Tab_id IN NUMBER
9118 ) RETURN VARCHAR2 IS
9119 l_Count NUMBER;
9120 BEGIN
9121
9122 SELECT COUNT(1) INTO l_Count
9123 FROM BSC_TABS_B T,
9124 BSC_TAB_INDICATORS K,
9125 BSC_KPI_ANALYSIS_OPTIONS_B A
9126 WHERE T.TAB_ID = p_Tab_id
9127 AND K.TAB_ID = T.TAB_ID
9128 AND A.INDICATOR = K.INDICATOR
9129 AND A.SHORT_NAME = T.SHORT_NAME;
9130
9131 -- The scorecard is the same as the analysis_option,
9132 -- hence it must have been created from AG Report flow
9133 IF (l_Count <> 0) THEN
9134 RETURN FND_API.G_TRUE;
9135 END IF;
9136
9137 RETURN FND_API.G_FALSE;
9138
9139 EXCEPTION
9140 WHEN OTHERS THEN
9141 RETURN FND_API.G_FALSE;
9142 END is_Scorecard_From_AG_Report;
9143
9144
9145 -- Check if the Periodicities have been changed from the Parameter Section
9146 -- when compared to the Objective
9147
9148 FUNCTION Has_Time_Dim_Obj_Changed (
9149 p_Time_Dim_Objects IN VARCHAR2
9150 , p_Kpi_Id IN NUMBER
9151 , p_Is_Xtd IN VARCHAR2
9152 ) RETURN VARCHAR2 IS
9153 l_Time_Dim_Obj_Short_Name VARCHAR2(30);
9154 l_Time_Dim_Obj_Short_Names VARCHAR2(1000);
9155 l_Periodicity_Id NUMBER;
9156 l_Count NUMBER;
9157 l_Calendar_Id NUMBER := NULL;
9158 l_Calendar_Id_Aux NUMBER := NULL;
9159 l_Message VARCHAR2(400);
9160 l_Flag BOOLEAN;
9161 l_Loop_Count NUMBER;
9162 l_Time_Dim_Object VARCHAR2(30);
9163 TYPE period_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
9164 l_periods period_array;
9165 l_Period_Count NUMBER;
9166 l_Found BOOLEAN;
9167 l_Daily_Found BOOLEAN;
9168 l_Daily_Diff NUMBER;
9169
9170 BEGIN
9171
9172 l_Time_Dim_Obj_Short_Names := p_Time_Dim_Objects;
9173
9174 IF (p_Time_Dim_Objects IS NULL) THEN
9175 RETURN FND_API.G_TRUE;
9176 END IF;
9177
9178 l_Loop_Count := 0;
9179 l_Period_Count := 0;
9180 l_Daily_Found := FALSE;
9181
9182 WHILE (is_more(p_dim_short_names => l_Time_Dim_Obj_Short_Names
9183 ,p_dim_name => l_Time_Dim_Obj_Short_Name)) LOOP
9184
9185
9186 l_Periodicity_Id := NULL;
9187
9188 l_Time_Dim_Object := l_Time_Dim_Obj_Short_Name;
9189
9190 l_flag := BSC_PERIODS_UTILITY_PKG.Get_Bsc_Periodicity(
9191 x_time_level_name => l_Time_Dim_Object
9192 ,x_periodicity_id => l_Periodicity_Id
9193 ,x_calendar_id => l_Calendar_Id_Aux
9194 ,x_message => l_Message
9195 );
9196
9197 l_Found := FALSE;
9198 FOR counter IN 1..l_Period_Count LOOP
9199 IF (l_periods(counter) = l_Time_Dim_Object) THEN
9200 l_Found := TRUE;
9201 END IF;
9202 END LOOP;
9203
9204 IF (NOT l_Found) THEN
9205
9206 l_Period_Count := l_Period_Count + 1;
9207 l_periods(l_Period_Count) := l_Time_Dim_Object;
9208
9209 l_Calendar_Id := l_Calendar_Id_Aux;
9210
9211 SELECT COUNT(1) INTO l_Count
9212 FROM BSC_KPI_PERIODICITIES K
9213 WHERE K.INDICATOR = p_Kpi_Id
9214 AND K.PERIODICITY_ID = l_Periodicity_Id;
9215
9216 IF(NOT BSC_PERIODS_UTILITY_PKG.Is_Base_Periodicity_Daily(l_Periodicity_Id))THEN
9217 l_Loop_Count := l_Loop_Count + 1;
9218 ELSE
9219 l_Daily_Found := TRUE;
9220 END IF;
9221
9222 IF (l_Count <> 1) THEN
9223 RETURN FND_API.G_TRUE;
9224 END IF;
9225 END IF;
9226
9227 END LOOP;
9228
9229 SELECT COUNT(1) INTO l_Count
9230 FROM BSC_KPI_PERIODICITIES K
9231 WHERE K.INDICATOR = p_Kpi_Id;
9232
9233 -- We need to ignore the DAY365, since it is mandatory.
9234 IF ((p_Is_Xtd <> FND_API.G_TRUE) AND (NOT l_Daily_Found)) THEN
9235 l_Daily_Diff := 0;
9236 ELSE
9237 l_Daily_Diff := 1;
9238 END IF;
9239
9240 IF (l_Loop_Count <> (l_Count-l_Daily_Diff)) THEN
9241 RETURN FND_API.G_TRUE;
9242 END IF;
9243
9244
9245 RETURN FND_API.G_FALSE;
9246
9247 EXCEPTION
9248 WHEN OTHERS THEN
9249 RETURN FND_API.G_FALSE;
9250 END Has_Time_Dim_Obj_Changed;
9251
9252
9253 FUNCTION Has_Non_Time_Dim_Obj_Changed (
9254 p_Non_Time_Dim_Objects IN VARCHAR2
9255 , p_Kpi_Id IN NUMBER
9256 ) RETURN VARCHAR2 IS
9257 l_Non_Time_Dim_Obj_Short_Name VARCHAR2(30);
9258 l_Non_Time_Dim_Obj_Short_Names VARCHAR2(1000);
9259 l_Obj_NT_Dim_Obj_Short_Names VARCHAR2(1000);
9260 l_Count NUMBER;
9261
9262 CURSOR c_Objective_Dim_Obj IS
9263 SELECT B.LEVEL_SHORTNAME
9264 FROM BSC_KPI_DIM_LEVELS_VL B
9265 WHERE B.INDICATOR = p_Kpi_Id
9266 ORDER BY B.DIM_LEVEL_INDEX;
9267
9268 BEGIN
9269
9270 l_Non_Time_Dim_Obj_Short_Names := p_Non_Time_Dim_Objects;
9271 l_Obj_NT_Dim_Obj_Short_Names := NULL;
9272
9273
9274 FOR cODO IN c_Objective_Dim_Obj LOOP
9275 IF(l_Obj_NT_Dim_Obj_Short_Names IS NULL) THEN
9276 l_Obj_NT_Dim_Obj_Short_Names := cODO.LEVEL_SHORTNAME;
9277 ELSE
9278 l_Obj_NT_Dim_Obj_Short_Names := l_Obj_NT_Dim_Obj_Short_Names ||',' || cODO.LEVEL_SHORTNAME;
9279 END IF;
9280 END LOOP;
9281
9282
9283 IF ((l_Non_Time_Dim_Obj_Short_Names IS NULL AND l_Obj_NT_Dim_Obj_Short_Names IS NOT NULL) OR
9284 (l_Non_Time_Dim_Obj_Short_Names IS NOT NULL AND l_Obj_NT_Dim_Obj_Short_Names IS NULL) OR
9285 (l_Non_Time_Dim_Obj_Short_Names <> l_Obj_NT_Dim_Obj_Short_Names)) THEN
9286 RETURN FND_API.G_TRUE;
9287 END IF;
9288
9289 RETURN FND_API.G_FALSE;
9290 EXCEPTION
9291 WHEN OTHERS THEN
9292 RETURN FND_API.G_FALSE;
9293 END Has_Non_Time_Dim_Obj_Changed;
9294
9295 -- Check if the measure sequence has changed or not
9296 FUNCTION Has_Measure_Column_Changed (
9297 p_Measure_Short_Names IN VARCHAR2
9298 , p_Kpi_id IN NUMBER
9299 ) RETURN VARCHAR2 IS
9300 CURSOR c_Meas_Short_Names IS
9301 SELECT I.SHORT_NAME
9302 FROM BSC_KPI_ANALYSIS_MEASURES_B K
9303 , BIS_INDICATORS I
9304 WHERE K.INDICATOR = p_Kpi_Id
9305 AND K.ANALYSIS_OPTION0 = 0
9306 AND K.ANALYSIS_OPTION1 = 0
9307 AND K.ANALYSIS_OPTION2 = 0
9308 AND I.DATASET_ID = K.DATASET_ID
9309 AND K.DATASET_ID <>-1
9310 ORDER BY K.SERIES_ID;
9311
9312 l_Measure_Short_Names VARCHAR2(1000);
9313 BEGIN
9314 FOR c_MSN IN c_Meas_Short_Names LOOP
9315 IF (l_Measure_Short_Names IS NULL) THEN
9316 l_Measure_Short_Names := c_MSN.SHORT_NAME;
9317 ELSE
9318 l_Measure_Short_Names := l_Measure_Short_Names || ',' || c_MSN.SHORT_NAME;
9319 END IF;
9320 END LOOP;
9321
9322 IF ((l_Measure_Short_Names <> p_Measure_Short_Names) OR
9323 (p_Measure_Short_Names IS NULL AND l_Measure_Short_Names IS NOT NULL) OR
9324 (l_Measure_Short_Names IS NULL AND p_Measure_Short_Names IS NOT NULL)) THEN
9325 RETURN FND_API.G_TRUE;
9326 END IF;
9327
9328 RETURN FND_API.G_FALSE;
9329
9330 EXCEPTION
9331 WHEN OTHERS THEN
9332 RETURN FND_API.G_FALSE;
9333 END Has_Measure_Column_Changed;
9334
9335 -- Checks if the measures have been changed or not
9336 FUNCTION Have_Measures_Changed (
9337 p_Measure_Short_Names IN VARCHAR2
9338 , p_Kpi_id IN NUMBER
9339 ) RETURN VARCHAR2 IS
9340
9341 CURSOR c_Meas_Short_Names IS
9342 SELECT I.SHORT_NAME
9343 FROM BSC_KPI_ANALYSIS_MEASURES_B K
9344 , BIS_INDICATORS I
9345 WHERE K.INDICATOR = p_Kpi_Id
9346 AND K.ANALYSIS_OPTION0 = 0
9347 AND K.ANALYSIS_OPTION1 = 0
9348 AND K.ANALYSIS_OPTION2 = 0
9349 AND I.DATASET_ID = K.DATASET_ID
9350 AND K.DATASET_ID <>-1
9351 ORDER BY K.SERIES_ID;
9352
9353 l_Measure_Short_Names VARCHAR2(1000);
9354 l_Cur_Meas_Short_Name BIS_INDICATORS.SHORT_NAME%TYPE;
9355 l_PreviousMeasCnt NUMBER := 0;
9356 l_CurrentMeasCnt NUMBER := 0;
9357 BEGIN
9358
9359 IF( p_Measure_Short_Names IS NOT NULL) THEN
9360 l_Measure_Short_Names := p_Measure_Short_Names;
9361 l_CurrentMeasCnt := LENGTH(l_Measure_Short_Names) - LENGTH(REPLACE(l_Measure_Short_Names,',')) + 1 ;
9362 END IF;
9363
9364 SELECT COUNT(1) INTO l_PreviousMeasCnt
9365 FROM BSC_KPI_ANALYSIS_MEASURES_B K
9366 , BIS_INDICATORS I
9367 WHERE K.INDICATOR = p_Kpi_Id
9368 AND K.ANALYSIS_OPTION0 = 0
9369 AND K.ANALYSIS_OPTION1 = 0
9370 AND K.ANALYSIS_OPTION2 = 0
9371 AND I.DATASET_ID = K.DATASET_ID
9372 AND K.DATASET_ID <>-1
9373 ORDER BY K.SERIES_ID;
9374
9375 IF (l_CurrentMeasCnt <> l_PreviousMeasCnt) THEN
9376 RETURN FND_API.G_TRUE;
9377 END IF;
9378
9379 l_Measure_Short_Names := ',' || p_Measure_Short_Names || ',';
9380 FOR c_MSN IN c_Meas_Short_Names LOOP
9381 l_Cur_Meas_Short_Name := ',' || c_MSN.SHORT_NAME || ',';
9382 IF(LENGTH(l_Measure_Short_Names) - LENGTH(REPLACE(l_Measure_Short_Names,l_Cur_Meas_Short_Name)) = 0) THEN
9383 RETURN FND_API.G_TRUE;
9384 END IF;
9385 END LOOP;
9386
9387 RETURN FND_API.G_FALSE;
9388
9389 EXCEPTION
9390 WHEN OTHERS THEN
9391 RETURN FND_API.G_FALSE;
9392 END Have_Measures_Changed;
9393
9394
9395 /************************************************************
9396 Name : Delete_Tab_And_TabViews
9397 Description : This API is used to delete the scorecard and the associated
9398 tab_views which are attached to it.
9399 Creator : ashankar 25-May-2005
9400 Note : Before using this API from Report designer we need to check if BSC
9401 is installed or not.If not then we will not call this API.
9402 /************************************************************/
9403
9404 PROCEDURE Delete_Tab_And_TabViews
9405 (
9406 p_commit IN VARCHAR2 := FND_API.G_FALSE
9407 , p_region_code IN AK_REGION_ITEMS.region_code%TYPE
9408 , x_Return_Status OUT NOCOPY VARCHAR2
9409 , x_Msg_Count OUT NOCOPY NUMBER
9410 , x_Msg_Data OUT NOCOPY VARCHAR2
9411 )IS
9412 l_tab_id BSC_TABS_B.tab_id%TYPE;
9413
9414 CURSOR c_GetTabId IS
9415 SELECT tab_id
9416 FROM BSC_TABS_B
9417 WHERE SHORT_NAME = p_region_code;
9418
9419 BEGIN
9420 FND_MSG_PUB.INITIALIZE;
9421 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
9422
9423 FOR cTabId IN c_GetTabId LOOP
9424 l_tab_id := cTabId.tab_id;
9425 END LOOP;
9426
9427 IF(l_tab_id IS NOT NULL) THEN
9428
9429 BSC_PMF_UI_WRAPPER.Delete_Tab
9430 (
9431 p_commit => p_commit
9432 , p_tab_id => l_tab_id
9433 , x_Return_Status => x_Return_Status
9434 , x_Msg_Count => x_Msg_Count
9435 , x_Msg_Data => x_Msg_Data
9436 );
9437 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9438 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9439 END IF;
9440 END IF;
9441 IF(p_commit =FND_API.G_TRUE)THEN
9442 COMMIT;
9443 END IF;
9444
9445 EXCEPTION
9446
9447 WHEN FND_API.G_EXC_ERROR THEN
9448 IF (x_Msg_Data IS NULL) THEN
9449 FND_MSG_PUB.Count_And_Get
9450 ( p_encoded => FND_API.G_FALSE
9451 ,p_count => x_Msg_Data
9452 ,p_data => x_Msg_Count
9453 );
9454 END IF;
9455 x_Return_Status := FND_API.G_RET_STS_ERROR;
9456
9457 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9458 IF (x_Msg_Data IS NULL) THEN
9459 FND_MSG_PUB.Count_And_Get
9460 ( p_encoded => FND_API.G_FALSE
9461 ,p_count => x_Msg_Data
9462 ,p_data => x_Msg_Count
9463 );
9464 END IF;
9465
9466 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
9467 --DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
9468
9469 WHEN NO_DATA_FOUND THEN
9470 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
9471 IF (x_Msg_Data IS NOT NULL) THEN
9472 x_msg_data := x_Msg_Data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_Tab_And_TabViews ';
9473 ELSE
9474 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_Tab_And_TabViews ';
9475 END IF;
9476
9477 --DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
9478
9479 WHEN OTHERS THEN
9480 x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
9481 IF (x_Msg_Data IS NOT NULL) THEN
9482 x_Msg_Data := x_Msg_Data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_Tab_And_TabViews ';
9483 ELSE
9484 x_Msg_Data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_Tab_And_TabViews ';
9485 END IF;
9486
9487 END Delete_Tab_And_TabViews;
9488
9489 /************************************************************
9490 Name : Get_Measures_From_CustomView
9491 Description : This API is used to get the list of measure short names which are used in
9492 a custom view and that custom view is attached to a report
9493 Input : p_region_code Region code of the report
9494 p_region_app_id application id of the report
9495 Ouput : x_has_cust_view
9496 FND_API.G_FALSE --> indicates custom view was not created for the report
9497 FND_API.G_TRUE --> indicates custom view exists for the report along with the measures
9498 Even though custom view exists but with no measures even then this
9499 out values will be false.
9500 : x_meas_sht_names --> Comma separated measure short names.
9501 Creator : ashankar 27-May-2005
9502 /************************************************************/
9503 PROCEDURE Get_Measures_From_CustomView
9504 (
9505 p_region_code IN AK_REGION_ITEMS.region_code%TYPE
9506 , p_region_app_id IN AK_REGION_ITEMS.region_application_id%TYPE
9507 , x_has_cust_view OUT NOCOPY VARCHAR2
9508 , x_meas_sht_names OUT NOCOPY VARCHAR2
9509 , x_scorecard_id OUT NOCOPY NUMBER
9510 , x_tabview_id OUT NOCOPY NUMBER
9511 --, x_last_update_date OUT NOCOPY VARCHAR
9512 , x_return_status OUT NOCOPY VARCHAR2
9513 , x_msg_count OUT NOCOPY NUMBER
9514 , x_msg_data OUT NOCOPY VARCHAR2
9515 ) IS
9516 l_count NUMBER;
9517 l_meas_sht_names VARCHAR2(4000);
9518
9519
9520 CURSOR c_meas_sht IS
9521 SELECT B.short_name
9522 FROM BIS_INDICATORS B
9523 ,BSC_TAB_VIEW_LABELS_B C
9524 ,BSC_TABS_B A
9525 WHERE A.tab_id = C.tab_id
9526 AND C.link_id = B.dataset_id
9527 AND A.short_name = p_region_code;
9528
9529 CURSOR c_cust_views IS
9530 SELECT A.tab_id
9531 ,B.tab_view_id
9532 ,B.last_update_date
9533 FROM BSC_TABS_B A
9534 ,BSC_TAB_VIEWS_B B
9535 WHERE A.tab_id =B.tab_id
9536 AND A.short_name = p_region_code;
9537
9538 BEGIN
9539 FND_MSG_PUB.INITIALIZE;
9540 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
9541 x_has_cust_view := FND_API.G_FALSE;
9542
9543 SELECT COUNT(0)
9544 INTO l_count
9545 FROM AK_REGION_ITEMS
9546 WHERE region_code = p_region_code
9547 AND region_application_id = p_region_app_id;
9548
9549 IF(l_count > 0) THEN
9550 FOR cd IN c_meas_sht LOOP
9551 IF(l_meas_sht_names IS NULL) THEN
9552 l_meas_sht_names := cd.short_name;
9553 ELSE
9554 l_meas_sht_names := l_meas_sht_names || ','|| cd.short_name;
9555 END IF;
9556 END LOOP;
9557
9558 FOR cd1 IN c_cust_views LOOP
9559 x_scorecard_id := cd1.tab_id;
9560 x_tabview_id := cd1.tab_view_id;
9561 x_has_cust_view := FND_API.G_TRUE;
9562 -- x_last_update_date := TO_CHAR(cd1.last_update_date, BSC_BIS_LOCKS_PUB.C_TIME_STAMP_FORMAT);
9563 END LOOP;
9564
9565 END IF;
9566 x_meas_sht_names := l_meas_sht_names;
9567
9568
9569 EXCEPTION
9570 WHEN OTHERS THEN
9571 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9572 IF (x_msg_data IS NOT NULL) THEN
9573 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Get_Measures_From_CustomView ';
9574 ELSE
9575 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Get_Measures_From_CustomView ';
9576 END IF;
9577 END Get_Measures_From_CustomView;
9578
9579
9580 /*****************************************************
9581 Name : is_Scorecard_From_Reports
9582 Description : This API checks if the scoreacrd was created
9583 from report designer or not.If WEB_HTML_CALL of FND_FORM_FUNCTIONS is bisviewer.showreport or BISReportPG then it is created
9584 from report designer.If it is OA.jsp?akRegionCode=BIS_COMPONENT_PAGE?akRegionApplicationId=191 then it is created from page designer.
9585 Scorecard created from page designer can be deleted from Scorecard designers but not the scorecard created from
9586 report designer.
9587 INPUT : p_tab_sht_name
9588 OUPTUT : 'F' --> Not from report designer
9589 'T' --> From report designer
9590 Created by : ashankar 08-JUL-2005
9591 /****************************************************/
9592
9593 FUNCTION is_Scorecard_From_Reports (
9594 p_tab_sht_name IN BSC_TABS_B.short_name%TYPE
9595 ) RETURN VARCHAR2 IS
9596
9597 CURSOR c_form_function IS
9598 SELECT Web_html_call
9599 FROM FND_FORM_FUNCTIONS
9600 WHERE FUNCTION_NAME =p_tab_sht_name;
9601
9602 l_web_html_call FND_FORM_FUNCTIONS.web_html_call%TYPE;
9603 BEGIN
9604
9605 IF(c_form_function%ISOPEN) THEN
9606 CLOSE c_form_function;
9607 END IF;
9608
9609 OPEN c_form_function;
9610 FETCH c_form_function INTO l_web_html_call;
9611 CLOSE c_form_function;
9612
9613 IF((UPPER(l_web_html_call)=BSC_BIS_KPI_CRUD_PUB.C_BISVIEWER_SHOWREPORT) OR (UPPER(l_web_html_call) = UPPER(BSC_BIS_KPI_CRUD_PUB.c_bisreportpg)))THEN
9614 RETURN FND_API.G_TRUE;
9615 END IF;
9616
9617 RETURN FND_API.G_FALSE;
9618
9619 EXCEPTION
9620 WHEN OTHERS THEN
9621 IF(c_form_function%ISOPEN) THEN
9622 CLOSE c_form_function;
9623 END IF;
9624 RETURN FND_API.G_FALSE;
9625 END is_Scorecard_From_Reports;
9626
9627 -- Check if the Dimension Object is a BSC periodicity
9628 FUNCTION Is_DimObj_Periodicity(
9629 p_Short_Name IN VARCHAR2
9630 ) RETURN VARCHAR2 IS
9631 l_Count NUMBER;
9632 BEGIN
9633 l_Count := 0;
9634
9635 SELECT COUNT(1) INTO l_Count
9636 FROM BSC_SYS_PERIODICITIES P
9637 WHERE P.SHORT_NAME = p_Short_Name;
9638
9639 IF (l_Count <> 0) THEN
9640 RETURN FND_API.G_TRUE;
9641 END IF;
9642
9643 RETURN FND_API.G_FALSE;
9644
9645 EXCEPTION
9646 WHEN OTHERS THEN
9647 RETURN FND_API.G_FALSE;
9648 END Is_DimObj_Periodicity;
9649
9650
9651 -- Check if the Dimension is a Custom/DBI Calendar
9652 FUNCTION Is_Dimension_Calendar(
9653 p_Short_Name IN VARCHAR2
9654 ) RETURN VARCHAR2 IS
9655 l_Count NUMBER;
9656 BEGIN
9657 l_Count := 0;
9658
9659 SELECT COUNT(1) INTO l_Count
9660 FROM BSC_SYS_CALENDARS_B P
9661 WHERE P.SHORT_NAME = p_Short_Name;
9662
9663 IF (l_Count <> 0) THEN
9664 RETURN FND_API.G_TRUE;
9665 END IF;
9666
9667 RETURN FND_API.G_FALSE;
9668
9669 EXCEPTION
9670 WHEN OTHERS THEN
9671 RETURN FND_API.G_FALSE;
9672 END Is_Dimension_Calendar;
9673
9674 -- This API is similar to BSC_DBI_CALENDAR.get_bsc_Periodicity,
9675 -- except that it queries directly from the BSC_SYS_PERIODICITIES table
9676 PROCEDURE Get_Non_DBI_Periodicities (
9677 p_Time_Short_Name IN VARCHAR2
9678 , x_Periodicity_Id OUT NOCOPY VARCHAR2
9679 , x_Calendar_Id OUT NOCOPY VARCHAR2
9680 , x_Return_Status OUT NOCOPY VARCHAR
9681 , x_Msg_Count OUT NOCOPY NUMBER
9682 , x_Msg_Data OUT NOCOPY VARCHAR
9683 ) IS
9684 BEGIN
9685 FND_MSG_PUB.Initialize;
9686
9687 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
9688
9689 IF (p_Time_Short_Name IS NULL) THEN
9690 FND_MESSAGE.SET_NAME('BSC','BSC_TIME_PERIODICITY_NULL');
9691 FND_MSG_PUB.ADD;
9692 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9693 END IF;
9694
9695 SELECT B.PERIODICITY_ID, B.CALENDAR_ID
9696 INTO x_Periodicity_Id, x_Calendar_Id
9697 FROM BSC_SYS_PERIODICITIES B
9698 WHERE B.SHORT_NAME = p_Time_Short_Name;
9699
9700 EXCEPTION
9701 WHEN NO_DATA_FOUND THEN
9702 IF(x_Msg_Data IS NULL) THEN
9703 x_Msg_Data := BSC_APPS.Get_Message('BSC_PER_CAL_NOT_EXIST');
9704 END IF;
9705 x_return_status := FND_API.G_RET_STS_ERROR;
9706 WHEN OTHERS THEN
9707 IF (x_msg_data IS NULL) THEN
9708 FND_MSG_PUB.Count_And_Get
9709 ( p_encoded => FND_API.G_FALSE
9710 , p_count => x_msg_count
9711 , p_data => x_msg_data
9712 );
9713 END IF;
9714 x_return_status := FND_API.G_RET_STS_ERROR;
9715 END Get_Non_DBI_Periodicities;
9716
9717
9718 PROCEDURE Is_Struct_Change_For_AG_Report
9719 ( p_Region_Code IN VARCHAR2
9720 , p_Region_Application_Id IN NUMBER
9721 , p_Dim_Obj_Short_Names IN VARCHAR2
9722 , p_Measure_Short_Names IN VARCHAR2
9723 , x_Result OUT NOCOPY VARCHAR2
9724 , x_Return_Status OUT NOCOPY VARCHAR2
9725 , x_Msg_Count OUT NOCOPY NUMBER
9726 , x_Msg_Data OUT NOCOPY VARCHAR2
9727 )
9728 IS
9729 l_Kpi_Id NUMBER;
9730 l_Non_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
9731 l_Non_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
9732 l_Non_Time_Dim_Obj_Short_Names VARCHAR2(2056);
9733 l_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
9734 l_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
9735 l_Time_Dim_Obj_Short_Names VARCHAR2(2056);
9736 l_All_Dim_Group_Ids BSC_NUMBER_TBL_TYPE;
9737 l_Non_Time_Counter NUMBER;
9738 l_Time_Counter NUMBER;
9739 l_Is_XTD_Enabled VARCHAR2(1);
9740 BEGIN
9741 x_Result := FND_API.G_FALSE;
9742 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
9743 l_Kpi_Id := Get_Kpi_Id(p_Region_Code);
9744 Get_Dim_Info_From_ParamPortlet(
9745 p_Dimension_Info => p_Dim_Obj_Short_Names
9746 ,x_non_time_dimension_groups => l_Non_Time_Dimension_Groups
9747 ,x_non_time_dimension_objects => l_Non_Time_Dimension_Objects
9748 ,x_non_time_dim_obj_short_names => l_Non_Time_Dim_Obj_Short_Names
9749 ,x_all_dim_group_ids => l_All_Dim_Group_Ids
9750 ,x_non_time_counter => l_Non_Time_Counter
9751 ,x_time_dimension_groups => l_Time_Dimension_Groups
9752 ,x_time_dimension_objects => l_Time_Dimension_Objects
9753 ,x_time_dim_obj_short_names => l_Time_Dim_Obj_Short_Names
9754 ,x_time_counter => l_Time_Counter
9755 ,x_msg_data => x_Msg_Data
9756 ,x_is_as_of_date => l_Is_XTD_Enabled
9757 );
9758
9759 IF((Has_Time_Dim_Obj_Changed(l_Time_Dim_Obj_Short_Names, l_Kpi_Id, l_Is_XTD_Enabled) = FND_API.G_TRUE) OR
9760 (Has_Non_Time_Dim_Obj_Changed(l_Non_Time_Dim_Obj_Short_Names,l_Kpi_Id) = FND_API.G_TRUE)) THEN
9761 x_Result := FND_API.G_TRUE;
9762 RETURN;
9763 END IF;
9764 IF (Have_Measures_Changed(p_Measure_Short_Names,l_Kpi_Id) = FND_API.G_TRUE) THEN
9765 x_Result := FND_API.G_TRUE;
9766 END IF;
9767 EXCEPTION
9768 WHEN OTHERS THEN
9769 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9770 IF (x_msg_data IS NOT NULL) THEN
9771 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Is_Struct_Change_For_AG_Report ';
9772 ELSE
9773 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Is_Struct_Change_For_AG_Report ';
9774 END IF;
9775 END Is_Struct_Change_For_AG_Report;
9776
9777 FUNCTION Get_Attribute_Code_For_Measure
9778 ( p_Report_Region_Code IN VARCHAR2
9779 ,p_Measure_Short_Name IN VARCHAR2
9780 ) RETURN VARCHAR2 IS
9781 l_attribute_code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
9782 BEGIN
9783 IF (p_Report_Region_Code IS NOT NULL AND p_Measure_Short_Name IS NOT NULL) THEN
9784 SELECT attribute_code
9785 INTO l_attribute_code
9786 FROM ak_region_items
9787 WHERE region_code = p_Report_Region_Code
9788 AND attribute2 = p_Measure_Short_Name;
9789 END IF;
9790 RETURN l_attribute_code;
9791 EXCEPTION
9792 WHEN OTHERS THEN
9793 RETURN l_attribute_code;
9794 END Get_Attribute_Code_For_Measure;
9795
9796 /*******************************************
9797 ** START **
9798 Added the following API for dynamic
9799 parameter portlet creation logic as required
9800 by Bug#4558279
9801 ********************************************/
9802
9803 FUNCTION Is_Dim_Exist_In_Current_Region (
9804 p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
9805 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
9806 ) RETURN VARCHAR2 IS
9807 l_Count NUMBER;
9808 BEGIN
9809 l_Count := 0;
9810
9811 SELECT COUNT(1) INTO l_Count
9812 FROM AK_REGION_ITEMS A
9813 WHERE A.REGION_CODE = p_Region_Code
9814 AND A.REGION_APPLICATION_ID = p_Region_Application_Id
9815 AND A.ATTRIBUTE1 IN
9816 ('DIMENSION LEVEL',
9817 'DIM LEVEL SINGLE VALUE',
9818 'DIMENSION VALUE',
9819 'HIDE_VIEW_BY',
9820 'HIDE_VIEW_BY_SINGLE',
9821 'HIDE PARAMETER',
9822 'VIEWBY PARAMETER',
9823 'HIDE_DIM_LVL',
9824 'HIDE DIMENSION LEVEL',
9825 'HIDE VIEW BY DIMENSION',
9826 'HIDE_VIEW_BY_DIM_SINGLE');
9827
9828
9829 IF (l_Count <> 0) THEN
9830 RETURN FND_API.G_TRUE;
9831 END IF;
9832
9833
9834 RETURN FND_API.G_FALSE;
9835 EXCEPTION
9836 WHEN OTHERS THEN
9837 RETURN FND_API.G_FALSE;
9838 END Is_Dim_Exist_In_Current_Region;
9839
9840
9841 /*******************************************
9842
9843 ********************************************/
9844
9845 FUNCTION Is_Dim_Exist_In_Nested_Region (
9846 p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
9847 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
9848 ) RETURN VARCHAR2 IS
9849 CURSOR c_Get_Nested_Region_Items IS
9850 SELECT A.NESTED_REGION_CODE
9851 ,A.NESTED_REGION_APPLICATION_ID
9852 FROM AK_REGION_ITEMS A
9853 WHERE A.REGION_CODE = p_Region_Code
9854 AND A.REGION_APPLICATION_ID = p_Region_Application_Id
9855 AND A.ITEM_STYLE = BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE;
9856 BEGIN
9857
9858 FOR cGNR IN c_Get_Nested_Region_Items LOOP
9859 IF (Is_Dim_Exist_In_Current_Region(
9860 cGNR.NESTED_REGION_CODE,
9861 cGNR.NESTED_REGION_APPLICATION_ID
9862 ) = FND_API.G_TRUE) THEN
9863 RETURN FND_API.G_TRUE;
9864 END IF;
9865 END LOOP;
9866
9867 RETURN FND_API.G_FALSE;
9868
9869 EXCEPTION
9870 WHEN OTHERS THEN
9871 RETURN FND_API.G_FALSE;
9872 END Is_Dim_Exist_In_Nested_Region;
9873
9874
9875 /*******************************************
9876
9877 ********************************************/
9878 FUNCTION Is_New_Param_Portlet_Required (
9879 p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
9880 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
9881 ) RETURN VARCHAR2 IS
9882 BEGIN
9883 IF ((Is_Dim_Exist_In_Current_Region(p_Region_Code, p_Region_Application_Id) = FND_API.G_TRUE) AND
9884 (Is_Dim_Exist_In_Nested_Region(p_Region_Code,p_Region_Application_Id) = FND_API.G_TRUE)) THEN
9885 RETURN FND_API.G_TRUE;
9886 END IF;
9887 EXCEPTION
9888 WHEN OTHERS THEN
9889 RETURN FND_API.G_FALSE;
9890 END Is_New_Param_Portlet_Required;
9891
9892
9893
9894 PROCEDURE Cascade_Parameter_Portlet (
9895 p_Commit IN VARCHAR2
9896 , p_Page_Function_Name IN VARCHAR2
9897 , p_Param_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
9898 , p_Param_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
9899 , p_Action_Type IN VARCHAR2
9900 , x_Region_Code OUT NOCOPY VARCHAR2
9901 , x_Region_Application_Id OUT NOCOPY NUMBER
9902 , x_Return_Status OUT NOCOPY VARCHAR2
9903 , x_Msg_Count OUT NOCOPY NUMBER
9904 , x_Msg_Data OUT NOCOPY VARCHAR2
9905 ) IS
9906 BEGIN
9907 IF(p_Action_Type = BSC_UTILITY.c_CREATE) THEN
9908 IF (Is_Dim_Exist_In_Nested_Region(
9909 p_Param_Region_Code,
9910 p_Param_Region_Application_Id
9911 ) = FND_API.G_TRUE) THEN
9912 IF (NOT Does_KPI_Exist(p_Page_Function_Name)) THEN
9913 BSC_BIS_KPI_CRUD_PUB.Create_Parameter_Portlet (
9914 p_Commit => p_Commit
9915 , p_Region_Code => p_Param_Region_Code
9916 , p_Region_Application_Id => p_Param_Region_Application_Id
9917 , x_Region_Code => x_Region_Code
9918 , x_Region_Application_Id => x_Region_Application_Id
9919 , x_Return_Status => x_Return_Status
9920 , x_Msg_Count => x_Msg_Count
9921 , x_Msg_Data => x_Msg_Data
9922 );
9923 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9924 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9925 END IF;
9926 ELSE
9927 x_Region_Code := Get_Param_Portlet_By_Dashboard(p_Page_Function_Name);
9928 x_Region_Application_Id := Get_Region_Application_Id(x_Region_Code);
9929 END IF;
9930 ELSE
9931 x_Region_Code := p_Param_Region_Code;
9932 x_Region_Application_Id := p_Param_Region_Application_Id;
9933 END IF;
9934 ELSIF (p_Action_Type = BSC_UTILITY.c_UPDATE) THEN
9935 x_Region_Code := Get_Param_Portlet_By_Dashboard(p_Page_Function_Name);
9936 x_Region_Application_Id := Get_Region_Application_Id(x_Region_Code);
9937 ELSIF (p_Action_Type = BSC_UTILITY.c_DELETE) THEN
9938 x_Region_Code := Get_Param_Portlet_By_Dashboard(p_Page_Function_Name);
9939 x_Region_Application_Id := Get_Region_Application_Id(x_Region_Code);
9940 END IF;
9941 EXCEPTION
9942 WHEN FND_API.G_EXC_ERROR THEN
9943 IF (x_msg_data IS NULL) THEN
9944 FND_MSG_PUB.Count_And_Get
9945 ( p_encoded => FND_API.G_FALSE
9946 , p_count => x_msg_count
9947 , p_data => x_msg_data
9948 );
9949 END IF;
9950 x_return_status := FND_API.G_RET_STS_ERROR;
9951 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9952 IF (x_msg_data IS NULL) THEN
9953 FND_MSG_PUB.Count_And_Get
9954 ( p_encoded => FND_API.G_FALSE
9955 , p_count => x_msg_count
9956 , p_data => x_msg_data
9957 );
9958 END IF;
9959 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9960 WHEN NO_DATA_FOUND THEN
9961 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9962 IF (x_msg_data IS NOT NULL) THEN
9963 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Parameter_Portlet ';
9964 ELSE
9965 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Parameter_Portlet ';
9966 END IF;
9967 WHEN OTHERS THEN
9968 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9969 IF (x_msg_data IS NOT NULL) THEN
9970 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Parameter_Portlet ';
9971 ELSE
9972 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Parameter_Portlet ';
9973 END IF;
9974 END Cascade_Parameter_Portlet;
9975
9976 /*******************************************
9977
9978 ********************************************/
9979
9980 PROCEDURE Create_Parameter_Portlet (
9981 p_Commit IN VARCHAR2
9982 , p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
9983 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
9984 , x_Region_Code OUT NOCOPY VARCHAR2
9985 , x_Region_Application_Id OUT NOCOPY NUMBER
9986 , x_Return_Status OUT NOCOPY VARCHAR2
9987 , x_Msg_Count OUT NOCOPY NUMBER
9988 , x_Msg_Data OUT NOCOPY VARCHAR2
9989 ) IS
9990 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
9991 l_Report_Region_Rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
9992 l_Region_Item_Tbl BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
9993 BEGIN
9994
9995 SAVEPOINT CascadeParamPortlet;
9996 FND_MSG_PUB.Initialize;
9997
9998 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
9999
10000 -- get a new region_code
10001 l_Region_Code := Get_New_Region_Code;
10002
10003 l_Report_Region_Rec.Region_Code := l_Region_Code;
10004 l_Report_Region_Rec.Region_Name := l_Region_Code;
10005 l_Report_Region_Rec.Region_Description := l_Region_Code;
10006 l_Report_Region_Rec.Region_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
10007 l_Report_Region_Rec.Database_Object_Name := C_ICX_PROMPTS;
10008 l_Report_Region_Rec.Region_Style := C_TABLE;
10009 l_Report_Region_Rec.Region_Object_Type := NULL;
10010 l_Report_Region_Rec.Help_Target := NULL;
10011 l_Report_Region_Rec.Display_Rows := NULL;
10012 l_Report_Region_Rec.Disable_View_By := 'N';
10013 l_Report_Region_Rec.No_Of_Portlet_Rows := NULL;
10014 l_Report_Region_Rec.Schedule := NULL;
10015 l_Report_Region_Rec.Header_File_Procedure := NULL;
10016 l_Report_Region_Rec.Footer_File_Procedure := NULL;
10017 l_Report_Region_Rec.Group_By := NULL;
10018 l_Report_Region_Rec.Order_By := NULL;
10019 l_Report_Region_Rec.Plsql_For_Report_Query := NULL;
10020 l_Report_Region_Rec.Display_Subtotals := NULL;
10021 l_Report_Region_Rec.Data_Source := NULL;
10022 l_Report_Region_Rec.Where_Clause := NULL;
10023 l_Report_Region_Rec.Dimension_Group := NULL;
10024 l_Report_Region_Rec.Parameter_Layout := NULL;
10025 l_Report_Region_Rec.Kpi_Id := NULL;
10026 l_Report_Region_Rec.Analysis_Option_Id := NULL;
10027 l_Report_Region_Rec.Dim_Set_Id := NULL;
10028
10029 BIS_PMV_REGION_PVT.CREATE_REGION
10030 (
10031 p_commit => p_commit
10032 ,p_Report_Region_Rec => l_report_region_rec
10033 ,x_return_status => x_return_status
10034 ,x_msg_count => x_msg_count
10035 ,x_msg_data => x_msg_data
10036 );
10037 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10038 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10039 END IF;
10040
10041 BSC_BIS_KPI_CRUD_PUB.Unroll_RegionItems_Into_Record (
10042 p_Region_Code => p_Region_Code
10043 , p_Region_Application_Id => p_Region_Application_Id
10044 , x_Region_Item_Tbl => l_Region_Item_Tbl
10045 );
10046
10047 BIS_PMV_REGION_ITEMS_PVT.CREATE_REGION_ITEMS(
10048 p_commit => p_commit
10049 ,p_region_code => l_Region_Code
10050 ,p_region_application_id => BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID
10051 ,p_Region_Item_Tbl => l_Region_Item_Tbl
10052 ,x_return_status => x_return_status
10053 ,x_msg_count => x_msg_count
10054 ,x_msg_data => x_msg_data
10055 );
10056 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10057 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10058 END IF;
10059
10060 x_Region_Code := l_Region_Code;
10061 x_Region_Application_Id := BSC_BIS_KPI_CRUD_PUB.C_BSC_APPLICATION_ID;
10062
10063 EXCEPTION
10064 WHEN FND_API.G_EXC_ERROR THEN
10065 IF (x_msg_data IS NULL) THEN
10066 FND_MSG_PUB.Count_And_Get
10067 ( p_encoded => FND_API.G_FALSE
10068 , p_count => x_msg_count
10069 , p_data => x_msg_data
10070 );
10071 END IF;
10072 x_return_status := FND_API.G_RET_STS_ERROR;
10073 ROLLBACK TO CascadeParamPortlet;
10074 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10075 IF (x_msg_data IS NULL) THEN
10076 FND_MSG_PUB.Count_And_Get
10077 ( p_encoded => FND_API.G_FALSE
10078 , p_count => x_msg_count
10079 , p_data => x_msg_data
10080 );
10081 END IF;
10082 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10083 ROLLBACK TO CascadeParamPortlet;
10084 WHEN NO_DATA_FOUND THEN
10085 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10086 IF (x_msg_data IS NOT NULL) THEN
10087 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Parameter_Portlet ';
10088 ELSE
10089 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Parameter_Portlet ';
10090 END IF;
10091 ROLLBACK TO CascadeParamPortlet;
10092 WHEN OTHERS THEN
10093 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10094 IF (x_msg_data IS NOT NULL) THEN
10095 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Create_Parameter_Portlet ';
10096 ELSE
10097 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Create_Parameter_Portlet ';
10098 END IF;
10099 ROLLBACK TO CascadeParamPortlet;
10100 END Create_Parameter_Portlet;
10101
10102 /*******************************************
10103
10104 ********************************************/
10105 -- Get a new region code every time.
10106 FUNCTION Get_New_Region_Code
10107 RETURN VARCHAR2 IS
10108 BEGIN
10109 RETURN 'BSC_PARAM_'||TO_CHAR(SYSDATE,'J')||ABS(DBMS_UTILITY.GET_TIME);
10110 EXCEPTION
10111 WHEN OTHERS THEN
10112 RETURN NULL;
10113 END Get_New_Region_Code;
10114
10115
10116 -- Unrolls all the Dimension based region items into the table BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type
10117 -- for any given region_code, this API all
10118 PROCEDURE Unroll_RegionItems_Into_Record (
10119 p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
10120 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
10121 , x_Region_Item_Tbl OUT NOCOPY BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type
10122 ) IS
10123
10124 CURSOR c_Get_Nested_Region_Items IS
10125 SELECT A.NESTED_REGION_CODE
10126 ,A.NESTED_REGION_APPLICATION_ID
10127 FROM AK_REGION_ITEMS A
10128 WHERE A.REGION_CODE = p_Region_Code
10129 AND A.REGION_APPLICATION_ID = p_Region_Application_Id
10130 AND A.ITEM_STYLE = BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE
10131 ORDER BY A.DISPLAY_SEQUENCE;
10132
10133 l_Region_Item_Tbl BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type;
10134 l_Display_Sequence NUMBER;
10135 l_Count NUMBER;
10136 BEGIN
10137 l_Display_Sequence := 10;
10138 l_Count := 0;
10139
10140 -- Get the items from nested region_items
10141 FOR cGNRI IN c_Get_Nested_Region_Items LOOP
10142 BSC_BIS_KPI_CRUD_PUB.Get_Non_Nested_Into_Rec (
10143 p_Region_Code => cGNRI.NESTED_REGION_CODE
10144 , p_Region_Application_Id => cGNRI.NESTED_REGION_APPLICATION_ID
10145 , x_Region_Item_Tbl => l_Region_Item_Tbl
10146 );
10147
10148 FOR i IN 1..l_Region_Item_Tbl.COUNT LOOP
10149 x_Region_Item_Tbl(l_Count+i) := l_Region_Item_Tbl(i);
10150 x_Region_Item_Tbl(l_Count+i).Display_Sequence := l_Display_Sequence;
10151 l_Display_Sequence := l_Display_Sequence + 10;
10152 END LOOP;
10153
10154 l_Count := x_Region_Item_Tbl.COUNT;
10155 END LOOP;
10156
10157 BSC_BIS_KPI_CRUD_PUB.Get_Non_Nested_Into_Rec (
10158 p_Region_Code => p_Region_Code
10159 , p_Region_Application_Id => p_Region_Application_Id
10160 , x_Region_Item_Tbl => l_Region_Item_Tbl
10161 );
10162
10163 FOR i IN 1..l_Region_Item_Tbl.COUNT LOOP
10164 x_Region_Item_Tbl(l_Count+i) := l_Region_Item_Tbl(i);
10165 x_Region_Item_Tbl(l_Count+i).Display_Sequence := l_Display_Sequence;
10166 l_Display_Sequence := l_Display_Sequence + 10;
10167 END LOOP;
10168
10169 EXCEPTION
10170 WHEN OTHERS THEN
10171 NULL;
10172 END Unroll_RegionItems_Into_Record;
10173
10174 -- gets all the region items into the PL/SQL table BIS_AK_REGION_PUB.Bis_Region_Item_Rec_Type
10175 PROCEDURE Get_Non_Nested_Into_Rec (
10176 p_Region_Code IN AK_REGIONS.REGION_CODE%TYPE
10177 , p_Region_Application_Id IN AK_REGIONS.REGION_APPLICATION_ID%TYPE
10178 , x_Region_Item_Tbl OUT NOCOPY BIS_AK_REGION_PUB.Bis_Region_Item_Tbl_Type
10179 ) IS
10180 CURSOR c_NonNested IS
10181 SELECT
10182 AV.REGION_APPLICATION_ID
10183 , AV.REGION_CODE
10184 , AV.ATTRIBUTE_APPLICATION_ID
10185 , AV.ATTRIBUTE_CODE
10186 , AV.DISPLAY_SEQUENCE
10187 , AV.NODE_DISPLAY_FLAG
10188 , AV.REQUIRED_FLAG
10189 , AV.NODE_QUERY_FLAG
10190 , AV.DISPLAY_VALUE_LENGTH
10191 , AV.ATTRIBUTE_LABEL_LONG
10192 , AV.ORDER_SEQUENCE
10193 , AV.INITIAL_SORT_SEQUENCE
10194 , AV.ORDER_DIRECTION
10195 , AV.URL
10196 , AV.ATTRIBUTE1
10197 , AV.ATTRIBUTE2
10198 , AV.ATTRIBUTE3
10199 , AV.ATTRIBUTE4
10200 , AV.ATTRIBUTE5
10201 , AV.ATTRIBUTE6
10202 , AV.ATTRIBUTE7
10203 , AV.ATTRIBUTE8
10204 , AV.ATTRIBUTE9
10205 , AV.ATTRIBUTE10
10206 , AV.ATTRIBUTE11
10207 , AV.ATTRIBUTE12
10208 , AV.ATTRIBUTE13
10209 , AV.ATTRIBUTE14
10210 , AV.ATTRIBUTE15
10211 FROM AK_REGION_ITEMS_VL AV
10212 WHERE AV.ITEM_STYLE <> BIS_AK_REGION_PUB.c_NESTED_REGION_STYLE
10213 AND AV.REGION_CODE = p_Region_Code
10214 AND AV.REGION_APPLICATION_ID = p_Region_Application_Id
10215 AND AV.ATTRIBUTE1 IN ('DIMENSION LEVEL',
10216 'DIM LEVEL SINGLE VALUE',
10217 'DIMENSION VALUE',
10218 'HIDE_VIEW_BY',
10219 'HIDE_VIEW_BY_SINGLE',
10220 'HIDE PARAMETER',
10221 'VIEWBY PARAMETER',
10222 'HIDE_DIM_LVL',
10223 'HIDE DIMENSION LEVEL',
10224 'HIDE VIEW BY DIMENSION',
10225 'HIDE_VIEW_BY_DIM_SINGLE')
10226 ORDER BY AV.DISPLAY_SEQUENCE;
10227
10228
10229 iCount NUMBER;
10230 BEGIN
10231 iCount := 1;
10232 FOR cNN IN c_NonNested LOOP
10233 x_Region_Item_Tbl(iCount).Attribute_Code := cNN.ATTRIBUTE_CODE;
10234 x_Region_Item_Tbl(iCount).Attribute_Application_Id := cNN.ATTRIBUTE_APPLICATION_ID;
10235 x_Region_Item_Tbl(iCount).Display_Sequence := cNN.DISPLAY_SEQUENCE;
10236 x_Region_Item_Tbl(iCount).Node_Display_Flag := cNN.NODE_DISPLAY_FLAG;
10237 x_Region_Item_Tbl(iCount).Required_Flag := cNN.REQUIRED_FLAG;
10238 x_Region_Item_Tbl(iCount).Queryable_Flag := cNN.NODE_QUERY_FLAG;
10239 x_Region_Item_Tbl(iCount).Display_Length := cNN.DISPLAY_VALUE_LENGTH;
10240 x_Region_Item_Tbl(iCount).Long_Label := cNN.ATTRIBUTE_LABEL_LONG;
10241 x_Region_Item_Tbl(iCount).Sort_Sequence := cNN.ORDER_SEQUENCE;
10242 x_Region_Item_Tbl(iCount).Initial_Sort_Sequence := cNN.INITIAL_SORT_SEQUENCE;
10243 x_Region_Item_Tbl(iCount).Sort_Direction := cNN.ORDER_DIRECTION;
10244 x_Region_Item_Tbl(iCount).Url := cNN.URL;
10245 x_Region_Item_Tbl(iCount).Attribute_Type := cNN.ATTRIBUTE1;
10246 x_Region_Item_Tbl(iCount).Display_Format := cNN.ATTRIBUTE7;
10247 x_Region_Item_Tbl(iCount).Display_Type := cNN.ATTRIBUTE14;
10248 x_Region_Item_Tbl(iCount).Measure_Level := cNN.ATTRIBUTE2;
10249 x_Region_Item_Tbl(iCount).Base_Column := cNN.ATTRIBUTE3;
10250 x_Region_Item_Tbl(iCount).Lov_Where_Clause := cNN.ATTRIBUTE4;
10251 x_Region_Item_Tbl(iCount).Graph_Position := cNN.ATTRIBUTE5;
10252 x_Region_Item_Tbl(iCount).Graph_Style := cNN.ATTRIBUTE6;
10253 x_Region_Item_Tbl(iCount).Lov_Table := cNN.ATTRIBUTE15;
10254 x_Region_Item_Tbl(iCount).Aggregate_Function := cNN.ATTRIBUTE9;
10255 x_Region_Item_Tbl(iCount).Display_Total := cNN.ATTRIBUTE10;
10256 x_Region_Item_Tbl(iCount).Variance := cNN.ATTRIBUTE13;
10257 x_Region_Item_Tbl(iCount).Schedule := cNN.ATTRIBUTE8;
10258 x_Region_Item_Tbl(iCount).Override_Hierarchy := cNN.ATTRIBUTE11;
10259
10260 iCount := iCount + 1;
10261 END LOOP;
10262
10263 EXCEPTION
10264 WHEN OTHERS THEN
10265 NULL;
10266 END Get_Non_Nested_Into_Rec;
10267
10268 -- Returns the Dimension Object group created for this Dashboard.
10269 FUNCTION Get_Param_Portlet_By_Dashboard (
10270 p_Page_Function_Name IN VARCHAR2
10271 ) RETURN VARCHAR2 IS
10272 l_Region_Code BSC_SYS_DIM_GROUPS_VL.SHORT_NAME%TYPE;
10273 BEGIN
10274 SELECT G.SHORT_NAME INTO l_Region_Code
10275 FROM BSC_KPIS_B K,
10276 BSC_KPI_DIM_GROUPS KG,
10277 BSC_SYS_DIM_GROUPS_VL G
10278 WHERE K.SHORT_NAME = p_Page_Function_Name
10279 AND KG.INDICATOR = K.INDICATOR
10280 AND G.DIM_GROUP_ID = KG.DIM_GROUP_ID;
10281
10282 RETURN l_Region_Code;
10283
10284 EXCEPTION
10285 WHEN OTHERS THEN
10286 RETURN NULL;
10287 END Get_Param_Portlet_By_Dashboard;
10288
10289 /*******************************************
10290 Added the following API for dynamic
10291 parameter portlet creation logic as required
10292 by Bug#4558279
10293 ** END **
10294 ********************************************/
10295
10296 -- Added for Bug#4638384, returns the Compare To attribute code
10297 FUNCTION Get_Compare_Attribute_Code (
10298 p_Region_Code IN VARCHAR2
10299 , p_Measure_Short_Name IN VARCHAR2
10300 ) RETURN VARCHAR2 IS
10301 l_Attribute_Code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
10302 BEGIN
10303 l_Attribute_Code := NULL;
10304
10305 SELECT R.ATTRIBUTE_CODE INTO l_Attribute_Code
10306 FROM AK_REGION_ITEMS R
10307 WHERE R.ATTRIBUTE1 = C_COMPARE_ATTRIBURE_TYPE
10308 AND R.ATTRIBUTE2 = Get_Attribute_Code_For_Measure(p_Region_Code, p_Measure_Short_Name)
10309 AND R.REGION_CODE = p_Region_Code;
10310
10311 RETURN l_Attribute_Code;
10312
10313 EXCEPTION
10314 WHEN OTHERS THEN
10315 RETURN NULL;
10316 END Get_Compare_Attribute_Code;
10317
10318
10319 -- Added for Bug#4638384
10320 FUNCTION Get_Comparison_Source (
10321 p_Measures_Short_Name IN VARCHAR2
10322 ) RETURN VARCHAR2
10323 IS
10324 l_Comparison_Source BIS_INDICATORS.COMPARISON_SOURCE%TYPE;
10325 BEGIN
10326
10327 l_Comparison_Source := NULL;
10328
10329 SELECT B.COMPARISON_SOURCE
10330 INTO l_Comparison_Source
10331 FROM BIS_INDICATORS B
10332 WHERE B.SHORT_NAME = p_Measures_Short_Name;
10333
10334 -- Invalid Data sources should be returned as NULL (so that they are updatable)
10335 IF ((BSC_BIS_KPI_CRUD_PUB.Get_Objective_By_AGKpi(p_Measures_Short_Name) = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY)
10336 AND Get_Measure_Source(p_Measures_Short_Name) <> BSC_BIS_MEASURE_PUB.c_PMF) THEN
10337 RETURN NULL;
10338 ELSE
10339 RETURN l_Comparison_Source;
10340 END IF;
10341
10342 EXCEPTION
10343 WHEN OTHERS THEN
10344 RETURN l_Comparison_Source;
10345 END Get_Comparison_Source;
10346
10347
10348 PROCEDURE Migrate_AGR_To_PLSQL (
10349 p_Commit IN VARCHAR := FND_API.G_FALSE
10350 , p_Region_Application_Id IN VARCHAR2
10351 , p_Region_Code IN VARCHAR2
10352 , p_Update_AK_Metadata IN VARCHAR2
10353 , p_Plsql_For_Report_Query IN VARCHAR2
10354 , p_Old_Attribute_Code_App_Ids IN VARCHAR2
10355 , p_Old_Attribute_Codes IN VARCHAR2
10356 , p_New_Attribute_Code_App_Ids IN VARCHAR2
10357 , p_New_Attribute_Codes IN VARCHAR2
10358 , x_Return_Status OUT NOCOPY VARCHAR
10359 , x_Msg_Count OUT NOCOPY NUMBER
10360 , x_Msg_Data OUT NOCOPY VARCHAR
10361 ) IS
10362 l_Old_Attribute_Code_App_Ids BSC_UTILITY.Varchar_Tabletype;
10363 l_Old_Attribute_Codes BSC_UTILITY.Varchar_Tabletype;
10364 l_New_Attribute_Code_App_Ids BSC_UTILITY.Varchar_Tabletype;
10365 l_New_Attribute_Codes BSC_UTILITY.Varchar_Tabletype;
10366 l_Count_Old_App_Ids NUMBER;
10367 l_Count_Old_Attribute_Codes NUMBER;
10368 l_Count_New_App_Ids NUMBER;
10369 l_Count_New_Attribute_Codes NUMBER;
10370 l_Delete_Measure VARCHAR2(1);
10371 l_Delete_Dimensions VARCHAR2(1);
10372
10373 l_report_region_rec BIS_AK_REGION_PUB.Bis_Region_Rec_Type;
10374
10375 BEGIN
10376 SAVEPOINT MigrateAGRTOPLSQL1;
10377 FND_MSG_PUB.Initialize;
10378
10379 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
10380
10381 --DBMS_OUTPUT.PUT_LINE(' Line 2 ');
10382 l_Delete_Measure := FND_API.G_FALSE;
10383 l_Delete_Dimensions := FND_API.G_FALSE;
10384
10385 BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata (
10386 p_Commit => p_Commit
10387 , p_Region_Code => p_Region_Code
10388 , p_Delete_Measures => l_Delete_Measure
10389 , p_Delete_Dimensions => l_Delete_Dimensions
10390 , x_Return_Status => x_Return_Status
10391 , x_Msg_Count => x_Msg_Count
10392 , x_Msg_Data => x_Msg_Data
10393 );
10394 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10395 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10396 END IF;
10397
10398 -- extended the condition for measures too for Bug#4958056 - for Cascade_Attr_Code_Into_Measure
10399 IF (p_Update_AK_Metadata = FND_API.G_TRUE) THEN
10400 l_report_region_rec.Region_Code := p_Region_Code;
10401 l_report_region_rec.Region_Name := BIS_COMMON_UTILS.G_DEF_CHAR;
10402 l_report_region_rec.Region_Description := BIS_COMMON_UTILS.G_DEF_CHAR;
10403 l_report_region_rec.Region_Application_Id := p_Region_Application_Id;
10404 l_report_region_rec.Database_Object_Name := BIS_COMMON_UTILS.G_DEF_CHAR;
10405 l_report_region_rec.Region_Style := BIS_COMMON_UTILS.G_DEF_CHAR;
10406 l_report_region_rec.Region_Object_Type := BIS_COMMON_UTILS.G_DEF_CHAR;
10407 l_report_region_rec.Help_Target := BIS_COMMON_UTILS.G_DEF_CHAR;
10408 l_report_region_rec.Display_Rows := BIS_COMMON_UTILS.G_DEF_NUM;
10409 l_report_region_rec.Disable_View_By := BIS_COMMON_UTILS.G_DEF_CHAR;
10410 l_report_region_rec.No_Of_Portlet_Rows := BIS_COMMON_UTILS.G_DEF_NUM;
10411 l_report_region_rec.Schedule := BIS_COMMON_UTILS.G_DEF_CHAR;
10412 l_report_region_rec.Header_File_Procedure := BIS_COMMON_UTILS.G_DEF_CHAR;
10413 l_report_region_rec.Footer_File_Procedure := BIS_COMMON_UTILS.G_DEF_CHAR;
10414 l_report_region_rec.Group_By := BIS_COMMON_UTILS.G_DEF_CHAR;
10415 l_report_region_rec.Order_By := BIS_COMMON_UTILS.G_DEF_CHAR;
10416 l_report_region_rec.Plsql_For_Report_Query := p_Plsql_For_Report_Query;
10417 l_report_region_rec.Display_Subtotals := BIS_COMMON_UTILS.G_DEF_CHAR;
10418 l_report_region_rec.Data_Source := BSC_BIS_KPI_CRUD_PUB.C_PLSQL_SOURCE;
10419 l_report_region_rec.Where_Clause := BIS_COMMON_UTILS.G_DEF_CHAR;
10420 l_report_region_rec.Dimension_Group := BIS_COMMON_UTILS.G_DEF_CHAR;
10421 l_report_region_rec.Parameter_Layout := BIS_COMMON_UTILS.G_DEF_CHAR;
10422 l_report_region_rec.Kpi_Id := BIS_COMMON_UTILS.G_DEF_NUM;
10423 l_report_region_rec.Analysis_Option_Id := BIS_COMMON_UTILS.G_DEF_NUM;
10424 l_report_region_rec.Dim_Set_Id := BIS_COMMON_UTILS.G_DEF_NUM;
10425
10426 BIS_PMV_REGION_PVT.UPDATE_REGION
10427 (
10428 p_commit => p_Commit
10429 ,p_Report_Region_Rec => l_report_region_rec
10430 ,x_return_status => x_return_status
10431 ,x_msg_count => x_msg_count
10432 ,x_msg_data => x_msg_data
10433 );
10434 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10435 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10436 END IF;
10437
10438 BSC_BIS_KPI_CRUD_PUB.Cascade_Attr_Code_Into_Measure (
10439 p_Commit => p_Commit
10440 , p_Region_Code => p_Region_Code
10441 , p_Region_Application_Id => p_Region_Application_Id
10442 , p_Old_Attribute_Codes => p_Old_Attribute_Codes
10443 , p_Old_Attribute_Code_App_Ids => p_Old_Attribute_Code_App_Ids
10444 , p_New_Attribute_Codes => p_New_Attribute_Codes
10445 , p_New_Attribute_Code_App_Ids => p_New_Attribute_Code_App_Ids
10446 , x_Return_Status => x_Return_Status
10447 , x_Msg_Count => x_Msg_Count
10448 , x_Msg_Data => x_Msg_Data
10449 );
10450 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10451 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10452 END IF;
10453 END IF;
10454
10455 EXCEPTION
10456 WHEN FND_API.G_EXC_ERROR THEN
10457 ROLLBACK TO MigrateAGRTOPLSQL1;
10458 IF (x_msg_data IS NULL) THEN
10459 FND_MSG_PUB.Count_And_Get
10460 ( p_encoded => FND_API.G_FALSE
10461 , p_count => x_msg_count
10462 , p_data => x_msg_data
10463 );
10464 END IF;
10465 x_return_status := FND_API.G_RET_STS_ERROR;
10466 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10467 ROLLBACK TO MigrateAGRTOPLSQL1;
10468 IF (x_msg_data IS NULL) THEN
10469 FND_MSG_PUB.Count_And_Get
10470 ( p_encoded => FND_API.G_FALSE
10471 , p_count => x_msg_count
10472 , p_data => x_msg_data
10473 );
10474 END IF;
10475 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10476 WHEN NO_DATA_FOUND THEN
10477 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10478 ROLLBACK TO MigrateAGRTOPLSQL1;
10479 IF (x_msg_data IS NOT NULL) THEN
10480 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10481 ELSE
10482 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10483 END IF;
10484 WHEN OTHERS THEN
10485 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10486 ROLLBACK TO MigrateAGRTOPLSQL1;
10487 IF (x_msg_data IS NOT NULL) THEN
10488 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10489 ELSE
10490 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10491 END IF;
10492 END Migrate_AGR_To_PLSQL;
10493
10494
10495 /*
10496 Trimmed down remove BSC Metadata only.
10497
10498 NOTE: This API has been designed only to delete BSC Metadata and
10499 in no way modified/delete's AK Metadata.
10500 */
10501
10502 PROCEDURE Migrate_AGR_To_PLSQL (
10503 p_Commit IN VARCHAR := FND_API.G_FALSE
10504 , p_Region_Application_Id IN VARCHAR2
10505 , p_Region_Code IN VARCHAR2
10506 , x_Return_Status OUT NOCOPY VARCHAR
10507 , x_Msg_Count OUT NOCOPY NUMBER
10508 , x_Msg_Data OUT NOCOPY VARCHAR
10509 ) IS
10510 BEGIN
10511 SAVEPOINT MigrateAGRTOPLSQL;
10512 FND_MSG_PUB.Initialize;
10513
10514 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
10515
10516 BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL (
10517 p_Commit => p_Commit
10518 , p_Region_Application_Id => p_Region_Application_Id
10519 , p_Region_Code => p_Region_Code
10520 , p_Update_AK_Metadata => FND_API.G_FALSE
10521 , p_Plsql_For_Report_Query => NULL
10522 , p_Old_Attribute_Code_App_Ids => NULL
10523 , p_Old_Attribute_Codes => NULL
10524 , p_New_Attribute_Code_App_Ids => NULL
10525 , p_New_Attribute_Codes => NULL
10526 , x_Return_Status => x_Return_Status
10527 , x_Msg_Count => x_Msg_Count
10528 , x_Msg_Data => x_Msg_Data
10529 );
10530 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10531 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10532 END IF;
10533
10534 IF (p_Commit = FND_API.G_TRUE) THEN
10535 COMMIT;
10536 END IF;
10537 EXCEPTION
10538 WHEN FND_API.G_EXC_ERROR THEN
10539 ROLLBACK TO MigrateAGRTOPLSQL;
10540 IF (x_msg_data IS NULL) THEN
10541 FND_MSG_PUB.Count_And_Get
10542 ( p_encoded => FND_API.G_FALSE
10543 , p_count => x_msg_count
10544 , p_data => x_msg_data
10545 );
10546 END IF;
10547 x_return_status := FND_API.G_RET_STS_ERROR;
10548 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10549 ROLLBACK TO MigrateAGRTOPLSQL;
10550 IF (x_msg_data IS NULL) THEN
10551 FND_MSG_PUB.Count_And_Get
10552 ( p_encoded => FND_API.G_FALSE
10553 , p_count => x_msg_count
10554 , p_data => x_msg_data
10555 );
10556 END IF;
10557 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10558 WHEN NO_DATA_FOUND THEN
10559 ROLLBACK TO MigrateAGRTOPLSQL;
10560 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10561 IF (x_msg_data IS NOT NULL) THEN
10562 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10563 ELSE
10564 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10565 END IF;
10566 WHEN OTHERS THEN
10567 ROLLBACK TO MigrateAGRTOPLSQL;
10568 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10569 IF (x_msg_data IS NOT NULL) THEN
10570 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10571 ELSE
10572 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL ';
10573 END IF;
10574 END Migrate_AGR_To_PLSQL;
10575
10576
10577 -- needs to be moved into an utility file.
10578 FUNCTION Is_Primary_Source_Of_Measure (
10579 p_Measure_Short_Name IN VARCHAR2
10580 , p_Region_Code IN VARCHAR2
10581 ) RETURN VARCHAR2 IS
10582 l_Region_Code AK_REGIONS.REGION_CODE%TYPE;
10583 l_Actual_Data_Source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
10584 l_Return VARCHAR2(1);
10585 BEGIN
10586 l_Return := FND_API.G_FALSE;
10587
10588 l_Actual_Data_Source := BSC_BIS_KPI_CRUD_PUB.Get_Actual_Source_Data(p_Measure_Short_Name);
10589 IF((l_Actual_Data_Source IS NOT NULL) AND (p_Region_Code IS NOT NULL)) THEN
10590 l_Region_Code := SUBSTR(l_Actual_Data_Source, 1, INSTR(l_Actual_Data_Source, '.')-1);
10591
10592 IF ((l_Region_Code IS NOT NULL) AND (l_Region_Code = p_Region_Code)) THEN
10593 l_Return := FND_API.G_TRUE;
10594 END IF;
10595 END IF;
10596
10597 RETURN l_Return;
10598
10599 EXCEPTION
10600 WHEN OTHERS THEN
10601 RETURN FND_API.G_FALSE;
10602 END Is_Primary_Source_Of_Measure;
10603
10604 /*
10605 Provide WARNING notes - and usage guide.
10606 */
10607
10608 PROCEDURE Cascade_Attr_Code_Into_Measure (
10609 p_Commit IN VARCHAR := FND_API.G_FALSE
10610 , p_Region_Code IN VARCHAR2
10611 , p_Region_Application_Id IN VARCHAR2
10612 , p_Old_Attribute_Codes IN VARCHAR2
10613 , p_Old_Attribute_Code_App_Ids IN VARCHAR2
10614 , p_New_Attribute_Codes IN VARCHAR2
10615 , p_New_Attribute_Code_App_Ids IN VARCHAR2
10616 , x_Return_Status OUT NOCOPY VARCHAR
10617 , x_Msg_Count OUT NOCOPY NUMBER
10618 , x_Msg_Data OUT NOCOPY VARCHAR
10619 ) IS
10620
10621 l_Measure_Short_Name BIS_INDICATORS.SHORT_NAME%TYPE;
10622 l_Measure_Attr_Code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
10623 l_Compare_Attr_Code AK_REGION_ITEMS.ATTRIBUTE_CODE%TYPE;
10624
10625 l_Actual_Data_Source_Type BIS_INDICATORS.ACTUAL_DATA_SOURCE_TYPE%TYPE;
10626 l_Actual_Data_Source BIS_INDICATORS.ACTUAL_DATA_SOURCE%TYPE;
10627 l_Function_Name BIS_INDICATORS.FUNCTION_NAME%TYPE;
10628 l_Enable_Link BIS_INDICATORS.ENABLE_LINK%TYPE;
10629 l_Comparison_Source BIS_INDICATORS.COMPARISON_SOURCE%TYPE;
10630
10631
10632 CURSOR cMeasureShortNames IS
10633 SELECT AK.ATTRIBUTE_CODE
10634 , AK.ATTRIBUTE2
10635 FROM AK_REGION_ITEMS AK
10636 WHERE AK.REGION_CODE = p_Region_Code
10637 AND AK.REGION_APPLICATION_ID = p_Region_Application_Id
10638 AND AK.ATTRIBUTE1 IN ('BUCKET_MEASURE', 'MEASURE', 'MEASURE_NOTARGET', 'SUB MEASURE')
10639 ORDER BY AK.DISPLAY_SEQUENCE;
10640
10641 CURSOR cMeasureProperties IS
10642 SELECT BIS.ACTUAL_DATA_SOURCE_TYPE
10643 , BIS.ACTUAL_DATA_SOURCE
10644 , BIS.FUNCTION_NAME
10645 , BIS.COMPARISON_SOURCE
10646 , BIS.ENABLE_LINK
10647 FROM BIS_INDICATORS BIS
10648 WHERE BIS.SHORT_NAME = l_Measure_Short_Name;
10649 BEGIN
10650
10651 SAVEPOINT CascdAttrCode;
10652 FND_MSG_PUB.Initialize;
10653
10654 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
10655
10656 FOR cMSN IN cMeasureShortNames LOOP
10657 l_Measure_Short_Name := cMSN.ATTRIBUTE2;
10658 l_Measure_Attr_Code := cMSN.ATTRIBUTE_CODE;
10659 l_Compare_Attr_Code := BSC_BIS_KPI_CRUD_PUB.Get_Compare_Attribute_Code(p_Region_Code, l_Measure_Short_Name);
10660
10661 IF (BSC_UTILITY.Is_Measure_Seeded(l_Measure_Short_Name) = FND_API.G_FALSE AND
10662 BSC_BIS_KPI_CRUD_PUB.Is_Primary_Source_Of_Measure(l_Measure_Short_Name, p_Region_Code)
10663 = FND_API.G_FALSE) THEN
10664
10665 FOR cMP IN cMeasureProperties LOOP
10666 l_Actual_Data_Source_Type := cMP.ACTUAL_DATA_SOURCE_TYPE;
10667 l_Actual_Data_Source := cMP.ACTUAL_DATA_SOURCE;
10668 l_Function_Name := cMP.FUNCTION_NAME;
10669 l_Enable_Link := cMP.ENABLE_LINK;
10670 l_Comparison_Source := cMP.COMPARISON_SOURCE;
10671 END LOOP;
10672
10673 l_Actual_Data_Source := p_Region_Code || '.' || l_Measure_Attr_Code;
10674 l_Comparison_Source := p_Region_Code || '.' || l_Compare_Attr_Code;
10675
10676 BSC_ANALYSIS_OPTION_PVT.Cascade_Data_Src_Values (
10677 p_Commit => p_Commit
10678 , p_Measure_Short_Name => l_Measure_Short_Name
10679 , p_Empty_Source => FND_API.G_FALSE
10680 , p_Actual_Data_Source_Type => l_Actual_Data_Source_Type
10681 , p_Actual_Data_Source => l_Actual_Data_Source
10682 , p_Function_Name => l_Function_Name
10683 , p_Enable_Link => l_Enable_Link
10684 , p_Comparison_Source => l_Comparison_Source
10685 , x_Return_Status => x_Return_Status
10686 , x_Msg_Count => x_Msg_Count
10687 , x_Msg_Data => x_Msg_Data
10688 );
10689 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10690 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10691 END IF;
10692
10693 IF (Get_Measure_Source(l_Measure_Short_Name) = BSC_BIS_MEASURE_PUB.c_CDS) THEN
10694 IF ((p_Old_Attribute_Codes IS NOT NULL) AND (p_New_Attribute_Codes IS NOT NULL)) THEN
10695 BSC_BIS_KPI_CRUD_PUB.Cascade_Changes_Into_Forumla (
10696 p_Commit => p_Commit
10697 , p_Measure_Short_Name => l_Measure_Short_Name
10698 , p_Old_Attribute_Codes => p_Old_Attribute_Codes
10699 , p_Old_Attribute_Code_App_Ids => p_Old_Attribute_Code_App_Ids
10700 , p_New_Attribute_Codes => p_New_Attribute_Codes
10701 , p_New_Attribute_Code_App_Ids => p_New_Attribute_Code_App_Ids
10702 , x_Return_Status => x_Return_Status
10703 , x_Msg_Count => x_Msg_Count
10704 , x_Msg_Data => x_Msg_Data
10705 );
10706 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10707 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10708 END IF;
10709 END IF;
10710 END IF;
10711 END IF;
10712 END LOOP;
10713 EXCEPTION
10714 WHEN FND_API.G_EXC_ERROR THEN
10715 ROLLBACK TO CascdAttrCode;
10716 IF (x_msg_data IS NULL) THEN
10717 FND_MSG_PUB.Count_And_Get
10718 ( p_encoded => FND_API.G_FALSE
10719 , p_count => x_msg_count
10720 , p_data => x_msg_data
10721 );
10722 END IF;
10723 x_return_status := FND_API.G_RET_STS_ERROR;
10724 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10725 ROLLBACK TO CascdAttrCode;
10726 IF (x_msg_data IS NULL) THEN
10727 FND_MSG_PUB.Count_And_Get
10728 ( p_encoded => FND_API.G_FALSE
10729 , p_count => x_msg_count
10730 , p_data => x_msg_data
10731 );
10732 END IF;
10733 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10734 WHEN NO_DATA_FOUND THEN
10735 ROLLBACK TO CascdAttrCode;
10736 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10737 IF (x_msg_data IS NOT NULL) THEN
10738 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Attr_Code_Into_Measure ';
10739 ELSE
10740 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Attr_Code_Into_Measure ';
10741 END IF;
10742 WHEN OTHERS THEN
10743 ROLLBACK TO CascdAttrCode;
10744 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10745 IF (x_msg_data IS NOT NULL) THEN
10746 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Attr_Code_Into_Measure ';
10747 ELSE
10748 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Attr_Code_Into_Measure ';
10749 END IF;
10750 END Cascade_Attr_Code_Into_Measure;
10751
10752
10753 -- This API will cascade the changes into CDS types of measures
10754 -- whenever there is a change in the ATTRIBUTE_CODE of the Region_Items
10755
10756 PROCEDURE Cascade_Changes_Into_Forumla (
10757 p_Commit IN VARCHAR := FND_API.G_FALSE
10758 , p_Measure_Short_Name IN VARCHAR2
10759 , p_Old_Attribute_Codes IN VARCHAR2
10760 , p_Old_Attribute_Code_App_Ids IN VARCHAR2
10761 , p_New_Attribute_Codes IN VARCHAR2
10762 , p_New_Attribute_Code_App_Ids IN VARCHAR2
10763 , x_Return_Status OUT NOCOPY VARCHAR
10764 , x_Msg_Count OUT NOCOPY NUMBER
10765 , x_Msg_Data OUT NOCOPY VARCHAR
10766 ) IS
10767 CURSOR c_GetFormula IS
10768 SELECT
10769 m.measure_col, m.measure_id
10770 FROM
10771 bsc_sys_measures m,
10772 bsc_sys_datasets_vl d,
10773 bis_indicators i
10774 WHERE
10775 i.dataset_id = d.dataset_id AND
10776 d.measure_id1 = m.measure_id AND
10777 i.short_name = p_Measure_Short_Name;
10778
10779 l_Formula BSC_SYS_MEASURES.MEASURE_COL%TYPE;
10780 l_Measure_Id BSC_SYS_MEASURES.MEASURE_ID%TYPE;
10781 l_char VARCHAR2(1);
10782 l_Formula_Temp VARCHAR2(2000);
10783 l_Comma_Old_Attribute_Codes VARCHAR2(2000);
10784 l_Comma_New_Attribute_Codes VARCHAR2(2000);
10785 l_Old_Attribute_Codes BSC_UTILITY.Varchar_Tabletype;
10786 l_New_Attribute_Codes BSC_UTILITY.Varchar_Tabletype;
10787 l_Count1 NUMBER;
10788 l_Count2 NUMBER;
10789
10790 l_Dataset_Rec BSC_DATASETS_PUB.Bsc_Dataset_Rec_Type;
10791
10792 BEGIN
10793 SAVEPOINT CascdAttrCodeIntoForm;
10794 FND_MSG_PUB.Initialize;
10795
10796 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
10797
10798 FOR cForm IN c_GetFormula LOOP
10799 l_Formula := cForm.MEASURE_COL;
10800 l_Measure_Id := cForm.MEASURE_ID;
10801 END LOOP;
10802
10803 l_Comma_Old_Attribute_Codes := p_Old_Attribute_Codes;
10804 l_Comma_New_Attribute_Codes := p_New_Attribute_Codes;
10805
10806 BSC_UTILITY.Parse_String
10807 (
10808 p_List => l_Comma_Old_Attribute_Codes
10809 , p_Separator => ','
10810 , p_List_Data => l_Old_Attribute_Codes
10811 , p_List_number => l_Count1
10812 );
10813
10814 BSC_UTILITY.Parse_String
10815 (
10816 p_List => l_Comma_New_Attribute_Codes
10817 , p_Separator => ','
10818 , p_List_Data => l_New_Attribute_Codes
10819 , p_List_number => l_Count2
10820 );
10821
10822 FOR i IN 1..LENGTH(l_Formula) LOOP
10823 l_Char := SUBSTR(l_Formula, i, 1);
10824
10825 IF l_Char IN ('+', '-', '/', '*', '(', ')') THEN
10826 l_Formula_Temp := l_Formula_Temp || (',' || l_Char || ',');
10827 ELSIF(l_Char <> ' ') THEN
10828 l_Formula_Temp := l_Formula_Temp || l_Char;
10829 END IF;
10830 END LOOP;
10831
10832 -- Replace 2 consecutive comma with one, which will
10833 -- get inserted in cases like '+(' etc.
10834 l_Formula_Temp := ',' ||REPLACE(l_Formula_Temp, ',,', ',') || ',';
10835
10836 FOR i IN 1..l_Count1 LOOP
10837 l_Formula_Temp := REPLACE(l_Formula_Temp,
10838 ',' ||l_Old_Attribute_Codes(i)||',',
10839 ',' ||l_New_Attribute_Codes(i)||','
10840 );
10841
10842 END LOOP;
10843
10844 --DBMS_OUTPUT.PUT_LINE (' l_Formula_Temp - ' || l_Formula_Temp);
10845
10846 l_Formula_Temp := REPLACE (l_Formula_Temp, ',', '');
10847 --DBMS_OUTPUT.PUT_LINE (' l_Formula_Temp - ' || l_Formula_Temp);
10848
10849
10850 -- after fixing the the Measure formula, update the measure using
10851 -- the private method - which exclusively updates BSC_SYS_MEASURES
10852
10853 l_Dataset_Rec.Bsc_Measure_Id := l_Measure_Id;
10854 l_Dataset_Rec.Bsc_Measure_Col := l_Formula_Temp;
10855
10856 BSC_DATASETS_PVT.Update_Measures(
10857 p_commit => p_commit
10858 ,p_Dataset_Rec => l_Dataset_Rec
10859 ,x_return_status => x_return_status
10860 ,x_msg_count => x_msg_count
10861 ,x_msg_data => x_msg_data
10862 );
10863 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10864 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10865 END IF;
10866
10867 IF (p_Commit = FND_API.G_TRUE) THEN
10868 COMMIT;
10869 END IF;
10870 EXCEPTION
10871 WHEN FND_API.G_EXC_ERROR THEN
10872 ROLLBACK TO CascdAttrCodeIntoForm;
10873 IF (x_msg_data IS NULL) THEN
10874 FND_MSG_PUB.Count_And_Get
10875 ( p_encoded => FND_API.G_FALSE
10876 , p_count => x_msg_count
10877 , p_data => x_msg_data
10878 );
10879 END IF;
10880 x_return_status := FND_API.G_RET_STS_ERROR;
10881 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10882 ROLLBACK TO CascdAttrCodeIntoForm;
10883 IF (x_msg_data IS NULL) THEN
10884 FND_MSG_PUB.Count_And_Get
10885 ( p_encoded => FND_API.G_FALSE
10886 , p_count => x_msg_count
10887 , p_data => x_msg_data
10888 );
10889 END IF;
10890 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10891 WHEN NO_DATA_FOUND THEN
10892 ROLLBACK TO CascdAttrCodeIntoForm;
10893 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10894 IF (x_msg_data IS NOT NULL) THEN
10895 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Changes_Into_Forumla ';
10896 ELSE
10897 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Changes_Into_Forumla ';
10898 END IF;
10899 WHEN OTHERS THEN
10900 ROLLBACK TO CascdAttrCodeIntoForm;
10901 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10902 IF (x_msg_data IS NOT NULL) THEN
10903 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Changes_Into_Forumla ';
10904 ELSE
10905 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Changes_Into_Forumla ';
10906 END IF;
10907 END Cascade_Changes_Into_Forumla;
10908
10909
10910 -- added for Bug#4923006
10911 FUNCTION Is_Dim_Associated_To_Objective (
10912 p_Dimension_Short_Name IN VARCHAR2
10913 , p_Kpi_Id IN NUMBER
10914 ) RETURN VARCHAR2 IS
10915 l_Count NUMBER;
10916
10917 BEGIN
10918
10919 SELECT COUNT(1) INTO l_Count
10920 FROM BSC_KPIS_B K
10921 , BSC_KPI_DIM_GROUPS KG
10922 , BSC_SYS_DIM_GROUPS_VL G
10923 WHERE
10924 K.INDICATOR = p_Kpi_Id
10925 AND G.SHORT_NAME = p_Dimension_Short_Name
10926 AND KG.INDICATOR = K.INDICATOR
10927 AND KG.DIM_GROUP_ID = G.DIM_GROUP_ID;
10928
10929
10930 IF (l_Count = 0) THEN
10931 RETURN FND_API.G_FALSE;
10932 ELSE
10933 RETURN FND_API.G_TRUE;
10934 END IF;
10935
10936 EXCEPTION
10937 WHEN OTHERS THEN
10938 RETURN FND_API.G_FALSE;
10939 END Is_Dim_Associated_To_Objective;
10940
10941 -- Wrapper added for Bug#4932280
10942 PROCEDURE Delete_AG_Bsc_Metadata (
10943 p_Commit IN VARCHAR2 := FND_API.G_FALSE
10944 , p_Region_Code IN VARCHAR2
10945 , p_Delete_Measures IN VARCHAR2
10946 , x_Return_Status OUT NOCOPY VARCHAR
10947 , x_Msg_Count OUT NOCOPY NUMBER
10948 , x_Msg_Data OUT NOCOPY VARCHAR
10949 ) IS
10950 BEGIN
10951
10952 BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata (
10953 p_Commit => p_Commit
10954 , p_Region_Code => p_Region_Code
10955 , p_Delete_Measures => p_Delete_Measures
10956 , p_Delete_Dimensions => FND_API.G_TRUE
10957 , x_Return_Status => x_Return_Status
10958 , x_Msg_Count => x_Msg_Count
10959 , x_Msg_Data => x_Msg_Data
10960 );
10961 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10962 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10963 END IF;
10964
10965 EXCEPTION
10966 WHEN FND_API.G_EXC_ERROR THEN
10967 IF (x_msg_data IS NULL) THEN
10968 FND_MSG_PUB.Count_And_Get
10969 ( p_encoded => FND_API.G_FALSE
10970 , p_count => x_msg_count
10971 , p_data => x_msg_data
10972 );
10973 END IF;
10974 x_return_status := FND_API.G_RET_STS_ERROR;
10975 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10976 IF (x_msg_data IS NULL) THEN
10977 FND_MSG_PUB.Count_And_Get
10978 ( p_encoded => FND_API.G_FALSE
10979 , p_count => x_msg_count
10980 , p_data => x_msg_data
10981 );
10982 END IF;
10983 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10984 WHEN NO_DATA_FOUND THEN
10985 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10986 IF (x_msg_data IS NOT NULL) THEN
10987 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
10988 ELSE
10989 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
10990 END IF;
10991 WHEN OTHERS THEN
10992 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10993 IF (x_msg_data IS NOT NULL) THEN
10994 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
10995 ELSE
10996 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata ';
10997 END IF;
10998 END Delete_AG_Bsc_Metadata;
10999
11000 --
11001 --Wrapper added for bug#4741919
11002 --Wrapper is required to call Rearrange_Data_Series API
11003 --which will reset all the measures to the next datasource or null.
11004 PROCEDURE Delete_AG_Report (
11005 p_Commit IN VARCHAR2 := FND_API.G_FALSE
11006 , p_Region_Code IN VARCHAR2
11007 , p_Delete_Measures IN VARCHAR2
11008 , x_Return_Status OUT NOCOPY VARCHAR
11009 , x_Msg_Count OUT NOCOPY NUMBER
11010 , x_Msg_Data OUT NOCOPY VARCHAR
11011 )
11012 IS
11013 l_Kpi_Id NUMBER;
11014 BEGIN
11015 SAVEPOINT DelAGRep;
11016 FND_MSG_PUB.Initialize;
11017 x_return_status := FND_API.G_RET_STS_SUCCESS;
11018
11019 l_Kpi_Id := BSC_BIS_KPI_CRUD_PUB.Get_Kpi_Id(p_Region_Code);
11020 IF (l_Kpi_Id = BSC_BIS_KPI_CRUD_PUB.C_INVALID_ENTITY) THEN
11021 FND_MESSAGE.SET_NAME('BSC','BSC_SETUP_REPORT_DEF');
11022 FND_MSG_PUB.ADD;
11023 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11024 END IF;
11025
11026 BSC_ANALYSIS_OPTION_PUB.Rearrange_Data_Series(
11027 p_commit => FND_API.G_FALSE
11028 ,p_Kpi_Id => l_Kpi_Id
11029 ,p_option_group0 => 0
11030 ,p_option_group1 => 0
11031 ,p_option_group2 => 0
11032 ,p_Measure_Seq => NULL
11033 ,p_add_flag => FND_API.G_TRUE
11034 ,p_remove_flag => FND_API.G_TRUE
11035 ,x_return_status => x_return_status
11036 ,x_msg_count => x_msg_count
11037 ,x_msg_data => x_msg_data
11038 );
11039 IF ((x_Return_Status IS NOT NULL) AND (x_Return_Status <> FND_API.G_RET_STS_SUCCESS)) THEN
11040 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11041 END IF;
11042
11043 BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata (
11044 p_Commit => FND_API.G_FALSE
11045 ,p_Region_Code => p_Region_Code
11046 ,p_Delete_Measures => p_Delete_Measures
11047 ,x_return_status => x_return_status
11048 ,x_msg_count => x_msg_count
11049 ,x_msg_data => x_msg_data
11050 );
11051
11052 IF ((x_return_status IS NOT NULL) AND (x_return_status <> FND_API.G_RET_STS_SUCCESS)) THEN
11053 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11054 END IF;
11055
11056 EXCEPTION
11057 WHEN FND_API.G_EXC_ERROR THEN
11058 IF (x_msg_data IS NULL) THEN
11059 FND_MSG_PUB.Count_And_Get
11060 ( p_encoded => FND_API.G_FALSE
11061 , p_count => x_msg_count
11062 , p_data => x_msg_data
11063 );
11064 END IF;
11065 x_return_status := FND_API.G_RET_STS_ERROR;
11066 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11067 IF (x_msg_data IS NULL) THEN
11068 FND_MSG_PUB.Count_And_Get
11069 ( p_encoded => FND_API.G_FALSE
11070 , p_count => x_msg_count
11071 , p_data => x_msg_data
11072 );
11073 END IF;
11074 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11075 WHEN NO_DATA_FOUND THEN
11076 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11077 IF (x_msg_data IS NOT NULL) THEN
11078 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Report ';
11079 ELSE
11080 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Report ';
11081 END IF;
11082 WHEN OTHERS THEN
11083 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11084 IF (x_msg_data IS NOT NULL) THEN
11085 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Delete_AG_Report ';
11086 ELSE
11087 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Delete_AG_Report ';
11088 END IF;
11089 END Delete_AG_Report;
11090
11091
11092 -- Added from Enhancement Number#4952167
11093 PROCEDURE Migrate_AGR_To_VBR (
11094 p_Commit IN VARCHAR2 := FND_API.G_FALSE
11095 , p_Region_Application_Id IN VARCHAR2
11096 , p_Region_Code IN VARCHAR2
11097 , x_Return_Status OUT NOCOPY VARCHAR
11098 , x_Msg_Count OUT NOCOPY NUMBER
11099 , x_Msg_Data OUT NOCOPY VARCHAR
11100 ) IS
11101 l_Delete_Measure VARCHAR2(1);
11102 l_Delete_Dimensions VARCHAR2(1);
11103 BEGIN
11104 SAVEPOINT MigrateAGRTOVBR;
11105 FND_MSG_PUB.Initialize;
11106
11107 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
11108
11109 l_Delete_Measure := FND_API.G_FALSE;
11110 l_Delete_Dimensions := FND_API.G_FALSE;
11111
11112 BSC_BIS_KPI_CRUD_PUB.Delete_AG_Bsc_Metadata (
11113 p_Commit => p_Commit
11114 , p_Region_Code => p_Region_Code
11115 , p_Delete_Measures => l_Delete_Measure
11116 , p_Delete_Dimensions => l_Delete_Dimensions
11117 , x_Return_Status => x_Return_Status
11118 , x_Msg_Count => x_Msg_Count
11119 , x_Msg_Data => x_Msg_Data
11120 );
11121 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11122 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11123 END IF;
11124
11125 EXCEPTION
11126 WHEN FND_API.G_EXC_ERROR THEN
11127 ROLLBACK TO MigrateAGRTOVBR;
11128 IF (x_msg_data IS NULL) THEN
11129 FND_MSG_PUB.Count_And_Get
11130 ( p_encoded => FND_API.G_FALSE
11131 , p_count => x_msg_count
11132 , p_data => x_msg_data
11133 );
11134 END IF;
11135 x_return_status := FND_API.G_RET_STS_ERROR;
11136 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11137 ROLLBACK TO MigrateAGRTOVBR;
11138 IF (x_msg_data IS NULL) THEN
11139 FND_MSG_PUB.Count_And_Get
11140 ( p_encoded => FND_API.G_FALSE
11141 , p_count => x_msg_count
11142 , p_data => x_msg_data
11143 );
11144 END IF;
11145 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11146 WHEN NO_DATA_FOUND THEN
11147 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11148 ROLLBACK TO MigrateAGRTOVBR;
11149 IF (x_msg_data IS NOT NULL) THEN
11150 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_VBR ';
11151 ELSE
11152 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_VBR ';
11153 END IF;
11154 WHEN OTHERS THEN
11155 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11156 ROLLBACK TO MigrateAGRTOVBR;
11157 IF (x_msg_data IS NOT NULL) THEN
11158 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_VBR ';
11159 ELSE
11160 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_VBR ';
11161 END IF;
11162 END Migrate_AGR_To_VBR;
11163
11164
11165 -- Added from Enhancement Number#4952167
11166 PROCEDURE Migrate_To_Existing_Source (
11167 p_Commit IN VARCHAR2 := FND_API.G_FALSE
11168 , p_Existing_Report_Type IN VARCHAR2
11169 , p_Region_Application_Id IN VARCHAR2
11170 , p_Region_Code IN VARCHAR2
11171 , x_Return_Status OUT NOCOPY VARCHAR
11172 , x_Msg_Count OUT NOCOPY NUMBER
11173 , x_Msg_Data OUT NOCOPY VARCHAR
11174 ) IS
11175 BEGIN
11176 SAVEPOINT MigrateAGRTOEXTNSRC;
11177 FND_MSG_PUB.Initialize;
11178 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
11179
11180 IF (p_Existing_Report_Type = BSC_BIS_KPI_CRUD_PUB.C_PLSQL_BASED_REPORT_TYPE) THEN
11181 BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_PLSQL (
11182 p_Commit => p_Commit
11183 , p_Region_Application_Id => p_Region_Application_Id
11184 , p_Region_Code => p_Region_Code
11185 , x_Return_Status => x_Return_Status
11186 , x_Msg_Count => x_Msg_Count
11187 , x_Msg_Data => x_Msg_Data
11188 );
11189 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11190 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11191 END IF;
11192 ELSIF (p_Existing_Report_Type = BSC_BIS_KPI_CRUD_PUB.C_VIEW_BASED_REPORT_TYPE) THEN
11193 BSC_BIS_KPI_CRUD_PUB.Migrate_AGR_To_VBR (
11194 p_Commit => p_Commit
11195 , p_Region_Application_Id => p_Region_Application_Id
11196 , p_Region_Code => p_Region_Code
11197 , x_Return_Status => x_Return_Status
11198 , x_Msg_Count => x_Msg_Count
11199 , x_Msg_Data => x_Msg_Data
11200 );
11201 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11202 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11203 END IF;
11204 END IF;
11205
11206 EXCEPTION
11207 WHEN FND_API.G_EXC_ERROR THEN
11208 ROLLBACK TO MigrateAGRTOEXTNSRC;
11209 IF (x_msg_data IS NULL) THEN
11210 FND_MSG_PUB.Count_And_Get
11211 ( p_encoded => FND_API.G_FALSE
11212 , p_count => x_msg_count
11213 , p_data => x_msg_data
11214 );
11215 END IF;
11216 x_return_status := FND_API.G_RET_STS_ERROR;
11217 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11218 ROLLBACK TO MigrateAGRTOEXTNSRC;
11219 IF (x_msg_data IS NULL) THEN
11220 FND_MSG_PUB.Count_And_Get
11221 ( p_encoded => FND_API.G_FALSE
11222 , p_count => x_msg_count
11223 , p_data => x_msg_data
11224 );
11225 END IF;
11226 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11227 WHEN NO_DATA_FOUND THEN
11228 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11229 ROLLBACK TO MigrateAGRTOEXTNSRC;
11230 IF (x_msg_data IS NOT NULL) THEN
11231 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_To_Existing_Source ';
11232 ELSE
11233 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_To_Existing_Source ';
11234 END IF;
11235 WHEN OTHERS THEN
11236 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11237 ROLLBACK TO MigrateAGRTOEXTNSRC;
11238 IF (x_msg_data IS NOT NULL) THEN
11239 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Migrate_To_Existing_Source ';
11240 ELSE
11241 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Migrate_To_Existing_Source ';
11242 END IF;
11243 END Migrate_To_Existing_Source;
11244
11245 /*
11246 Added this API for Bug#4249900
11247
11248 This API will return a list of Objectives, which uses the DImension created for
11249 this report (p_region_code).
11250 */
11251
11252 PROCEDURE Get_Obj_By_Dim_Region_Code (
11253 p_Region_Code IN VARCHAR2
11254 , p_Region_Application_Id IN NUMBER
11255 , p_Production_Only IN VARCHAR2
11256 , x_Return_Status OUT NOCOPY VARCHAR2
11257 , x_Msg_Count OUT NOCOPY NUMBER
11258 , x_Msg_Data OUT NOCOPY VARCHAR2
11259 ) IS
11260 CURSOR c_Objective_List IS
11261 SELECT KP.NAME || '[' || KP.INDICATOR || ']' NAME
11262 FROM BSC_SYS_DIM_GROUPS_VL GP,
11263 BSC_KPI_DIM_GROUPS KG,
11264 BSC_KPIS_VL KP
11265 WHERE GP.SHORT_NAME = p_Region_Code
11266 AND KG.DIM_GROUP_ID = GP.DIM_GROUP_ID
11267 AND KP.INDICATOR = KG.INDICATOR
11268 AND KP.PROTOTYPE_FLAG >= 0
11269 AND KP.PROTOTYPE_FLAG <= DECODE(p_Production_Only, 'T', 0, 7);
11270 BEGIN
11271 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
11272
11273 FOR cOL IN c_Objective_List LOOP
11274 IF(x_Msg_Data IS NULL) THEN
11275 x_Msg_Data := cOL.NAME;
11276 ELSE
11277 x_Msg_Data := x_Msg_Data || ',' || cOL.NAME;
11278 END IF;
11279 END LOOP;
11280
11281 IF (x_Msg_Data IS NULL) THEN
11282 x_Return_Status := FND_API.G_RET_STS_ERROR;
11283 END IF;
11284
11285 EXCEPTION
11286 WHEN OTHERS THEN
11287 x_Return_Status := FND_API.G_RET_STS_ERROR;
11288 END Get_Obj_By_Dim_Region_Code;
11289
11290
11291 -- This API will take the Region Code and try to cascase it to the pl/sql layer.
11292 -- and hence will ensure that whenever the parameter section is changed for the report, the
11293 -- same structure is passed down the Dimension/Objective entities.
11294
11295 PROCEDURE Cascade_Dimension_By_Region (
11296 p_Commit IN VARCHAR2
11297 , p_Region_Code IN VARCHAR2
11298 , p_Region_Application_Id IN NUMBER
11299 , p_Force_Change IN VARCHAR2
11300 , x_Return_Status OUT NOCOPY VARCHAR2
11301 , x_Msg_Count OUT NOCOPY NUMBER
11302 , x_Msg_Data OUT NOCOPY VARCHAR2
11303 ) IS
11304 l_Kpi_Id BSC_KPIS_B.INDICATOR%TYPE;
11305 x_Non_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
11306 x_Non_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
11307 x_Non_Time_Dim_Obj_Short_Names VARCHAR2(2056);
11308 x_Time_Dimension_Groups BSC_VARCHAR2_TBL_TYPE;
11309 x_Time_Dimension_Objects BSC_VARCHAR2_TBL_TYPE;
11310 x_Time_Dim_Obj_Short_Names VARCHAR2(2056);
11311 x_All_Dim_Group_Ids BSC_NUMBER_TBL_TYPE;
11312 x_Non_Time_Counter NUMBER;
11313 x_Time_Counter NUMBER;
11314 l_Is_XTD_Enabled VARCHAR2(1);
11315
11316 CURSOR c_Objective_List IS
11317 SELECT KP.INDICATOR
11318 FROM BSC_SYS_DIM_GROUPS_VL GP,
11319 BSC_KPI_DIM_GROUPS KG,
11320 BSC_KPIS_VL KP
11321 WHERE GP.SHORT_NAME = p_Region_Code
11322 AND KG.DIM_GROUP_ID = GP.DIM_GROUP_ID
11323 AND KP.INDICATOR = KG.INDICATOR;
11324 BEGIN
11325
11326 SAVEPOINT CascadeDimByRegion;
11327 FND_MSG_PUB.Initialize;
11328
11329 x_Return_Status := FND_API.G_RET_STS_SUCCESS;
11330
11331
11332 FOR cOL IN c_Objective_List LOOP
11333 l_Kpi_Id := cOL.INDICATOR;
11334
11335 BSC_BIS_KPI_CRUD_PUB.Get_Dim_Info_From_Region_Code(
11336 p_Param_Portlet_Region_Code => p_Region_Code
11337 , x_Non_Time_Dimension_Groups => x_Non_Time_Dimension_Groups
11338 , x_Non_Time_Dimension_Objects => x_Non_Time_Dimension_Objects
11339 , x_Non_Time_Dim_Obj_Short_Names => x_Non_Time_Dim_Obj_Short_Names
11340 , x_All_Dim_Group_Ids => x_All_Dim_Group_Ids
11341 , x_Non_Time_Counter => x_Non_Time_Counter
11342 , x_Time_Dimension_Groups => x_Time_Dimension_Groups
11343 , x_Time_Dimension_Objects => x_Time_Dimension_Objects
11344 , x_Time_Dim_Obj_Short_Names => x_Time_Dim_Obj_Short_Names
11345 , x_Time_Counter => x_Time_Counter
11346 , x_Msg_Data => x_Msg_Data
11347 );
11348
11349 l_Is_XTD_Enabled := BSC_BIS_KPI_CRUD_PUB.is_XTD_Enabled(p_Region_Code);
11350 IF ((Has_Time_Dim_Obj_Changed(x_Time_Dim_Obj_Short_Names, l_Kpi_Id, l_Is_XTD_Enabled) = FND_API.G_TRUE) OR
11351 (p_Force_Change = FND_API.G_TRUE)) THEN
11352 BSC_BIS_KPI_CRUD_PUB.Assign_KPI_Periodicities(
11353 p_Commit => p_Commit
11354 ,p_Kpi_Id => l_Kpi_Id
11355 ,p_Time_Dim_Obj_Sns => x_Time_Dim_Obj_Short_Names
11356 ,p_Dft_Dim_Obj_Sn => NULL
11357 ,p_Daily_Flag => l_Is_XTD_Enabled
11358 ,p_Is_XTD_Enabled => l_Is_XTD_Enabled
11359 ,x_Return_Status => x_Return_Status
11360 ,x_Msg_Count => x_Msg_Count
11361 ,x_Msg_Data => x_Msg_Data
11362 );
11363 IF (x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
11364 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11365 END IF;
11366 END IF;
11367
11368 IF ((Has_Non_Time_Dim_Obj_Changed(x_Non_Time_Dim_Obj_Short_Names, l_Kpi_Id)= FND_API.G_TRUE) OR
11369 (p_Force_Change = FND_API.G_TRUE)) THEN
11370 BSC_BIS_DIMENSION_PUB.Update_Dimension
11371 ( p_commit => p_Commit
11372 , p_dim_short_name => p_Region_Code
11373 , p_display_name => p_Region_Code
11374 , p_description => p_Region_Code
11375 , p_application_id => p_Region_Application_Id
11376 , p_dim_obj_short_names => x_Non_Time_Dim_Obj_Short_Names
11377 , p_time_stamp => NULL
11378 , x_return_status => x_Return_Status
11379 , x_msg_count => x_Msg_Count
11380 , x_msg_data => x_Msg_Data
11381 );
11382 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11383 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11384 END IF;
11385 END IF;
11386 END LOOP;
11387
11388 EXCEPTION
11389 WHEN FND_API.G_EXC_ERROR THEN
11390 IF (x_msg_data IS NULL) THEN
11391 FND_MSG_PUB.Count_And_Get
11392 ( p_encoded => FND_API.G_FALSE
11393 , p_count => x_msg_count
11394 , p_data => x_msg_data
11395 );
11396 END IF;
11397 x_return_status := FND_API.G_RET_STS_ERROR;
11398 ROLLBACK TO CascadeDimByRegion;
11399 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11400 IF (x_msg_data IS NULL) THEN
11401 FND_MSG_PUB.Count_And_Get
11402 ( p_encoded => FND_API.G_FALSE
11403 , p_count => x_msg_count
11404 , p_data => x_msg_data
11405 );
11406 END IF;
11407 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11408 ROLLBACK TO CascadeDimByRegion;
11409 WHEN NO_DATA_FOUND THEN
11410 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11411 IF (x_msg_data IS NOT NULL) THEN
11412 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Dimension_By_Region ';
11413 ELSE
11414 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Dimension_By_Region ';
11415 END IF;
11416 ROLLBACK TO CascadeDimByRegion;
11417 WHEN OTHERS THEN
11418 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11419 IF (x_msg_data IS NOT NULL) THEN
11420 x_msg_data := x_msg_data||' -> BSC_BIS_KPI_CRUD_PUB.Cascade_Dimension_By_Region ';
11421 ELSE
11422 x_msg_data := SQLERRM||' at BSC_BIS_KPI_CRUD_PUB.Cascade_Dimension_By_Region ';
11423 END IF;
11424 ROLLBACK TO CascadeDimByRegion;
11425 END Cascade_Dimension_By_Region;
11426
11427 PROCEDURE Get_Global_Menu_Title (
11428 p_Region_code IN VARCHAR2
11429 , p_Region_Application_Id IN NUMBER
11430 , x_Global_Menu OUT NOCOPY VARCHAR2
11431 , x_Global_Title OUT NOCOPY VARCHAR2
11432 ) IS
11433 BEGIN
11434 BEGIN
11435 SELECT attribute19, attribute20
11436 INTO x_Global_Menu, x_Global_Title
11437 FROM bis_ak_region_extension
11438 WHERE region_code = p_Region_Code AND region_application_id = p_Region_Application_Id;
11439 EXCEPTION
11440 WHEN OTHERS THEN
11441 x_Global_Menu := NULL;
11442 x_Global_Title := NULL;
11443 END;
11444 EXCEPTION
11445 WHEN OTHERS THEN
11446 NULL;
11447 END Get_Global_Menu_Title;
11448 --
11449
11450 /***************************************
11451 Overloaded for Simulation Designer in which the user
11452 can choose the objective group and the scorecard card to which
11453 he wants to add the simulation
11454 /***************************************/
11455
11456 PROCEDURE Create_Bsc_Bis_Metadata(
11457 p_Commit IN VARCHAR2
11458 , p_Create_Region_Per_Ao IN VARCHAR2
11459 , p_Param_Portlet_Region_Code IN VARCHAR2
11460 , p_Page_Function_Name IN VARCHAR2
11461 , p_Kpi_Portlet_Function_Name IN VARCHAR2
11462 , p_Region_Function_Name IN VARCHAR2 -- added for AGRD
11463 , p_Region_User_Function_Name IN VARCHAR2 -- added for AGRD
11464 , p_Dim_Obj_Short_Names IN VARCHAR2 -- added for AGRD
11465 , p_Force_Create_Dim IN VARCHAR2 -- added for AGRD
11466 , p_Measure_Short_Name IN VARCHAR2 -- added for AGRD
11467 , p_Responsibility_Id IN NUMBER
11468 , p_Measure_Name IN VARCHAR2
11469 , p_Measure_Description IN VARCHAR2
11470 , p_Dataset_Format_Id IN NUMBER
11471 , p_Dataset_Autoscale_Flag IN NUMBER
11472 , p_Measure_Operation IN VARCHAR2
11473 , p_Measure_Increase_In_Measure IN VARCHAR2
11474 , p_Measure_Obsolete IN VARCHAR2 := FND_API.G_FALSE
11475 , p_Type IN VARCHAR2-- This is used for weighted kpis,This can take values CDS_SCORE,CDS_PERF or Null
11476 , p_Measure_Random_Style IN NUMBER
11477 , p_Measure_Min_Act_Value IN NUMBER
11478 , p_Measure_Max_Act_Value IN NUMBER
11479 , p_Measure_Type IN NUMBER
11480 , p_Measure_App_Id IN NUMBER := NULL
11481 , p_Func_Area_Short_Name IN VARCHAR2 := NULL
11482 , x_Measure_Short_Name OUT NOCOPY VARCHAR2
11483 , x_Kpi_Id OUT NOCOPY NUMBER
11484 , x_Return_Status OUT NOCOPY VARCHAR2
11485 , x_Msg_Count OUT NOCOPY NUMBER
11486 , x_Msg_Data OUT NOCOPY VARCHAR2
11487 )IS
11488 BEGIN
11489 BSC_BIS_KPI_CRUD_PUB.Create_Bsc_Bis_Metadata(
11490 p_Commit => p_Commit
11491 , p_Create_Region_Per_Ao => p_Create_Region_Per_Ao
11492 , p_Param_Portlet_Region_Code => p_Param_Portlet_Region_Code
11493 , p_Page_Function_Name => p_Page_Function_Name
11494 , p_Kpi_Portlet_Function_Name => p_Kpi_Portlet_Function_Name
11495 , p_Region_Function_Name => p_Region_Function_Name
11496 , p_Region_User_Function_Name => p_Region_User_Function_Name
11497 , p_Dim_Obj_Short_Names => p_Dim_Obj_Short_Names
11498 , p_Force_Create_Dim => p_Force_Create_Dim
11499 , p_Measure_Short_Name => p_Measure_Short_Name
11500 , p_Responsibility_Id => p_Responsibility_Id
11501 , p_Measure_Name => p_Measure_Name
11502 , p_Measure_Description => p_Measure_Description
11503 , p_Dataset_Format_Id => p_Dataset_Format_Id
11504 , p_Dataset_Autoscale_Flag => p_Dataset_Autoscale_Flag
11505 , p_Measure_Operation => p_Measure_Operation
11506 , p_Measure_Increase_In_Measure => p_Measure_Increase_In_Measure
11507 , p_Measure_Obsolete => p_Measure_Obsolete
11508 , p_Type => p_Type
11509 , p_Measure_Random_Style => p_Measure_Random_Style
11510 , p_Measure_Min_Act_Value => p_Measure_Min_Act_Value
11511 , p_Measure_Max_Act_Value => p_Measure_Max_Act_Value
11512 , p_Measure_Type => p_Measure_Type
11513 , p_Measure_App_Id => p_Measure_App_Id
11514 , p_Func_Area_Short_Name => p_Func_Area_Short_Name
11515 , p_Obj_Grp_Id => NULL
11516 , p_Obj_Tab_Id => NULL
11517 , p_Obj_Type => BSC_BIS_KPI_CRUD_PUB.C_MULTI_BAR_INDICATOR
11518 , x_Measure_Short_Name => x_Measure_Short_Name
11519 , x_Kpi_Id => x_Kpi_Id
11520 , x_Return_Status => x_Return_Status
11521 , x_Msg_Count => x_Msg_Count
11522 , x_Msg_Data => x_Msg_Data
11523 );
11524
11525 END Create_Bsc_Bis_Metadata;
11526
11527
11528 FUNCTION Get_Tab_Name
11529 (
11530 p_tab_id NUMBER
11531 )
11532 RETURN VARCHAR2 IS
11533 l_tab_name BSC_TABS_VL.name%TYPE;
11534 BEGIN
11535 IF(p_tab_id IS NOT NULL)THEN
11536
11537 SELECT name
11538 INTO l_tab_name
11539 FROM bsc_tabs_vl
11540 WHERE tab_id = p_tab_id;
11541
11542 END IF;
11543 RETURN l_tab_name;
11544 END Get_Tab_Name;
11545
11546 FUNCTION Get_Objective_Group_Name
11547 (
11548 p_obj_grp_id NUMBER
11549 )
11550 RETURN VARCHAR2 IS
11551 l_obj_grp_name BSC_TAB_IND_GROUPS_VL.name%TYPE;
11552 BEGIN
11553 IF(p_obj_grp_id IS NOT NULL)THEN
11554
11555 SELECT name
11556 INTO l_obj_grp_name
11557 FROM bsc_tab_ind_groups_vl
11558 WHERE ind_group_id = p_obj_grp_id
11559 AND tab_id = -1;
11560
11561 END IF;
11562 RETURN l_obj_grp_name;
11563 END Get_Objective_Group_Name;
11564
11565
11566
11567 FUNCTION Generate_Unique_Region_Code
11568 RETURN VARCHAR2 IS
11569 l_region_code VARCHAR2(100);
11570
11571 BEGIN
11572
11573 SELECT BSC_BIS_KPI_CRUD_PUB.C_PMD || TO_CHAR(SYSDATE,'ddmmyyhh24miss')
11574 INTO l_region_code
11575 FROM dual;
11576 RETURN l_region_code;
11577
11578 END Generate_Unique_Region_Code;
11579
11580
11581 PROCEDURE Get_Non_Time_Dim_And_DimObjs
11582 (
11583 p_region_code IN AK_REGIONS.region_code%TYPE
11584 ,x_non_time_dim_dimObjs OUT NOCOPY BSC_VARCHAR2_TBL_TYPE
11585 ,x_non_time_counter OUT NOCOPY NUMBER
11586 ) IS
11587
11588 l_attribute2 AK_REGION_ITEMS_VL.attribute2%TYPE;
11589 l_displayseq AK_REGION_ITEMS_VL.display_sequence%TYPE;
11590 l_dim VARCHAR2(1000);
11591
11592 CURSOR c_dim_dimObj IS
11593 SELECT DISTINCT a.attribute2, a.display_sequence
11594 FROM ak_region_items a
11595 WHERE a.region_code = p_region_code
11596 AND ATTRIBUTE1 IN ('DIMENSION LEVEL',
11597 'DIM LEVEL SINGLE VALUE',
11598 'DIMENSION VALUE',
11599 'HIDE_VIEW_BY',
11600 'HIDE_VIEW_BY_SINGLE',
11601 'HIDE PARAMETER',
11602 'VIEWBY PARAMETER',
11603 'HIDE_DIM_LVL',
11604 'HIDE DIMENSION LEVEL',
11605 'HIDE VIEW BY DIMENSION',
11606 'HIDE_VIEW_BY_DIM_SINGLE')
11607 AND a.attribute2 LIKE '%+%'
11608 AND a.attribute2 NOT LIKE 'TIME_COMPARISON_TYPE%'
11609 ORDER BY a.display_sequence;
11610
11611 BEGIN
11612 x_non_time_counter :=0;
11613 IF(p_region_code IS NOT NULL) THEN
11614 FOR cd IN c_dim_dimObj LOOP
11615 l_attribute2 := cd.attribute2;
11616 l_dim := SUBSTR(l_attribute2, 1, INSTR(l_attribute2,'+')-1);
11617 IF((l_dim <> BSC_BIS_KPI_CRUD_PUB.c_oltp_time) AND
11618 (l_dim <> BSC_BIS_KPI_CRUD_PUB.c_edw_time) AND
11619 (BSC_BIS_KPI_CRUD_PUB.Is_Dimension_Calendar(l_dim) <> FND_API.G_TRUE)) THEN
11620 x_non_time_counter:=x_non_time_counter + 1;
11621 x_non_time_dim_dimObjs(x_non_time_counter) := l_attribute2;
11622 END IF;
11623 END LOOP;
11624 END IF;
11625 EXCEPTION
11626 WHEN OTHERS THEN
11627 x_non_time_counter :=0;
11628 END Get_Non_Time_Dim_And_DimObjs;
11629
11630
11631 END BSC_BIS_KPI_CRUD_PUB;