DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIS_PAGE_PUB

Source


1 PACKAGE BODY BIS_PAGE_PUB  AS
2   /* $Header: BISPPGEB.pls 120.2 2005/08/11 22:56:26 ashankar noship $ */
3 ---  Copyright (c) 2000 Oracle Corporation, Redwood Shores, CA, USA
4 ---  All rights reserved.
5 ---
6 ---==========================================================================
7 ---  FILENAME
8 ---
9 ---     BISPPGEB.pls
10 ---
11 ---  DESCRIPTION
12 ---     Package Body File for Page transactions
13 ---
14 ---  NOTES
15 ---
16 ---  HISTORY
17 ---
18 ---  07-Oct-2003 mdamle     Created
19 ---  03-Feb-2004 mdamle     Change function name while migrating if different from internal name
20 ---  06-Feb-2004 mdamle     Remove AK Region Integration
21 ---  18-Jan-2005 rpenneru   Enh#4059160- Opening up FA in Designers          |
22 ---  29-Jan-2005 vtulasi   Enh#4102897- Increasing buffer size for function_name related variables
23 ---  21-MAR-2005 ankagarw   bug#4235732 - changing count(*) to count(1)      |
24 ---  13-JUL-2005 akoduri    Bug #4368221 Added the function Get_Custom_View_Name|
25 --   10-AUG-2005 ashankar   Bug #4548914 Added a new Function  Is_Simulatable_Cust_View |
26 ---===========================================================================
27 
28 procedure Create_Page_Region(
29  p_internal_name    IN VARCHAR2
30 ,p_application_id               IN NUMBER
31 ,p_title      IN VARCHAR2
32 ,p_page_function_name   IN VARCHAR2
33 ,x_page_id      OUT NOCOPY NUMBER
34 ,x_return_status                OUT NOCOPY VARCHAR2
35 ,x_msg_count                    OUT NOCOPY NUMBER
36 ,x_msg_data                     OUT NOCOPY VARCHAR2
37 ) is
38 
39 l_count   NUMBER;
40 l_parameters    FND_FORM_FUNCTIONS.Parameters%Type;
41 l_app_short_name VARCHAR2(30);
42 l_type    VARCHAR2(30);
43 begin
44 
45   fnd_msg_pub.initialize;
46 
47   begin
48     select BIS_COMMON_UTILS.getParameterValue(parameters, c_SOURCE_TYPE) into l_type
49     from fnd_form_functions
50     where function_name = p_page_function_name;
51   exception
52     when no_data_found then l_type := null;
53   end;
54 
55   if (l_type = c_FND_MENU) then
56     Migrate_Menu_To_MDS(
57       p_internal_name => p_internal_name,
58       p_application_id => p_application_id,
59       p_title => p_title,
60       p_page_function_name => p_page_function_name,
61       x_return_status => x_return_status,
62       x_msg_count => x_msg_count,
63       x_msg_data =>x_msg_data);
64 
65   else
66     -- Check if either Form Function or Region code exists.
67 
68     select count(1) into l_count
69     from fnd_form_functions
70     where function_name = p_internal_name;
71 
72     if (l_count = 0) then
73       select count(1) into l_count
74       from ak_regions
75       where region_code = p_internal_name
76       and region_application_id = p_application_id;
77     end if;
78 
79     if (l_count > 0) then
80             FND_MESSAGE.SET_NAME('BIS','BIS_PD_UNIQUE_PGE_ERR');
81             FND_MSG_PUB.ADD;
82             RAISE FND_API.G_EXC_ERROR;
83     end if;
84 
85     -- Insert new Region
86     BIS_AK_REGION_PUB.INSERT_REGION_ROW (
87       p_REGION_CODE => p_internal_name,
88       p_REGION_APPLICATION_ID => p_application_id,
89       p_DATABASE_OBJECT_NAME => c_DUMMY_DB_OBJECT,
90       p_APPL_MODULE_OBJECT_TYPE => c_APP_MOD,
91       p_NAME => p_title,
92       p_REGION_STYLE => c_PAGE_LAYOUT,
93       p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
94       x_return_status => x_return_status,
95       x_msg_count => x_msg_count,
96       x_msg_data =>x_msg_data);
97 
98     -- Insert Form Function
99     select lower(application_short_name) into l_app_short_name
100     from fnd_application
101     where application_id = p_application_id;
102 
103     l_parameters := c_PAGE_NAME || '=' || c_MDS_PATH_PRE || l_app_short_name || c_MDS_PATH_POST || p_internal_name || '&' ||
104         c_SOURCE_TYPE || '=' || c_MDS;
105 
106 
107     BIS_FORM_FUNCTIONS_PUB.INSERT_ROW (
108       p_FUNCTION_NAME => p_internal_name,
109       p_WEB_HTML_CALL => c_WEB_HTML_CALL,
110       p_PARAMETERS => l_parameters,
111       p_TYPE => c_FUNCTION_TYPE,
112       p_USER_FUNCTION_NAME => p_title,
113       x_FUNCTION_ID => x_page_id,
114       x_return_status => x_return_status,
115       x_msg_count => x_msg_count,
116       x_msg_data =>x_msg_data);
117   end if;
118 
119 EXCEPTION
120   WHEN FND_API.G_EXC_ERROR THEN
121     x_return_status := FND_API.G_RET_STS_ERROR;
122     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
123                               ,p_data   =>      x_msg_data);
124   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
125     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
126     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
127                               ,p_data   =>      x_msg_data);
128   WHEN NO_DATA_FOUND THEN
129     x_return_status := FND_API.G_RET_STS_ERROR;
130     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
131                               ,p_data   =>      x_msg_data);
132   WHEN OTHERS THEN
133     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
134     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
135                               ,p_data   =>      x_msg_data);
136     if (x_msg_data is null) then
137     x_msg_data := SQLERRM;
138     end if;
139 
140 end CREATE_PAGE_REGION;
141 
142 procedure Update_Page_Region(
143  p_internal_name    IN VARCHAR2
144 ,p_application_id               IN NUMBER
145 ,p_title      IN VARCHAR2
146 ,p_page_id      IN NUMBER
147 ,p_new_internal_name    IN VARCHAR2
148 ,p_new_application_id   IN NUMBER
149 ,x_return_status                OUT NOCOPY VARCHAR2
150 ,x_msg_count                    OUT NOCOPY NUMBER
151 ,x_msg_data                     OUT NOCOPY VARCHAR2
152 ) is
153 
154 l_count     NUMBER;
155 l_parameters      FND_FORM_FUNCTIONS.Parameters%Type;
156 l_app_short_name  VARCHAR2(30);
157 l_new_internal_name   VARCHAR2 (30);
158 l_new_application_id  NUMBER;
159 
160 begin
161 
162   fnd_msg_pub.initialize;
163 
164   if p_new_internal_name is null then
165     l_new_internal_name := p_internal_name;
166   else
167     l_new_internal_name := p_new_internal_name;
168   end if;
169 
170   if p_new_application_id is null then
171     l_new_application_id := p_application_id;
172   else
173     l_new_application_id := p_new_application_id;
174   end if;
175 
176   if (l_new_internal_name = p_internal_name and p_application_id = l_new_application_id) then
177         -- Update existing Region
178     BIS_AK_REGION_PUB.UPDATE_REGION_ROW (
179       p_REGION_CODE => p_internal_name,
180       p_REGION_APPLICATION_ID => p_application_id,
181       p_DATABASE_OBJECT_NAME => c_DUMMY_DB_OBJECT,
182       p_NAME => p_title,
183       p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
184       x_return_status => x_return_status,
185       x_msg_count => x_msg_count,
186       x_msg_data =>x_msg_data);
187 
188     -- Update Form Function
189     BIS_FORM_FUNCTIONS_PUB.UPDATE_ROW (
190       p_FUNCTION_ID => p_page_id,
191       p_USER_FUNCTION_NAME => p_title,
192       x_return_status => x_return_status,
193       x_msg_count => x_msg_count,
194       x_msg_data =>x_msg_data);
195 
196   else
197     -- If user changes the form function name or the application id
198 
199     -- Check if form function/region exists
200 
201     select count(1) into l_count
202     from fnd_form_functions
203     where function_name = l_new_internal_name;
204 
205     if (l_count = 0) then
206       select count(1) into l_count
207       from ak_regions
208       where region_code = l_new_internal_name
209       and region_application_id = l_new_application_id;
210     end if;
211 
212     if (l_count > 0) then
213             FND_MESSAGE.SET_NAME('BIS','BIS_PD_UNIQUE_PGE_ERR');
214             FND_MSG_PUB.ADD;
215             RAISE FND_API.G_EXC_ERROR;
216     end if;
217 
218     -- Delete existing region
219     BIS_AK_REGION_PUB.DELETE_REGION_ROW(
220       p_REGION_CODE => p_internal_name,
221       p_REGION_APPLICATION_ID => p_application_id,
222       x_return_status => x_return_status,
223       x_msg_count => x_msg_count,
224       x_msg_data =>x_msg_data);
225 
226     -- Create new region
227     BIS_AK_REGION_PUB.INSERT_REGION_ROW (
228       p_REGION_CODE => l_new_internal_name,
229       p_REGION_APPLICATION_ID => l_new_application_id,
230       p_DATABASE_OBJECT_NAME => c_DUMMY_DB_OBJECT,
231       p_APPL_MODULE_OBJECT_TYPE => c_APP_MOD,
232       p_NAME => p_title,
233       p_REGION_STYLE => c_PAGE_LAYOUT,
234       p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
235       x_return_status => x_return_status,
236       x_msg_count => x_msg_count,
237       x_msg_data =>x_msg_data);
238 
239     -- Update Form Function
240     select lower(application_short_name) into l_app_short_name
241     from fnd_application
242     where application_id = l_new_application_id;
243 
244     select parameters into l_parameters from fnd_form_functions
245     where function_id = p_page_id;
246 
247     l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_PAGE_NAME, c_MDS_PATH_PRE || l_app_short_name || c_MDS_PATH_POST || l_new_internal_name);
248 
249     if l_new_internal_name <> p_internal_name then
250       UPDATE fnd_form_functions
251       SET    function_name = l_new_internal_name
252       WHERE  function_id = p_page_id;
253     end  if;
254 
255     BIS_FORM_FUNCTIONS_PUB.UPDATE_ROW (
256       p_FUNCTION_ID => p_page_id,
257       p_USER_FUNCTION_NAME => p_title,
258       p_PARAMETERS => l_parameters,
259       x_return_status => x_return_status,
260       x_msg_count => x_msg_count,
261       x_msg_data =>x_msg_data);
262 
263   end if;
264 
265   -- Delete Page Racks and Rack Items
266   Delete_Page_Racks(
267       p_internal_name => p_internal_name,
268       p_application_id => p_application_id,
269       x_return_status => x_return_status,
270       x_msg_count => x_msg_count,
271       x_msg_data =>x_msg_data);
272 
273 
274 EXCEPTION
275   WHEN FND_API.G_EXC_ERROR THEN
276     x_return_status := FND_API.G_RET_STS_ERROR;
277     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
278                               ,p_data   =>      x_msg_data);
279   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
280     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
281     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
282                               ,p_data   =>      x_msg_data);
283   WHEN NO_DATA_FOUND THEN
284     x_return_status := FND_API.G_RET_STS_ERROR;
285     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
286                               ,p_data   =>      x_msg_data);
287   WHEN OTHERS THEN
288     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
289     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
290                               ,p_data   =>      x_msg_data);
291     if (x_msg_data is null) then
292     x_msg_data := SQLERRM;
293     end if;
294 
295 end Update_page_Region;
296 
297 Procedure Delete_Page_Region (
298  p_internal_name    IN VARCHAR2
299 ,p_application_id               IN NUMBER
300 ,p_page_id      IN NUMBER
301 ,x_return_status                OUT NOCOPY VARCHAR2
302 ,x_msg_count                    OUT NOCOPY NUMBER
303 ,x_msg_data                     OUT NOCOPY VARCHAR2
304 ) is
305 
306 begin
307   fnd_msg_pub.initialize;
308 
309   -- Delete Page Racks and Rack Items
310   Delete_Page_Racks(
311     p_internal_name => p_internal_name,
312     p_application_id => p_application_id,
313     x_return_status => x_return_status,
314     x_msg_count => x_msg_count,
315     x_msg_data =>x_msg_data);
316 
317   BIS_AK_REGION_PUB.DELETE_REGION_ROW(
318     p_REGION_CODE => p_internal_name,
319     p_REGION_APPLICATION_ID => p_application_id,
320     x_return_status => x_return_status,
321     x_msg_count => x_msg_count,
322     x_msg_data =>x_msg_data);
323 
324   BIS_FORM_FUNCTIONS_PUB.DELETE_ROW(
325     p_FUNCTION_ID => p_page_id,
326     x_return_status => x_return_status,
327     x_msg_count => x_msg_count,
328     x_msg_data =>x_msg_data);
329 
330 EXCEPTION
331   WHEN FND_API.G_EXC_ERROR THEN
332     x_return_status := FND_API.G_RET_STS_ERROR;
333     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
334                               ,p_data   =>      x_msg_data);
335   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
336     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
337     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
338                               ,p_data   =>      x_msg_data);
339   WHEN NO_DATA_FOUND THEN
340     x_return_status := FND_API.G_RET_STS_ERROR;
341     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
342                               ,p_data   =>      x_msg_data);
343   WHEN OTHERS THEN
344     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
345     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
346                               ,p_data   =>      x_msg_data);
347     if (x_msg_data is null) then
348     x_msg_data := SQLERRM;
349     end if;
350 
351 
352 END Delete_Page_Region;
353 
354 procedure Create_Rack_Region(
355  p_internal_name    IN VARCHAR2
356 ,p_application_id               IN NUMBER
357 ,x_return_status                OUT NOCOPY VARCHAR2
358 ,x_msg_count                    OUT NOCOPY NUMBER
359 ,x_msg_data                     OUT NOCOPY VARCHAR2
360 ) is
361 
362 begin
363 
364   fnd_msg_pub.initialize;
365 
366   -- Insert new Region
367   BIS_AK_REGION_PUB.INSERT_REGION_ROW (
368     p_REGION_CODE => p_internal_name,
369     p_REGION_APPLICATION_ID => p_application_id,
370     p_DATABASE_OBJECT_NAME => c_DUMMY_DB_OBJECT,
371     p_NAME => p_internal_name,
372     p_REGION_STYLE => c_ROW_LAYOUT,
373     p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
374     x_return_status => x_return_status,
375     x_msg_count => x_msg_count,
376     x_msg_data =>x_msg_data);
377 
378 
379 EXCEPTION
380   WHEN FND_API.G_EXC_ERROR THEN
381     x_return_status := FND_API.G_RET_STS_ERROR;
382     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
383                               ,p_data   =>      x_msg_data);
384   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
385     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
386     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
387                               ,p_data   =>      x_msg_data);
388   WHEN NO_DATA_FOUND THEN
389     x_return_status := FND_API.G_RET_STS_ERROR;
390     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
391                               ,p_data   =>      x_msg_data);
392   WHEN OTHERS THEN
393     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
394     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
395                               ,p_data   =>      x_msg_data);
396     if (x_msg_data is null) then
397     x_msg_data := SQLERRM;
398     end if;
399 
400 end CREATE_RACK_REGION;
401 
402 
403 Procedure Delete_Rack_Region (
404  p_internal_name    IN VARCHAR2
405 ,p_application_id               IN NUMBER
406 ,x_return_status                OUT NOCOPY VARCHAR2
407 ,x_msg_count                    OUT NOCOPY NUMBER
408 ,x_msg_data                     OUT NOCOPY VARCHAR2
409 ) is
410 begin
411 
412   fnd_msg_pub.initialize;
413 
414   delete_region_items(
415       p_internal_name => p_internal_name,
416       p_application_id => p_application_id,
417       x_return_status => x_return_status,
418       x_msg_count => x_msg_count,
419       x_msg_data =>x_msg_data);
420 
421   BIS_AK_REGION_PUB.DELETE_REGION_ROW(
422     p_REGION_CODE => p_internal_name,
423     p_REGION_APPLICATION_ID => p_application_id,
424     x_return_status => x_return_status,
425     x_msg_count => x_msg_count,
426     x_msg_data =>x_msg_data);
427 
428 EXCEPTION
429   WHEN FND_API.G_EXC_ERROR THEN
430     x_return_status := FND_API.G_RET_STS_ERROR;
431     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
432                               ,p_data   =>      x_msg_data);
433   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
434     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
435     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
436                               ,p_data   =>      x_msg_data);
437   WHEN NO_DATA_FOUND THEN
438     x_return_status := FND_API.G_RET_STS_ERROR;
439     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
440                               ,p_data   =>      x_msg_data);
441   WHEN OTHERS THEN
442     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
443     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
444                               ,p_data   =>      x_msg_data);
445     if (x_msg_data is null) then
446     x_msg_data := SQLERRM;
447     end if;
448 
449 END Delete_Rack_Region;
450 
451 procedure Create_Rack_Item(
452  p_internal_name    IN VARCHAR2
453 ,p_application_id               IN NUMBER
454 ,p_rack_Num     IN NUMBER
455 ,p_display_flag     IN VARCHAR2 := 'Y'
456 ,p_rack_region      IN VARCHAR2
457 ,p_rack_region_application_id IN NUMBER
458 ,x_return_status                OUT NOCOPY VARCHAR2
459 ,x_msg_count                    OUT NOCOPY NUMBER
460 ,x_msg_data                     OUT NOCOPY VARCHAR2
461 ) is
462 
463 begin
464 
465   fnd_msg_pub.initialize;
466 
467   -- Insert the Rack Region Item
468 
469   BIS_AK_REGION_PUB.INSERT_REGION_ITEM_ROW (
470     p_REGION_CODE => p_internal_name,
471     p_REGION_APPLICATION_ID => p_application_id,
472     p_ATTRIBUTE_CODE => c_RACK_ATTRIBUTE_CODE || p_Rack_Num,
473     p_ATTRIBUTE_APPLICATION_ID => c_BIS_APP_ID,
474     p_DISPLAY_SEQUENCE => p_Rack_Num,
475     p_NODE_DISPLAY_FLAG => p_display_flag,
476     p_NESTED_REGION_CODE => p_rack_region,
477     p_NESTED_REGION_APPL_ID => p_rack_region_application_id,
478     p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
479     x_return_status => x_return_status,
480     x_msg_count => x_msg_count,
481     x_msg_data =>x_msg_data);
482 
483 EXCEPTION
484   WHEN FND_API.G_EXC_ERROR THEN
485     x_return_status := FND_API.G_RET_STS_ERROR;
486     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
487                               ,p_data   =>      x_msg_data);
488   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
489     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
490     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
491                               ,p_data   =>      x_msg_data);
492   WHEN NO_DATA_FOUND THEN
493     x_return_status := FND_API.G_RET_STS_ERROR;
494     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
495                               ,p_data   =>      x_msg_data);
496   WHEN OTHERS THEN
497     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
498     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
499                               ,p_data   =>      x_msg_data);
500     if (x_msg_data is null) then
501     x_msg_data := SQLERRM;
502     end if;
503 
504 end Create_Rack_Item;
505 
506 Procedure Delete_Rack_Item (
507  p_internal_name    IN VARCHAR2
508 ,p_application_id               IN NUMBER
509 ,p_rack_Num     IN NUMBER
510 ,x_return_status                OUT NOCOPY VARCHAR2
511 ,x_msg_count                    OUT NOCOPY NUMBER
512 ,x_msg_data                     OUT NOCOPY VARCHAR2
513 ) is
514 begin
515 
516   fnd_msg_pub.initialize;
517 
518     BIS_AK_REGION_PUB.DELETE_REGION_ITEM_ROW(
519         p_REGION_CODE => p_internal_name,
520         p_REGION_APPLICATION_ID => p_application_id,
521         p_ATTRIBUTE_CODE => c_RACK_ATTRIBUTE_CODE || p_Rack_Num,
522         p_ATTRIBUTE_APPLICATION_ID => c_BIS_APP_ID,
523     x_return_status => x_return_status,
524     x_msg_count => x_msg_count,
525     x_msg_data =>x_msg_data);
526 
527 
528 EXCEPTION
529   WHEN FND_API.G_EXC_ERROR THEN
530     x_return_status := FND_API.G_RET_STS_ERROR;
531     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
532                               ,p_data   =>      x_msg_data);
533   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
534     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
535     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
536                               ,p_data   =>      x_msg_data);
537   WHEN NO_DATA_FOUND THEN
538     x_return_status := FND_API.G_RET_STS_ERROR;
539     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
540                               ,p_data   =>      x_msg_data);
541   WHEN OTHERS THEN
542     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
543     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
544                               ,p_data   =>      x_msg_data);
545     if (x_msg_data is null) then
546     x_msg_data := SQLERRM;
547     end if;
548 
549 END Delete_Rack_Item;
550 
551 procedure Create_Portlet_Item(
552  p_internal_name    IN VARCHAR2
553 ,p_application_id               IN NUMBER
554 ,p_Portlet_Num      IN NUMBER
555 ,p_display_flag     IN VARCHAR2 := 'Y'
556 ,p_function_name    IN VARCHAR2
557 ,p_title      IN VARCHAR2
558 ,x_return_status                OUT NOCOPY VARCHAR2
559 ,x_msg_count                    OUT NOCOPY NUMBER
560 ,x_msg_data                     OUT NOCOPY VARCHAR2
561 ) is
562 
563 begin
564 
565   fnd_msg_pub.initialize;
566 
567   -- Insert the Portlet Region Item
568 
569   BIS_AK_REGION_PUB.INSERT_REGION_ITEM_ROW (
570     p_REGION_CODE => p_internal_name,
571     p_REGION_APPLICATION_ID => p_application_id,
572     p_ATTRIBUTE_CODE => c_PORTLET_ATTRIBUTE_CODE || p_Portlet_Num,
573     p_ATTRIBUTE_APPLICATION_ID => c_BIS_APP_ID,
574     p_DISPLAY_SEQUENCE => p_Portlet_Num,
575     p_NODE_DISPLAY_FLAG => p_display_flag,
576     p_ATTRIBUTE_LABEL_LONG => p_Title,
577     p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
578     p_ATTRIBUTE1 => p_function_name,
579     x_return_status => x_return_status,
580     x_msg_count => x_msg_count,
581     x_msg_data =>x_msg_data);
582 
583 EXCEPTION
584   WHEN FND_API.G_EXC_ERROR THEN
585     x_return_status := FND_API.G_RET_STS_ERROR;
586     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
587                               ,p_data   =>      x_msg_data);
588   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
589     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
590     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
591                               ,p_data   =>      x_msg_data);
592   WHEN NO_DATA_FOUND THEN
593     x_return_status := FND_API.G_RET_STS_ERROR;
594     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
595                               ,p_data   =>      x_msg_data);
596   WHEN OTHERS THEN
597     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
598     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
599                               ,p_data   =>      x_msg_data);
600     if (x_msg_data is null) then
601     x_msg_data := SQLERRM;
602     end if;
603 
604 end Create_Portlet_Item;
605 
606 Procedure Delete_Rack_Item (
607  p_internal_name    IN VARCHAR2
608 ,p_application_id               IN NUMBER
609 ,p_portlet_Num      IN NUMBER
610 ,x_return_status                OUT NOCOPY VARCHAR2
611 ,x_msg_count                    OUT NOCOPY NUMBER
612 ,x_msg_data                     OUT NOCOPY VARCHAR2
613 ) is
614 begin
615 
616     fnd_msg_pub.initialize;
617 
618     BIS_AK_REGION_PUB.DELETE_REGION_ITEM_ROW(
619         p_REGION_CODE => p_internal_name,
620         p_REGION_APPLICATION_ID => p_application_id,
621         p_ATTRIBUTE_CODE => c_PORTLET_ATTRIBUTE_CODE || p_Portlet_Num,
622         p_ATTRIBUTE_APPLICATION_ID => c_BIS_APP_ID,
623     x_return_status => x_return_status,
624     x_msg_count => x_msg_count,
625     x_msg_data =>x_msg_data);
626 
627 EXCEPTION
628   WHEN FND_API.G_EXC_ERROR THEN
629     x_return_status := FND_API.G_RET_STS_ERROR;
630     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
631                               ,p_data   =>      x_msg_data);
632   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
633     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
634     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
635                               ,p_data   =>      x_msg_data);
636   WHEN NO_DATA_FOUND THEN
637     x_return_status := FND_API.G_RET_STS_ERROR;
638     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
639                               ,p_data   =>      x_msg_data);
640   WHEN OTHERS THEN
641     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
642     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
643                               ,p_data   =>      x_msg_data);
644     if (x_msg_data is null) then
645     x_msg_data := SQLERRM;
646     end if;
647 
648 END Delete_Rack_Item;
649 
650 Procedure Delete_Page_Racks (
651  p_internal_name    IN VARCHAR2
652 ,p_application_id               IN NUMBER
653 ,x_return_status                OUT NOCOPY VARCHAR2
654 ,x_msg_count                    OUT NOCOPY NUMBER
655 ,x_msg_data                     OUT NOCOPY VARCHAR2
656 ) is
657 
658 cursor pageRacks_cursor IS
659     select nested_region_code, nested_region_application_id
660     from ak_region_items
661     where region_code = p_internal_name
662     and region_application_id = p_application_id;
663 
664 begin
665 
666       if pageRacks_cursor%ISOPEN THEN
667           CLOSE pageRacks_cursor;
668       end if;
669 
670   for cr in pageRacks_cursor loop
671     Delete_Rack_Region(
672       p_internal_name => cr.nested_region_code,
673       p_application_id => cr.nested_region_application_id,
674       x_return_status => x_return_status,
675       x_msg_count => x_msg_count,
676       x_msg_data =>x_msg_data);
677   end loop;
678 
679   delete_region_items(
680       p_internal_name => p_internal_name,
681       p_application_id => p_application_id,
682       x_return_status => x_return_status,
683       x_msg_count => x_msg_count,
684       x_msg_data =>x_msg_data);
685 
686       if pageRacks_cursor%ISOPEN THEN
687           CLOSE pageRacks_cursor;
688       end if;
689 
690 EXCEPTION
691   WHEN FND_API.G_EXC_ERROR THEN
692     x_return_status := FND_API.G_RET_STS_ERROR;
693     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
694                               ,p_data   =>      x_msg_data);
695   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
696     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
697     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
698                               ,p_data   =>      x_msg_data);
699   WHEN NO_DATA_FOUND THEN
700     x_return_status := FND_API.G_RET_STS_ERROR;
701     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
702                               ,p_data   =>      x_msg_data);
703   WHEN OTHERS THEN
704     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
705     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
706                               ,p_data   =>      x_msg_data);
707     if (x_msg_data is null) then
708     x_msg_data := SQLERRM;
709     end if;
710 
711 
712 END Delete_Page_Racks;
713 
714 Procedure Delete_Region_Items (
715  p_internal_name    IN VARCHAR2
716 ,p_application_id               IN NUMBER
717 ,x_return_status                OUT NOCOPY VARCHAR2
718 ,x_msg_count                    OUT NOCOPY NUMBER
719 ,x_msg_data                     OUT NOCOPY VARCHAR2
720 ) is
721 
722 cursor items_cursor IS
723     select attribute_code, attribute_application_id
724     from ak_region_items
725     where region_code = p_internal_name
726     and region_application_id = p_application_id;
727 
728 begin
729   if items_cursor%ISOPEN then
730           close items_cursor;
731   end if;
732 
733   for cr in items_cursor loop
734       BIS_AK_REGION_PUB.DELETE_REGION_ITEM_ROW(
735           p_REGION_CODE => p_internal_name,
736           p_REGION_APPLICATION_ID => p_application_id,
737           p_ATTRIBUTE_CODE => cr.attribute_code,
738           p_ATTRIBUTE_APPLICATION_ID => cr.attribute_application_id,
739       x_return_status => x_return_status,
740       x_msg_count => x_msg_count,
741       x_msg_data =>x_msg_data);
742   end loop;
743 
744   if items_cursor%ISOPEN then
745           close items_cursor;
746   end if;
747 
748 EXCEPTION
749   WHEN FND_API.G_EXC_ERROR THEN
750     x_return_status := FND_API.G_RET_STS_ERROR;
751     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
752                               ,p_data   =>      x_msg_data);
753   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
754     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
755     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
756                               ,p_data   =>      x_msg_data);
757   WHEN NO_DATA_FOUND THEN
758     x_return_status := FND_API.G_RET_STS_ERROR;
759     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
760                               ,p_data   =>      x_msg_data);
761   WHEN OTHERS THEN
762     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
763     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
764                               ,p_data   =>      x_msg_data);
765     if (x_msg_data is null) then
766     x_msg_data := SQLERRM;
767     end if;
768 
769 
770 END Delete_Region_Items;
771 
772 function getUniqueRegion(
773  p_internal_name  IN VARCHAR2
774 ,p_application_id IN NUMBER) return VARCHAR2 is
775 
776 l_region_code   VARCHAR2(30);
777 l_count     NUMBER;
778 l_done      BOOLEAN := false;
779 l_index     NUMBER := 0;
780 l_ascii     NUMBER;
781 cursor regions_cursor(p_region_code varchar2) IS
782   select region_code
783   from ak_regions
784   where region_code like p_region_code || '%'
785   and region_application_id = p_application_id;
786 
787 BEGIN
788 
789       if regions_cursor%ISOPEN THEN
790         CLOSE regions_cursor;
791   end if;
792 
793   l_region_code := p_internal_name;
794 
795   -- Keep 2 characters for rack num
796   if (length(l_region_code) > 28) then
797     -- Truncate to 28 characters
798     l_region_code := substr(l_region_code, 1, 28);
799   end if;
800 
801   while (l_index < 99 and not l_done) loop
802     l_count := 0;
803     for cr in regions_cursor(l_region_Code) loop
804       l_ascii := ascii(substr(cr.region_code, length(l_region_code)+1));
805       if ((cr.region_code = l_region_code) or  (l_ascii >=48 and l_ascii <= 57)) then
806         l_count := 1;
807       end if;
808     end loop;
809 
810     if (l_count > 0) then
811       if (length(l_region_code) = 28) then
812         -- Truncate one more time and append a counter
813         l_index := l_index + 1;
814         l_region_code := substr(l_region_code, 1, 27) || l_index;
815       else
816         l_index := l_index + 1;
817         l_region_code := p_internal_name || l_index;
818       end if;
819     else
820       l_done := true;
821     end if;
822 
823   end loop;
824 
825   if not l_done then
826     l_region_code := null;
827   end if;
828 
829       if regions_cursor%ISOPEN THEN
830           CLOSE regions_cursor;
831       end if;
832 
833   return l_region_code;
834 EXCEPTION
835   WHEN OTHERS THEN return null;
836 
837 END getUniqueRegion;
838 
839 procedure Migrate_Menu_To_MDS(
840  p_internal_name    IN VARCHAR2
841 ,p_application_id               IN NUMBER
842 ,p_title      IN VARCHAR2
843 ,p_page_function_name   IN VARCHAR2
844 ,x_return_status                OUT NOCOPY VARCHAR2
845 ,x_msg_count                    OUT NOCOPY NUMBER
846 ,x_msg_data                     OUT NOCOPY VARCHAR2
847 ) is
848 
849 l_count     NUMBER := 0;
850 l_parameters    FND_FORM_FUNCTIONS.Parameters%Type := null;
851 l_function_id   NUMBER := NULL;
852 l_menu_name   FND_MENUS.Menu_Name%Type := NULL;
853 l_menu_id   NUMBER := NULL;
854 l_attr_category   VARCHAR2(30) := NULL;
855 l_app_short_name  VARCHAR2(30);
856 begin
857 
858   -- Check if Region code exists.
859   begin
860     select 1, attribute_category into l_count, l_attr_category
861     from ak_regions
862     where region_code = p_internal_name
863     and region_application_id = p_application_id;
864   exception
865     when no_data_found then l_count := 0;
866   end;
867 
868   if (l_count > 0) then
869     if (l_attr_category = c_ATTRIBUTE_CATEGORY) then
870       -- Already migrated, but migration is running again for some reason
871       -- Delete the region and re-migrate
872       Delete_Page_Racks(
873         p_internal_name => p_internal_name,
874         p_application_id => p_application_id,
875         x_return_status => x_return_status,
876         x_msg_count => x_msg_count,
877         x_msg_data =>x_msg_data);
878       BIS_AK_REGION_PUB.DELETE_REGION_ROW(
879         p_REGION_CODE => p_internal_name,
880         p_REGION_APPLICATION_ID => p_application_id,
881         x_return_status => x_return_status,
882         x_msg_count => x_msg_count,
883         x_msg_data =>x_msg_data);
884     else
885             FND_MESSAGE.SET_NAME('BIS','BIS_PD_UNIQUE_PGE_ERR');
886             FND_MSG_PUB.ADD;
887             RAISE FND_API.G_EXC_ERROR;
888     end if;
889   end if;
890 
891   -- Insert new Region
892   BIS_AK_REGION_PUB.INSERT_REGION_ROW (
893     p_REGION_CODE => p_internal_name,
894     p_REGION_APPLICATION_ID => p_application_id,
895     p_DATABASE_OBJECT_NAME => c_DUMMY_DB_OBJECT,
896     p_NAME => p_title,
897     p_REGION_STYLE => c_PAGE_LAYOUT,
898     p_APPL_MODULE_OBJECT_TYPE => c_APP_MOD,
899     p_ATTRIBUTE_CATEGORY => c_ATTRIBUTE_CATEGORY,
900     x_return_status => x_return_status,
901     x_msg_count => x_msg_count,
902     x_msg_data =>x_msg_data);
903 
904 
905   select parameters, function_id into l_parameters, l_function_id
906   from fnd_form_functions
907   where function_name = p_page_function_name;
908 
909   select lower(application_short_name) into l_app_short_name
910   from fnd_application
911   where application_id = p_application_id;
912 
913   l_menu_name := BIS_COMMON_UTILS.getParameterValue(l_parameters, c_PAGE_NAME);
914 
915   l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_PAGE_NAME, c_MDS_PATH_PRE || l_app_short_name || c_MDS_PATH_POST || p_internal_name);
916   l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_SOURCE_TYPE, c_MDS);
917   -- This is put back just in case you need to go back to the FND_MENU
918   -- Will be added only for migrated functions.
919   l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_MENU_NAME, l_menu_name);
920 
921   -- Update Form Function
922   BIS_FORM_FUNCTIONS_PUB.UPDATE_ROW (
923     p_FUNCTION_ID => l_function_id,
924     p_PARAMETERS => l_parameters,
925     x_return_status => x_return_status,
926     x_msg_count => x_msg_count,
927     x_msg_data =>x_msg_data);
928 
929   -- mdamle 02/03/2004 - Update function name
930   if p_page_function_name <> p_internal_name then
931     UPDATE fnd_form_functions
932     SET    function_name = p_internal_name
933     WHERE  function_id = l_function_id;
934   end  if;
935 
936 
937 
938 EXCEPTION
939   WHEN FND_API.G_EXC_ERROR THEN
940     x_return_status := FND_API.G_RET_STS_ERROR;
941     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
942                               ,p_data   =>      x_msg_data);
943   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
944     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
945     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
946                               ,p_data   =>      x_msg_data);
947   WHEN NO_DATA_FOUND THEN
948     x_return_status := FND_API.G_RET_STS_ERROR;
949     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
950                               ,p_data   =>      x_msg_data);
951   WHEN OTHERS THEN
952     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
953     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
954                               ,p_data   =>      x_msg_data);
955     if (x_msg_data is null) then
956     x_msg_data := SQLERRM;
957     end if;
958 end Migrate_Menu_To_MDS;
959 
960 
961 -- mdamle 02/06/2004 - Remove AK Region Integration
962 procedure Create_Page_Function(
963  p_page_function_name           IN VARCHAR2
964 ,p_application_id               IN NUMBER
965 ,p_title                        IN VARCHAR2
966 ,p_page_xml_name                IN VARCHAR2 := null
967 ,p_description                  IN VARCHAR2 := NULL
968 ,x_page_id                      OUT NOCOPY NUMBER
969 ,x_return_status                OUT NOCOPY VARCHAR2
970 ,x_msg_count                    OUT NOCOPY NUMBER
971 ,x_msg_data                     OUT NOCOPY VARCHAR2
972 ) is
973 
974 l_count       NUMBER;
975 l_parameters        FND_FORM_FUNCTIONS.Parameters%Type;
976 l_app_short_name    VARCHAR2(30);
977 l_page_xml_name                 FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE;
978 begin
979   fnd_msg_pub.initialize;
980 
981   select count(1) into l_count
982   from fnd_form_functions
983   where function_name = p_page_function_name;
984 
985   if (l_count > 0) then
986     -- Trying to update a non-page function.
987           FND_MESSAGE.SET_NAME('BIS','BIS_PD_UNIQUE_PGE_ERR');
988           FND_MSG_PUB.ADD;
989           RAISE FND_API.G_EXC_ERROR;
990   else
991 
992     select lower(application_short_name) into l_app_short_name
993     from fnd_application
994     where application_id = p_application_id;
995 
996     -- Insert Form Function
997 
998     if(p_page_xml_name is null) then
999         l_page_xml_name := p_page_function_name;
1000     else
1001         l_page_xml_name := p_page_xml_name;
1002     end if;
1003 
1004     l_parameters := c_PAGE_NAME || '=' || c_MDS_PATH_PRE || l_app_short_name || c_MDS_PATH_POST || l_page_xml_name || '&' ||
1005       c_SOURCE_TYPE || '=' || c_MDS;
1006 
1007 
1008     BIS_FORM_FUNCTIONS_PUB.INSERT_ROW (
1009       p_FUNCTION_NAME => p_page_function_name,
1010       p_WEB_HTML_CALL => c_WEB_HTML_CALL,
1011       p_PARAMETERS => l_parameters,
1012       p_TYPE => c_FUNCTION_TYPE,
1013       p_USER_FUNCTION_NAME => p_title,
1014       p_DESCRIPTION => p_description,
1015       x_FUNCTION_ID => x_page_id,
1016       x_return_status => x_return_status,
1017       x_msg_count => x_msg_count,
1018       x_msg_data =>x_msg_data);
1019   end if;
1020 
1021 EXCEPTION
1022   WHEN FND_API.G_EXC_ERROR THEN
1023     x_return_status := FND_API.G_RET_STS_ERROR;
1024     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1025                               ,p_data   =>      x_msg_data);
1026   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1027     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1028     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1029                               ,p_data   =>      x_msg_data);
1030   WHEN NO_DATA_FOUND THEN
1031     x_return_status := FND_API.G_RET_STS_ERROR;
1032     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1033                               ,p_data   =>      x_msg_data);
1034   WHEN OTHERS THEN
1035     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1036     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1037                               ,p_data   =>      x_msg_data);
1038     if (x_msg_data is null) then
1039     x_msg_data := SQLERRM;
1040     end if;
1041 
1042 end Create_Page_Function;
1043 
1044 -- mdamle 02/06/2004 - Remove AK Region Integration
1045 procedure Update_Page_Function(
1046  p_page_function_name   IN VARCHAR2
1047 ,p_application_id           IN NUMBER
1048 ,p_title                    IN VARCHAR2
1049 ,p_page_xml_name            IN VARCHAR2 := null
1050 ,p_new_page_function_name   IN VARCHAR2
1051 ,p_new_application_id       IN NUMBER
1052 ,p_new_page_xml_name        IN VARCHAR2 := null
1053 ,p_description              IN VARCHAR2 := NULL
1054 ,x_return_status                OUT NOCOPY VARCHAR2
1055 ,x_msg_count                    OUT NOCOPY NUMBER
1056 ,x_msg_data                     OUT NOCOPY VARCHAR2
1057 ) is
1058 
1059 l_count       NUMBER;
1060 l_function_id     NUMBER := 0;
1061 l_parameters        FND_FORM_FUNCTIONS.Parameters%Type;
1062 l_app_short_name    VARCHAR2(30);
1063 l_type        VARCHAR2(30);
1064 l_page_function_name    FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE;
1065 l_application_id    NUMBER;
1066 l_menu_name     FND_MENUS.Menu_Name%Type := NULL;
1067 l_page_xml_name                 FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE;
1068 begin
1069   fnd_msg_pub.initialize;
1070 
1071   begin
1072     select  BIS_COMMON_UTILS.getParameterValue(parameters, c_SOURCE_TYPE),
1073       function_id,
1074       parameters
1075       into l_type, l_function_id, l_parameters
1076     from fnd_form_functions
1077     where function_name = p_page_function_name;
1078   exception
1079     when no_data_found then l_type := null;
1080   end;
1081 
1082   if p_new_page_function_name is null then
1083     l_page_function_name := p_page_function_name;
1084   else
1085     l_page_function_name := p_new_page_function_name;
1086   end if;
1087 
1088   if p_new_application_id is null then
1089     l_application_id := p_application_id;
1090   else
1091     l_application_id := p_new_application_id;
1092   end if;
1093 
1094   select lower(application_short_name) into l_app_short_name
1095   from fnd_application
1096   where application_id = l_application_id;
1097 
1098   if (l_type = c_FND_MENU) then
1099     l_menu_name := BIS_COMMON_UTILS.getParameterValue(l_parameters, c_PAGE_NAME);
1100     -- This is put back just in case you need to go back to the FND_MENU
1101     -- Will be added only for migrated functions.
1102     l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_MENU_NAME, l_menu_name);
1103   end if;
1104 
1105   if p_new_page_xml_name is null then
1106     l_page_xml_name := p_page_xml_name;
1107   else
1108     l_page_xml_name := p_new_page_xml_name;
1109   end if;
1110 
1111   l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_PAGE_NAME, c_MDS_PATH_PRE || l_app_short_name || c_MDS_PATH_POST || l_page_xml_name);
1112   l_parameters := BIS_COMMON_UTILS.replaceParameterValue(l_parameters, c_SOURCE_TYPE, c_MDS);
1113 
1114   -- Update form function
1115   if l_page_function_name <> p_page_function_name then
1116     -- Check if new function already exists.
1117     select count(1) into l_count
1118     from fnd_form_functions
1119     where function_name = l_page_function_name;
1120 
1121     if (l_count > 0) then
1122       -- Duplicate function name
1123             FND_MESSAGE.SET_NAME('BIS','BIS_PD_UNIQUE_PGE_ERR');
1124             FND_MSG_PUB.ADD;
1125             RAISE FND_API.G_EXC_ERROR;
1126     end if;
1127 
1128     UPDATE fnd_form_functions
1129     SET    function_name = l_page_function_name
1130     WHERE  function_id = l_function_id;
1131   end  if;
1132 
1133   BIS_FORM_FUNCTIONS_PUB.UPDATE_ROW (
1134     p_FUNCTION_ID => l_function_id,
1135     p_USER_FUNCTION_NAME => p_title,
1136     p_PARAMETERS => l_parameters,
1137     p_DESCRIPTION => p_description,
1138     x_return_status => x_return_status,
1139     x_msg_count => x_msg_count,
1140     x_msg_data =>x_msg_data);
1141 
1142 EXCEPTION
1143   WHEN FND_API.G_EXC_ERROR THEN
1144     x_return_status := FND_API.G_RET_STS_ERROR;
1145     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1146                               ,p_data   =>      x_msg_data);
1147   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1148     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1149     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1150                               ,p_data   =>      x_msg_data);
1151   WHEN NO_DATA_FOUND THEN
1152     x_return_status := FND_API.G_RET_STS_ERROR;
1153     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1154                               ,p_data   =>      x_msg_data);
1155   WHEN OTHERS THEN
1156     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1157     FND_MSG_PUB.Count_And_Get( p_encoded => 'F' ,p_count  =>      x_msg_count
1158                               ,p_data   =>      x_msg_data);
1159     if (x_msg_data is null) then
1160     x_msg_data := SQLERRM;
1161     end if;
1162 
1163 end Update_Page_Function;
1164 
1165 FUNCTION Get_Custom_View_Name
1166 (
1167   p_Function_Id FND_FORM_FUNCTIONS.FUNCTION_ID%TYPE
1168 )RETURN VARCHAR2
1169 IS
1170   l_custom_view_name VARCHAR2(200); -- Should be greater than custom view name and tab name
1171   l_tab_id           VARCHAR(10);
1172   l_parameters       FND_FORM_FUNCTIONS.PARAMETERS%TYPE; -- Parameters
1173   l_start_pos        NUMBER;
1174   l_end_pos          NUMBER;
1175   l_tab_name         BSC_TABS_VL.NAME%TYPE;
1176 BEGIN
1177   SELECT user_function_name,parameters
1178   INTO l_custom_view_name,l_parameters
1179   FROM fnd_form_functions_vl
1180   WHERE function_id = p_Function_Id;
1181 
1182   l_tab_id := BIS_COMMON_UTILS.getParameterValue(l_parameters,'pTabId');
1183   IF(l_tab_id IS NOT NULL) THEN
1184     SELECT name
1185     INTO l_tab_name
1186     FROM bsc_tabs_vl
1187     WHERE tab_id = l_tab_id;
1188     l_custom_view_name := l_custom_view_name || '[' || l_tab_name || ']';
1189   END IF;
1190   RETURN l_custom_view_name;
1191 EXCEPTION
1192   WHEN OTHERS THEN
1193     RETURN NULL;
1194 END Get_Custom_View_Name;
1195 
1196 
1197 /*******************************************************
1198  Name         : Is_Simulatable_Cust_View
1199  Description  : This Function returns whether a particular custom view
1200                 is simulatable or not.
1201  Input        : Parameter column of FND_FORM_FUCNTIONS_VL table.
1202  Output       :
1203                  '1' --> Indicates that it is a simulatable custom view
1204                  '0' --> Indicates that it is a normal custom view
1205 
1206  Created By   : ashankar 10-AUG-2005
1207 /*******************************************************/
1208 
1209 FUNCTION Is_Simulatable_Cust_View
1210 (
1211   p_parameters    IN   FND_FORM_FUNCTIONS.parameters%TYPE
1212 ) RETURN NUMBER
1213 IS
1214     l_region_Code      VARCHAR(100);
1215     l_return_value     VARCHAR(3);
1216 BEGIN
1217 
1218     l_return_value := BIS_PAGE_PUB.c_NON_SIMULATABLE;
1219 
1220     IF(p_parameters IS NOT NULL) THEN
1221       l_region_Code := BIS_COMMON_UTILS.getParameterValue(p_parameters,'pRegionCode');
1222 
1223       IF(l_region_Code IS NOT NULL)THEN
1224         l_return_value := BIS_PAGE_PUB.c_SIMULATABLE;
1225       ELSE
1226         l_return_value := BIS_PAGE_PUB.c_NON_SIMULATABLE;
1227       END IF;
1228 
1229     END IF;
1230     RETURN l_return_value;
1231 EXCEPTION
1232     WHEN OTHERS THEN
1233      RETURN l_return_value;
1234 END Is_Simulatable_Cust_View;
1235 
1236 
1237 
1238 end BIS_PAGE_PUB;