DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_MULTI_USER_PVT

Source


1 package body BSC_MULTI_USER_PVT as
2 /* $Header: BSCVMUFB.pls 120.0 2005/06/01 17:00:01 appldev noship $*/
3 
4 
5 procedure Apply_Multi_User_Env(
6   p_obj_type            IN      varchar2
7  ,p_obj_id              IN      number := 0
8  ,p_obj_id2             IN      number := 0
9  ,p_obj_id3		IN	number := 0
10  ,p_obj_location        IN      varchar2 := 'DUMMY'
11  ,p_obj_action          IN      varchar2
12  ,p_time_stamp          IN      varchar2
13  ,x_return_status       OUT NOCOPY     varchar2
14  ,x_msg_count           OUT NOCOPY     number
15  ,x_msg_data            OUT NOCOPY     varchar2
16 ) is
17 
18 l_obj_action			varchar2(10) := null;
19 l_time_stamp			date;
20 
21 begin
22 
23   FND_MSG_PUB.Initialize;
24 
25 l_time_stamp := to_date(p_time_stamp, 'DD-MM-YYYY-HH24-MI-SS');
26 
27   x_return_status := null;
28 
29   if p_obj_type = 'TAB' and p_obj_action = 'LCK' then
30 
31     if p_obj_location = 'DETAILS' then
32       -- Lock for Details Scorecard Screen.
33      /* Tab_Details_Lock( p_obj_id
34                        ,x_return_status
35                        ,x_msg_count
36                        ,x_msg_data);*/
37 
38       -- Set flag to check time stamp.
39       l_obj_action := 'TST';
40 
41     elsif p_obj_location = 'DELETE' then
42       -- Lock for Delete Screen.
43       Tab_Delete_Lock( p_obj_id
44                       ,x_return_status
45                       ,x_msg_count
46                       ,x_msg_data);
47 
48       -- Set flag to check time stamp.
49       l_obj_action := 'TST';
50 
51     elsif p_obj_location = 'SELECT' then
52       -- Lock for Select Scorecard Item Screen.
53       Tab_Select_Items_Lock( p_obj_id
54                             ,x_return_status
55                             ,x_msg_count
56                             ,x_msg_data);
57 
58       -- Set flag to check time stamp.
59       l_obj_action := 'TST';
60 
61     end if;
62 
63   elsif p_obj_type = 'KPI' and p_obj_action = 'LCK' then
64 
65     if p_obj_location = 'ADDMEASURE' then
66 
67       Kpi_Lock( p_obj_id
68                ,x_return_status
69                ,x_msg_count
70                ,x_msg_data);
71 
72       -- Set flag to check time stamp.
73       l_obj_action := 'TST';
74 
75     elsif p_obj_location = 'OPTION' then
76 
77       Option_Lock( p_obj_id
78                   ,p_obj_id2
79                   ,p_obj_id3
80                   ,x_return_status
81                   ,x_msg_count
82                   ,x_msg_data);
83 
84       -- Set flag to check time stamp.
85       l_obj_action := 'TST';
86 
87     end if;
88 
89   elsif p_obj_type = 'SYSTEM' and p_obj_action = 'TST' then
90     if p_obj_location = 'CREATE' then
91       -- Time stamp check for Create Scorecard button.
92       Check_System_Change( 'LOCK_SYSTEM'
93                           ,l_time_stamp
94                           ,x_msg_count
95                           ,x_return_status
96                           ,x_msg_data);
97     end if;
98   elsif p_obj_type = 'DIM_LEVEL' and p_obj_action = 'LCK' then
99 
100       Dim_Level_Lock( p_obj_id
101                ,p_obj_location    /*  Short Name  */
102                ,x_return_status
103                ,x_msg_count
104                ,x_msg_data);
105 
106   elsif p_obj_action = 'TST' then
107 
108     l_obj_action := 'TST';
109 
110   end if;
111 
112   if (l_obj_action = 'TST'  and x_return_status is null) then
113     Have_Time_Stamps_Changed( p_obj_type
114                              ,p_obj_id
115                              ,l_time_stamp
116                              ,x_return_status
117                              ,x_msg_count
118                              ,x_msg_data);
119   end if;
120 
121   if x_return_status is null then
122     x_return_status := 'S';
123   end if;
124 
125 
126 EXCEPTION
127   WHEN FND_API.G_EXC_ERROR THEN
128     rollback;
129     FND_MSG_PUB.Initialize;
130     x_return_status := FND_API.G_RET_STS_ERROR;
131     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
132                               ,p_data   =>      x_msg_data);
133   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
134     rollback;
135     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
136     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
137                               ,p_data     =>      x_msg_data);
138   WHEN NO_DATA_FOUND THEN
139     rollback;
140     x_return_status := FND_API.G_RET_STS_ERROR;
141     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
142                               ,p_data     =>      x_msg_data);
143   WHEN OTHERS THEN
144     rollback;
145     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
146     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
147                               ,p_data     =>      x_msg_data);
148 
149 end Apply_Multi_User_Env;
150 
151 /************************************************************************************
152 ************************************************************************************/
153 
154 procedure Have_Time_Stamps_Changed(
155   p_obj_type		IN	varchar2
156  ,p_obj_id		IN	number
157  ,p_time_stamp		IN	date
158  ,x_return_status       OUT NOCOPY     varchar2
159  ,x_msg_count           OUT NOCOPY     number
160  ,x_msg_data            OUT NOCOPY     varchar2
161 ) is
162 
163 begin
164 
165 
166   if p_obj_type = 'TAB' then
167     Check_Tab_Time_Stamp( p_obj_id
168                          ,p_time_stamp
169                          ,x_return_status
170                          ,x_msg_count
171                          ,x_msg_data);
172   elsif p_obj_type = 'KPI' then
173     Check_Kpi_Time_Stamp( p_obj_id
174                          ,p_time_stamp
175                          ,x_return_status
176                          ,x_msg_count
177                          ,x_msg_data);
178   else
179     RAISE FND_API.G_EXC_ERROR;
180   end if;
181 
182 EXCEPTION
183   WHEN FND_API.G_EXC_ERROR THEN
184     rollback;
185     FND_MSG_PUB.Initialize;
186     --x_return_status := FND_API.G_RET_STS_ERROR;
187     x_return_status := 'C';
188     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
189                               ,p_data   =>      x_msg_data);
190   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
191     rollback;
192     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
193     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
194                               ,p_data     =>      x_msg_data);
195   WHEN NO_DATA_FOUND THEN
196     rollback;
197     x_return_status := FND_API.G_RET_STS_ERROR;
198     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
199                               ,p_data     =>      x_msg_data);
200   WHEN OTHERS THEN
201     rollback;
202     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
203     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
204                               ,p_data     =>      x_msg_data);
205 
206 end Have_Time_Stamps_Changed;
207 
208 /************************************************************************************
209 ************************************************************************************/
210 
211 procedure Check_Tab_Time_Stamp(
212   p_obj_id		IN	number
213  ,p_time_stamp	 	IN	date
214  ,x_return_status       OUT NOCOPY     varchar2
215  ,x_msg_count           OUT NOCOPY     number
216  ,x_msg_data            OUT NOCOPY     varchar2
217 ) is
218 
219 l_time_stamp			date;
220 
221 begin
222 
223   select last_update_date
224     into l_time_stamp
225     from BSC_TABS_B
226    where tab_id = p_obj_id;
227 
228   if l_time_stamp > p_time_stamp then
229     RAISE FND_API.G_EXC_ERROR;
230   end if;
231 
232 EXCEPTION
233   WHEN FND_API.G_EXC_ERROR THEN
234     rollback;
235     x_return_status := 'C';
236     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
237                               ,p_data   =>      x_msg_data);
238   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
239     rollback;
240     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
241     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
242                               ,p_data     =>      x_msg_data);
243   WHEN NO_DATA_FOUND THEN
244     rollback;
245     x_return_status := 'D';
246     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
247                               ,p_data     =>      x_msg_data);
248   WHEN OTHERS THEN
249     rollback;
250     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
251     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
252                               ,p_data     =>      x_msg_data);
253 
254 end Check_Tab_Time_Stamp;
255 
256 /************************************************************************************
257 ************************************************************************************/
258 
259 procedure Check_Kpi_Time_Stamp(
260   p_obj_id		IN	number
261  ,p_time_stamp		IN	date
262  ,x_return_status       OUT NOCOPY     varchar2
263  ,x_msg_count           OUT NOCOPY     number
264  ,x_msg_data            OUT NOCOPY     varchar2
265 ) is
266 
267 l_time_stamp			date;
268 
269 begin
270 
271   select last_update_date
272     into l_time_stamp
273     from BSC_KPIS_B
274    where indicator = p_obj_id;
275 
276 /*
277   if l_time_stamp > p_time_stamp then
278     RAISE FND_API.G_EXC_ERROR;
279   end if;
280 */
281   if to_date(l_time_stamp, 'DD-MM-YYYY-HH24-MI-SS') > to_date(p_time_stamp, 'DD-MM-YYYY-HH24-MI-SS') then
282     RAISE FND_API.G_EXC_ERROR;
283   end if;
284 
285 
286 EXCEPTION
287   WHEN FND_API.G_EXC_ERROR THEN
288     rollback;
289     x_return_status := 'C';
290     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
291                               ,p_data   =>      x_msg_data);
292   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
293     rollback;
294     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
295     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
296                               ,p_data     =>      x_msg_data);
297   WHEN NO_DATA_FOUND THEN
298     rollback;
299     x_return_status := 'D';
300     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
301                               ,p_data     =>      x_msg_data);
302   WHEN OTHERS THEN
303     rollback;
304     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
305     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
306                               ,p_data     =>      x_msg_data);
307 
308 end Check_Kpi_Time_Stamp;
309 
310 /************************************************************************************
311 ************************************************************************************/
312 
313 procedure Check_System_Change(
314   p_property_code       IN      varchar2
315  ,p_time_stamp          IN      date
316  ,x_return_status       OUT NOCOPY     varchar2
317  ,x_msg_count           OUT NOCOPY     number
318  ,x_msg_data            OUT NOCOPY     varchar2
319 ) is
320 
321 l_time_stamp                    date;
322 
323 begin
324 
325   select last_update_date
326     into l_time_stamp
327     from BSC_SYS_INIT
328    where property_code = p_property_code;
329 
330   if l_time_stamp > p_time_stamp then
331     RAISE FND_API.G_EXC_ERROR;
332   end if;
333 
334 
335 EXCEPTION
336   WHEN FND_API.G_EXC_ERROR THEN
337     rollback;
338     x_return_status := 'C';
339     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
340                               ,p_data   =>      x_msg_data);
341   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
342     rollback;
343     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
344     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
345                               ,p_data     =>      x_msg_data);
346   WHEN NO_DATA_FOUND THEN
347     rollback;
348     x_return_status := FND_API.G_RET_STS_ERROR;
349     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
350                               ,p_data     =>      x_msg_data);
351   WHEN OTHERS THEN
352     rollback;
353     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
354     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
355                               ,p_data     =>      x_msg_data);
356 
357 end Check_System_Change;
358 
359 /************************************************************************************
360 ************************************************************************************/
361 
362 procedure Tab_Details_Lock(
363   p_obj_id			number
364  ,x_return_status       OUT NOCOPY     varchar2
365  ,x_msg_count           OUT NOCOPY     number
366  ,x_msg_data            OUT NOCOPY     varchar2
367 ) is
368 
369 -- This procedure locks name for a given tab.
370 -- We lock name so no other "Details" nor "Delete" sessions access it.
371 
372 l_dummy1		BSC_TABS_TL.NAME%TYPE;
373 
374 begin
375 
376   select name
377     into l_dummy1
378     from BSC_TABS_TL
379    where tab_id = p_obj_id
380      and rownum < 2
381   for update nowait;
382 
383 EXCEPTION
384   WHEN FND_API.G_EXC_ERROR THEN
385 --    rollback;
386     x_return_status := FND_API.G_RET_STS_ERROR;
387     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
388                               ,p_data   =>      x_msg_data);
389   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
390 --    rollback;
391     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
392     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
393                               ,p_data     =>      x_msg_data);
394   WHEN NO_DATA_FOUND THEN
395 --    rollback;
396     x_return_status := 'D';
397 --    x_return_status := FND_API.G_RET_STS_ERROR;
398     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
399                               ,p_data     =>      x_msg_data);
400   WHEN OTHERS THEN
401 --    rollback;
402     if SQLCODE = -00054 then
403        FND_MESSAGE.SET_NAME('BSC','BSC_MUSERS_LOCKED_TAB');
404        FND_MSG_PUB.ADD;
405       x_return_status := 'L';
406       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
407                                 ,p_data     =>      x_msg_data);
408     else
409       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
410       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
411                                 ,p_data     =>      x_msg_data);
412       IF (x_msg_data IS NULL) THEN
413         x_msg_data      :=  SQLERRM||' at BSC_MULTI_USER_PVT.Tab_Details_Lock ';
414       END IF;
415     end if;
416 
417 end Tab_Details_Lock;
418 
419 /************************************************************************************
420 ************************************************************************************/
421 
422 procedure Tab_Delete_Lock(
423   p_obj_id                      number
424  ,x_return_status       OUT NOCOPY     varchar2
425  ,x_msg_count           OUT NOCOPY     number
426  ,x_msg_data            OUT NOCOPY     varchar2
427 ) is
428 
429 -- This procedure locks tab_id for a given Tab.
430 -- We lock tab_id from BSC_TABS_B to prevent "Delete" and "Select Scorecard Items"
431 -- sessions to access the screen.
432 -- We lock name from BSC_TABS_B to lock out NOCOPY "Details".
433 
434 l_dummy1			number;
438 
435 l_dummy2			BSC_TABS_TL.NAME%TYPE;
436 
437 begin
439   select name
440     into l_dummy2
441     from BSC_TABS_TL
442    where tab_id = p_obj_id
443      and rownum < 2
444   for update nowait;
445 
446   select tab_id
447     into l_dummy1
448     from BSC_TABS_B
449    where tab_id = p_obj_id
450   for update nowait;
451 
452 
453 EXCEPTION
454   WHEN FND_API.G_EXC_ERROR THEN
455     rollback;
456     x_return_status := FND_API.G_RET_STS_ERROR;
457     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
458                               ,p_data   =>      x_msg_data);
459   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
460     rollback;
461     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
462     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
463                               ,p_data     =>      x_msg_data);
464   WHEN NO_DATA_FOUND THEN
465     rollback;
466     x_return_status := 'D';
467 --    x_return_status := FND_API.G_RET_STS_ERROR;
468     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
469                               ,p_data     =>      x_msg_data);
470   WHEN OTHERS THEN
471     rollback;
472     if SQLCODE = -00054 then
473       x_return_status := 'L';
474       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
475                                 ,p_data     =>      x_msg_data);
476     else
477       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
478       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
479                                 ,p_data     =>      x_msg_data);
480     end if;
481 
482 end Tab_Delete_Lock;
483 
484 /************************************************************************************
485 ************************************************************************************/
486 
487 procedure Tab_Select_Items_Lock(
488   p_obj_id              IN      number
489  ,x_return_status       OUT NOCOPY     varchar2
490  ,x_msg_count           OUT NOCOPY     number
491  ,x_msg_data            OUT NOCOPY     varchar2
492 ) is
493 
494 -- This procedure locks tab_id for a given Tab.
495 -- We lock tab_id from BSC_TABS_B to lock other "Select Scorecard Items"
496 -- sessions and to lock out NOCOPY "Delete".
497 
498 l_dummy1			number;
499 
500 begin
501 
502   select tab_id
503     into l_dummy1
504     from BSC_TABS_B
505    where tab_id = p_obj_id
506   for update nowait;
507 
508 EXCEPTION
509   WHEN FND_API.G_EXC_ERROR THEN
510     rollback;
511     x_return_status := FND_API.G_RET_STS_ERROR;
512     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
513                               ,p_data   =>      x_msg_data);
514   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
515     rollback;
516     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
517     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
518                               ,p_data     =>      x_msg_data);
519   WHEN NO_DATA_FOUND THEN
520     rollback;
521     x_return_status := 'D';
522 --    x_return_status := FND_API.G_RET_STS_ERROR;
523     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
524                               ,p_data     =>      x_msg_data);
525   WHEN OTHERS THEN
526     rollback;
527     if SQLCODE = -00054 then
528       x_return_status := 'L';
529       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
530                                 ,p_data     =>      x_msg_data);
531     else
532       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
533       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
534                                 ,p_data     =>      x_msg_data);
535     end if;
536 
537 end Tab_Select_Items_Lock;
538 
539 /************************************************************************************
540 ************************************************************************************/
541 
542 procedure Kpi_Lock(
543   p_obj_id                      number
544  ,x_return_status       OUT NOCOPY     varchar2
545  ,x_msg_count           OUT NOCOPY     number
546  ,x_msg_data            OUT NOCOPY     varchar2
547 ) is
548 
549 l_dummy1			number;
550 l_dummy2			varchar2(20);
551 
552 begin
553 
554   select indicator, property_code
555     into l_dummy1, l_dummy2
556     from bsc_kpi_properties
557    where property_code = 'LOCK_INDICATOR'
558      and indicator = p_obj_id
559      for update nowait;
560 
561   select indicator
562     into l_dummy1
563     from BSC_KPIS_B
564    where indicator = p_obj_id
565   for update nowait;
566 
567 EXCEPTION
568   WHEN FND_API.G_EXC_ERROR THEN
569     rollback;
570     x_return_status := FND_API.G_RET_STS_ERROR;
571     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
572                               ,p_data   =>      x_msg_data);
573   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
574     rollback;
575     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
576     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
577                               ,p_data     =>      x_msg_data);
578   WHEN NO_DATA_FOUND THEN
579     rollback;
580     x_return_status := 'D';
584   WHEN OTHERS THEN
581 --    x_return_status := FND_API.G_RET_STS_ERROR;
582     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
583                               ,p_data     =>      x_msg_data);
585     rollback;
586     if SQLCODE = -00054 then
587       x_return_status := 'L';
588       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
589                                 ,p_data     =>      x_msg_data);
590     else
591       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
592       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
593                                 ,p_data     =>      x_msg_data);
594     end if;
595 
596 end Kpi_Lock;
597 
598 /************************************************************************************
599 ************************************************************************************/
600 
601 procedure Option_Lock(
602   p_obj_id              IN      number
603  ,p_obj_id2             IN      number
604  ,p_obj_id3             IN      number
605  ,x_return_status       OUT NOCOPY     varchar2
606  ,x_msg_count           OUT NOCOPY     number
607  ,x_msg_data            OUT NOCOPY     varchar2
608 ) is
609 
610 l_dummy1			varchar2(50);
611 l_dummy2			varchar2(50);
612 
613 begin
614 
615   select indicator, property_code
616     into l_dummy1, l_dummy2
617     from bsc_kpi_properties
618    where property_code = 'LOCK_INDICATOR'
619      and indicator = p_obj_id
620      for update nowait;
621 
622 /*
623   select name
624     into l_dummy1
625     from BSC_KPI_ANALYSIS_OPTIONS_TL
626    where indicator = p_obj_id
627      and option_id = p_obj_id2
628      and analysis_group_id = p_obj_id3
629   for update nowait;
630 */
631 
632 EXCEPTION
633   WHEN FND_API.G_EXC_ERROR THEN
634     rollback;
635     x_return_status := FND_API.G_RET_STS_ERROR;
636     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
637                               ,p_data   =>      x_msg_data);
638   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
639     rollback;
640     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
641     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
642                               ,p_data     =>      x_msg_data);
643   WHEN NO_DATA_FOUND THEN
644     rollback;
645     x_return_status := 'D';
646 --    x_return_status := FND_API.G_RET_STS_ERROR;
647     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
648                               ,p_data     =>      x_msg_data);
649   WHEN OTHERS THEN
650     rollback;
651     if SQLCODE = -00054 then
652       x_return_status := 'L';
653       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
654                                 ,p_data     =>      x_msg_data);
655     else
656       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
657       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
658                                 ,p_data     =>      x_msg_data);
659     end if;
660 
661 end Option_Lock;
662 
663 /************************************************************************************
664 ************************************************************************************/
665 
666 procedure Dim_Level_Lock(
667   p_obj_id              IN      number
668  ,p_obj_shortName       IN      varchar2
669  ,x_return_status       OUT NOCOPY     varchar2
670  ,x_msg_count           OUT NOCOPY     number
671  ,x_msg_data            OUT NOCOPY     varchar2
672 ) is
673 
674 l_dummy				number;
675 
676 begin
677 
678  IF p_obj_id >= 0 and  (p_obj_shortName is null or  p_obj_shortName = '' or p_obj_shortName = 'DUMMY' )  then
679     select DIM_LEVEL_ID
680         into l_dummy
681         from BSC_SYS_DIM_LEVELS_B
682     where DIM_LEVEL_ID = p_obj_id
683     for update nowait;
684  else
685     select DIM_LEVEL_ID
686         into l_dummy
687         from BSC_SYS_DIM_LEVELS_B
688     where  upper(SHORT_NAME) = upper(p_obj_shortName)
689     for update nowait;
690  end if;
691 
692 
693 EXCEPTION
694   WHEN FND_API.G_EXC_ERROR THEN
695     rollback;
696     x_return_status := FND_API.G_RET_STS_ERROR;
697     FND_MSG_PUB.Count_And_Get( p_count  =>      x_msg_count
698                               ,p_data   =>      x_msg_data);
699   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
700     rollback;
701     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
702     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
703                               ,p_data     =>      x_msg_data);
704   WHEN NO_DATA_FOUND THEN
705     rollback;
706     x_return_status := 'D';
707 --    x_return_status := FND_API.G_RET_STS_ERROR;
708     FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
709                               ,p_data     =>      x_msg_data);
710   WHEN OTHERS THEN
711     rollback;
712     if SQLCODE = -00054 then
713       x_return_status := 'L';
714       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
715                                 ,p_data     =>      x_msg_data);
716     else
717       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
718       FND_MSG_PUB.Count_And_Get( p_count    =>      x_msg_count
719                                 ,p_data     =>      x_msg_data);
720     end if;
721 
722 end Dim_Level_Lock;
723 
724 /************************************************************************************
725 ************************************************************************************/
726 
727 end BSC_MULTI_USER_PVT;