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