DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_CUSTOM_VIEW_PVT

Source


1 PACKAGE BODY BSC_CUSTOM_VIEW_PVT AS
2   /* $Header: BSCCVDVB.pls 120.0 2005/06/01 16:15:52 appldev noship $ */
3 /*********************************************************************************/
4 
5 
6 /*
7   Added get_Tab_Id_Count for Performace Bug #3236356
8 */
9 
10 FUNCTION get_Tab_Id_Count
11 (
12   p_Tab_Id         IN NUMBER
13 )RETURN NUMBER;
14 
15 
16 FUNCTION Is_More
17 (       p_cust_Views   IN  OUT NOCOPY  VARCHAR2
18     ,   p_cust_View        OUT NOCOPY  VARCHAR2
19 ) RETURN BOOLEAN
20 IS
21     l_pos_ids               NUMBER;
22     l_pos_rel_types         NUMBER;
23     l_pos_rel_columns       NUMBER;
24 BEGIN
25     IF (p_cust_Views IS NOT NULL) THEN
26         l_pos_ids        := INSTR(p_cust_Views,   ',');
27         IF (l_pos_ids > 0) THEN
28             p_cust_View  :=  TRIM(SUBSTR(p_cust_Views,    1,    l_pos_ids - 1));
29             p_cust_Views :=  TRIM(SUBSTR(p_cust_Views,    l_pos_ids + 1));
30         ELSE
31             p_cust_View  :=  TRIM(p_cust_Views);
32             p_cust_Views :=  NULL;
33         END IF;
34         RETURN TRUE;
35     ELSE
36         RETURN FALSE;
37     END IF;
38 END Is_More;
39 
40 
41 /******************************************************************************************
42   This fucntion will return the enabled flag for the tabview.
43   If it returns 1 it means the view is enabled for the view.
44   0 means the view is not enabled for the view.
45 /******************************************************************************************/
46 
47 FUNCTION get_enabled_flag_for_View
48 (
49     p_tab_id         IN    NUMBER
50    ,p_tab_view_id    IN    NUMBER
51 ) RETURN NUMBER
52 IS
53 l_enabled           BSC_TAB_VIEWS_B.enabled_flag%TYPE;
54 BEGIN
55 
56        --DBMS_OUTPUT.PUT_LINE\n('p_tab_id-->'|| p_tab_id);
57        --DBMS_OUTPUT.PUT_LINE\n('p_tab_view_id-->'|| p_tab_view_id);
58 
59        IF ((p_tab_view_id > -1)AND(p_tab_view_id<2)) THEN
60 
61          IF (p_tab_view_id=0) THEN
62          -- for scorecard view
63 
64            SELECT KPI_MODEL
65            INTO l_enabled
66            FROM BSC_TABS_B
67            WHERE tab_id =p_tab_id;
68 
69          ELSE
70             SELECT BSC_MODEL
71             INTO l_enabled
72             FROM BSC_TABS_B
73             WHERE tab_id =p_tab_id;
74          END IF;
75 
76        ELSE
77 
78             SELECT enabled_flag
79             INTO   l_enabled
80             FROM   BSC_TAB_VIEWS_B
81             WHERE  tab_id =p_tab_id
82             AND    tab_view_id = p_tab_view_id;
83 
84       END IF;
85 
86       RETURN  l_enabled;
87 
88       --DBMS_OUTPUT.PUT_LINE\n('l_enabled-->'|| l_enabled);
89 
90 END  get_enabled_flag_for_View;
91 
92 /***************************************************************************
93  This function validates if particular view exist for the tab or not.
94  if not then the count will be 0 otherwise it will be greater than 0
95 
96 
97 /***************************************************************************/
98 
99 
100 FUNCTION Validate_Tab_View
101 (
102     p_tab_id         IN    NUMBER
103    ,p_tab_view_id    IN    NUMBER
104 ) RETURN NUMBER
105 IS
106 l_count             NUMBER;
107 BEGIN
108 
109         SELECT COUNT(0)
110         INTO l_count
111         FROM BSC_TAB_VIEWS_B
112         WHERE tab_id = p_tab_id
113         AND  tab_view_id =p_tab_view_id;
114 
115         RETURN l_count;
116 
117 END Validate_Tab_View;
118 
119 /*******************************************************************************
120  Decription :- This procedure will Assign the custom views for the tab.
121                It means it will set the enabled_flag =1 in BSC_TAB_VIEWS_B table
122                for tree view, detail_view and custom views.
123                For scorecard view, strategy map view it will set KPI_MODEL =1
124                and BSC_MODEL =1 in BSC_TABS_B table.
125  Input      :- Comma separated views ids which needs to be Assigned.
126  Created by :- ashankar 27-Oct-2003
127 /*******************************************************************************/
128 
129 
130 PROCEDURE Assign_Cust_Views
131 (    p_commit                 IN              VARCHAR2 := FND_API.G_FALSE
132     ,p_tab_id                 IN              NUMBER
133     ,p_assign_views           IN              VARCHAR2
134     ,x_return_status          OUT    NOCOPY   VARCHAR2
135     ,x_msg_count              OUT    NOCOPY   NUMBER
136     ,x_msg_data               OUT    NOCOPY   VARCHAR2
137  )IS
138    l_count                    NUMBER;
139    l_cust_views               VARCHAR2(32000);
140    l_cust_View                VARCHAR2(10);
141    l_Tab_Rec                  BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
142    l_Tab_View_Rec             BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
143    l_tab_view_id              NUMBER;
144  BEGIN
145   FND_MSG_PUB.Initialize;
146   x_return_status := FND_API.G_RET_STS_SUCCESS;
147 
148   IF (p_tab_id IS NOT NULL) THEN
149 
150        -- Bug #3236356
151        l_count := get_Tab_Id_Count(p_tab_id);
152 
153        IF(l_count =0) THEN
154             FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
155             FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', p_tab_id);
156         FND_MSG_PUB.ADD;
157             RAISE FND_API.G_EXC_ERROR;
158        END IF;
159   ELSE
160        FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
161        FND_MSG_PUB.ADD;
162        RAISE FND_API.G_EXC_ERROR;
163   END IF;
164 
165       IF(p_assign_views IS NOT NULL) THEN
166          l_cust_views := p_assign_views;
167         WHILE (Is_More(  p_cust_Views   =>  l_cust_views
168                         ,p_cust_View    =>  l_cust_View)
169               ) LOOP
170                 l_tab_view_id := TO_NUMBER(l_cust_View);
171 
172                 IF(l_tab_view_id>-1 AND l_tab_view_id<2) THEN
173 
174                     l_Tab_Rec.Bsc_Tab_Id := p_tab_id;
175 
176                     IF(l_tab_view_id =0) THEN
177                         l_Tab_Rec.Bsc_Kpi_Model :=1;
178                     ELSE
179                         l_Tab_Rec.Bsc_Bsc_Model :=1;
180                     END IF;
181 
182                     BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View
183                     (
184                       p_Tab_Rec      => l_Tab_Rec
185                      ,x_return_status => x_return_status
186                      ,x_msg_count    => x_msg_count
187                      ,x_msg_data     => x_msg_data
188                     );
189                      IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
190                         ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_default_View Failed: at BSC_CUSTOM_VIEW_PVT.Assign_Cust_Views <'||x_msg_data||'>');
191                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
192                      END IF;
193 
194                 ELSE
195                     l_Tab_View_Rec.Bsc_Tab_Id := p_tab_id;
196                     l_Tab_View_Rec.Bsc_Tab_View_Id := l_tab_view_id;
197                     l_Tab_View_Rec.Bsc_Enabled_Flag :=1;
198 
199                     -- VALIDATE FOR -2 AND -1 that whether the record for it exists or not.
200                     --If no records exists then no need to insert the record into the data base
201                     -- just skip it.
202                     l_count := -1;
203                     IF (l_Tab_View_Rec.Bsc_Tab_View_Id < 0) THEN
204                         l_count := BSC_CUSTOM_VIEW_PVT.Validate_Tab_View
205                                     (
206                                         p_tab_id        => l_Tab_View_Rec.Bsc_Tab_Id
207                                       , p_tab_view_id   => l_Tab_View_Rec.Bsc_Tab_View_Id
208                                     );
209 
210                     END IF;
211                     IF ((l_count = -1) OR (l_count > 0)) THEN
212                         BSC_CUSTOM_VIEW_PVT.Update_Tab_View
213                          (
214                              p_Tab_View_Rec  => l_Tab_View_Rec
215                             ,x_return_status => x_return_status
216                             ,x_msg_count     => x_msg_count
217                             ,x_msg_data      => x_msg_data
218                          );
219                          IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
220                             ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_Tab_View Failed: at BSC_CUSTOM_VIEW_PVT.Assign_Cust_Views <'||x_msg_data||'>');
221                             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
222                          END IF;
223                        END IF;
224                    END IF;
225             END LOOP;
226       END IF;
227 
228 EXCEPTION
229  WHEN FND_API.G_EXC_ERROR THEN
230    IF (x_msg_data IS NULL) THEN
231       FND_MSG_PUB.Count_And_Get
232                   (    p_encoded   =>  FND_API.G_FALSE
233                       ,p_count     =>  x_msg_count
234                       ,p_data      =>  x_msg_data
235           );
236     END IF;
237 
238    ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
239    x_return_status :=  FND_API.G_RET_STS_ERROR;
240 
241      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
242       IF (x_msg_data IS NULL) THEN
243         FND_MSG_PUB.Count_And_Get
244             (      p_encoded   =>  FND_API.G_FALSE
245                 ,  p_count     =>  x_msg_count
246                 ,  p_data      =>  x_msg_data
247             );
248       END IF;
249 
250       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
251       ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
252 
253      WHEN NO_DATA_FOUND THEN
254       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
255       IF (x_msg_data IS NOT NULL) THEN
256         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
257       ELSE
258         x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
259       END IF;
260 
261       ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
262 
263      WHEN OTHERS THEN
264       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
265       IF (x_msg_data IS NOT NULL) THEN
266         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
267       ELSE
268         x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
269       END IF;
270 
271       ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
272  END Assign_Cust_Views;
273 
274 /*******************************************************************************
275  Decription :- This procedure will unassign the custom views for the tab.
276                It means it will set the enabled_flag =0 in BSC_TAB_VIEWS_B table
277                for tree view, detail_view and custom views.
278                For scorecard view, strategy map view it will set KPI_MODEL =0
279                and BSC_MODEL =0 in BSC_TABS_B table.
280  Input      :- Comma separated views ids which needs to be unassigned.
281  Created by :- ashankar 23-Oct-2003
282 /*******************************************************************************/
283 
284 PROCEDURE Unassign_Cust_Views
285 (    p_commit                 IN              VARCHAR2 := FND_API.G_FALSE
286     ,p_tab_id                 IN              NUMBER
287     ,p_unassign_views         IN              VARCHAR2
288     ,x_return_status          OUT    NOCOPY   VARCHAR2
289     ,x_msg_count              OUT    NOCOPY   NUMBER
290     ,x_msg_data               OUT    NOCOPY   VARCHAR2
291  )IS
292 
293    l_count                    NUMBER;
294    l_cust_views               VARCHAR2(32000);
295    l_cust_View                VARCHAR2(10);
296    l_Tab_Rec                  BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
297    l_Tab_View_Rec             BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
298    l_tab_view_id              NUMBER;
299  BEGIN
300      FND_MSG_PUB.Initialize;
301      x_return_status := FND_API.G_RET_STS_SUCCESS;
302 
303        IF (p_tab_id IS NOT NULL) THEN
304            -- Bug #3236356
305            l_count := get_Tab_Id_Count(p_tab_id);
306 
307            IF(l_count =0) THEN
308                 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
309                 FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', p_tab_id);
310                 FND_MSG_PUB.ADD;
311                 RAISE FND_API.G_EXC_ERROR;
312            END IF;
313        ELSE
314             FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
315             FND_MSG_PUB.ADD;
316             RAISE FND_API.G_EXC_ERROR;
317        END IF;
318 
319       IF(p_unassign_views IS NOT NULL) THEN
320         l_cust_Views := p_unassign_views;
321         WHILE (Is_More(  p_cust_Views   =>  l_cust_views
322                         ,p_cust_View    =>  l_cust_View)
323               ) LOOP
324               l_tab_view_id := TO_NUMBER(l_cust_View);
325 
326               ----DBMS_OUTPUT.PUT_LINE\n('  l_tab_view_id--> '|| l_tab_view_id) ;
327 
328               IF(l_tab_view_id>-1 AND l_tab_view_id<2) THEN
329 
330                     l_Tab_Rec.Bsc_Tab_Id := p_tab_id;
331                 IF(l_tab_view_id =0) THEN
332                     l_Tab_Rec.Bsc_Kpi_Model :=0;
333                 ELSE
334                     l_Tab_Rec.Bsc_Bsc_Model :=0;
335                 END IF;
336 
337                 ----DBMS_OUTPUT.PUT_LINE\n(' inside if l_tab_view_id--> '|| l_tab_view_id) ;
338                 BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View
339                 (
340                      p_Tab_Rec       => l_Tab_Rec
341                     ,x_return_status => x_return_status
342                     ,x_msg_count     => x_msg_count
343                     ,x_msg_data      => x_msg_data
344                 );
345                  IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
346                         ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_default_View Failed: at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views <'||x_msg_data||'>');
347                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
348                   END IF;
349 
350               ELSE
351 
352                 ----DBMS_OUTPUT.PUT_LINE\n(' outside if l_tab_view_id--> '|| l_tab_view_id) ;
353                 l_Tab_View_Rec.Bsc_Tab_Id       := p_tab_id;
354                 l_Tab_View_Rec.Bsc_Tab_View_Id  := l_tab_view_id;
355                 l_Tab_View_Rec.Bsc_Enabled_Flag := 0;
356 
357                 -- Check if the records are there for the tab view id -2 and -1.
358                 -- if not then create a record for -2 and -1 and setthe enabled flag to 0
359                 IF (l_Tab_View_Rec.Bsc_Tab_View_Id < 0) THEN
360                     l_count := BSC_CUSTOM_VIEW_PVT.Validate_Tab_View
361                                 (
362                                     p_tab_id        => l_Tab_View_Rec.Bsc_Tab_Id
363                                   , p_tab_view_id   => l_Tab_View_Rec.Bsc_Tab_View_Id
364                                 );
365 
366                   IF  (l_count = 0) THEN
367 
368                     IF (l_Tab_View_Rec.Bsc_Tab_View_Id =-1) THEN
369 
370                        IF (BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DETAILED_VIEW') IS NOT NULL)THEN
371                         l_Tab_View_Rec.Bsc_Name := BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DETAILED_VIEW');
372                         l_Tab_View_Rec.Bsc_Help := l_Tab_View_Rec.Bsc_Name;
373                        ELSE
374                         l_Tab_View_Rec.Bsc_Name := 'Detailed View';
375                         l_Tab_View_Rec.Bsc_Help := l_Tab_View_Rec.Bsc_Name;
376                        END IF;
377 
378                     ELSE
379 
380                        IF (BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'TREE_VIEW') IS NOT NULL)THEN
384                        l_Tab_View_Rec.Bsc_Name  := 'Tree View';
381                         l_Tab_View_Rec.Bsc_Name := BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'TREE_VIEW');
382                         l_Tab_View_Rec.Bsc_Help := l_Tab_View_Rec.Bsc_Name;
383                        ELSE
385                        l_Tab_View_Rec.Bsc_Help  := l_Tab_View_Rec.Bsc_Name;
386                        END IF;
387                     END IF;
388 
389                     BSC_CUSTOM_VIEW_PVT.Create_Tab_View
390                      (
391                          p_Tab_View_Rec  => l_Tab_View_Rec
392                         ,x_return_status => x_return_status
393                         ,x_msg_count     => x_msg_count
394                         ,x_msg_data      => x_msg_data
395                      );
396                      IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
397                           ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_Tab_View Failed: at BSC_CUSTOM_VIEW_PVT.Create_Tab_View <'||x_msg_data||'>');
398                           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
399                       END IF;
400                    END IF;
401                 END IF;
402 
403                 BSC_CUSTOM_VIEW_PVT.Update_Tab_View
404                  (
405                      p_Tab_View_Rec  => l_Tab_View_Rec
406                     ,x_return_status => x_return_status
407                     ,x_msg_count     => x_msg_count
408                     ,x_msg_data      => x_msg_data
409                  );
410                  IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
411                       ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_Tab_View Failed: at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views <'||x_msg_data||'>');
412                       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
413                  END IF;
414               END IF;
415            END LOOP;
416       END IF;
417 
418  EXCEPTION
419     WHEN FND_API.G_EXC_ERROR THEN
420         IF (x_msg_data IS NULL) THEN
421         FND_MSG_PUB.Count_And_Get
422         (      p_encoded   =>  FND_API.G_FALSE
423             ,  p_count     =>  x_msg_count
424             ,  p_data      =>  x_msg_data
425         );
426     END IF;
427 
428     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
429     x_return_status :=  FND_API.G_RET_STS_ERROR;
430 
431     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
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     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
441 
442     WHEN NO_DATA_FOUND THEN
443         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
444         IF (x_msg_data IS NOT NULL) THEN
445             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
446         ELSE
447             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
448         END IF;
449         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
450 
451     WHEN OTHERS THEN
452         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
453         IF (x_msg_data IS NOT NULL) THEN
454             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
455         ELSE
456             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
457         END IF;
458         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
459  END  Unassign_Cust_Views;
460 
461 /******************************************************************************************
462   This procedure will do the following.
463   For the current tab what views need to be shown.
464   All the assign_Views which are coming from the UI should be visible in the popdown list
465   in IViewer and shown as seleceted in the table.
466   The default view needs to be updated in BSC_TABS_B.
467   If scorecard view and startegy map view are enabled then they should go into
468   BSC_TABS_B COLUMNS KPI_MODEL and BSC_MODEL.
469   For other views like Tree View/Detail View and other custom views should be
470   updated in BSC_TAB_VIEWS_B with enabled flag set to 1/0.
471 
472   if user unassigns all the views we have to set scorecard view as default.
473   The default view should be updated in the last only.
474   if we are trying to set the default view of the view which is disabled then we have to throw
475   the exception.
476 
477 /******************************************************************************************/
478 
479 
480 PROCEDURE Assign_Unassign_Views(
481     p_commit             IN              VARCHAR2 := FND_API.G_FALSE
482    ,p_tab_id             IN              NUMBER
483    ,p_default_value      IN              NUMBER
484    ,p_assign_views       IN              VARCHAR2
485    ,p_unassign_views     IN              VARCHAR2
486    ,x_return_status      OUT    NOCOPY   VARCHAR2
487    ,x_msg_count          OUT    NOCOPY   NUMBER
488    ,x_msg_data           OUT    NOCOPY   VARCHAR2
489 )IS
490   l_count                    NUMBER;
491   l_Tab_Rec                  BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
495    x_return_status := FND_API.G_RET_STS_SUCCESS;
492   l_Tab_View_Rec             BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
493 BEGIN
494    FND_MSG_PUB.Initialize;
496 
497     IF (p_tab_id IS NULL) THEN
498        FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
499        FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'TAB_ID'), TRUE);
500        FND_MSG_PUB.ADD;
501        RAISE FND_API.G_EXC_ERROR;
502     END IF;
503 
504     IF (p_default_value IS NULL) THEN
505        FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_DEFAULT_ID');
506        FND_MESSAGE.SET_TOKEN('BSC_DEF_ID', BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DEFAULT_TAB_ID'), TRUE);
507        FND_MSG_PUB.ADD;
508        RAISE FND_API.G_EXC_ERROR;
509     END IF;
510 
511     -- call the unassign first and then assign the views APIS.
512 
513     --DBMS_OUTPUT.PUT_LINE\n('p_tab_id--->' || p_tab_id);
514     --DBMS_OUTPUT.PUT_LINE\n('p_default_value--->' || p_default_value);
515     --DBMS_OUTPUT.PUT_LINE\n('p_assign_views--->' || p_assign_views);
516     --DBMS_OUTPUT.PUT_LINE\n('p_unassign_views--->' || p_unassign_views);
517 
518     IF (p_unassign_views IS NOT NULL) THEN
519 
520         BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views
521     (    p_commit                =>  FND_API.G_FALSE
522         ,p_tab_id                =>  p_tab_id
523         ,p_unassign_views        =>  p_unassign_views
524         ,x_return_status         =>  x_return_status
525         ,x_msg_count             =>  x_msg_count
526         ,x_msg_data              =>  x_msg_data
527         );
528 
529         IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
530          ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Assign_Unassign_Views Failed: at BSC_CUSTOM_VIEW_PVT.Assign_Unassign_Views');
531      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
532         END IF;
533     END IF;
534 
535     --DBMS_OUTPUT.PUT_LINE\n('aFTER SC_CUSTOM_VIEW_PVT.Unassign_Cust_Views');
536     -- call the assign view API
537 
538     IF (p_assign_views IS NOT NULL) THEN
539 
540      BSC_CUSTOM_VIEW_PVT.Assign_Cust_Views
541      (    p_commit                =>  FND_API.G_FALSE
542          ,p_tab_id                =>  p_tab_id
543          ,p_assign_views          =>  p_assign_views
544          ,x_return_status         =>  x_return_status
545          ,x_msg_count             =>  x_msg_count
546          ,x_msg_data              =>  x_msg_data
547       );
548 
549       IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
550         ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Assign_Cust_Views Failed: at BSC_CUSTOM_VIEW_PVT.Assign_Cust_Views');
551         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
552       END IF;
553     END IF;
554     --DBMS_OUTPUT.PUT_LINE\n('aFTER SC_CUSTOM_VIEW_PVT.Assign_Cust_Views');
555 
556     --Now set the default view.
557     --Check if the view we are going to set as default has enabled flag set to 1.
558      IF (p_default_value < 0) THEN
559 
560            l_Tab_View_Rec.Bsc_Tab_Id        := p_tab_id;
561            l_Tab_View_Rec.Bsc_Tab_View_Id   := p_default_value ;
562            l_Tab_View_Rec.Bsc_Enabled_Flag  := 1;
563 
564            l_count := BSC_CUSTOM_VIEW_PVT.Validate_Tab_View
565                       (
566                          p_tab_id       => l_Tab_View_Rec.Bsc_Tab_Id
567                        , p_tab_view_id  => l_Tab_View_Rec.Bsc_Tab_View_Id
568                       );
569 
570            IF  (l_count = 0) THEN
571               IF (l_Tab_View_Rec.Bsc_Tab_View_Id =-1) THEN
572                   l_Tab_View_Rec.Bsc_Name := BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'DETAILED_VIEW');
573               ELSE
574                   l_Tab_View_Rec.Bsc_Name := BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'TREE_VIEW');
575               END IF;
576 
577               l_Tab_View_Rec.Bsc_Help := l_Tab_View_Rec.Bsc_Name;
578 
579               BSC_CUSTOM_VIEW_PVT.Create_Tab_View
580                (
581                  p_Tab_View_Rec    => l_Tab_View_Rec
582                 ,x_return_status   => x_return_status
583                 ,x_msg_count       => x_msg_count
584                 ,x_msg_data        => x_msg_data
585                );
586               IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
587                  ----DBMS_OUTPUT.PUT_LINE\n('BSC_CUSTOM_VIEW_PVT.Update_Tab_View Failed: at BSC_CUSTOM_VIEW_PVT.Create_Tab_View <'||x_msg_data||'>');
588                RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
589              END IF;
590            END IF;
591      END IF;
592 
593     l_count :=  BSC_CUSTOM_VIEW_PVT.get_enabled_flag_for_View
594             (
595                 p_tab_id        => p_tab_id
596               , p_tab_view_id   => p_default_value
597             );
598 
599     IF(l_count=0) THEN
600         FND_MESSAGE.SET_NAME('BSC','BSC_NOTSET_DEFAULT_ID');
601         FND_MSG_PUB.ADD;
602         RAISE FND_API.G_EXC_ERROR;
603     END IF;
604 
605     l_Tab_Rec.Bsc_Tab_Id        := p_tab_id;
606     l_Tab_Rec.Bsc_Default_Model := p_default_value;
607     l_Tab_Rec.Bsc_Last_Update_Date := SYSDATE;
608 
609     BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View
610     (
611          p_Tab_Rec       => l_Tab_Rec
612         ,x_return_status => x_return_status
613         ,x_msg_count     => x_msg_count
614         ,x_msg_data      => x_msg_data
615     );
619     WHEN FND_API.G_EXC_ERROR THEN
616 
617 
618 EXCEPTION
620         IF (x_msg_data IS NULL) THEN
621         FND_MSG_PUB.Count_And_Get
622         (      p_encoded   =>  FND_API.G_FALSE
623             ,  p_count     =>  x_msg_count
624             ,  p_data      =>  x_msg_data
625         );
626     END IF;
627 
628     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
629     x_return_status :=  FND_API.G_RET_STS_ERROR;
630 
631     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
632         IF (x_msg_data IS NULL) THEN
633           FND_MSG_PUB.Count_And_Get
634            (   p_encoded   =>  FND_API.G_FALSE
635             ,  p_count     =>  x_msg_count
636             ,  p_data      =>  x_msg_data
637             );
638         END IF;
639     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
640     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
641 
642     WHEN NO_DATA_FOUND THEN
643         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
644         IF (x_msg_data IS NOT NULL) THEN
645             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
646         ELSE
647             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
648         END IF;
649         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
650 
651     WHEN OTHERS THEN
652         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
653         IF (x_msg_data IS NOT NULL) THEN
654             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
655         ELSE
656             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Unassign_Cust_Views ';
657         END IF;
658         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
659 END Assign_Unassign_Views;
660 
661 /******************************************************************************************
662   This procedure will create a new record into the BSC_TAB_VIEWS_B and BSC_TAB_VIEWS_TL table.
663 
664 /******************************************************************************************/
665 
666 PROCEDURE Create_Tab_View
667 (
668      p_commit           IN              VARCHAR2 := FND_API.G_FALSE
669     ,p_Tab_View_Rec     IN              BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type
670     ,x_return_status    OUT NOCOPY      VARCHAR2
671     ,x_msg_count        OUT NOCOPY      NUMBER
672     ,x_msg_data         OUT NOCOPY      VARCHAR2
673 )IS
674   l_Tab_View_Rec        BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
675   l_count               NUMBER;
676 BEGIN
677     SAVEPOINT CreateTabView;
678     FND_MSG_PUB.Initialize;
679     x_return_status := FND_API.G_RET_STS_SUCCESS;
680 
681     l_Tab_View_Rec := p_Tab_View_Rec;
682 
683     IF (l_Tab_View_Rec.Bsc_Tab_Id IS NOT NULL) THEN
684             -- Bug #3236356
685             l_count := get_Tab_Id_Count(l_Tab_View_Rec.Bsc_Tab_Id);
686 
687             IF(l_count =0) THEN
688                 FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
689                 FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', l_Tab_View_Rec.Bsc_Tab_Id);
690                 FND_MSG_PUB.ADD;
691                 RAISE FND_API.G_EXC_ERROR;
692             END IF;
693     ELSE
694                 FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
695                 FND_MSG_PUB.ADD;
696                 RAISE FND_API.G_EXC_ERROR;
697     END IF;
698 
699 
700     INSERT INTO BSC_TAB_VIEWS_B
701                     (    tab_id
702                         ,tab_view_id
703                         ,enabled_flag
704                         ,created_by
705                         ,creation_date
706                         ,last_updated_by
707                         ,last_update_date
708                         ,last_update_login
709                      )VALUES
710                       (    l_Tab_View_Rec.Bsc_Tab_Id
711                           ,l_Tab_View_Rec.Bsc_Tab_View_Id
712                           ,l_Tab_View_Rec.Bsc_Enabled_Flag
713                           ,fnd_global.USER_ID
714                           ,SYSDATE
715                           ,fnd_global.USER_ID
716                           ,SYSDATE
717                           ,fnd_global.LOGIN_ID
718                         );
719 
720      INSERT INTO BSC_TAB_VIEWS_TL
721                     (    tab_id
722                         ,tab_view_id
723                         ,language
724                         ,source_lang
725                         ,name
726                         ,help
727                         ,created_by
728                         ,creation_date
729                         ,last_updated_by
730                         ,last_update_date
731                         ,last_update_login
732                       )
733                       SELECT  l_Tab_View_Rec.Bsc_Tab_Id
734                              ,l_Tab_View_Rec.Bsc_Tab_View_Id
735                              ,L.LANGUAGE_CODE
736                              ,USERENV('LANG')
737                              ,l_Tab_View_Rec.Bsc_Name
738                              ,l_Tab_View_Rec.Bsc_Help
739                              ,fnd_global.USER_ID
740                              ,sysdate
741                              ,fnd_global.USER_ID
745                       WHERE L.INSTALLED_FLAG IN ('I', 'B')
742                              ,sysdate
743                              ,fnd_global.LOGIN_ID
744                       FROM  FND_LANGUAGES L
746                       AND NOT EXISTS
747                       ( SELECT NULL
748                         FROM   BSC_TAB_VIEWS_TL T
749                         WHERE  T.tab_id     = l_Tab_View_Rec.Bsc_Tab_Id
750                         AND  T.tab_view_id  = l_Tab_View_Rec.Bsc_Tab_View_Id
751                         AND  T.LANGUAGE     = L.LANGUAGE_CODE);
752 
753 
754     IF (p_commit =FND_API.G_TRUE) THEN
755        commit;
756     END IF;
757 
758 EXCEPTION
759    WHEN FND_API.G_EXC_ERROR THEN
760        ROLLBACK TO CreateTabView;
761        x_return_status := FND_API.G_RET_STS_ERROR;
762        FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
763                                  ,p_data   =>      x_msg_data);
764        RAISE;
765 
766      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
767        ROLLBACK TO CreateTabView;
768        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
769        FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
770                                  ,p_data     =>      x_msg_data);
771        RAISE;
772 
773      WHEN NO_DATA_FOUND THEN
774       ROLLBACK TO CreateTabView;
775        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
776        IF (x_msg_data IS NOT NULL) THEN
777             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Retrieve_Tab';
778        ELSE
779            x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Retrieve_Tab';
780        END IF;
781        RAISE;
782      WHEN OTHERS THEN
783       ROLLBACK TO CreateTabView;
784        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
785        IF (x_msg_data IS NOT NULL) THEN
786           x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Create_Tab_View';
787        ELSE
788           x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Create_Tab_View';
789        END IF;
790        RAISE;
791 
792 END Create_Tab_View;
793 
794 
795 /****************************************************************************
796  This procedure retrives the data corresponding to the particula tab_id
797  It will be used when we will be updating the tab record.
798 /*****************************************************************************/
799 
800 PROCEDURE Retrieve_Tab(
801   p_Tab_Rec             IN              BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type
802  ,x_Tab_Rec             IN OUT NOCOPY   BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type
803  ,x_return_status       OUT NOCOPY      VARCHAR2
804  ,x_msg_count           OUT NOCOPY      NUMBER
805  ,x_msg_data            OUT NOCOPY      VARCHAR2
806 ) IS
807 BEGIN
808      FND_MSG_PUB.Initialize;
809      x_return_status := FND_API.G_RET_STS_SUCCESS;
810 
811         SELECT   a.tab_id
812                 ,a.kpi_model
813                 ,a.bsc_model
814                 ,a.cross_model
815                 ,a.default_model
816                 ,a.zoom_factor
817                 ,a.created_by
818                 ,a.creation_date
819                 ,a.last_updated_by
820                 ,a.last_update_date
821                 ,a.last_update_login
822                 ,a.tab_index
823                 ,a.parent_tab_id
824                 ,a.owner_id
825                 ,a.short_name
826        INTO      x_Tab_Rec.Bsc_Tab_Id
827                 ,x_Tab_Rec.Bsc_Kpi_Model
828                 ,x_Tab_Rec.Bsc_Bsc_Model
829                 ,x_Tab_Rec.Bsc_Cross_Model
830                 ,x_Tab_Rec.Bsc_Default_Model
831                 ,x_Tab_Rec.Bsc_Zoom_Factor
832                 ,x_Tab_Rec.Bsc_Created_By
833                 ,x_Tab_Rec.Bsc_Creation_Date
834                 ,x_Tab_Rec.Bsc_Last_updated_By
835                 ,x_Tab_Rec.Bsc_Last_update_Date
836                 ,x_Tab_Rec.Bsc_Last_update_Login
837                 ,x_Tab_Rec.Bsc_Tab_Index
838                 ,x_Tab_Rec.Bsc_Parent_Tab_id
839                 ,x_Tab_Rec.Bsc_Owner_Id
840                 ,x_Tab_Rec.Bsc_Short_Name
841       FROM      BSC_TABS_B a
842       WHERE     a.tab_id = p_Tab_Rec.Bsc_Tab_Id;
843 
844 EXCEPTION
845   WHEN FND_API.G_EXC_ERROR THEN
846     x_return_status := FND_API.G_RET_STS_ERROR;
847     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
848                               ,p_data   =>      x_msg_data);
849     RAISE;
850   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
851     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
852     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
853                               ,p_data     =>      x_msg_data);
854     RAISE;
855   WHEN NO_DATA_FOUND THEN
856     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
857     IF (x_msg_data IS NOT NULL) THEN
858         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Retrieve_Tab ';
859     ELSE
860        x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Retrieve_Tab ';
861     END IF;
862     RAISE;
863   WHEN OTHERS THEN
864    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
865    IF (x_msg_data IS NOT NULL) THEN
866        x_msg_data      :=  x_msg_data||' -> BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
867    ELSE
871 END Retrieve_Tab;
868        x_msg_data      :=  SQLERRM||' at BSC_BIS_KPI_MEAS_PUB.Update_Dim_Set ';
869    END IF;
870    RAISE;
872 
873 /*************************************************************************************
874  Description :- This procedure retrieves the data from BSC_TAB_VIEWS_B table.
875  Input       :- p_Tab_View_Rec.Bsc_Tab_Id and p_Tab_View_Rec.Bsc_Tab_View_Id
876  OutPut      :- x_Tab_View_Rec
877  Created By  :- ashankar 23-Oct-2003
878 /**************************************************************************************/
879 
880 PROCEDURE Retrieve_Tab_View
881 (    p_Tab_View_Rec         IN              BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type
882     ,x_Tab_View_Rec         IN OUT NOCOPY   BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type
883     ,x_return_status        OUT NOCOPY      VARCHAR2
884     ,x_msg_count            OUT NOCOPY      NUMBER
885     ,x_msg_data             OUT NOCOPY      VARCHAR2
886 )IS
887 BEGIN
888      FND_MSG_PUB.Initialize;
889      x_return_status := FND_API.G_RET_STS_SUCCESS;
890 
891       ----DBMS_OUTPUT.PUT_LINE\n('p_Tab_View_Rec.Bsc_Tab_Id --->' ||  p_Tab_View_Rec.Bsc_Tab_Id);
892       ----DBMS_OUTPUT.PUT_LINE\n('p_Tab_View_Rec.Bsc_Tab_View_Id --->' ||  p_Tab_View_Rec.Bsc_Tab_View_Id);
893 
894      SELECT   tab_id
895              ,tab_view_id
896              ,enabled_flag
897              ,created_by
898              ,creation_date
899              ,last_updated_by
900              ,last_update_date
901              ,last_update_login
902      INTO     x_Tab_View_Rec.Bsc_Tab_Id
903              ,x_Tab_View_Rec.Bsc_Tab_View_Id
904              ,x_Tab_View_Rec.Bsc_Enabled_Flag
905              ,x_Tab_View_Rec.Bsc_Created_By
906              ,x_Tab_View_Rec.Bsc_Creation_Date
907              ,x_Tab_View_Rec.Bsc_Last_Updated_By
908              ,x_Tab_View_Rec.Bsc_Last_Update_Date
909              ,x_Tab_View_Rec.Bsc_Last_Update_Login
910      FROM    BSC_TAB_VIEWS_B
911      WHERE   tab_id = p_Tab_View_Rec.Bsc_Tab_Id
912      AND     tab_view_id =p_Tab_View_Rec.Bsc_Tab_View_Id;
913 
914 EXCEPTION
915   WHEN FND_API.G_EXC_ERROR THEN
916     x_return_status := FND_API.G_RET_STS_ERROR;
917     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
918                               ,p_data   =>      x_msg_data);
919     RAISE;
920   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
921     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
922     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
923                               ,p_data     =>      x_msg_data);
924     RAISE;
925   WHEN NO_DATA_FOUND THEN
926     ----DBMS_OUTPUT.PUT_LINE\n('insdei exception p_Tab_View_Rec.Bsc_Tab_Id --->' ||  p_Tab_View_Rec.Bsc_Tab_Id);
927     ----DBMS_OUTPUT.PUT_LINE\n('p_Tab_View_Rec.Bsc_Tab_View_Id --->' ||  p_Tab_View_Rec.Bsc_Tab_View_Id);x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
928     IF (x_msg_data IS NOT NULL) THEN
929         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Retrieve_Tab_View ';
930     ELSE
931        x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Retrieve_Tab_View ';
932     END IF;
933     RAISE;
934   WHEN OTHERS THEN
935    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
936    IF (x_msg_data IS NOT NULL) THEN
937        x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Retrieve_Tab_View ';
938    ELSE
939        x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Retrieve_Tab_View ';
940    END IF;
941    RAISE;
942 END Retrieve_Tab_View;
943 
944 
945 /*****************************************************************************************
946   Description :- This procedure updates the BSC_TABS_B table.
947                  This procedure should be called from assign and unassign views.
948   Input       :- p_tab_View_rec
949   Ouput       :- Updates the BSC_TABS_B
950   Created By  :- ashankar 23-Oct-2003
951 /******************************************************************************************/
952 PROCEDURE Update_Tab_View
953 (    p_commit              IN               VARCHAR2 := FND_API.G_FALSE
954     ,p_Tab_View_Rec        IN               BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type
955     ,x_return_status       OUT NOCOPY       VARCHAR2
956     ,x_msg_count           OUT NOCOPY       NUMBER
957     ,x_msg_data            OUT NOCOPY       VARCHAR2
958 
959 )IS
960     l_Tab_View_Rec         BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
961     l_Tab_View_Out_Rec     BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
962     l_count                NUMBER;
963 
964 BEGIN
965     SAVEPOINT UpdateTabView;
966     FND_MSG_PUB.Initialize;
967     x_return_status := FND_API.G_RET_STS_SUCCESS;
968 
969     l_Tab_View_Rec.Bsc_Tab_Id := p_Tab_View_Rec.Bsc_Tab_Id;
970 
971     IF(l_Tab_View_Rec.Bsc_Tab_Id IS NOT NULL) THEN
972           -- Bug #3236356
973           l_count := get_Tab_Id_Count(l_Tab_View_Rec.Bsc_Tab_Id);
974 
975           IF(l_count =0) THEN
976             FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
977             FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', l_Tab_View_Rec.Bsc_Tab_Id);
978             FND_MSG_PUB.ADD;
979             RAISE FND_API.G_EXC_ERROR;
980           END IF;
981 
982     ELSE
983 
984           FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
985           FND_MSG_PUB.ADD;
986           RAISE FND_API.G_EXC_ERROR;
987 
988     END IF;
989 
993     ----DBMS_OUTPUT.PUT_LINE\n('l_Tab_View_Rec.Bsc_Tab_Id --->'||l_Tab_View_Rec.Bsc_Tab_Id );
990     l_Tab_View_Rec.Bsc_Tab_View_Id := p_Tab_View_Rec.Bsc_Tab_View_Id;
991 
992     ----DBMS_OUTPUT.PUT_LINE\n('l_Tab_View_Rec.Bsc_Tab_View_Id-->' || l_Tab_View_Rec.Bsc_Tab_View_Id);
994 
995     Retrieve_Tab_View
996     (
997          p_Tab_View_Rec     => l_Tab_View_Rec
998         ,x_Tab_View_Rec     => l_Tab_View_Out_Rec
999         ,x_return_status    => x_return_status
1000         ,x_msg_count        => x_msg_count
1001         ,x_msg_data         => x_msg_data
1002 
1003     );
1004 
1005     IF (p_Tab_View_Rec.Bsc_Enabled_Flag IS NOT NULL) THEN
1006         l_Tab_View_Out_Rec.Bsc_Enabled_Flag := p_Tab_View_Rec.Bsc_Enabled_Flag;
1007     END IF;
1008 
1009     IF (p_Tab_View_Rec.Bsc_Created_By IS NOT NULL) THEN
1010         l_Tab_View_Out_Rec.Bsc_Created_By := p_Tab_View_Rec.Bsc_Created_By;
1011     END IF;
1012 
1013     IF (p_Tab_View_Rec.Bsc_Creation_Date IS NOT NULL) THEN
1014         l_Tab_View_Out_Rec.Bsc_Creation_Date := p_Tab_View_Rec.Bsc_Creation_Date;
1015     END IF;
1016 
1017     IF (p_Tab_View_Rec.Bsc_Last_Updated_By IS NOT NULL) THEN
1018         l_Tab_View_Out_Rec.Bsc_Last_Updated_By := p_Tab_View_Rec.Bsc_Last_Updated_By;
1019     END IF;
1020 
1021     IF (p_Tab_View_Rec.Bsc_Last_Update_Date IS NOT NULL) THEN
1022         l_Tab_View_Out_Rec.Bsc_Last_Update_Date := p_Tab_View_Rec.Bsc_Last_Update_Date;
1023     END IF;
1024 
1025     IF (p_Tab_View_Rec.Bsc_Last_Update_Login IS NOT NULL) THEN
1026         l_Tab_View_Out_Rec.Bsc_Last_Update_Login := p_Tab_View_Rec.Bsc_Last_Update_Login;
1027     END IF;
1028 
1029     UPDATE BSC_TAB_VIEWS_B
1030     SET    Enabled_Flag= l_Tab_View_Out_Rec.Bsc_Enabled_Flag
1031           ,Created_By= l_Tab_View_Out_Rec.Bsc_Created_By
1032           ,Creation_Date=l_Tab_View_Out_Rec.Bsc_Creation_Date
1033           ,Last_Updated_By= l_Tab_View_Out_Rec.Bsc_Last_Updated_By
1034           ,Last_Update_Date= l_Tab_View_Out_Rec.Bsc_Last_Update_Date
1035           ,Last_Update_Login=l_Tab_View_Out_Rec.Bsc_Last_Update_Login
1036    WHERE  tab_id =l_Tab_View_Rec.Bsc_Tab_Id
1037    AND    tab_view_id = l_Tab_View_Rec.Bsc_Tab_View_Id;
1038 
1039    IF (p_commit = FND_API.G_TRUE) THEN
1040         commit;
1041    END IF;
1042 
1043  EXCEPTION
1044 
1045  WHEN FND_API.G_EXC_ERROR THEN
1046         ROLLBACK TO UpdateTabView;
1047         IF (x_msg_data IS NULL) THEN
1048             FND_MSG_PUB.Count_And_Get
1049             (      p_encoded   =>  FND_API.G_FALSE
1050                ,   p_count     =>  x_msg_count
1051                ,   p_data      =>  x_msg_data
1052             );
1053         END IF;
1054         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1055         x_return_status :=  FND_API.G_RET_STS_ERROR;
1056     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1057         ROLLBACK TO UpdateTabView;
1058         IF (x_msg_data IS NULL) THEN
1059             FND_MSG_PUB.Count_And_Get
1060             (      p_encoded   =>  FND_API.G_FALSE
1061                ,   p_count     =>  x_msg_count
1062                ,   p_data      =>  x_msg_data
1063             );
1064         END IF;
1065         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1066         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1067     WHEN NO_DATA_FOUND THEN
1068         ROLLBACK TO UpdateTabView;
1069         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1070         IF (x_msg_data IS NOT NULL) THEN
1071             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Update_Tab_View ';
1072         ELSE
1073             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Update_Tab_View ';
1074         END IF;
1075         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1076     WHEN OTHERS THEN
1077         ROLLBACK TO UpdateTabView;
1078         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1079         IF (x_msg_data IS NOT NULL) THEN
1080             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Update_Tab_View ';
1081         ELSE
1082             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Update_Tab_View ';
1083         END IF;
1084         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
1085 END Update_Tab_View;
1086 
1087 
1088 /****************************************************************************
1089  This procedure is used to update the default view of the tab.
1090  User can change the default view of the tab.
1091 /*****************************************************************************/
1092 
1093 
1094 PROCEDURE Update_Tab_default_View
1095 (
1096      p_commit              IN               VARCHAR2 := FND_API.G_FALSE
1097     ,p_Tab_Rec             IN               BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type
1098     ,x_return_status       OUT NOCOPY       VARCHAR2
1099     ,x_msg_count           OUT NOCOPY       NUMBER
1100     ,x_msg_data            OUT NOCOPY       VARCHAR2
1101 
1102 )IS
1103 
1104 l_Tab_Ret_Rec               BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
1105 l_Tab_Rec                   BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
1106 l_count                     NUMBER;
1107 
1108 BEGIN
1109     SAVEPOINT UpdateTabdefaultView;
1110     FND_MSG_PUB.Initialize;
1111     x_return_status := FND_API.G_RET_STS_SUCCESS;
1112 
1113     l_Tab_Rec.Bsc_Tab_Id := p_Tab_Rec.Bsc_Tab_Id;
1114 
1115     IF(l_Tab_Rec.Bsc_Tab_Id IS NOT NULL) THEN
1116 
1120       IF(l_count =0) THEN
1117       -- Bug #3236356
1118       l_count := get_Tab_Id_Count(l_Tab_Rec.Bsc_Tab_Id);
1119 
1121         FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
1122         FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', l_Tab_Rec.Bsc_Tab_Id);
1123         FND_MSG_PUB.ADD;
1124         RAISE FND_API.G_EXC_ERROR;
1125       END IF;
1126 
1127     ELSE
1128 
1129         FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
1130         FND_MSG_PUB.ADD;
1131         RAISE FND_API.G_EXC_ERROR;
1132 
1133     END IF;
1134 
1135         Retrieve_Tab
1136         (
1137              p_Tab_Rec          => l_Tab_Rec
1138             ,x_Tab_Rec          => l_Tab_Ret_Rec
1139             ,x_return_status    => x_return_status
1140             ,x_msg_count        => x_msg_count
1141             ,x_msg_data         => x_msg_data
1142 
1143         );
1144 
1145     IF (p_Tab_Rec.Bsc_Kpi_Model IS NOT NULL) THEN
1146         l_Tab_Ret_Rec.Bsc_Kpi_Model := p_Tab_Rec.Bsc_Kpi_Model;
1147     END IF;
1148 
1149     IF (p_Tab_Rec.Bsc_Bsc_Model IS NOT NULL) THEN
1150         l_Tab_Ret_Rec.Bsc_Bsc_Model :=  p_Tab_Rec.Bsc_Bsc_Model;
1151     END IF;
1152 
1153     IF (p_Tab_Rec.Bsc_Cross_Model IS NOT NULL) THEN
1154          l_Tab_Ret_Rec.Bsc_Cross_Model := p_Tab_Rec.Bsc_Cross_Model;
1155     END IF;
1156 
1157     IF (p_Tab_Rec.Bsc_Default_Model IS NOT NULL) THEN
1158          l_Tab_Ret_Rec.Bsc_Default_Model := p_Tab_Rec.Bsc_Default_Model;
1159     END IF;
1160 
1161     IF (p_Tab_Rec.Bsc_Zoom_Factor IS NOT NULL) THEN
1162          l_Tab_Ret_Rec.Bsc_Zoom_Factor :=  p_Tab_Rec.Bsc_Zoom_Factor;
1163     END IF;
1164 
1165     IF (p_Tab_Rec.Bsc_Created_By IS NOT NULL) THEN
1166          l_Tab_Ret_Rec.Bsc_Created_By :=  p_Tab_Rec.Bsc_Created_By;
1167     END IF;
1168 
1169     IF (p_Tab_Rec.Bsc_Creation_Date IS NOT NULL) THEN
1170         l_Tab_Ret_Rec.Bsc_Creation_Date :=  p_Tab_Rec.Bsc_Creation_Date;
1171     END IF;
1172 
1173     IF (p_Tab_Rec.Bsc_Last_updated_By IS NOT NULL) THEN
1174         l_Tab_Ret_Rec.Bsc_Last_updated_By :=  p_Tab_Rec.Bsc_Last_updated_By;
1175     END IF;
1176 
1177     IF (p_Tab_Rec.Bsc_Last_update_Date IS NOT NULL) THEN
1178         l_Tab_Ret_Rec.Bsc_Last_update_Date :=  p_Tab_Rec.Bsc_Last_update_Date ;
1179     END IF;
1180 
1181     IF (p_Tab_Rec.Bsc_Last_update_Login IS NOT NULL) THEN
1182         l_Tab_Ret_Rec.Bsc_Last_update_Login :=  p_Tab_Rec.Bsc_Last_update_Login;
1183     END IF;
1184 
1185     IF (p_Tab_Rec.Bsc_Tab_Index IS NOT NULL) THEN
1186         l_Tab_Ret_Rec.Bsc_Tab_Index :=  p_Tab_Rec.Bsc_Tab_Index;
1187     END IF;
1188 
1189     IF (p_Tab_Rec.Bsc_Parent_Tab_id IS NOT NULL) THEN
1190         l_Tab_Ret_Rec.Bsc_Parent_Tab_id :=  p_Tab_Rec.Bsc_Parent_Tab_id;
1191     END IF;
1192 
1193     IF (p_Tab_Rec.Bsc_Owner_Id IS NOT NULL) THEN
1194         l_Tab_Ret_Rec.Bsc_Owner_Id   :=  p_Tab_Rec.Bsc_Owner_Id ;
1195     END IF;
1196 
1197     IF (p_Tab_Rec.Bsc_Short_Name IS NOT NULL) THEN
1198         l_Tab_Ret_Rec.Bsc_Short_Name    :=  p_Tab_Rec.Bsc_Short_Name;
1199     END IF;
1200 
1201     UPDATE   BSC_TABS_B
1202     SET      Kpi_Model=l_Tab_Ret_Rec.Bsc_Kpi_Model
1203             ,Bsc_Model=l_Tab_Ret_Rec.Bsc_Bsc_Model
1204             ,Cross_Model=l_Tab_Ret_Rec.Bsc_Cross_Model
1205             ,Default_Model=l_Tab_Ret_Rec.Bsc_Default_Model
1206             ,Zoom_Factor=l_Tab_Ret_Rec.Bsc_Zoom_Factor
1207             ,Created_By =l_Tab_Ret_Rec.Bsc_Created_By
1208             ,Creation_Date =l_Tab_Ret_Rec.Bsc_Creation_Date
1209             ,Last_updated_By=l_Tab_Ret_Rec.Bsc_Last_updated_By
1210             ,Last_update_Date=l_Tab_Ret_Rec.Bsc_Last_update_Date
1211             ,Last_update_Login=l_Tab_Ret_Rec.Bsc_Last_update_Login
1212             ,Tab_Index=l_Tab_Ret_Rec.Bsc_Tab_Index
1213             ,Parent_Tab_id=l_Tab_Ret_Rec.Bsc_Parent_Tab_id
1214             ,Owner_Id=l_Tab_Ret_Rec.Bsc_Owner_Id
1215             ,Short_Name=l_Tab_Ret_Rec.Bsc_Short_Name
1216     WHERE   Tab_Id = l_Tab_Ret_Rec.Bsc_Tab_Id;
1217 
1218     IF (p_commit = FND_API.G_TRUE) THEN
1219         commit;
1220     END IF;
1221 
1222 EXCEPTION
1223 
1224     WHEN FND_API.G_EXC_ERROR THEN
1225         ROLLBACK TO UpdateTabdefaultView;
1226         IF (x_msg_data IS NULL) THEN
1227             FND_MSG_PUB.Count_And_Get
1228             (      p_encoded   =>  FND_API.G_FALSE
1229                ,   p_count     =>  x_msg_count
1230                ,   p_data      =>  x_msg_data
1231             );
1232         END IF;
1233         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1234         x_return_status :=  FND_API.G_RET_STS_ERROR;
1235     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1236         ROLLBACK TO UpdateTabdefaultView;
1237         IF (x_msg_data IS NULL) THEN
1238             FND_MSG_PUB.Count_And_Get
1239             (      p_encoded   =>  FND_API.G_FALSE
1240                ,   p_count     =>  x_msg_count
1241                ,   p_data      =>  x_msg_data
1242             );
1243         END IF;
1244         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1245         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1246     WHEN NO_DATA_FOUND THEN
1247         ROLLBACK TO UpdateTabdefaultView;
1248         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1249         IF (x_msg_data IS NOT NULL) THEN
1253         END IF;
1250             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View ';
1251         ELSE
1252             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View ';
1254         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1255     WHEN OTHERS THEN
1256         ROLLBACK TO UpdateTabdefaultView;
1257         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1258         IF (x_msg_data IS NOT NULL) THEN
1259             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View ';
1260         ELSE
1261             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View ';
1262         END IF;
1263         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
1264 
1265 END Update_Tab_default_View;
1266 
1267 /*******************************************************************************
1268  This fucntion returns the default view which is attached with the tab id.
1269  INPUT   :- p_Tab_ID
1270  OutPut  :- default_view_id
1271 /********************************************************************************/
1272 
1273 FUNCTION get_Tab_Default_View
1274 (
1275     p_Tab_Id    IN    BSC_TABS_B.tab_id%TYPE
1276 )RETURN NUMBER
1277 IS
1278  l_default_view       BSC_TABS_B.default_model%TYPE;
1279 BEGIN
1280 
1281     SELECT default_model
1282     INTO   l_default_view
1283     FROM   BSC_TABS_B
1284     WHERE  tab_id = p_Tab_Id;
1285 
1286     RETURN l_default_view;
1287 
1288 END get_Tab_Default_View;
1289 
1290 
1291 
1292 /*****************************************************************************
1293  Name :- delete_Custom_View
1294  Description :- This procedure will delete the custom view from bsc_tab_views_b table.
1295                 It will do the following validations.
1296                 1. Before deleting the custom view it will verify if it is the default
1297                    view which is being deleted. If yes then it will set scorecard view
1298                    as default view and delete the custom view.
1299                    Otherwise it will update the last update date of the tab.
1300                    This is required for Granular locking purpose.
1301 
1302                 The entry will be deleted from the following tables.
1303                 1.BSC_TAB_VIEWS_B
1304                 2.BSC_TAB_VIEWS_TL
1305                 3.BSC_TAB_VIEW_KPI_TL
1306                 4.BSC_TAB_VIEW_LABELS_B
1307                 5.BSC_TAB_VIEW_LABELS_TL
1308                 6.BSC_SYS_IMAGES_MAP_TL
1309                 7.BSC_SYS_IMAGES (need for cascading)
1310                 8.Form functoins defined in each custom view upon creation in BSC_CUSTOM_VIEW_UI_WRAPPER.create_function
1311 
1312 Input :- p_CustView_Rec
1313 Creator/Modified by :- ashankar 10-NOV-2003
1314  /******************************************************************************/
1315 PROCEDURE delete_Custom_View
1316 (
1317    p_commit                     IN              VARCHAR2   := FND_API.G_FALSE
1318   ,p_CustView_Rec               IN              BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type
1319   ,x_return_status              OUT    NOCOPY   VARCHAR2
1320   ,x_msg_count                  OUT    NOCOPY   NUMBER
1321   ,x_msg_data                   OUT    NOCOPY   VARCHAR2
1322 ) IS
1323 
1324   l_CustView_Rec                BSC_CUSTOM_VIEW_PUB.Bsc_Cust_View_Rec_Type;
1325   l_count                       NUMBER;
1326   l_Tab_Rec                     BSC_CUSTOM_VIEW_PUB.Bsc_Tab_Rec_Type;
1327   l_default_view                BSC_TABS_B.default_model%TYPE;
1328 
1329   CURSOR  c_sys_images IS
1330   SELECT  image_id
1331   FROM    BSC_SYS_IMAGES
1332   WHERE   image_id NOT IN
1333   (     SELECT DISTINCT(image_id)
1334         FROM   BSC_SYS_IMAGES_MAP_TL);
1335 
1336 BEGIN
1337 
1338     SAVEPOINT deleteCustomView;
1339     ----DBMS_OUTPUT.PUT_LINE\n('Entered inside BSC_CUSTOM_VIEW_PUB.delete_Custom_View ');
1340     FND_MSG_PUB.Initialize;
1341 
1342     l_CustView_Rec.Bsc_Tab_Id        := p_CustView_Rec.Bsc_Tab_Id;
1343     l_CustView_Rec.Bsc_Tab_View_Id   := p_CustView_Rec.Bsc_Tab_View_Id;
1344 
1345     IF(l_CustView_Rec.Bsc_Tab_Id IS NOT NULL) THEN
1346       -- Bug #3236356
1347       l_count := get_Tab_Id_Count(l_CustView_Rec.Bsc_Tab_Id);
1348 
1349       IF(l_count =0) THEN
1350         FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
1351         FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', l_CustView_Rec.Bsc_Tab_Id);
1352         FND_MSG_PUB.ADD;
1353         RAISE FND_API.G_EXC_ERROR;
1354       END IF;
1355 
1356     ELSE
1357 
1358         FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
1359         FND_MSG_PUB.ADD;
1360         RAISE FND_API.G_EXC_ERROR;
1361 
1362     END IF;
1363 
1364     IF((l_CustView_Rec.Bsc_Tab_Id IS NOT NULL) AND (l_CustView_Rec.Bsc_Tab_View_Id IS NOT NULL)) THEN
1365 
1366         SELECT count(0)
1367         INTO l_count
1368         FROM bsc_tab_views_b
1369         WHERE tab_id = l_CustView_Rec.Bsc_Tab_Id
1370         AND tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1371 
1372         IF (l_count =0) THEN
1373             FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
1374             FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', l_CustView_Rec.Bsc_Tab_Id);
1375             FND_MSG_PUB.ADD;
1376             RAISE FND_API.G_EXC_ERROR;
1377         END IF;
1378 
1382 
1379         -- Before deleting the custom view check if it was the default view with the scorecard.
1380         -- if yes then set the default view to scorecard view and then delete the custom view.
1381         -- FIRST SET THE ENABLED FLAG TO SCORECARD CARD VIEW AND ALSO SET IT AS DEFAULT
1383 
1384         l_Tab_Rec.Bsc_Tab_Id := l_CustView_Rec.Bsc_Tab_Id;
1385         l_default_view       := get_Tab_Default_View(l_Tab_Rec.Bsc_Tab_Id);
1386 
1387         IF (l_default_view = l_CustView_Rec.Bsc_Tab_View_Id) THEN
1388 
1389             l_Tab_Rec.Bsc_Default_Model :=0;
1390             l_Tab_Rec.Bsc_Kpi_Model :=1;
1391             l_Tab_Rec.Bsc_Last_update_Date := SYSDATE;
1392 
1393             BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View
1394             (
1395                  p_Tab_Rec       => l_Tab_Rec
1396                 ,x_return_status => x_return_status
1397                 ,x_msg_count     => x_msg_count
1398                 ,x_msg_data      => x_msg_data
1399             );
1400         ELSE
1401 
1402            l_Tab_Rec.Bsc_Last_update_Date := SYSDATE;
1403 
1404            BSC_CUSTOM_VIEW_PVT.Update_Tab_default_View
1405             (
1406                  p_Tab_Rec       => l_Tab_Rec
1407                 ,x_return_status => x_return_status
1408                 ,x_msg_count     => x_msg_count
1409                 ,x_msg_data      => x_msg_data
1410             );
1411         END IF;
1412 
1413         -- delete form function defined for custom view
1414         BSC_CUSTOM_VIEW_UI_WRAPPER.delete_function( p_tab_id        => l_CustView_Rec.Bsc_Tab_Id
1415                                                    ,p_tab_view_id   => l_CustView_Rec.Bsc_Tab_View_Id
1416                                                    ,x_return_status => x_return_status
1417                                                    ,x_msg_count     => x_msg_count
1418                                                    ,x_msg_data      => x_msg_data);
1419 
1420         -- now delete the tab view id
1421 
1422         DELETE
1423         FROM    BSC_TAB_VIEWS_B
1424         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1425         AND     tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1426 
1427         DELETE
1428         FROM    BSC_TAB_VIEWS_TL
1429         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1430         AND     tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1431 
1432 
1433         DELETE
1434         FROM    BSC_TAB_VIEW_KPI_TL
1435         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1436         AND     tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1437 
1438         DELETE
1439         FROM    BSC_TAB_VIEW_LABELS_B
1440         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1441         AND     tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1442 
1443         DELETE
1444         FROM    BSC_TAB_VIEW_LABELS_B
1445         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1446         AND     label_type = 1
1447         AND     link_id = l_CustView_Rec.Bsc_Tab_View_Id;
1448 
1449         DELETE
1450         FROM    BSC_TAB_VIEW_LABELS_TL
1451         WHERE   tab_id = l_CustView_Rec.Bsc_Tab_Id
1452         AND     tab_view_id = l_CustView_Rec.Bsc_Tab_View_Id;
1453 
1454 
1455         DELETE
1456         FROM    BSC_SYS_IMAGES_MAP_TL
1457         WHERE   SOURCE_TYPE =   1
1458         AND     SOURCE_CODE =   l_CustView_Rec.Bsc_Tab_Id
1459         AND     TYPE        =   l_CustView_Rec.Bsc_Tab_View_Id;
1460 
1461         -- now check if there are any unwanted images in the system and not being
1462         -- used by any of the scorecard then delete them
1463 
1464         FOR cd IN c_sys_images LOOP
1465           l_CustView_Rec.Bsc_Image_Id   :=  cd.image_id;
1466 
1467           DELETE
1468           FROM   BSC_SYS_IMAGES
1469           WHERE  IMAGE_ID   = l_CustView_Rec.Bsc_Image_Id;
1470 
1471         END LOOP;
1472     END IF;
1473 
1474 EXCEPTION
1475     WHEN FND_API.G_EXC_ERROR THEN
1476         ROLLBACK TO deleteCustomView;
1477     IF (x_msg_data IS NULL) THEN
1478         FND_MSG_PUB.Count_And_Get
1479         (      p_encoded   =>  FND_API.G_FALSE
1480             ,  p_count     =>  x_msg_count
1481             ,  p_data      =>  x_msg_data
1482         );
1483     END IF;
1484 
1485     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1486     x_return_status :=  FND_API.G_RET_STS_ERROR;
1487 
1488     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1489         ROLLBACK TO deleteCustomView;
1490         IF (x_msg_data IS NULL) THEN
1491             FND_MSG_PUB.Count_And_Get
1492             (      p_encoded   =>  FND_API.G_FALSE
1493                 ,  p_count     =>  x_msg_count
1494                 ,  p_data      =>  x_msg_data
1495             );
1496         END IF;
1497     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1498     ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1499 
1500     WHEN NO_DATA_FOUND THEN
1501         ROLLBACK TO deleteCustomView;
1502         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1503         IF (x_msg_data IS NOT NULL) THEN
1504             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PUB.delete_Custom_View ';
1505         ELSE
1506             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PUB.delete_Custom_View ';
1507         END IF;
1508         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1509 
1510     WHEN OTHERS THEN
1511         ROLLBACK TO deleteCustomView;
1512         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1513         IF (x_msg_data IS NOT NULL) THEN
1514             x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PUB.delete_Custom_View ';
1515         ELSE
1516             x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PUB.delete_Custom_View ';
1517         END IF;
1518         ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
1519 
1520 
1521 
1522 END delete_Custom_View;
1523 
1524 /*
1525   Added get_Tab_Id_Count for Bug #3236356
1526 */
1527 
1528 FUNCTION get_Tab_Id_Count
1529 (
1530   p_Tab_Id         IN NUMBER
1531 )RETURN NUMBER IS
1532   l_count   NUMBER := 0;
1533 BEGIN
1534 
1535    SELECT COUNT(0)
1536    INTO   l_count
1537    FROM   BSC_TABS_B
1538    WHERE  TAB_ID = p_Tab_Id;
1539 
1540    RETURN l_count;
1541 
1542 END get_Tab_Id_Count;
1543 
1544 
1545 /********************************************************************************
1546           DELETE CUSTOM VIEW LINKS
1547 /*******************************************************************************/
1548 
1549   PROCEDURE Delete_Custom_View_Links
1550   (
1551       p_commit                 IN              VARCHAR2  := FND_API.G_FALSE
1552     , p_tab_id                 IN              NUMBER
1553     , p_obj_id                 IN              NUMBER
1554     , x_return_status          OUT    NOCOPY   VARCHAR2
1555     , x_msg_count              OUT    NOCOPY   NUMBER
1556     , x_msg_data               OUT    NOCOPY   VARCHAR2
1557   ) IS
1558     l_Count     NUMBER;
1559 
1560     CURSOR c_CachedData IS
1561     SELECT tab_id,
1562            tab_view_id,
1563            label_id
1564     FROM   BSC_TAB_VIEW_LABELS_B
1565     WHERE  tab_id  = p_tab_id
1566     AND    link_id = p_obj_id;
1567 
1568   BEGIN
1569         SAVEPOINT DeleteCustomViewLinks;
1570         FND_MSG_PUB.Initialize;
1571 
1572         IF(p_tab_id IS NOT NULL) THEN
1573            l_count := get_Tab_Id_Count(p_tab_id);
1574 
1578               FND_MSG_PUB.ADD;
1575            IF(l_count =0) THEN
1576               FND_MESSAGE.SET_NAME('BSC','BSC_INVALID_SCORECARD_ID');
1577               FND_MESSAGE.SET_TOKEN('BSC_SCORECARD', p_tab_id);
1579               RAISE FND_API.G_EXC_ERROR;
1580            END IF;
1581         ELSE
1582            FND_MESSAGE.SET_NAME('BSC','BSC_NO_SCORECARD_ID_ENTERED');
1583            FND_MSG_PUB.ADD;
1584            RAISE FND_API.G_EXC_ERROR;
1585         END IF;
1586 
1587         l_Count := 0;
1588 
1589         SELECT COUNT(0)
1590         INTO  l_Count
1591         FROM  BSC_TAB_VIEW_KPI_VL
1592         WHERE Tab_Id = p_tab_id
1593         AND   Indicator = p_obj_id;
1594 
1595         IF(l_Count>0) THEN
1596 
1597           DELETE
1598           FROM    BSC_TAB_VIEW_KPI_TL
1599           WHERE   tab_id = p_tab_id
1600           AND     indicator = p_obj_id;
1601         END IF;
1602 
1603         /*********************************************
1604          After the Enhancement adding Actual and Change to the objectives
1605          the entries corresponding to Actual and Change labels were added in
1606          BSC_TAB_VIEW_LABLES_B and BSC_TAB_VIEW_LABLES_TL table with label_type
1607          as 4,5 and 6 corresponding to Objective label,Actual label and Change label.
1608 
1609          So when the objective is deleted we have to cascade these changes in
1610          BSC_TAB_VIEW_LABELS_B and _TL table.
1611 
1612          So following is the LOGIC
1613 
1614          To delete from TL table we need to cache the TAB_ID,TAB_VIEW_ID and LABEL_ID.
1615 
1616          To delete from _B table we need tab_id and LINK_ID
1617          *********************************************/
1618 
1619 
1620          FOR cd IN c_CachedData LOOP
1621             DELETE
1622             FROM    BSC_TAB_VIEW_LABELS_TL
1623             WHERE   tab_id      = cd.tab_id
1624             AND     tab_view_id = cd.tab_view_id
1625             AND     label_id    = cd.label_id;
1626          END LOOP;
1627 
1628             DELETE
1629             FROM   BSC_TAB_VIEW_LABELS_B
1630             WHERE  tab_id = p_tab_id
1631             AND    LINK_ID  =p_obj_id;
1632 
1633       IF (p_commit = FND_API.G_TRUE) THEN
1634        COMMIT;
1635       END IF;
1636 
1637 EXCEPTION
1638 
1639 WHEN FND_API.G_EXC_ERROR THEN
1640      ROLLBACK TO DeleteCustomViewLinks;
1641      IF (x_msg_data IS NULL) THEN
1642          FND_MSG_PUB.Count_And_Get
1643          (      p_encoded   =>  FND_API.G_FALSE
1644              ,  p_count     =>  x_msg_count
1645              ,  p_data      =>  x_msg_data
1646          );
1647      END IF;
1648 
1649      ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
1650      x_return_status :=  FND_API.G_RET_STS_ERROR;
1651 
1652 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1653     ROLLBACK TO DeleteCustomViewLinks;
1654     IF (x_msg_data IS NULL) THEN
1655          FND_MSG_PUB.Count_And_Get
1656         (    p_encoded   =>  FND_API.G_FALSE
1657           ,  p_count     =>  x_msg_count
1658           ,  p_data      =>  x_msg_data
1659          );
1660      END IF;
1661     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1662 ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
1663 
1664 WHEN NO_DATA_FOUND THEN
1665     ROLLBACK TO DeleteCustomViewLinks;
1666     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1667     IF (x_msg_data IS NOT NULL) THEN
1668         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Delete_Custom_View_Links ';
1669     ELSE
1670         x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Delete_Custom_View_Links ';
1671     END IF;
1672  ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION NO_DATA_FOUND '||x_msg_data);
1673 WHEN OTHERS THEN
1674     ROLLBACK TO DeleteCustomViewLinks;
1675     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1676      IF (x_msg_data IS NOT NULL) THEN
1677         x_msg_data      :=  x_msg_data||' -> BSC_CUSTOM_VIEW_PVT.Delete_Custom_View_Links ';
1678      ELSE
1679          x_msg_data      :=  SQLERRM||' at BSC_CUSTOM_VIEW_PVT.Delete_Custom_View_Links ';
1680     END IF;
1681 ----DBMS_OUTPUT.PUT_LINE\n('EXCEPTION OTHERS '||x_msg_data);
1682 END Delete_Custom_View_Links;
1683 
1684 END BSC_CUSTOM_VIEW_PVT;