DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_DIMENSION_GROUPS_PVT

Source


1 package body BSC_DIMENSION_GROUPS_PVT as
2 /* $Header: BSCVDMGB.pls 120.0 2005/06/01 14:37:31 appldev noship $ */
3 /*
4  +======================================================================================+
5  |    Copyright (c) 2001 Oracle Corporation, Redwood Shores, CA, USA                    |
6  |                         All rights reserved.                                         |
7  +======================================================================================+
8  | FILENAME                                                                             |
9  |                      BSCVDMGB.pls                                                    |
10  |                                                                                      |
11  | Creation Date:                                                                       |
12  |                      October 9, 2001                                                 |
13  |                                                                                      |
14  | Creator:                                                                             |
15  |                      Mario-Jair Campos                                               |
16  |                                                                                      |
17  | Description:                                                                         |
18  |          Private Body version.                                                       |
19  |          This package creates a Dimension Group.                                     |
20  |                                                                                      |
21  | History:                                                                             |
22  | 04-MAR-2003 PAJOHRI  MLS Bug #2721899                                                |
23  |                        Changed BSC_SYS_DIM_GROUPS_TL to BSC_SYS_DIM_GROUPS_VL in     |
24  |                        select query.                                                 |
25  | 29-MAY-03  All Enhancement Phase I- Functions user group short_name if no id         |
26  | 07-JUN-03  mahrao Modified for ALL enhancement                                       |
27  | 13-JUN-03  ADEULGAO modified for BUG# 2878840                                        |
28  | 13-JUN-03  ADEULGAO modified procedure Create_Dimension_Group for BUG# 2878840       |
29  | 14-JUN-03  mahrao   Added Translate_dimesnsion_group procedure                       |
30  | 17-JUL-03  mahrao   Modified Translate_dimesnsion_group procedure                    |
31  |                     as part of forward porting of ALL enhancement to BSC 5.1         |
32  |                     Modified Retrieve_Dim_Group procedure                            |
33  |                     as part of forward porting of ALL enhancement to BSC 5.1         |
34  | 29-OCT-2003 mahrao  bug#3209967 Added a column to bsc_sys_dim_levels_by_group        |
35  | 17-NOV-2003 PAJOHRI  Bug #3232366                                                    |
36  | 17-NOV-2003 ADRAO    Bug #3236356 - Removed comments which has Validate_Value()      |
37  | 30-Jul-04   rpenneru  Modified for enhancemen#3748519                                |
38  | 13-Oct-04   rpenneru  Modified for bug#3945655                                       |
39  | 21-DEC-04   vtulasi   Modified for bug#4045278 - Addtion of LUD                      |
40  | 01-FEB-05   hengliu	 Modified for bug#4104065 - WHERE_CLAUSE can be null			|
41  +======================================================================================+
42 */
43 G_PKG_NAME              CONSTANT        varchar2(30) := 'BSC_DIMENSION_GROUPS_PVT';
44 g_db_object                             varchar2(30) := null;
45 
46 --
47 /**********************************************************************************/
48 FUNCTION Validate_Dim_Group_Id(
49  p_dim_group_id IN NUMBER
50 ) RETURN NUMBER
51 IS
52   l_count NUMBER := 0;
53 BEGIN
54 
55   SELECT count(dim_group_id)
56     INTO l_count
57     FROM BSC_SYS_DIM_GROUPS_VL
58     WHERE dim_group_id = p_dim_group_id;
59 
60   RETURN l_count;
61 EXCEPTION
62   WHEN OTHERS THEN
63   RETURN l_count;
64 END Validate_Dim_Group_Id;
65 /**********************************************************************************/
66 procedure Retrieve_Dim_Group(
67   p_Dim_Grp_Rec         IN             BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
68  ,x_Dim_Grp_Rec         OUT NOCOPY     BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
69  ,x_return_status       OUT NOCOPY     VARCHAR2
70  ,x_msg_count           OUT NOCOPY     NUMBER
71  ,x_msg_data            OUT NOCOPY     VARCHAR2
72 );
73 --:     This procedure is used to Create a Dimension Group.  This is the entry point
74 --:     for the API for the Dimension Group entity.
75 --:     This procedure is part of the Dimension Group API.
76 
77 procedure Create_Dimension_Group(
78   p_commit              IN  varchar2 := FND_API.G_FALSE
79  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
80  ,x_return_status       OUT NOCOPY  varchar2
81  ,x_msg_count           OUT NOCOPY     number
82  ,x_msg_data            OUT NOCOPY     varchar2
83 ) is
84 
85 l_Dim_Grp_Rec           BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
86 
87 l_count                     number;
88 l_dim_group_short_name      varchar2(40);
89 l_dim_level_short_name      varchar2(30);
90 
91 begin
92   SAVEPOINT CreateBSCDimGrpPVT;
93   FND_MSG_PUB.Initialize;
94   x_return_status := FND_API.G_RET_STS_SUCCESS;
95   -- Validate Group Id does not exist.
96   if p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
97     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
98     if l_count <> 0 then
99       FND_MESSAGE.SET_NAME('BSC','BSC_GROUP_ID_EXISTS');
100       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
101       FND_MSG_PUB.ADD;
102       RAISE FND_API.G_EXC_ERROR;
103     end if;
104   else
105     FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_ID_ENTERED');
106     FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
107     FND_MSG_PUB.ADD;
108     RAISE FND_API.G_EXC_ERROR;
109   end if;
110 
111   -- Assign all values in the passed "Record" parameter to the locally defined
112   -- "Record" variable.
113   l_Dim_Grp_Rec := p_Dim_Grp_Rec;
114 
115   -- Validate if this Group already exists, if it does not then create it and assign
116   -- the current dimension to the group, if the group already exists then just assign
117   -- the dimension level to it.
118    --if BSC_DIMENSION_LEVELS_PVT.Validate_Dim_Group(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name) < 1 then
119 
120     -- Get the next ID value for the current group.
121     -- Bug#2878840
122 
123     g_db_object := 'BSC_SYS_DIM_GROUPS_TL';
124 
125     -- PMD
126     if l_Dim_Grp_Rec.Bsc_Created_By is null then
127        l_Dim_Grp_Rec.Bsc_Created_By := 0;
128     end if;
129 
130     if l_Dim_Grp_Rec.Bsc_Last_Updated_By is null then
131       l_Dim_Grp_Rec.Bsc_Last_Updated_By := 0;
132     end if;
133     -- PMD
134 
135     l_Dim_Grp_Rec.Bsc_Last_Update_Date := NVL(p_Dim_Grp_Rec.Bsc_Last_Update_Date, SYSDATE);
136     -- Insert pertaining values into table bsc_sys_dim_groups_tl.
137     insert into BSC_SYS_DIM_GROUPS_TL( dim_group_id
138                                       ,language
139                                       ,source_lang
140                                       ,name
141                                       ,short_name
142                                       ,created_by
143                                       ,creation_date
144                                       ,last_updated_by
145                                       ,last_update_date
146                                       ,last_update_login)
147                                select  l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
148                                       ,L.LANGUAGE_CODE
149                                       ,userenv('LANG')
150                                       ,l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
151                                       ,l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name
152                                       ,l_Dim_Grp_Rec.Bsc_Created_By -- PMD
153                                       ,l_Dim_Grp_Rec.Bsc_Last_Update_Date  -- PMD
154                                       ,l_Dim_Grp_Rec.Bsc_Last_Updated_By  -- PMD
155                                       ,l_Dim_Grp_Rec.Bsc_Last_Update_Date  -- PMD
156                                       ,l_Dim_Grp_Rec.Bsc_Last_Update_Login  -- PMD
157                                  from FND_LANGUAGES L
158                                 where L.INSTALLED_FLAG in ('I', 'B')
159                                   and not exists
160                                       (select NULL
161                                          from BSC_SYS_DIM_GROUPS_TL T
162                                         where T.dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
163                                           and T.LANGUAGE = L.LANGUAGE_CODE);
164 
165     if (p_commit = FND_API.G_TRUE) then
166       commit;
167     end if;
168 
169   --end if;
170 
171 EXCEPTION
172     WHEN FND_API.G_EXC_ERROR THEN
173         ROLLBACK TO CreateBSCDimGrpPVT;
174         FND_MSG_PUB.Count_And_Get
175         (      p_encoded   => 'F'
176            ,   p_count     =>  x_msg_count
177            ,   p_data      =>  x_msg_data
178         );
179         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
180         x_return_status :=  FND_API.G_RET_STS_ERROR;
181         RAISE;
182     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
183         ROLLBACK TO CreateBSCDimGrpPVT;
184         FND_MSG_PUB.Count_And_Get
185         (      p_encoded   => 'F'
186            ,   p_count     =>  x_msg_count
187            ,   p_data      =>  x_msg_data
188         );
189         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
190         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
191         RAISE;
192     WHEN NO_DATA_FOUND THEN
193         ROLLBACK TO CreateBSCDimGrpPVT;
194         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
195         IF (x_msg_data IS NOT NULL) THEN
196             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Create_Dimension_Group ';
197         ELSE
198             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Create_Dimension_Group '||SQLERRM;
199         END IF;
200         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
201         RAISE;
202     WHEN OTHERS THEN
203         ROLLBACK TO CreateBSCDimGrpPVT;
204         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
205         if (SQLCODE = -01400) then
206           FND_MESSAGE.SET_NAME('BSC','BSC_TABLE_NULL_VALUE');
207           FND_MESSAGE.SET_TOKEN('BSC_OBJECT', g_db_object);
208           FND_MSG_PUB.ADD;
209           RAISE FND_API.G_EXC_ERROR;
210         end if;
211         IF (x_msg_data IS NOT NULL) THEN
212             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Create_Dimension_Group ';
213         ELSE
214             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Create_Dimension_Group '||SQLERRM;
215         END IF;
216         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
217         RAISE;
218 end Create_Dimension_Group;
219 
220 /************************************************************************************
221 ************************************************************************************/
222 
223 procedure Retrieve_Dimension_Group(
224   p_commit              IN      varchar2 := FND_API.G_FALSE
225  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
226  ,x_Dim_Grp_Rec         IN OUT NOCOPY     BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
227  ,x_return_status       OUT NOCOPY     varchar2
228  ,x_msg_count           OUT NOCOPY     number
229  ,x_msg_data            OUT NOCOPY     varchar2
230 ) is
231 
232 begin
233 
234   g_db_object := 'Retrieve_Dimension_Group';
235    FND_MSG_PUB.Initialize;
236    x_return_status := FND_API.G_RET_STS_SUCCESS;
237   select distinct name
238     into x_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
239     from BSC_SYS_DIM_GROUPS_VL
240    where dim_group_id = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
241 
242   if (p_commit = FND_API.G_TRUE) then
243     commit;
244   end if;
245 
246 EXCEPTION
247     WHEN FND_API.G_EXC_ERROR THEN
248         FND_MSG_PUB.Count_And_Get
249         (      p_encoded   => 'F'
250            ,   p_count     =>  x_msg_count
251            ,   p_data      =>  x_msg_data
252         );
253         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
254         x_return_status :=  FND_API.G_RET_STS_ERROR;
255         RAISE;
256     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
257         FND_MSG_PUB.Count_And_Get
258         (      p_encoded   => 'F'
259            ,   p_count     =>  x_msg_count
260            ,   p_data      =>  x_msg_data
261         );
262         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
263         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
264         RAISE;
265     WHEN NO_DATA_FOUND THEN
266         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
267         IF (x_msg_data IS NOT NULL) THEN
268             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Retrieve_Dimension_Group ';
269         ELSE
270             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Retrieve_Dimension_Group '||SQLERRM;
271         END IF;
272         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
273         RAISE;
274     WHEN OTHERS THEN
275         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
276         IF (x_msg_data IS NOT NULL) THEN
277             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Retrieve_Dimension_Group ';
278         ELSE
279             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Retrieve_Dimension_Group '||SQLERRM;
280         END IF;
281         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
282         RAISE;
283 end Retrieve_Dimension_Group;
284 
285 /************************************************************************************
286 ************************************************************************************/
287 
288 procedure Update_Dimension_Group(
289   p_commit              IN      varchar2 := FND_API.G_FALSE
290  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
291  ,x_return_status       OUT NOCOPY     varchar2
292  ,x_msg_count           OUT NOCOPY     number
293  ,x_msg_data            OUT NOCOPY     varchar2
294 ) is
295 
296 l_count                         number;
297 l_Dim_Grp_Rec           BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
298 
299 CURSOR c_dim_lvls_by_group (p_grp_short_name VARCHAR2)
300 IS
301   SELECT dim_group_id
302   FROM   BSC_SYS_DIM_GROUPS_TL
303   WHERE SHORT_NAME = p_grp_short_name;
304 
305 begin
306   SAVEPOINT UpdateBSCDimGrpPVT;
307   FND_MSG_PUB.Initialize;
308   x_return_status := FND_API.G_RET_STS_SUCCESS;
309     -- Assign all values in the passed "Record" parameter to the locally defined
310   -- "Record" variable.
311   l_Dim_Grp_Rec := p_Dim_Grp_Rec;
312 
313   -- Check that valid dimension group id was entered.
314   if p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
315     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
316     if l_count = 0 then
317       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_ID');
318       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
319       FND_MSG_PUB.ADD;
320       RAISE FND_API.G_EXC_ERROR;
321     end if;
322      -- if id is null then check for short name name is not null
323   elsif (l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name is not null) then
324       IF (c_dim_lvls_by_group%ISOPEN) THEN
325         CLOSE c_dim_lvls_by_group;
326       END IF;
327       OPEN c_dim_lvls_by_group(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
328       FETCH c_dim_lvls_by_group INTO l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
329       IF (c_dim_lvls_by_group%NOTFOUND) THEN
330          FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
331          FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME',l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
332          FND_MSG_PUB.ADD;
333          RAISE FND_API.G_EXC_ERROR;
334       END IF;
335       CLOSE c_dim_lvls_by_group;
336   else
337        FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_ID_ENTERED');
338        FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
339        FND_MSG_PUB.ADD;
340        RAISE FND_API.G_EXC_ERROR;
341   end if;
342 
343   -- In this case there is only one column that may be updated, therefore there is no
344   -- retrieval of previous values.
345 
346   -- For PMD, we need to update the WHO Columns appropriately
347   -- PMD
348   IF p_Dim_Grp_Rec.Bsc_Last_Updated_By IS NULL THEN -- Cannot update p_Dim_Grp_Rec
349       l_Dim_Grp_Rec.Bsc_Last_Updated_By := FND_GLOBAL.USER_ID;
350   END IF;
351 
352   IF p_Dim_Grp_Rec.Bsc_Last_Update_Login IS NULL THEN
353      l_Dim_Grp_Rec.Bsc_Last_Update_Login := FND_GLOBAL.LOGIN_ID;
354   END IF;
355   -- PMD
356 
357   l_Dim_Grp_Rec.Bsc_Last_Update_Date := NVL(p_Dim_Grp_Rec.Bsc_Last_Update_Date, SYSDATE);
358   IF (p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name IS NOT NULL) THEN
359       update BSC_SYS_DIM_GROUPS_TL
360          set name = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
361             ,source_lang = userenv('LANG')
362             ,last_updated_by = l_Dim_Grp_Rec.Bsc_Last_Updated_By
363             ,last_update_date = l_Dim_Grp_Rec.Bsc_Last_Update_Date
364             ,last_update_login = p_Dim_Grp_Rec.Bsc_Last_Update_Login
365        where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
366          and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
367   END IF;
368   if (p_commit = FND_API.G_TRUE) then
369     commit;
370   end if;
371 
372 EXCEPTION
373     WHEN FND_API.G_EXC_ERROR THEN
374         IF (c_dim_lvls_by_group%ISOPEN) THEN
375             CLOSE c_dim_lvls_by_group;
376         END IF;
377         ROLLBACK TO UpdateBSCDimGrpPVT;
378         FND_MSG_PUB.Count_And_Get
379         (      p_encoded   => 'F'
380            ,   p_count     =>  x_msg_count
381            ,   p_data      =>  x_msg_data
382         );
383         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
384         x_return_status :=  FND_API.G_RET_STS_ERROR;
385         RAISE;
386     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
387         IF (c_dim_lvls_by_group%ISOPEN) THEN
388             CLOSE c_dim_lvls_by_group;
389         END IF;
390         ROLLBACK TO UpdateBSCDimGrpPVT;
391         FND_MSG_PUB.Count_And_Get
392         (      p_encoded   => 'F'
393            ,   p_count     =>  x_msg_count
394            ,   p_data      =>  x_msg_data
395         );
396         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
397         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
398         RAISE;
399     WHEN NO_DATA_FOUND THEN
400         IF (c_dim_lvls_by_group%ISOPEN) THEN
401             CLOSE c_dim_lvls_by_group;
402         END IF;
403         ROLLBACK TO UpdateBSCDimGrpPVT;
404         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
405         IF (x_msg_data IS NOT NULL) THEN
406             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Update_Dimension_Group ';
407         ELSE
408             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Update_Dimension_Group '||SQLERRM;
409         END IF;
410         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
411         RAISE;
412     WHEN OTHERS THEN
413         IF (c_dim_lvls_by_group%ISOPEN) THEN
414             CLOSE c_dim_lvls_by_group;
415         END IF;
416         ROLLBACK TO UpdateBSCDimGrpPVT;
417         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
418         IF (x_msg_data IS NOT NULL) THEN
419             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Update_Dimension_Group ';
420         ELSE
421             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Update_Dimension_Group '||SQLERRM;
422         END IF;
423         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
424         RAISE;
425 end Update_Dimension_Group;
426 
427 /************************************************************************************
428 ************************************************************************************/
429 
430 procedure Delete_Dimension_Group(
431   p_commit              IN      varchar2 := FND_API.G_FALSE
432  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
433  ,x_return_status       OUT NOCOPY     varchar2
434  ,x_msg_count           OUT NOCOPY     number
435  ,x_msg_data            OUT NOCOPY     varchar2
436 ) is
437 
438 l_Dim_Grp_Rec                           BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
439 
440 l_count                 number;
441 
442 CURSOR c_dim_lvls_by_group (p_grp_short_name VARCHAR2)
443 IS
444   SELECT dim_group_id
445   FROM   BSC_SYS_DIM_GROUPS_TL
446   WHERE SHORT_NAME = p_grp_short_name;
447 
448 begin
449   SAVEPOINT DeleteBSCDimGrpPVT;
450    FND_MSG_PUB.Initialize;
451    x_return_status := FND_API.G_RET_STS_SUCCESS;
452   -- Assign all values in the passed "Record" parameter to the locally defined
453   -- "Record" variable.
454   l_Dim_Grp_Rec := p_Dim_Grp_Rec;
455 
456   if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
457     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
458     if l_count = 0 then
459       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_ID');
460       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
461       FND_MSG_PUB.ADD;
462       RAISE FND_API.G_EXC_ERROR;
463     end if;
464    -- if id is null then check that short name is not null
465   elsif (l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name is not null) then
466       IF (c_dim_lvls_by_group%ISOPEN) THEN
467         CLOSE c_dim_lvls_by_group;
468       END IF;
469       OPEN c_dim_lvls_by_group(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
470       FETCH c_dim_lvls_by_group INTO l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
471       IF (c_dim_lvls_by_group%NOTFOUND) THEN
472          FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
473          FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME',l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
474          FND_MSG_PUB.ADD;
475          RAISE FND_API.G_EXC_ERROR;
476       END IF;
477       CLOSE c_dim_lvls_by_group;
478     else
479        -- if id and shortname both are null then check that name is not null
480        if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name is not null then
481          select count(dim_group_id)
482       into l_count
483       from BSC_SYS_DIM_GROUPS_TL
484           where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
485          if l_count = 0 then
486        FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_NAME');
487        FND_MESSAGE.SET_TOKEN('BSC_GROUP_NAME', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
488        FND_MSG_PUB.ADD;
489        RAISE FND_API.G_EXC_ERROR;
490          else -- get id for this name
491        select distinct dim_group_id
492          into l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
493          from BSC_SYS_DIM_GROUPS_VL
494          where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
495          end if;
496        else
497          FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_NAME_ENTERED');
498          FND_MESSAGE.SET_TOKEN('BSC_NO_GROUP', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
499          FND_MSG_PUB.ADD;
500          RAISE FND_API.G_EXC_ERROR;
501        end if;
502   end if;
503 
504   -- If there are no more dimensions assigned to this group then the group
505   -- can be deleted.
506   select count(dim_group_id)
507     into l_count
508     from BSC_SYS_DIM_LEVELS_BY_GROUP
509    where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
510   if l_count = 0 then
511     delete from BSC_SYS_DIM_GROUPS_TL
512      where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
513   end if;
514 
515   if (p_commit = FND_API.G_TRUE) then
516     commit;
517   end if;
518 
519 EXCEPTION
520     WHEN FND_API.G_EXC_ERROR THEN
521         IF (c_dim_lvls_by_group%ISOPEN) THEN
522             CLOSE c_dim_lvls_by_group;
523         END IF;
524         ROLLBACK TO DeleteBSCDimGrpPVT;
525         FND_MSG_PUB.Count_And_Get
526         (      p_encoded   => 'F'
527            ,   p_count     =>  x_msg_count
528            ,   p_data      =>  x_msg_data
529         );
530         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
531         x_return_status :=  FND_API.G_RET_STS_ERROR;
532         RAISE;
533     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
534         IF (c_dim_lvls_by_group%ISOPEN) THEN
535             CLOSE c_dim_lvls_by_group;
536         END IF;
537         ROLLBACK TO DeleteBSCDimGrpPVT;
538         FND_MSG_PUB.Count_And_Get
539         (      p_encoded   => 'F'
540            ,   p_count     =>  x_msg_count
541            ,   p_data      =>  x_msg_data
542         );
543         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
544         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
545         RAISE;
546     WHEN NO_DATA_FOUND THEN
547         IF (c_dim_lvls_by_group%ISOPEN) THEN
548             CLOSE c_dim_lvls_by_group;
549         END IF;
550         ROLLBACK TO DeleteBSCDimGrpPVT;
551         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
552         IF (x_msg_data IS NOT NULL) THEN
553             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Delete_Dimension_Group ';
554         ELSE
555             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Delete_Dimension_Group '||SQLERRM;
556         END IF;
557         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
558         RAISE;
559     WHEN OTHERS THEN
560         IF (c_dim_lvls_by_group%ISOPEN) THEN
561             CLOSE c_dim_lvls_by_group;
562         END IF;
563         ROLLBACK TO DeleteBSCDimGrpPVT;
564         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
565         IF (x_msg_data IS NOT NULL) THEN
566             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Delete_Dimension_Group ';
567         ELSE
568             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Delete_Dimension_Group '||SQLERRM;
569         END IF;
570         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
571         RAISE;
572 end Delete_Dimension_Group;
573 
574 /************************************************************************************
575 ************************************************************************************/
576 
577 --:     This procedure assigns the dimension to the dimension group.
578 --:     This procedure is part of the Dimension Group API.
579 
580 procedure Create_Dim_Levels_In_Group(
581   p_commit              IN      varchar2 := FND_API.G_FALSE
582  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
583  ,x_return_status       OUT NOCOPY     varchar2
584  ,x_msg_count           OUT NOCOPY     number
585  ,x_msg_data            OUT NOCOPY     varchar2
586 ) is
587 
588 l_Dim_Grp_Rec                   BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
589 
590 l_count                         number;
591 
592 CURSOR c_dim_lvls_by_group (p_grp_short_name VARCHAR2)
593 IS
594   SELECT dim_group_id
595   FROM   BSC_SYS_DIM_GROUPS_TL
596   WHERE SHORT_NAME = p_grp_short_name;
597 
598 begin
599   SAVEPOINT CreateBSCDimLevInGrpPVT;
600    FND_MSG_PUB.Initialize;
601    x_return_status := FND_API.G_RET_STS_SUCCESS;
602   -- Assign all values in the passed "Record" parameter to the locally defined
603   -- "Record" variable.
604   l_Dim_Grp_Rec := p_Dim_Grp_Rec;
605 
606   -- Check that the group id is valid or that the name is valid.
607   if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
608     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
609     if l_count = 0 then
610       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_ID');
611       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
612       FND_MSG_PUB.ADD;
613       RAISE FND_API.G_EXC_ERROR;
614     end if;
615     -- if id is null then check that short name is not null
616   elsif l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name is not null then
617        IF (c_dim_lvls_by_group%ISOPEN) THEN
618         CLOSE c_dim_lvls_by_group;
619       END IF;
620       OPEN c_dim_lvls_by_group(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
621       FETCH c_dim_lvls_by_group INTO l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
622       IF (c_dim_lvls_by_group%NOTFOUND) THEN
623          FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
624          FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME',l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
625          FND_MSG_PUB.ADD;
626          RAISE FND_API.G_EXC_ERROR;
627       END IF;
628       CLOSE c_dim_lvls_by_group;
629     else
630         -- if id and short name is null then check that name is not null
631        if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name is not null then
632          select count(dim_group_id)
633            into l_count
634            from BSC_SYS_DIM_GROUPS_TL
635            where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
636          if l_count = 0 then
637            FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_NAME');
638            FND_MESSAGE.SET_TOKEN('BSC_GROUP_NAME', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
639            FND_MSG_PUB.ADD;
640            RAISE FND_API.G_EXC_ERROR;
641          else -- get id for this name
642            select distinct dim_group_id
643              into l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
644              from BSC_SYS_DIM_GROUPS_VL
645             where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
646          end if;
647        else
648          FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_NAME_ENTERED');
649          FND_MESSAGE.SET_TOKEN('BSC_NO_GROUP', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
650          FND_MSG_PUB.ADD;
651          RAISE FND_API.G_EXC_ERROR;
652        end if;
653   end if;
654 
655   -- Check Dimension level id is valid.
656   if l_Dim_Grp_Rec.Bsc_Level_Id  is not null then
657     l_count := BSC_DIMENSION_LEVELS_PVT.Validate_Dim_Level_Id(l_Dim_Grp_Rec.Bsc_Level_Id);
658     if l_count = 0 then
659       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_LEVEL_ID');
660       FND_MESSAGE.SET_TOKEN('BSC_LEVEL_ID', l_Dim_Grp_Rec.Bsc_Level_Id);
661       FND_MSG_PUB.ADD;
662       RAISE FND_API.G_EXC_ERROR;
663     end if;
664   else
665     FND_MESSAGE.SET_NAME('BSC','BSC_NO_LEVEL_ID_ENTERED');
666     FND_MESSAGE.SET_TOKEN('BSC_LEVEL_ID', l_Dim_Grp_Rec.Bsc_Level_Id);
667     FND_MSG_PUB.ADD;
668     RAISE FND_API.G_EXC_ERROR;
669   end if;
670 
671 
672 
673   -- Determine if dimension is already part of the dimension group.
674   select count(*)
675     into l_count
676     from BSC_SYS_DIM_LEVELS_BY_GROUP
677    where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
678      and dim_level_id = l_Dim_Grp_Rec.Bsc_Level_Id;
679 
680   -- If the dimension does not belong to the group yet assign it.
681   if l_count = 0 then
682 
683     -- Get the number of dimensions in the dimension group and add to it one.
684     -- This is used for the index for the dimension being added.
685     IF (l_Dim_Grp_Rec.Bsc_Dim_Level_Index IS NULL) THEN
686       select  NVL((MAX(dim_level_index) + 1), 0)
687         into l_Dim_Grp_Rec.Bsc_Dim_Level_Index
688         from BSC_SYS_DIM_LEVELS_BY_GROUP
689       where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
690     END IF;
691 
692     g_db_object := 'BSC_SYS_DIM_LEVELS_BY_GROUP';
693 
694     -- Insert pertaining values into table bsc_sys_dim_levels_by_group.
695     --Reminder:  Hard coded values, need to get the source.
696     insert into BSC_SYS_DIM_LEVELS_BY_GROUP( dim_group_id
697                                             ,dim_level_id
698                                             ,dim_level_index
699                                             ,total_flag
700                                             ,comparison_flag
701                                             ,filter_column
702                                             ,filter_value
703                                             ,default_value
704                                             ,default_type
705                                             ,parent_in_total
706                                             ,no_items
707                         ,where_clause)
708                                      values( l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
709                                             ,l_Dim_Grp_Rec.Bsc_Level_Id
710                                             ,l_Dim_Grp_Rec.Bsc_Dim_Level_Index
711                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag
712                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag
713                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col
714                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value
715                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Default_Value
716                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Default_Type
717                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot
718                                             ,l_Dim_Grp_Rec.Bsc_Group_Level_No_Items
719                         ,l_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause);
720 
721     if (p_commit = FND_API.G_TRUE) then
722       commit;
723     end if;
724 
725   end if;
726 
727 EXCEPTION
728     WHEN FND_API.G_EXC_ERROR THEN
729         ROLLBACK TO CreateBSCDimLevInGrpPVT;
730         FND_MSG_PUB.Count_And_Get
731         (      p_encoded   => 'F'
732            ,   p_count     =>  x_msg_count
733            ,   p_data      =>  x_msg_data
734         );
735         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
736         x_return_status :=  FND_API.G_RET_STS_ERROR;
737         RAISE;
738     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
739         ROLLBACK TO CreateBSCDimLevInGrpPVT;
740         FND_MSG_PUB.Count_And_Get
741         (      p_encoded   => 'F'
742            ,   p_count     =>  x_msg_count
743            ,   p_data      =>  x_msg_data
744         );
745         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
746         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
747         RAISE;
748     WHEN NO_DATA_FOUND THEN
749         ROLLBACK TO CreateBSCDimLevInGrpPVT;
750         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
751         IF (x_msg_data IS NOT NULL) THEN
752             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Create_Dim_Levels_In_Group ';
753         ELSE
754             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Create_Dim_Levels_In_Group '||SQLERRM;
755         END IF;
756         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
757         RAISE;
758     WHEN OTHERS THEN
759         ROLLBACK TO CreateBSCDimLevInGrpPVT;
760         if (SQLCODE = -01400) then
761           FND_MESSAGE.SET_NAME('BSC','BSC_TABLE_NULL_VALUE');
762           FND_MESSAGE.SET_TOKEN('BSC_OBJECT', g_db_object);
763           FND_MSG_PUB.ADD;
764           RAISE FND_API.G_EXC_ERROR;
765         end if;
766         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
767         IF (x_msg_data IS NOT NULL) THEN
768             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Create_Dim_Levels_In_Group ';
769         ELSE
770             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Create_Dim_Levels_In_Group '||SQLERRM;
771         END IF;
772         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
773         RAISE;
774 end Create_Dim_Levels_In_Group;
775 
776 /************************************************************************************
777 ************************************************************************************/
778 
779 procedure Retrieve_Dim_Levels_In_Group(
780   p_commit              IN      varchar2 := FND_API.G_FALSE
781  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
782  ,x_Dim_Grp_Rec         IN OUT NOCOPY     BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
783  ,x_return_status       OUT NOCOPY     varchar2
784  ,x_msg_count           OUT NOCOPY     number
785  ,x_msg_data            OUT NOCOPY     varchar2
786 ) is
787 
788 begin
789 
790   x_return_status := FND_API.G_RET_STS_SUCCESS;
791   FND_MSG_PUB.Initialize;
792   g_db_object := 'Retrieve_Dim_Levels_In_Group';
793 -- Code added for ALL start here
794 -- PMF passes dimension level short name and dimension short name.
795 -- dim_level_id is found from bsc_sys_dim_levels_tl table.
796 -- As SHORT_NAME column that's being added to bsc_sys_dim_groups_tl table
797 -- is not populated, for ALL enhancement, query on BSC_SYS_DIM_LEVELS_BY_GROUP
798 -- is based only on dim_level_id.
799 -- This is required for PMF ALL enhancement (phase1).
800     SELECT DISTINCT dim_level_index
801                    ,total_flag
802                    ,comparison_flag
803                    ,filter_column
804                    ,filter_value
805                    ,default_value
806                    ,default_type
807                    ,parent_in_total
808                    ,no_items
809            ,where_clause
810     INTO   x_Dim_Grp_Rec.Bsc_Dim_Level_Index
811           ,x_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag
812           ,x_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag
813           ,x_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col
814           ,x_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value
815           ,x_Dim_Grp_Rec.Bsc_Group_Level_Default_Value
816           ,x_Dim_Grp_Rec.Bsc_Group_Level_Default_Type
817           ,x_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot
818           ,x_Dim_Grp_Rec.Bsc_Group_Level_No_Items
819       ,x_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause
820     FROM  BSC_SYS_DIM_LEVELS_BY_GROUP
821     WHERE dim_group_id = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
822     AND   dim_level_id = p_Dim_Grp_Rec.Bsc_Level_Id;
823   if (p_commit = FND_API.G_TRUE) then
824     commit;
825   end if;
826 
827 EXCEPTION
828   WHEN FND_API.G_EXC_ERROR THEN
829     x_return_status := FND_API.G_RET_STS_ERROR;
830     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
831                               ,p_data   =>      x_msg_data);
832   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
833     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
834     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
835                               ,p_data     =>      x_msg_data);
836   WHEN NO_DATA_FOUND THEN
837     FND_MSG_PUB.Initialize;
838     FND_MESSAGE.SET_NAME('BSC','BSC_NO_VALUE_FOUND');
839     FND_MESSAGE.SET_TOKEN('BSC_OBJECT', g_db_object);
840     FND_MSG_PUB.ADD;
841     RAISE FND_API.G_EXC_ERROR;
842   WHEN OTHERS THEN
843     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
844     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
845                               ,p_data     =>      x_msg_data);
846 
847 end Retrieve_Dim_Levels_In_Group;
848 
849 /************************************************************************************
850 ************************************************************************************/
851 
852 procedure Update_Dim_Levels_In_Group(
853   p_commit              IN      varchar2 := FND_API.G_FALSE
854  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
855  ,x_return_status       OUT NOCOPY     varchar2
856  ,x_msg_count           OUT NOCOPY     number
857  ,x_msg_data            OUT NOCOPY     varchar2
858 ) is
859 
860 l_Dim_Grp_Rec                   BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
861 l_Dim_Grp_Rec_in  BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
862 
863 l_count                         number;
864 
865 CURSOR c_dim_lvls_by_group (p_grp_short_name VARCHAR2)
866 IS
867   SELECT dim_group_id
868   FROM   BSC_SYS_DIM_GROUPS_TL
869   WHERE SHORT_NAME = p_grp_short_name;
870 
871 begin
872   SAVEPOINT UpdateBSCDimLevInGrpPVT;
873   FND_MSG_PUB.Initialize;
874   x_return_status := FND_API.G_RET_STS_SUCCESS;
875   l_Dim_Grp_Rec_in := p_Dim_Grp_Rec;
876   -- Check that the group id is valid or that the name is valid.
877     if p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
878     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
879     if l_count = 0 then
880       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_ID');
881       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
882       FND_MSG_PUB.ADD;
883       RAISE FND_API.G_EXC_ERROR;
884     end if;
885     -- if id is null then check that short name is not null
886   elsif p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name is not null then
887        IF (c_dim_lvls_by_group%ISOPEN) THEN
888         CLOSE c_dim_lvls_by_group;
889       END IF;
890       OPEN c_dim_lvls_by_group(l_Dim_Grp_Rec_in.Bsc_Dim_Level_Group_Short_Name);
891       FETCH c_dim_lvls_by_group INTO l_Dim_Grp_Rec_in.Bsc_Dim_Level_Group_Id;
892       IF (c_dim_lvls_by_group%NOTFOUND) THEN
893          FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
894          FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME',l_Dim_Grp_Rec_in.Bsc_Dim_Level_Group_Short_Name);
895          FND_MSG_PUB.ADD;
896          RAISE FND_API.G_EXC_ERROR;
897       END IF;
898       CLOSE c_dim_lvls_by_group;
899     else
900         -- if id is null then check that name is not null
901        if p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name is not null then
902          select count(dim_group_id)
903           into l_count
904           from BSC_SYS_DIM_GROUPS_TL
905           where name = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
906          if l_count = 0 then
907            FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_NAME');
908            FND_MESSAGE.SET_TOKEN('BSC_GROUP_NAME', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
909            FND_MSG_PUB.ADD;
910            RAISE FND_API.G_EXC_ERROR;
911          else -- get id for this name
912            select distinct dim_group_id
913             into l_Dim_Grp_Rec_in.Bsc_Dim_Level_Group_Id
914             from BSC_SYS_DIM_GROUPS_VL
915             where name = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
916          end if;
917        else
918          FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_NAME_ENTERED');
919          FND_MESSAGE.SET_TOKEN('BSC_NO_GROUP', p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
920          FND_MSG_PUB.ADD;
921          RAISE FND_API.G_EXC_ERROR;
922        end if;
923   end if;
924 
925   -- Check Dimension level id is valid.
926   if p_Dim_Grp_Rec.Bsc_Level_Id  is not null then
927     l_count := BSC_DIMENSION_LEVELS_PVT.Validate_Dim_Level_Id(p_Dim_Grp_Rec.Bsc_Level_Id);
928     if l_count = 0 then
929       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_LEVEL_ID');
930       FND_MESSAGE.SET_TOKEN('BSC_LEVEL_ID', p_Dim_Grp_Rec.Bsc_Level_Id);
931       FND_MSG_PUB.ADD;
932       RAISE FND_API.G_EXC_ERROR;
933     end if;
934   else
935     FND_MESSAGE.SET_NAME('BSC','BSC_NO_LEVEL_ID_ENTERED');
936     FND_MESSAGE.SET_TOKEN('BSC_LEVEL_ID', p_Dim_Grp_Rec.Bsc_Level_Id);
937     FND_MSG_PUB.ADD;
938     RAISE FND_API.G_EXC_ERROR;
939   end if;
940 
941   -- Not all values will be passed.  We need to make sure values not passed are not
942   -- changed by procedure, therefore we get what is there before we do any updates.
943   Retrieve_Dim_Levels_In_Group( p_commit
944                                ,l_Dim_Grp_Rec_in
945                                ,l_Dim_Grp_Rec
946                                ,x_return_status
947                                ,x_msg_count
948                                ,x_msg_data);
949 
950   -- update LOCAL language ,source language, group id and level Id values with PASSED values.
951   l_Dim_Grp_Rec.Bsc_Language := p_Dim_Grp_Rec.Bsc_Language;
952   l_Dim_Grp_Rec.Bsc_Source_Language := p_Dim_Grp_Rec.Bsc_Source_Language;
953   l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id := l_Dim_Grp_Rec_in.Bsc_Dim_Level_Group_Id;
954   l_Dim_Grp_Rec.Bsc_Level_Id := l_Dim_Grp_Rec_in.Bsc_Level_Id;
955 
956   -- Copy PASSED Record values into LOCAL Record values for the PASSED Record values
957   -- which are NOT NULL.
958   if p_Dim_Grp_Rec.Bsc_Dim_Level_Index is not null then
959     l_Dim_Grp_Rec.Bsc_Dim_Level_Index := p_Dim_Grp_Rec.Bsc_Dim_Level_Index;
960   end if;
961   if p_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag is not null then
962     l_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag := p_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag;
963   end if;
964   if p_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag is not null then
965     l_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag := p_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag;
966   end if;
967   if p_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col is not null then
968     l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col := p_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col;
969   end if;
970   if p_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value is not null then
971     l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value := p_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value;
972   end if;
973   if p_Dim_Grp_Rec.Bsc_Group_Level_Default_Value is not null then
974     l_Dim_Grp_Rec.Bsc_Group_Level_Default_Value := p_Dim_Grp_Rec.Bsc_Group_Level_Default_Value;
975   end if;
976   if p_Dim_Grp_Rec.Bsc_Group_Level_Default_Type is not null then
977     l_Dim_Grp_Rec.Bsc_Group_Level_Default_Type := p_Dim_Grp_Rec.Bsc_Group_Level_Default_Type;
978   end if;
979   if p_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot is not null then
980     l_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot := p_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot;
981   end if;
982   if p_Dim_Grp_Rec.Bsc_Group_Level_No_Items is not null then
983     l_Dim_Grp_Rec.Bsc_Group_Level_No_Items := p_Dim_Grp_Rec.Bsc_Group_Level_No_Items;
984   end if;
985   --Where_Clause can be null
986   --if p_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause is not null then
987     l_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause := p_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause;
988   --end if;
989 
990   update BSC_SYS_DIM_LEVELS_BY_GROUP
991      set dim_level_index = l_Dim_Grp_Rec.Bsc_Dim_Level_Index
992         ,total_flag = l_Dim_Grp_Rec.Bsc_Group_Level_Total_Flag
993         ,comparison_flag = l_Dim_Grp_Rec.Bsc_Group_Level_Comp_Flag
994         ,filter_column = l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Col
995         ,filter_value = l_Dim_Grp_Rec.Bsc_Group_Level_Filter_Value
996         ,default_value = l_Dim_Grp_Rec.Bsc_Group_Level_Default_Value
997         ,default_type = l_Dim_Grp_Rec.Bsc_Group_Level_Default_Type
998         ,parent_in_total = l_Dim_Grp_Rec.Bsc_Group_Level_Parent_In_Tot
999         ,no_items = l_Dim_Grp_Rec.Bsc_Group_Level_No_Items
1000     ,where_clause = l_Dim_Grp_Rec.Bsc_Group_Level_Where_Clause
1001    where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
1002      and dim_level_id = l_Dim_Grp_Rec.Bsc_Level_Id;
1003 
1004   if (p_commit = FND_API.G_TRUE) then
1005     commit;
1006   end if;
1007 
1008 EXCEPTION
1009     WHEN FND_API.G_EXC_ERROR THEN
1010         ROLLBACK TO UpdateBSCDimLevInGrpPVT;
1011         CLOSE c_dim_lvls_by_group;
1012         FND_MSG_PUB.Count_And_Get
1013         (      p_encoded   => 'F'
1014            ,   p_count     =>  x_msg_count
1015            ,   p_data      =>  x_msg_data
1016         );
1017         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1018         x_return_status :=  FND_API.G_RET_STS_ERROR;
1019         RAISE;
1020     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1021         ROLLBACK TO UpdateBSCDimLevInGrpPVT;
1022         CLOSE c_dim_lvls_by_group;
1023         FND_MSG_PUB.Count_And_Get
1024         (      p_encoded   => 'F'
1025            ,   p_count     =>  x_msg_count
1026            ,   p_data      =>  x_msg_data
1027         );
1028         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1029         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1030         RAISE;
1031     WHEN NO_DATA_FOUND THEN
1032         ROLLBACK TO UpdateBSCDimLevInGrpPVT;
1033         CLOSE c_dim_lvls_by_group;
1034         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1035         IF (x_msg_data IS NOT NULL) THEN
1036             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Update_Dim_Levels_In_Group ';
1037         ELSE
1038             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Update_Dim_Levels_In_Group '||SQLERRM;
1039         END IF;
1040         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1041         RAISE;
1042     WHEN OTHERS THEN
1043         ROLLBACK TO UpdateBSCDimLevInGrpPVT;
1044         CLOSE c_dim_lvls_by_group;
1045         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1046         IF (x_msg_data IS NOT NULL) THEN
1047             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Update_Dim_Levels_In_Group ';
1048         ELSE
1049             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Update_Dim_Levels_In_Group '||SQLERRM;
1050         END IF;
1051         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1052         RAISE;
1053 end Update_Dim_Levels_In_Group;
1054 
1055 /************************************************************************************
1056 ************************************************************************************/
1057 
1058 procedure Delete_Dim_Levels_In_Group(
1059   p_commit              IN      varchar2 := FND_API.G_FALSE
1060  ,p_Dim_Grp_Rec         IN      BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
1061  ,x_return_status       OUT NOCOPY     varchar2
1062  ,x_msg_count           OUT NOCOPY     number
1063  ,x_msg_data            OUT NOCOPY     varchar2
1064 ) is
1065 
1066 l_Dim_Grp_Rec                   BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
1067 
1068 l_count                         number;
1069 
1070 CURSOR c_dim_lvls_by_group (p_grp_short_name VARCHAR2)
1071 IS
1072   SELECT dim_group_id
1073   FROM   BSC_SYS_DIM_GROUPS_TL
1074   WHERE SHORT_NAME = p_grp_short_name;
1075 
1076 begin
1077   SAVEPOINT DeleteBSCDimLevInGrpPVT;
1078    FND_MSG_PUB.Initialize;
1079    x_return_status := FND_API.G_RET_STS_SUCCESS;
1080   -- Assign all values in the passed "Record" parameter to the locally defined
1081   -- "Record" variable.
1082   l_Dim_Grp_Rec := p_Dim_Grp_Rec;
1083 
1084   -- Check that the group id is valid or that the name is valid.
1085   if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id is not null then
1086     l_count := BSC_DIMENSION_GROUPS_PVT.Validate_Dim_Group_Id(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
1087     if l_count = 0 then
1088       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_ID');
1089       FND_MESSAGE.SET_TOKEN('BSC_GROUP_ID', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id);
1090       FND_MSG_PUB.ADD;
1091       RAISE FND_API.G_EXC_ERROR;
1092     end if;
1093     -- if id is null then check for short name name is not null
1094   elsif l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name is not null then
1095        IF (c_dim_lvls_by_group%ISOPEN) THEN
1096         CLOSE c_dim_lvls_by_group;
1097       END IF;
1098       OPEN c_dim_lvls_by_group(l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
1099       FETCH c_dim_lvls_by_group INTO l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
1100       IF (c_dim_lvls_by_group%NOTFOUND) THEN
1101          FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_SHORT_NAME');
1102          FND_MESSAGE.SET_TOKEN('BSC_GROUP_SHORT_NAME',l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name);
1103          FND_MSG_PUB.ADD;
1104          RAISE FND_API.G_EXC_ERROR;
1105       END IF;
1106       CLOSE c_dim_lvls_by_group;
1107     else
1108        -- if id and shortname both are null then check that name is not null
1109        if l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name is not null then
1110          select count(dim_group_id)
1111            into l_count
1112            from BSC_SYS_DIM_GROUPS_TL
1113            where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
1114          if l_count = 0 then
1115            FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_GROUP_NAME');
1116            FND_MESSAGE.SET_TOKEN('BSC_GROUP_NAME', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
1117            FND_MSG_PUB.ADD;
1118            RAISE FND_API.G_EXC_ERROR;
1119          else -- get id for this name
1120            select distinct dim_group_id
1121             into l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
1122             from BSC_SYS_DIM_GROUPS_VL
1123             where name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name;
1124          end if;
1125        else
1126          FND_MESSAGE.SET_NAME('BSC','BSC_NO_GROUP_NAME_ENTERED');
1127          FND_MESSAGE.SET_TOKEN('BSC_NO_GROUP', l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name);
1128          FND_MSG_PUB.ADD;
1129          RAISE FND_API.G_EXC_ERROR;
1130        end if;
1131   end if;
1132 
1133   -- Check Dimension level id is valid.
1134   if l_Dim_Grp_Rec.Bsc_Level_Id  is not null then
1135     l_count := BSC_DIMENSION_LEVELS_PVT.Validate_Dim_Level_Id(l_Dim_Grp_Rec.Bsc_Level_Id);
1136     if l_count = 0 then
1137       FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_LEVEL_ID');
1138       FND_MESSAGE.SET_TOKEN('BSC_LEVEL_ID', l_Dim_Grp_Rec.Bsc_Level_Id);
1139       FND_MSG_PUB.ADD;
1140       RAISE FND_API.G_EXC_ERROR;
1141     end if;
1142 
1143      delete from BSC_SYS_DIM_LEVELS_BY_GROUP
1144       where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
1145        and dim_level_id = l_Dim_Grp_Rec.Bsc_Level_Id;
1146   else
1147      delete from BSC_SYS_DIM_LEVELS_BY_GROUP
1148       where dim_group_id = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id;
1149   end if;
1150   if (p_commit = FND_API.G_TRUE) then
1151     commit;
1152   end if;
1153 
1154 EXCEPTION
1155     WHEN FND_API.G_EXC_ERROR THEN
1156         CLOSE c_dim_lvls_by_group;
1157         ROLLBACK TO DeleteBSCDimLevInGrpPVT;
1158         FND_MSG_PUB.Count_And_Get
1159         (      p_encoded   => 'F'
1160            ,   p_count     =>  x_msg_count
1161            ,   p_data      =>  x_msg_data
1162         );
1163         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1164         x_return_status :=  FND_API.G_RET_STS_ERROR;
1165         RAISE;
1166     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1167         CLOSE c_dim_lvls_by_group;
1168         ROLLBACK TO DeleteBSCDimLevInGrpPVT;
1169         FND_MSG_PUB.Count_And_Get
1170         (      p_encoded   => 'F'
1171            ,   p_count     =>  x_msg_count
1172            ,   p_data      =>  x_msg_data
1173         );
1174         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1175         --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1176         RAISE;
1177     WHEN NO_DATA_FOUND THEN
1178         CLOSE c_dim_lvls_by_group;
1179         ROLLBACK TO DeleteBSCDimLevInGrpPVT;
1180         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1181         IF (x_msg_data IS NOT NULL) THEN
1182             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Delete_Dim_Levels_In_Group ';
1183         ELSE
1184             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Delete_Dim_Levels_In_Group '||SQLERRM;
1185         END IF;
1186         --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1187         RAISE;
1188     WHEN OTHERS THEN
1189         CLOSE c_dim_lvls_by_group;
1190         ROLLBACK TO DeleteBSCDimLevInGrpPVT;
1191         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1192         IF (x_msg_data IS NOT NULL) THEN
1193             x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Delete_Dim_Levels_In_Group ';
1194         ELSE
1195             x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Delete_Dim_Levels_In_Group '||SQLERRM;
1196         END IF;
1197         --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
1198         RAISE;
1199 end Delete_Dim_Levels_In_Group;
1200 
1201 /************************************************************************************
1202 ************************************************************************************/
1203 /************************************************************************************
1204 ************************************************************************************/
1205 
1206 /*-------------------------------------------------------------------------------------
1207   get_Dim_Group_Id:
1208                    Return the Dimension Group ID,  null is returned the Short Name Not exist
1209 ---------------------------------------------------------------------------------------*/
1210 FUNCTION get_Dim_Group_Id(
1211    p_Short_Name IN VARCHAR2
1212 ) RETURN number IS
1213  v_Id number;
1214 
1215  BEGIN
1216   Select distinct DIM_GROUP_ID
1217     into v_Id
1218     from BSC_SYS_DIM_GROUPS_TL
1219     where SHORT_NAME = p_Short_Name;
1220  RETURN  v_Id;
1221 
1222  EXCEPTION
1223   WHEN OTHERS THEN
1224     RETURN null;
1225 END get_Dim_Group_Id;
1226 
1227 --
1228 PROCEDURE Translate_Dimension_Group
1229 ( p_commit IN  VARCHAR2   := FND_API.G_FALSE
1230  ,p_Dim_Grp_Rec IN  BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
1231  ,x_return_status OUT NOCOPY VARCHAR2
1232  ,x_msg_count OUT NOCOPY NUMBER
1233  ,x_msg_data OUT NOCOPY VARCHAR2
1234 ) IS
1235   l_Dim_Grp_rec BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type;
1236 BEGIN
1237   SAVEPOINT TranslateBSCDimGrpPVT;
1238   x_return_status:= FND_API.G_RET_STS_SUCCESS;
1239 
1240   Retrieve_Dim_Group(
1241     p_Dim_Grp_Rec => p_Dim_Grp_Rec
1242    ,x_Dim_Grp_Rec => l_Dim_Grp_rec
1243    ,x_return_status => x_return_status
1244    ,x_msg_count => x_msg_count
1245    ,x_msg_data => x_msg_data
1246   );
1247 
1248   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1249     RAISE FND_API.G_EXC_ERROR;
1250   END IF;
1251 
1252   IF (p_Dim_Grp_rec.Bsc_Dim_Level_Group_Name IS NOT NULL) THEN
1253     l_Dim_Grp_rec.Bsc_Dim_Level_Group_Name := p_Dim_Grp_rec.Bsc_Dim_Level_Group_Name;
1254   END IF;
1255 
1256   l_Dim_Grp_rec.Bsc_Last_Update_Date := NVL(p_Dim_Grp_Rec.Bsc_Last_Update_Date, SYSDATE);
1257 
1258   UPDATE bsc_sys_dim_groups_tl
1259   SET    name = l_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
1260         ,source_lang = userenv('LANG')
1261         ,last_updated_by = NVL(l_Dim_Grp_Rec.Bsc_Last_Updated_By, p_Dim_Grp_Rec.Bsc_Last_Updated_By)
1262         ,last_update_date = l_Dim_Grp_rec.Bsc_Last_Update_Date
1263         ,last_update_login = p_Dim_Grp_Rec.Bsc_Last_Update_Login
1264   WHERE short_name = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name
1265   AND    userenv('LANG') in (LANGUAGE, SOURCE_LANG);
1266 
1267   IF (p_commit = FND_API.G_TRUE) THEN
1268     COMMIT;
1269   END IF;
1270 
1271 EXCEPTION
1272   WHEN FND_API.G_EXC_ERROR THEN
1273     ROLLBACK TO TranslateBSCDimGrpPVT;
1274     FND_MSG_PUB.Count_And_Get(
1275        p_encoded   => 'F'
1276       ,p_count     =>  x_msg_count
1277       ,p_data      =>  x_msg_data
1278     );
1279     x_return_status :=  FND_API.G_RET_STS_ERROR;
1280     RAISE;
1281   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1282     ROLLBACK TO TranslateBSCDimGrpPVT;
1283     FND_MSG_PUB.Count_And_Get(
1284        p_encoded   => 'F'
1285       ,p_count     =>  x_msg_count
1286       ,p_data      =>  x_msg_data
1287     );
1288     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1289     RAISE;
1290   WHEN NO_DATA_FOUND THEN
1291     ROLLBACK TO TranslateBSCDimGrpPVT;
1292     x_return_status :=  FND_API.G_RET_STS_ERROR;
1293     IF (x_msg_data IS NOT NULL) THEN
1294       x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Translate_Dimension_Group ';
1295     ELSE
1296       x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Translate_Dimension_Group '||SQLERRM;
1297     END IF;
1298     RAISE;
1299   WHEN OTHERS THEN
1300     ROLLBACK TO TranslateBSCDimGrpPVT;
1301     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1302     IF (x_msg_data IS NOT NULL) THEN
1303       x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Translate_Dimension_Group ';
1304     ELSE
1305       x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Translate_Dimension_Group '||SQLERRM;
1306     END IF;
1307     RAISE;
1308 
1309 END Translate_Dimension_Group;
1310 
1311 --====================================================================
1312 
1313 procedure Retrieve_Dim_Group(
1314   p_Dim_Grp_Rec         IN         BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
1315  ,x_Dim_Grp_Rec         OUT NOCOPY BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
1316  ,x_return_status       OUT NOCOPY VARCHAR2
1317  ,x_msg_count           OUT NOCOPY NUMBER
1318  ,x_msg_data            OUT NOCOPY VARCHAR2
1319 ) is
1320 
1321 begin
1322   x_return_status:= FND_API.G_RET_STS_SUCCESS;
1323 
1324   SELECT distinct name, dim_group_id, short_name
1325   INTO
1326     x_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
1327     ,x_Dim_Grp_Rec.Bsc_Dim_Level_Group_Id
1328     ,x_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name
1329     FROM BSC_SYS_DIM_GROUPS_VL
1330     WHERE short_name = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name;
1331 
1332 EXCEPTION
1333   WHEN FND_API.G_EXC_ERROR THEN
1334     x_return_status := FND_API.G_RET_STS_ERROR;
1335     FND_MSG_PUB.Count_And_Get(
1336        p_encoded   => 'F'
1337       ,p_count     =>  x_msg_count
1338       ,p_data      =>  x_msg_data
1339     );
1340   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1341     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1342     FND_MSG_PUB.Count_And_Get(
1343        p_encoded   => 'F'
1344       ,p_count     =>  x_msg_count
1345       ,p_data      =>  x_msg_data
1346     );
1347   WHEN NO_DATA_FOUND THEN
1348     x_return_status := FND_API.G_RET_STS_ERROR;
1349     IF (x_msg_data IS NOT NULL) THEN
1350       x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Retrieve_Dim_Group ';
1351     ELSE
1352       x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Retrieve_Dim_Group '||SQLERRM;
1353     END IF;
1354     RAISE FND_API.G_EXC_ERROR;
1355   WHEN OTHERS THEN
1356     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1357     IF (x_msg_data IS NOT NULL) THEN
1358       x_msg_data      :=  x_msg_data||' -> BSC_DIMENSION_GROUPS_PVT.Retrieve_Dim_Group ';
1359     ELSE
1360       x_msg_data      := 'BSC_DIMENSION_GROUPS_PVT.Retrieve_Dim_Group '||SQLERRM;
1361     END IF;
1362 
1363 END Retrieve_Dim_Group;
1364 
1365 
1366 
1367 /*************************************************************************************
1368 
1369     API TO SYNC UP THE DIMENSION GROUPS LANGUAGE DATA FROM PMF TO BSC
1370 
1371 *************************************************************************************/
1372 
1373 procedure Translate_Dim_by_given_lang
1374 ( p_commit          IN  VARCHAR2  := FND_API.G_FALSE
1375 , p_Dim_Grp_Rec     IN  BSC_DIMENSION_GROUPS_PUB.Bsc_Dim_Group_Rec_Type
1376 , x_return_status   OUT NOCOPY VARCHAR2
1377 , x_msg_count       OUT NOCOPY NUMBER
1378 , x_msg_data        OUT NOCOPY VARCHAR2
1379 )
1380 IS
1381 
1382 BEGIN
1383 
1384     SAVEPOINT  TransDimByLangBsc;
1385 
1386     x_return_status := FND_API.G_RET_STS_SUCCESS;
1387 
1388     FND_MSG_PUB.Initialize;
1389 
1390     UPDATE BSC_SYS_DIM_GROUPS_TL
1391     SET  NAME              = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Name
1392         ,SOURCE_LANG       = p_Dim_Grp_Rec.Bsc_Source_Language
1393         ,LAST_UPDATE_DATE  = p_Dim_Grp_Rec.Bsc_Last_Update_Date
1394     WHERE SHORT_NAME    = p_Dim_Grp_Rec.Bsc_Dim_Level_Group_Short_Name
1395     AND LANGUAGE        = p_Dim_Grp_Rec.Bsc_Language;
1396 
1397     IF (p_commit = FND_API.G_TRUE) THEN
1398         COMMIT;
1399     END IF;
1400 
1401 
1402 EXCEPTION
1403   WHEN FND_API.G_EXC_ERROR THEN
1404     ROLLBACK TO TransDimByLangBsc;
1405     x_return_status := FND_API.G_RET_STS_ERROR;
1406     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
1407                               ,p_data  => x_msg_data);
1408 
1409   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1410     ROLLBACK TO TransDimByLangBsc;
1411     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1412     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
1413                               ,p_data  => x_msg_data);
1414   WHEN NO_DATA_FOUND THEN
1415     ROLLBACK TO TransDimByLangBsc;
1416     x_return_status := FND_API.G_RET_STS_ERROR;
1417     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
1418                               ,p_data  => x_msg_data);
1419   WHEN OTHERS THEN
1420     ROLLBACK TO TransDimByLangBsc;
1421     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1422     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count
1423                               ,p_data  => x_msg_data);
1424 END Translate_Dim_by_given_lang;
1425 
1426 /******************************************************************************/
1427 
1428 end BSC_DIMENSION_GROUPS_PVT;