DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIS_IMPL_DEV_PKG

Source


1 PACKAGE BODY bis_impl_dev_pkg AS
2 /* $Header: BISCONCB.pls 120.10 2007/12/27 12:44:55 lbodired ship $ */
3    version          CONSTANT CHAR (80)
4             := '$Header: BISCONCB.pls 120.10 2007/12/27 12:44:55 lbodired ship $';
5 
6 -- ------------------------------------------------------------
7 -- -------------- Global variables and constants --------------
8 -- ------------------------------------------------------------
9    G_PKG_NAME                VARCHAR2(30) := 'BIS_IMPL_DEV_PKG';
10    g_current_user_id         NUMBER  :=  FND_GLOBAL.User_id;
11    g_current_login_id        NUMBER  :=  FND_GLOBAL.Login_id;
12 
13 function clob_to_varchar2 (
14   p_in      clob,
15   p_size    integer
16 ) return varchar2
17 is
18   l_result  varchar2(32767) := '';
19   l_amount  integer := 0;
20   l_offset  integer := 1;
21 begin
22    if (p_in is null or
23       DBMS_LOB.getlength(p_in) = 0 ) then
24      return '';
25    else
26      l_amount := p_size;
27      DBMS_LOB.READ(p_in, l_amount, l_offset, l_result);
28      return l_result;
29    end if;
30 end;
31 
32 
33 procedure Create_Linkage_Inner (
34  P_OBJECT_TYPE		in VARCHAR2,
35  P_OBJECT_OWNER		in VARCHAR2,
36  P_OBJECT_NAME		in VARCHAR2,
37  P_CONC_PROGRAM_NAME	in VARCHAR2,
38  P_CONC_APP_ID		in NUMBER,
39  P_CONC_APP_SHORT_NAME	in VARCHAR2,
40  P_ENABLED_FLAG		in VARCHAR2,
41  P_REFRESH_MODE         in VARCHAR2,
42  P_CREATED_BY		in NUMBER       := null,
43  P_CREATION_DATE	in DATE         := null,
44  P_LAST_UPDATED_BY	in NUMBER       := null,
45  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
46  P_LAST_UPDATE_DATE	in DATE         := null,
47  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
48  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
49  x_return_status        OUT NOCOPY  VARCHAR2,
50  x_errorcode            OUT NOCOPY  NUMBER,
51  x_msg_count            OUT NOCOPY  NUMBER,
52  x_msg_data             OUT NOCOPY  VARCHAR2
53 ) is
54     l_sysdate               DATE         := sysdate;
55     l_api_name           CONSTANT VARCHAR2(30)   := 'Create_Linkage';
56     l_created_by         NUMBER := nvl(P_CREATED_BY,g_current_user_id);
57     l_creation_date      DATE   := nvl(P_CREATION_DATE, l_Sysdate);
58     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
59     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
60     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
61 
62     cursor c_in_properties(p_object_name varchar2, p_object_type varchar2) is
63       select object_name
64       from bis_obj_properties
65       where object_name = p_object_name
66         and object_type = p_object_type;
67 
68     l_object_name bis_obj_properties.object_name%type;
69 
70 begin
71     -- Initialize API message list if necessary.
72     -- Initialize message list if p_init_msg_list is set to TRUE.
73     IF FND_API.to_Boolean( p_init_msg_list ) THEN
74        FND_MSG_PUB.initialize;
75     END IF;
76 
77     insert into bis_obj_prog_linkages (
78         OBJECT_TYPE,
79         OBJECT_OWNER,
80         OBJECT_NAME,
81         CONC_PROGRAM_NAME,
82         CONC_APP_ID,
83         CONC_APP_SHORT_NAME,
84         ENABLED_FLAG,
85         REFRESH_MODE,
86         CREATED_BY,
87         CREATION_DATE,
88         LAST_UPDATED_BY,
89         LAST_UPDATE_LOGIN,
90         LAST_UPDATE_DATE)
91     values(
92         P_OBJECT_TYPE,
93         P_OBJECT_OWNER,
94         P_OBJECT_NAME,
95         P_CONC_PROGRAM_NAME,
96         P_CONC_APP_ID,
97         P_CONC_APP_SHORT_NAME,
98         P_ENABLED_FLAG,
99         P_REFRESH_MODE,
100         L_CREATED_BY,
101         L_CREATION_DATE,
102         L_LAST_UPDATED_BY,
103         L_LAST_UPDATE_LOGIN,
104         L_LAST_UPDATE_DATE);
105 
106     /* create new rows in bis_obj_properties if it is a new object */
107 
108     /* temporarily remove this logic, leave this change to 4.0.9
109     open c_in_properties(p_object_name, p_object_type);
110     fetch c_in_properties into l_object_name;
111     if c_in_properties%NOTFOUND then
112        create_properties(
113 			 P_OBJECT_TYPE           => p_object_type,
114 			 P_OBJECT_NAME		=> p_object_name,
115 			 P_OBJECT_OWNER		=> p_object_owner,
116 			 P_SNAPSHOT_LOG_SQL	=> null,
117 			 P_FAST_REFRESH_FLAG	=> null,
118 			 P_DIMENSION_FLAG        => null,
119 			 x_return_status         => x_return_status,
120 			 x_errorcode             => x_errorcode,
121 			 x_msg_count             => x_msg_count,
122 			 x_msg_data              => x_msg_data
123 			 );
124     end if;
125     close c_in_properties;
126     */
127 
128     x_return_status := FND_API.G_RET_STS_SUCCESS;
129 
130     -----------------------------------
131     -- Make a standard call to get message count
132     -- and if count is 1, get message info.
133     -- The client will directly display the x_msg_data (which is already
134     -- translated) if the x_msg_count = 1;
135     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
136     -- Server-side procedure to access the messages, and consolidate them
137     -- and display them all at once or display one message after another.
138 
139     FND_MSG_PUB.Count_And_Get
140         (   p_count        =>      x_msg_count,
141             p_data         =>      x_msg_data
142         );
143 
144 exception
145     when no_data_found then
146         return;
147     when others then
148       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
149       IF  FND_MSG_PUB.Check_Msg_Level
150          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
151       THEN
152           FND_MSG_PUB.Add_Exc_Msg
153              (   G_PKG_NAME,
154                  l_api_name
155              );
156       END IF;
157       FND_MSG_PUB.Count_And_Get
158          (   p_count        =>      x_msg_count,
159              p_data         =>      x_msg_data
160          );
161       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
162       raise;
163 end Create_Linkage_Inner;
164 
165 
166 procedure Create_Linkage (
167  P_OBJECT_TYPE		in VARCHAR2,
168  P_OBJECT_OWNER		in VARCHAR2,
169  P_OBJECT_NAME		in VARCHAR2,
170  P_CONC_PROGRAM_NAME	in VARCHAR2,
171  P_CONC_APP_ID		in NUMBER,
172  P_CONC_APP_SHORT_NAME	in VARCHAR2,
173  P_ENABLED_FLAG		in VARCHAR2,
174  P_REFRESH_MODE         in VARCHAR2,
175  P_CREATED_BY		in NUMBER       := null,
176  P_CREATION_DATE	in DATE         := null,
177  P_LAST_UPDATED_BY	in NUMBER       := null,
178  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
179  P_LAST_UPDATE_DATE	in DATE         := null,
180  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
181  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
182  x_return_status        OUT NOCOPY  VARCHAR2,
183  x_errorcode            OUT NOCOPY  NUMBER,
184  x_msg_count            OUT NOCOPY  NUMBER,
185  x_msg_data             OUT NOCOPY  VARCHAR2
186 ) is
187 begin
188 Create_Linkage_Inner (
189  P_OBJECT_TYPE,
190  P_OBJECT_OWNER,
191  P_OBJECT_NAME,
192  P_CONC_PROGRAM_NAME,
193  P_CONC_APP_ID,
194  P_CONC_APP_SHORT_NAME,
195  P_ENABLED_FLAG,
196  P_REFRESH_MODE,
197  P_CREATED_BY,
198  P_CREATION_DATE,
199  P_LAST_UPDATED_BY,
200  P_LAST_UPDATE_LOGIN,
201  P_LAST_UPDATE_DATE,
202  p_init_msg_list,
203  p_commit,
204  x_return_status,
205  x_errorcode,
206  x_msg_count,
207  x_msg_data
208 );
209 exception
210     when others then
211        null;
212 end Create_Linkage;
213 
214 
215 procedure Update_Linkage_Inner (
216  P_ROWID		in ROWID,
217  P_OBJECT_TYPE		in VARCHAR2,
218  P_OBJECT_OWNER		in VARCHAR2,
219  P_OBJECT_NAME		in VARCHAR2,
220  P_CONC_PROGRAM_NAME	in VARCHAR2,
221  P_CONC_APP_ID		in NUMBER,
222  P_CONC_APP_SHORT_NAME	in VARCHAR2,
223  P_ENABLED_FLAG		in VARCHAR2,
224  P_REFRESH_MODE         in VARCHAR2,
225  P_LAST_UPDATED_BY	in NUMBER       := null,
226  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
227  P_LAST_UPDATE_DATE	in DATE         := null,
228  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
229  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
230  x_return_status        OUT NOCOPY  VARCHAR2,
231  x_errorcode            OUT NOCOPY  NUMBER,
232  x_msg_count            OUT NOCOPY  NUMBER,
233  x_msg_data             OUT NOCOPY  VARCHAR2
234 ) is
235     l_sysdate               DATE         := sysdate;
236     l_api_name           CONSTANT VARCHAR2(30)   := 'Update_Linkage';
237     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
238     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
239     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
240 begin
241     -- Initialize API message list if necessary.
242     -- Initialize message list if p_init_msg_list is set to TRUE.
243     IF FND_API.to_Boolean( p_init_msg_list ) THEN
244        FND_MSG_PUB.initialize;
245     END IF;
246 
247     if (P_ROWID is not null) then
248       update bis_obj_prog_linkages
249       set enabled_flag            = P_ENABLED_FLAG,
250           conc_program_name       = P_CONC_PROGRAM_NAME,
251           conc_app_id             = P_CONC_APP_ID,
252           conc_app_short_name     = P_CONC_APP_SHORT_NAME,
253           refresh_mode            = P_REFRESH_MODE,
254           last_updated_by         = l_last_updated_by,
255           last_update_login       = l_last_update_login,
256           last_update_date        = l_last_update_date
257       where rowid  = P_ROWID;
258     else
259       UPDATE BIS_OBJ_PROG_LINKAGES
260       SET
261            ENABLED_FLAG          = P_ENABLED_FLAG,
262            REFRESH_MODE          = P_REFRESH_MODE,
263            LAST_UPDATE_DATE      = L_LAST_UPDATE_DATE,
264            LAST_UPDATED_BY       = L_LAST_UPDATED_BY,
265            LAST_UPDATE_LOGIN     = L_LAST_UPDATE_LOGIN
266       WHERE OBJECT_TYPE          = P_OBJECT_TYPE
267       AND OBJECT_NAME       = P_OBJECT_NAME
268       AND OBJECT_OWNER      = P_OBJECT_OWNER
269       AND CONC_PROGRAM_NAME = P_CONC_PROGRAM_NAME
270       AND CONC_APP_ID       = P_CONC_APP_ID;
271     END IF;
272 
273     x_return_status := FND_API.G_RET_STS_SUCCESS;
274 
275 -----------------------------------
276     -- Make a standard call to get message count
277     -- and if count is 1, get message info.
278     -- The client will directly display the x_msg_data (which is already
279     -- translated) if the x_msg_count = 1;
280     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
281     -- Server-side procedure to access the messages, and consolidate them
282     -- and display them all at once or display one message after another.
283 
284     FND_MSG_PUB.Count_And_Get
285         (   p_count        =>      x_msg_count,
286             p_data         =>      x_msg_data
287         );
288 
289 exception
290     when no_data_found then
291         return;
292     when others then
293       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
294       IF  FND_MSG_PUB.Check_Msg_Level
295          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
296       THEN
297           FND_MSG_PUB.Add_Exc_Msg
298              (   G_PKG_NAME,
299                  l_api_name
300              );
301       END IF;
302       FND_MSG_PUB.Count_And_Get
303          (   p_count        =>      x_msg_count,
304              p_data         =>      x_msg_data
305          );
306       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
307       raise;
308 end Update_Linkage_Inner;
309 
310 procedure Update_Linkage (
311  P_ROWID		in ROWID,
312  P_OBJECT_TYPE		in VARCHAR2,
313  P_OBJECT_OWNER		in VARCHAR2,
314  P_OBJECT_NAME		in VARCHAR2,
315  P_CONC_PROGRAM_NAME	in VARCHAR2,
316  P_CONC_APP_ID		in NUMBER,
317  P_CONC_APP_SHORT_NAME	in VARCHAR2,
318  P_ENABLED_FLAG		in VARCHAR2,
319  P_REFRESH_MODE         in VARCHAR2,
320  P_LAST_UPDATED_BY	in NUMBER       := null,
321  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
322  P_LAST_UPDATE_DATE	in DATE         := null,
323  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
324  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
325  x_return_status        OUT NOCOPY  VARCHAR2,
326  x_errorcode            OUT NOCOPY  NUMBER,
327  x_msg_count            OUT NOCOPY  NUMBER,
328  x_msg_data             OUT NOCOPY  VARCHAR2
329 ) is
330 begin
331 Update_Linkage_Inner (
332  P_ROWID,
333  P_OBJECT_TYPE,
334  P_OBJECT_OWNER,
335  P_OBJECT_NAME,
336  P_CONC_PROGRAM_NAME,
337  P_CONC_APP_ID,
338  P_CONC_APP_SHORT_NAME,
339  P_ENABLED_FLAG,
340  P_REFRESH_MODE,
341  P_LAST_UPDATED_BY,
342  P_LAST_UPDATE_LOGIN,
343  P_LAST_UPDATE_DATE,
344  p_init_msg_list,
345  p_commit,
346  x_return_status,
347  x_errorcode,
348  x_msg_count,
349  x_msg_data
350 );
351 exception
352     when others then
353       null;
354 end Update_Linkage;
355 
356 
357 
358 procedure Delete_Linkage (
359  P_ROWID		in ROWID
360 ) IS
361 BEGIN
362 
363     delete from bis_obj_prog_linkages
364     where rowid = P_ROWID;
365     If (SQL%NOTFOUND) then
366         RAISE NO_DATA_FOUND;
367     End If;
368 
369 end Delete_Linkage;
370 
371 
372 -- new implementation for removal of _OA
373 -- Note that x_is_oa_page is only meaningful as input parameter
374 -- when x_object_name as input parameter is not null
375 PROCEDURE page_name_validation (
376  P_OBJECT_TYPE          IN VARCHAR2,
377  P_USER_OBJECT_NAME     IN VARCHAR2,
378  X_OBJECT_NAME          IN OUT NOCOPY VARCHAR2,
379  X_IS_OA_PAGE           IN OUT NOCOPY VARCHAR2,
380  X_RETURN_STATUS        OUT NOCOPY VARCHAR2
381 ) IS
382  l_object_name      bis_obj_dependency.object_name%TYPE;
383  l_user_object_name VARCHAR2(480); --Enhancement 4106617
384  i                  NUMBER  := 0;
385  j                  NUMBER  := 0;
386  l_is_oa_page       VARCHAR2(1);
387 
388  -- new implementation to uptake the new page query to handle A and A_OA case
389    CURSOR c_page(p_user_object_name VARCHAR2, p_object_name VARCHAR2, p_is_oa_page VARCHAR2) IS
390      SELECT object_name, user_object_name, oa_page
391        FROM (-- portal pages existing in RSG
392 	     (select DISTINCT dep.object_name object_name, func.user_function_name user_object_name, 'N' oa_page
393 	      from fnd_form_functions_vl func, bis_obj_dependency dep
394 	      where upper(web_html_call)='ORACLESSWA.SWITCHPAGE'
395 	      and dep.object_type = 'PAGE'
396 	      and dep.object_name = substr(parameters,10))
397 	     UNION ALL
398 	     -- oa page existing in RSG repository
399 	     (select DISTINCT dep.object_name object_name, func.user_function_name user_object_name, 'Y' oa_page
400 	      from fnd_form_functions_vl func, bis_obj_dependency dep
401 	      where upper(func.web_html_call) LIKE '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
402 	      and dep.object_type = 'PAGE'
403 	      and bis_impl_dev_pkg.get_function_by_page(dep.object_name) = func.function_name)
404 	     UNION ALL
405 	     -- oa page not in RSG repository
406 	     select func.function_name object_name, func.user_function_name user_object_name, 'Y' oa_page
407 	     from fnd_form_functions_vl func
408 	     where upper(func.web_html_call) LIKE '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
409              and func.function_name not in (select f.function_name
410 					    from fnd_form_functions f, bis_obj_dependency dep
414              UNION ALL
411 					    where upper(f.web_html_call) LIKE '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
412 					    and dep.object_type = 'PAGE'
413 					    and bis_impl_dev_pkg.get_function_by_page(dep.object_name) = f.function_name)
415              -- page in RSG repository but w/o corresponding form function defined
416              (select DISTINCT objdep.object_name object_name, /*objdep.user_object_name user_object_name*/ objdep.object_name user_object_name, 'N' oa_page
417 	      --from bis_obj_dependency_v objdep
418 	      from bis_obj_dependency objdep
419 	      where objdep.object_type = 'PAGE'
420 	      and not exists (select 1 from fnd_form_functions func
421 			      where (upper(func.web_html_call) = 'ORACLESSWA.SWITCHPAGE'
422 				     and substr(func.parameters,10) = objdep.object_name)
423 /*			      or (upper(func.web_html_call) LIKE '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
424 				  and (func.function_name = objdep.object_name
425 				       or func.function_name||'_OA' = objdep.object_name))))
426 */
427 or (func.web_html_call like 'OA.jsp?akRegionCode=BIS_COMPONENT_PAGE'||'&'||'akRegionApplicationId=191%'
428                     and (func.function_name = objdep.object_name
429                          or (objdep.object_name like '%_OA'
430                              and func.function_name = SUBSTR(object_name, 1, LENGTH(object_name) - 3))))))
431        )
432        WHERE object_name LIKE p_object_name
433        AND user_object_name LIKE p_user_object_name
434        AND oa_page LIKE p_is_oa_page;
435 
436 begin
437   X_RETURN_STATUS := 'Y';  --default as Y.
438 
439   -- none of p_object_type and p_user_object_name can be null
440   if (P_OBJECT_TYPE is null) or (p_object_type <> 'PAGE') or (P_USER_OBJECT_NAME is null) then
441     X_RETURN_STATUS := 'N';
442     return;
443   end if;
444 
445   -- x_is_oa_page is only meaningful when x_object_name is not null
446   if (x_object_name is null) then
447     x_is_oa_page := null;
448   else  -- when x_object_name is not null, x_is_oa_page cannot be null either
449     if (x_is_oa_page is null) then
450         x_return_status := 'N';
451         return;
452     end if;
453   end if;
454 
455   -- new implementation
456   IF (x_object_name IS NULL) THEN
457      OPEN c_page(p_user_object_name, '%', '%');
458    ELSE
459      OPEN c_page(p_user_object_name, x_object_name, x_is_oa_page);
460   END IF;
461 
462   loop
463     fetch c_page into l_object_name, l_user_object_name, l_is_oa_page;
464     exit when c_page%NOTFOUND;
465   end loop;
466 
467   i := c_page%ROWCOUNT;
468   close c_page;
469 
470   IF (i = 0) THEN -- no row is fetched
471      x_return_status := 'N';
472    ELSIF (i = 1) then -- exactly one row is fetched
473      x_return_status := 'Y';
474    ELSE -- multiple rows are fetched
475      x_return_status := 'Y';
476      l_object_name := NULL;
477   END IF;
478 
479   x_object_name := l_object_name;
480   x_is_oa_page := l_is_oa_page;
481 EXCEPTION
482     WHEN OTHERS THEN
483       x_return_status := 'N';
484 end page_name_validation;
485 
486 
487 procedure object_name_validation (
488  P_OBJECT_TYPE          IN VARCHAR2,
489  P_USER_OBJECT_NAME     IN VARCHAR2,
490  X_OBJECT_NAME          IN OUT NOCOPY VARCHAR2,
491  X_RETURN_STATUS        OUT NOCOPY VARCHAR2
492 ) is
493  l_object_name bis_obj_dependency.object_name%TYPE;
494  i             NUMBER;
495 
496  ---fix bug 4067976. Added  type WEBPORTLETX for portlet form
497  ---function
498  cursor c_portlet_function(p_user_object_name VARCHAR2) is
499     select function_name
500       from fnd_form_functions_vl
501       where type in ('WEBPORTLET','WEBPORTLETX')
502       and user_function_name = p_user_object_name;
503 
504  cursor c_report_function(p_user_object_name VARCHAR2) is
505     select function_name
506       from fnd_form_functions_vl
507       where type in ('WWW','JSP') --modified for bug 4717956
508      and  user_function_name = p_user_object_name;
509 
510   cursor c_portlet_function_name(p_user_object_name VARCHAR2, p_function_name VARCHAR2) IS
511       select function_name
512 	from fnd_form_functions_vl
513 	where type in ('WEBPORTLET','WEBPORTLETX')
514 	and user_function_name = p_user_object_name
515 	and function_name = p_function_name;
516 
517  cursor c_report_function_name(p_user_object_name VARCHAR2, p_function_name VARCHAR2) IS
518       select function_name
519 	from fnd_form_functions_vl
520 	where type in ('WWW','JSP')  ---modified for bug 4717956
521 	and user_function_name = p_user_object_name
522 	and function_name = p_function_name;
523 
524  cursor c_rsg_object(p_object_type varchar2, p_user_object_name varchar2) is
525     -- bis_obj_properties
526     (SELECT prop.object_name FROM bis_obj_properties prop
527      WHERE bis_impl_dev_pkg.get_user_object_name(prop.object_type,prop.object_name) = p_user_object_name
528      AND prop.object_type = p_object_type)
529     UNION ALL
530     -- bis_obj_dependency object
531     (select distinct d.object_name
532      from bis_obj_dependency_v d
533      where d.object_type = p_object_type
534      and d.user_object_name = p_user_object_name
535      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
539     -- bis_obj_dependency depend_object
536 		     WHERE prop.object_type = d.object_type
537 		     AND prop.object_name = d.object_name))
538     UNION ALL
540     (SELECT DISTINCT d.depend_object_name
541      FROM bis_obj_dependency_v d
542      WHERE d.depend_object_type = p_object_type
543      AND d.user_depend_object_name = p_user_object_name
544      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
545 		     WHERE prop.object_type = d.object_type
546 		     AND prop.object_name = d.object_name)
547      AND NOT exists (SELECT 1 FROM bis_obj_dependency dep
548 		     WHERE dep.object_type = d.depend_object_type
549 		     AND dep.object_name = d.depend_object_name))
550     UNION ALL
551     -- bis_obj_prog_linkages object
552     (SELECT DISTINCT l.object_name
553      FROM bis_obj_prog_linkages l
554      WHERE bis_impl_dev_pkg.get_user_object_name(l.object_type, l.object_name) = p_user_object_name
555      AND l.object_type = p_object_type
556      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
557 		     WHERE prop.object_type = l.object_type
558 		     AND prop.object_name = l.object_name)
559      AND NOT exists (SELECT 1 FROM bis_obj_dependency d
560 		     WHERE (l.object_type = d.object_type AND l.object_name = d.object_name)
561 		     OR (l.object_type = d.depend_object_type AND l.object_name = d.depend_object_name)));
562 
563   cursor c_rsg_object_name(p_object_type varchar2, p_user_object_name varchar2, p_object_name varchar2) is
564     -- bis_obj_properties
565     (SELECT prop.object_name FROM bis_obj_properties prop
566      WHERE bis_impl_dev_pkg.get_user_object_name(prop.object_type,prop.object_name) = p_user_object_name
567      AND prop.object_type = p_object_type
568      AND prop.object_name = p_object_name)
569     UNION ALL
570     -- bis_obj_dependency object
571     (select distinct d.object_name
572      from bis_obj_dependency_v d
573      where d.object_type = p_object_type
574      and d.user_object_name = p_user_object_name
575      AND d.object_name = p_object_name
576      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
577 		     WHERE prop.object_type = d.object_type
578 		     AND prop.object_name = d.object_name))
579     UNION ALL
580     -- bis_obj_dependency depend_object
581     (SELECT DISTINCT d.depend_object_name
582      FROM bis_obj_dependency_v d
583      WHERE d.depend_object_type = p_object_type
584      AND d.depend_object_name = p_object_name
585      AND d.user_depend_object_name = p_user_object_name
586      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
587 		     WHERE prop.object_type = d.object_type
588 		     AND prop.object_name = d.object_name)
589      AND NOT exists (SELECT 1 FROM bis_obj_dependency dep
590 		     WHERE dep.object_type = d.depend_object_type
591 		     AND dep.object_name = d.depend_object_name))
592     UNION ALL
593     -- bis_obj_prog_linkages object
594     (SELECT DISTINCT l.object_name
595      FROM bis_obj_prog_linkages l
596      WHERE bis_impl_dev_pkg.get_user_object_name(l.object_type, l.object_name) = p_user_object_name
597      AND l.object_type = p_object_type
598      AND l.object_name = p_object_name
599      AND NOT exists (SELECT 1 FROM bis_obj_properties prop
600 		     WHERE prop.object_type = l.object_type
601 		     AND prop.object_name = l.object_name)
602      AND NOT exists (SELECT 1 FROM bis_obj_dependency d
603 		     WHERE (l.object_type = d.object_type AND l.object_name = d.object_name)
604 		     OR (l.object_type = d.depend_object_type AND l.object_name = d.depend_object_name)));
605 
606 begin
607    X_RETURN_STATUS := 'Y';  --default as Y.
608 
609    if (P_OBJECT_TYPE is null) or (P_USER_OBJECT_NAME is null) then
610       X_RETURN_STATUS := 'N';
611       return;
612    end if;
613 
614    --First check if the object exists in RSG
615    if (x_object_name is null) then
616       open c_rsg_object(P_OBJECT_TYPE, P_USER_OBJECT_NAME);
617       loop
618 	 FETCH C_RSG_OBJECT into x_object_name;
619 	 exit when C_RSG_OBJECT%NOTFOUND;
620       end loop;
621 
622       i := C_RSG_OBJECT%ROWCOUNT;
623       if (i=1) then  --exactly one row was fetched
624 	 X_RETURN_STATUS := 'Y';
625 	 CLOSE C_RSG_OBJECT;
626 	 return;
627        elsif (i>1) then   --more than one row was fetched
628 	 X_RETURN_STATUS := 'Y';
629 	 X_OBJECT_NAME := null;   -- indicate more than one row is fetched.
630 	 CLOSE C_RSG_OBJECT;
631 	 return;
632       end if;
633       close C_RSG_OBJECT;
634     else
635 	    open c_rsg_object_name(P_OBJECT_TYPE, P_USER_OBJECT_NAME, X_OBJECT_NAME);
636 	    fetch c_rsg_object_name into x_object_name;
637 	    if c_rsg_object_name%FOUND then
638 	       X_RETURN_STATUS := 'Y';
639 	       close c_rsg_object_name;
640 	       return;
641 	    end if;
642 	    close c_rsg_object_name;
643    end if;
644 
645 
646    -- If object doesn't exists in RSG, validate against data source
647    -- remove db object validation
648    if P_OBJECT_TYPE = 'TABLE' OR p_object_type = 'VIEW'
649      OR p_object_type = 'MV' OR p_object_type='AWCUBE' THEN
650       x_return_status := 'Y';
651       x_object_name := p_user_object_name;
652     elsif P_OBJECT_TYPE= 'PORTLET' then
653       if (X_OBJECT_NAME is null) then
654    	 open c_portlet_function(p_user_object_name);
655 	 loop
659 
656 	    FETCH C_portlet_FUNCTION into x_object_name;
657 	    exit when C_portlet_FUNCTION%NOTFOUND;
658 	 end loop;
660 	 i := C_portlet_FUNCTION%ROWCOUNT;
661 	 if (i=0) then   --no rows were fetched
662 	    X_RETURN_STATUS := 'N';
663 	  elsif (i=1) then  --exactly one row was fetched
664 	    X_RETURN_STATUS := 'Y';
665 	  elsif (i>1) then   --more than one row was fetched
666 	    X_RETURN_STATUS := 'Y';
667 	    X_OBJECT_NAME := null;   -- indicate more than one row is fetched.
668 	 end if;
669 
670 	 close c_portlet_function;
671 
672        elsif (X_OBJECT_NAME is not null) then
673 	       open c_portlet_function_name(p_user_object_name, x_object_name);
674 	       FETCH C_portlet_FUNCTION_NAME into x_object_name;
675 	       if C_portlet_FUNCTION_NAME%NOTFOUND then
676 		  X_RETURN_STATUS := 'N';
677 	       end if;
678 	       close  C_portlet_FUNCTION_NAME;
679       END IF;
680     elsif P_OBJECT_TYPE='REPORT' THEN
681 	 if (X_OBJECT_NAME is null) then
682 	    open c_report_function(p_user_object_name);
683 	    loop
684 	       FETCH C_report_FUNCTION into x_object_name;
685 	       exit when C_report_FUNCTION%NOTFOUND;
686 	    end loop;
687 
688 	    i := C_report_FUNCTION%ROWCOUNT;
689 	    if (i=0) then   --no rows were fetched
690 	       X_RETURN_STATUS := 'N';
691 	     elsif (i=1) then  --exactly one row was fetched
692 	       X_RETURN_STATUS := 'Y';
693 	     elsif (i>1) then   --more than one row was fetched
694 	       X_RETURN_STATUS := 'Y';
695 	       X_OBJECT_NAME := null;   -- indicate more than one row is fetched.
696 	    end if;
697 
698 	    close c_report_function;
699 
700 	  elsif (X_OBJECT_NAME is not null) then
701 		  open c_report_function_name(p_user_object_name, x_object_name);
702 		  FETCH C_report_FUNCTION_NAME into x_object_name;
703 		  if C_report_FUNCTION_NAME%NOTFOUND then
704 		     X_RETURN_STATUS := 'N';
705 		  end if;
706 		  close  C_report_FUNCTION_NAME;
707 	 end if;
708 
709     else
710 	    x_return_status := 'N';
711    end if;
712 
713 EXCEPTION
714    WHEN OTHERS THEN
715       x_return_status := 'N' ;
716 end  object_name_validation;
717 
718 procedure object_owner_validation (
719  P_OBJECT_OWNER         IN VARCHAR2,
720  X_RETURN_STATUS        OUT NOCOPY VARCHAR2
721 ) is
722  l_object_owner VARCHAR2(50);
723 begin
724   X_RETURN_STATUS := 'Y';  --default as Y.
725 
726   if (P_OBJECT_OWNER is null) then
727 	X_RETURN_STATUS := 'N';
728 	return;
729   end if;
730 
731   SELECT APPLICATION_SHORT_NAME INTO l_object_owner
732   FROM FND_APPLICATION
733   WHERE APPLICATION_SHORT_NAME = P_OBJECT_OWNER;
734 
735   IF SQL%NOTFOUND THEN
736     x_return_status := 'N';
737   END IF;
738 end object_owner_validation;
739 
740 
741 -- added to detect loop for enabled dependency in RSG
742 PROCEDURE dep_loop_validation (
743  p_object_type          IN VARCHAR2,
744  p_object_name          IN VARCHAR2,
745  p_dep_object_type      IN VARCHAR2,
746  p_dep_object_name      IN VARCHAR2,
747  p_enabled_flag         IN VARCHAR2,
748  X_RETURN_STATUS        OUT NOCOPY VARCHAR2
749 ) IS
750    CURSOR c_dep_loop (p_object_type VARCHAR2, p_object_name VARCHAR2, p_dep_object_type VARCHAR2, p_dep_object_name VARCHAR2) IS
751       SELECT obj_parents.object_name
752 	FROM (SELECT object_type, object_name
753 	      -- bug 3492509: loop detection regardless of enabled flag condition
754 	      -- FROM (SELECT object_type, object_name, depend_object_type, depend_object_name FROM bis_obj_dependency WHERE enabled_flag = 'Y') d
755 	      FROM bis_obj_dependency d
756 	      START WITH d.depend_object_type = p_object_type AND d.depend_object_name = p_object_name
757 	      CONNECT BY PRIOR d.object_name = d.depend_object_name
758 	      AND PRIOR d.object_type = d.depend_object_type) obj_parents
759 	WHERE obj_parents.object_type = p_dep_object_type
760 	AND obj_parents.object_name = p_dep_object_name;
761    v_dummy_obj_name VARCHAR2(480); --Enhancement 4106617
762 BEGIN
763    --bug 3492509: loop detection regardless of enabled flag condition
764    --IF ( (p_enabled_flag IS NULL) OR Upper(p_enabled_flag) <> 'Y') THEN
765    --   x_return_status := 'Y';
766    --   RETURN;
767    --END IF;
768 
769    --bug 3494363: dependent object cannot be the same as parent object
770    IF (p_object_name = p_dep_object_name AND p_object_type = p_dep_object_type) THEN
771       x_return_status := 'N';
772       RETURN;
773    END IF;
774 
775    OPEN c_dep_loop(p_object_type, p_object_name, p_dep_object_type, p_dep_object_name);
776    LOOP
777       FETCH c_dep_loop INTO v_dummy_obj_name;
778       EXIT WHEN c_dep_loop%notfound;
779    END LOOP;
780 
781    IF (c_dep_loop%rowcount > 0) THEN
782       x_return_status := 'N';
783     ELSE
784       x_return_status := 'Y';
785    END IF;
786 
787    CLOSE c_dep_loop;
788 
789    RETURN;
790 EXCEPTION
791    WHEN OTHERS THEN
792       x_return_status := 'N';
793       RETURN;
794 END dep_loop_validation;
795 
796 procedure conc_program_validation (
797  P_USER_CONC_PROGRAM_NAME    IN VARCHAR2,
798  X_CONC_APP_ID               IN OUT NOCOPY NUMBER,
799  X_CONC_APP_SHORT_NAME       OUT NOCOPY VARCHAR2,
803  i                   NUMBER := 0;
800  X_CONC_PROGRAM_NAME         OUT NOCOPY VARCHAR2,
801  X_RETURN_STATUS             OUT NOCOPY VARCHAR2
802 ) is
804 
805  CURSOR C_PROGRAM_APP_ID(P_USER_CONC_PROGRAM_NAME VARCHAR2,P_CONC_APP_ID NUMBER) IS
806 	SELECT conc.CONCURRENT_PROGRAM_NAME, appl.APPLICATION_SHORT_NAME
807 	FROM FND_CONCURRENT_PROGRAMS_VL conc, FND_APPLICATION appl
808 	WHERE conc.USER_CONCURRENT_PROGRAM_NAME = P_USER_CONC_PROGRAM_NAME
809 	AND conc.APPLICATION_ID = P_CONC_APP_ID
810 	AND conc.APPLICATION_ID = appl.APPLICATION_ID
811         AND conc.ENABLED_FLAG = 'Y';
812 
813  CURSOR C_PROGRAM(P_USER_CONC_PROGRAM_NAME VARCHAR2) IS
814 	SELECT conc.CONCURRENT_PROGRAM_NAME, conc.APPLICATION_ID, appl.APPLICATION_SHORT_NAME
815 	FROM FND_CONCURRENT_PROGRAMS_VL conc, FND_APPLICATION appl
816 	WHERE conc.USER_CONCURRENT_PROGRAM_NAME = P_USER_CONC_PROGRAM_NAME
817 	AND conc.APPLICATION_ID = appl.APPLICATION_ID
818         AND conc.ENABLED_FLAG = 'Y';
819 
820 begin
821   X_RETURN_STATUS := 'Y';  --default as Y.
822 
823   if (P_USER_CONC_PROGRAM_NAME is null) or (X_RETURN_STATUS is null) then
824 	X_RETURN_STATUS := 'N';
825 
826   elsif (X_CONC_APP_ID is not null) then  --derive conc_program_name only
827     OPEN C_PROGRAM_APP_ID(P_USER_CONC_PROGRAM_NAME,X_CONC_APP_ID);
828     FETCH C_PROGRAM_APP_ID into X_CONC_PROGRAM_NAME, X_CONC_APP_SHORT_NAME;
829     if C_PROGRAM_APP_ID%NOTFOUND then
830 	X_RETURN_STATUS := 'N';
831     end if;
832     close  C_PROGRAM_APP_ID;
833 
834   elsif (X_CONC_APP_ID is null) then   --derive both conc_program_name and conc_app_id
835     OPEN C_PROGRAM(P_USER_CONC_PROGRAM_NAME);
836     loop
837       FETCH C_PROGRAM into X_CONC_PROGRAM_NAME, X_CONC_APP_ID, X_CONC_APP_SHORT_NAME;
838       exit when C_PROGRAM%NOTFOUND;
839     end loop;
840 
841     i := C_PROGRAM%ROWCOUNT;
842     if (i=0) then   --no rows were fetched
843 	X_RETURN_STATUS := 'N';
844     elsif (i=1) then  --exactly one row was fetched
845 	X_RETURN_STATUS := 'Y';
846     elsif (i>1) then   --more than one row was fetched
847 	X_RETURN_STATUS := 'Y';
848 	X_CONC_APP_ID := -1;   -- indicate more than one row is fetched.
849 	X_CONC_PROGRAM_NAME := null;
850 	X_CONC_APP_SHORT_NAME := null;
851     end if;
852 
853     close  C_PROGRAM;
854 
855   else
856 	X_RETURN_STATUS := 'N';
857   end if;
858 
859   EXCEPTION
860     WHEN NO_DATA_FOUND THEN
861       x_return_status := 'N' ;
862     WHEN OTHERS THEN
863       x_return_status := 'N' ;
864 end conc_program_validation;
865 
866 
867 FUNCTION Refresh_Program_Exists(
868  P_OBJECT_TYPE		in VARCHAR2,
869  P_OBJECT_NAME		in VARCHAR2) RETURN VARCHAR2
870 IS
871  Cursor C_Program(P_OBJECT_TYPE VARCHAR2, P_OBJECT_NAME VARCHAR2) IS
872    select distinct conc_program_name
873    from bis_obj_prog_linkages
874    where object_type = P_OBJECT_TYPE
875    and object_name = P_OBJECT_NAME
876    and enabled_flag = 'Y';
877 
878 
879  l_exists VARCHAR2(1) := 'N';
880  l_conc_program_name VARCHAR2(30);
881 
882 BEGIN
883   OPEN C_Program(P_OBJECT_TYPE, P_OBJECT_NAME);
884   FETCH C_PROGRAM into l_conc_program_name;
885   if C_PROGRAM%FOUND then
886      l_exists := 'Y';
887   end if;
888   close  C_PROGRAM;
889 
890   return l_exists;
891 END Refresh_Program_Exists;
892 
893 
894 procedure Create_Dependency_Inner (
895  P_OBJECT_TYPE		in VARCHAR2,
896  P_OBJECT_OWNER		in VARCHAR2,
897  P_OBJECT_NAME		in VARCHAR2,
898  P_ENABLED_FLAG		in VARCHAR2,
899  P_DEPEND_OBJECT_TYPE	in VARCHAR2,
900  P_DEPEND_OBJECT_OWNER	in VARCHAR2,
901  P_DEPEND_OBJECT_NAME	in VARCHAR2,
902  P_FROM_UI              in VARCHAR2,
903  P_CREATED_BY		in NUMBER       := null,
904  P_CREATION_DATE	in DATE         := null,
905  P_LAST_UPDATED_BY	in NUMBER       := null,
906  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
907  P_LAST_UPDATE_DATE	in DATE         := null,
908  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
909  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
910  x_return_status        OUT NOCOPY  VARCHAR2,
911  x_errorcode            OUT NOCOPY  NUMBER,
912  x_msg_count            OUT NOCOPY  NUMBER,
913  x_msg_data             OUT NOCOPY  VARCHAR2
914 ) IS
915     l_sysdate            DATE         := sysdate;
916     l_api_name           CONSTANT VARCHAR2(30)   := 'Create_Dependency';
917     l_created_by         NUMBER := nvl(P_CREATED_BY,g_current_user_id);
918     l_creation_date      DATE   := nvl(P_CREATION_DATE, l_Sysdate);
919     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
920     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
921     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
922 
923     cursor c_in_properties(p_object_name varchar2, p_object_type varchar2) is
924       select object_name
925       from bis_obj_properties
926       where object_name = p_object_name
927         and object_type = p_object_type;
928 
929     l_object_name bis_obj_properties.object_name%type;
930     l_return_status varchar2(10);
931     l_errorcode     number;
932     l_msg_count     number;
933     l_msg_data      varchar2(4000);
934 begin
938        FND_MSG_PUB.initialize;
935     -- Initialize API message list if necessary.
936     -- Initialize message list if p_init_msg_list is set to TRUE.
937     IF FND_API.to_Boolean( p_init_msg_list ) THEN
939     END IF;
940 
941     insert into bis_obj_dependency (
942         OBJECT_TYPE,
943         OBJECT_OWNER,
944         OBJECT_NAME,
945         ENABLED_FLAG,
946         DEPEND_OBJECT_TYPE,
947         DEPEND_OBJECT_OWNER,
948         DEPEND_OBJECT_NAME,
949         CREATED_BY,
950         CREATION_DATE,
951         LAST_UPDATED_BY,
952         LAST_UPDATE_LOGIN,
953         LAST_UPDATE_DATE)
954     values(
955         P_OBJECT_TYPE,
956         P_OBJECT_OWNER,
957         P_OBJECT_NAME,
958         P_ENABLED_FLAG,
959         P_DEPEND_OBJECT_TYPE,
960         P_DEPEND_OBJECT_OWNER,
961         P_DEPEND_OBJECT_NAME,
962         L_CREATED_BY,
963         L_CREATION_DATE,
964         L_LAST_UPDATED_BY,
965         L_LAST_UPDATE_LOGIN,
966         L_LAST_UPDATE_DATE);
967 
968     /* create new rows in bis_obj_properties if it is a new object */
969     if (p_from_ui is not null) then
970        -- check parent object
971        open c_in_properties(p_object_name, p_object_type);
972        fetch c_in_properties into l_object_name;
973        if c_in_properties%NOTFOUND then
974           create_properties(
975 		P_OBJECT_TYPE           => p_object_type,
976 		P_OBJECT_NAME		=> p_object_name,
977 		P_OBJECT_OWNER		=> p_object_owner,
978 		P_SNAPSHOT_LOG_SQL	=> null,
979 		P_FAST_REFRESH_FLAG	=> null,
980 		P_DIMENSION_FLAG        => null,
981 		x_return_status         => l_return_status,
982 		x_errorcode             => l_errorcode,
983 		x_msg_count             => l_msg_count,
984 		x_msg_data              => l_msg_data
985 		);
986        end if;
987        close c_in_properties;
988 
989        --check child object
990        open c_in_properties(p_depend_object_name, p_depend_object_type);
991        fetch c_in_properties into l_object_name;
992        if c_in_properties%NOTFOUND then
993           create_properties(
994 		P_OBJECT_TYPE           => p_depend_object_type,
995 		P_OBJECT_NAME		=> p_depend_object_name,
996 		P_OBJECT_OWNER		=> p_depend_object_owner,
997 		P_SNAPSHOT_LOG_SQL	=> null,
998 		P_FAST_REFRESH_FLAG	=> null,
999 		P_DIMENSION_FLAG        => null,
1000 		x_return_status         => l_return_status,
1001 		x_errorcode             => l_errorcode,
1002 		x_msg_count             => l_msg_count,
1003 		x_msg_data              => l_msg_data
1004 		);
1005        end if;
1006        close c_in_properties;
1007     end if;
1008 
1009     x_return_status := FND_API.G_RET_STS_SUCCESS;
1010 
1011 -----------------------------------
1012     -- Make a standard call to get message count
1013     -- and if count is 1, get message info.
1014     -- The client will directly display the x_msg_data (which is already
1015     -- translated) if the x_msg_count = 1;
1016     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
1017     -- Server-side procedure to access the messages, and consolidate them
1018     -- and display them all at once or display one message after another.
1019 
1020     FND_MSG_PUB.Count_And_Get
1021         (   p_count        =>      x_msg_count,
1022             p_data         =>      x_msg_data
1023         );
1024 exception
1025     when no_data_found then
1026         return;
1027     when others then
1028       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1029       IF  FND_MSG_PUB.Check_Msg_Level
1030          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1031       THEN
1032           FND_MSG_PUB.Add_Exc_Msg
1033              (   G_PKG_NAME,
1034                  l_api_name
1035              );
1036       END IF;
1037       FND_MSG_PUB.Count_And_Get
1038          (   p_count        =>      x_msg_count,
1039              p_data         =>      x_msg_data
1040          );
1041       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
1042       raise;
1043 end Create_Dependency_Inner;
1044 
1045 procedure Create_Dependency (
1046  P_OBJECT_TYPE		in VARCHAR2,
1047  P_OBJECT_OWNER		in VARCHAR2,
1048  P_OBJECT_NAME		in VARCHAR2,
1049  P_ENABLED_FLAG		in VARCHAR2,
1050  P_DEPEND_OBJECT_TYPE	in VARCHAR2,
1051  P_DEPEND_OBJECT_OWNER	in VARCHAR2,
1052  P_DEPEND_OBJECT_NAME	in VARCHAR2,
1053  P_FROM_UI              in VARCHAR2,
1054  P_CREATED_BY		in NUMBER       := null,
1055  P_CREATION_DATE	in DATE         := null,
1056  P_LAST_UPDATED_BY	in NUMBER       := null,
1057  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
1058  P_LAST_UPDATE_DATE	in DATE         := null,
1059  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
1060  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
1061  x_return_status        OUT NOCOPY  VARCHAR2,
1062  x_errorcode            OUT NOCOPY  NUMBER,
1063  x_msg_count            OUT NOCOPY  NUMBER,
1064  x_msg_data             OUT NOCOPY  VARCHAR2
1065 ) IS
1066 begin
1067 Create_Dependency_Inner (
1068  P_OBJECT_TYPE,
1069  P_OBJECT_OWNER,
1070  P_OBJECT_NAME,
1071  P_ENABLED_FLAG,
1072  P_DEPEND_OBJECT_TYPE,
1073  P_DEPEND_OBJECT_OWNER,
1074  P_DEPEND_OBJECT_NAME,
1075  P_FROM_UI,
1076  P_CREATED_BY,
1077  P_CREATION_DATE,
1078  P_LAST_UPDATED_BY,
1079  P_LAST_UPDATE_LOGIN,
1080  P_LAST_UPDATE_DATE,
1081  p_init_msg_list,
1082  p_commit,
1083  x_return_status,
1084  x_errorcode,
1085  x_msg_count,
1086  x_msg_data
1087 );
1088 exception
1089     when others then
1090       null;
1091 end Create_Dependency;
1092 
1093 
1094 procedure Update_Dependency_Inner (
1095  P_ROWID		in ROWID        := null,
1096  P_OBJECT_TYPE		in VARCHAR2,
1097  P_OBJECT_OWNER		in VARCHAR2,
1098  P_OBJECT_NAME		in VARCHAR2,
1099  P_ENABLED_FLAG		in VARCHAR2,
1100  P_DEPEND_OBJECT_TYPE	in VARCHAR2,
1101  P_DEPEND_OBJECT_OWNER	in VARCHAR2,
1102  P_DEPEND_OBJECT_NAME	in VARCHAR2,
1103  P_FROM_UI              in VARCHAR2,
1104  P_LAST_UPDATED_BY	in NUMBER       := null,
1105  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
1106  P_LAST_UPDATE_DATE	in DATE         := null,
1107  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
1108  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
1109  x_return_status        OUT NOCOPY  VARCHAR2,
1110  x_errorcode            OUT NOCOPY  NUMBER,
1111  x_msg_count            OUT NOCOPY  NUMBER,
1112  x_msg_data             OUT NOCOPY  VARCHAR2
1113 ) is
1114     l_sysdate            DATE         := sysdate;
1115     l_api_name           CONSTANT VARCHAR2(30)   := 'Update_Dependency';
1116     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
1117     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
1118     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
1119 
1120     cursor c_in_properties(p_object_name varchar2, p_object_type varchar2) is
1121       select object_name
1122       from bis_obj_properties
1123       where object_name = p_object_name
1124         and object_type = p_object_type;
1125 
1126     l_object_name bis_obj_properties.object_name%type;
1127     l_return_status varchar2(10);
1128     l_errorcode     number;
1129     l_msg_count     number;
1130     l_msg_data      varchar2(4000);
1131 begin
1132     -- Initialize API message list if necessary.
1133     -- Initialize message list if p_init_msg_list is set to TRUE.
1134     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1135        FND_MSG_PUB.initialize;
1136     END IF;
1137 
1138     if (P_ROWID IS NOT NULL) THEN
1139        update bis_obj_dependency
1140        SET object_owner            = p_object_owner,
1141 	   enabled_flag            = P_ENABLED_FLAG,
1142            depend_object_type      = P_DEPEND_OBJECT_TYPE,
1143            depend_object_owner     = P_DEPEND_OBJECT_OWNER,
1144            depend_object_name      = P_DEPEND_OBJECT_NAME,
1145            last_updated_by         = L_LAST_UPDATED_BY,
1146            last_update_login       = L_LAST_UPDATE_LOGIN,
1147            last_update_date        = L_LAST_UPDATE_DATE
1148        where rowid  = P_ROWID;
1149     else
1150        UPDATE BIS_OBJ_DEPENDENCY
1151        SET object_owner            = p_object_owner,
1152            ENABLED_FLAG            = P_ENABLED_FLAG,
1153            DEPEND_OBJECT_OWNER     = P_DEPEND_OBJECT_OWNER,
1154            LAST_UPDATE_DATE        = L_LAST_UPDATE_DATE,
1155            LAST_UPDATED_BY         = L_LAST_UPDATED_BY,
1156            LAST_UPDATE_LOGIN       = L_LAST_UPDATE_LOGIN
1157        WHERE OBJECT_TYPE           = P_OBJECT_TYPE
1158        AND OBJECT_NAME             = P_OBJECT_NAME
1159        AND DEPEND_OBJECT_NAME      = P_DEPEND_OBJECT_NAME
1160        AND DEPEND_OBJECT_TYPE      = P_DEPEND_OBJECT_TYPE;
1161     end if;
1162 
1163     /* create new rows in bis_obj_properties if it is a new object */
1164     if (p_from_ui is not null) then
1165        --check child object
1166        open c_in_properties(p_depend_object_name, p_depend_object_type);
1167        fetch c_in_properties into l_object_name;
1168        if c_in_properties%NOTFOUND then
1169           create_properties(
1170 		P_OBJECT_TYPE           => p_depend_object_type,
1171 		P_OBJECT_NAME		=> p_depend_object_name,
1172 		P_OBJECT_OWNER		=> p_depend_object_owner,
1173 		P_SNAPSHOT_LOG_SQL	=> null,
1174 		P_FAST_REFRESH_FLAG	=> null,
1175 		P_DIMENSION_FLAG        => null,
1176 		x_return_status         => l_return_status,
1177 		x_errorcode             => l_errorcode,
1178 		x_msg_count             => l_msg_count,
1179 		x_msg_data              => l_msg_data
1180 		);
1181        end if;
1182        close c_in_properties;
1183     end if;
1184 
1185     /* update the owner of the depend object in property and linkage for bug 3562027 */
1186     execute immediate 'update bis_obj_properties set object_owner = :1
1187       WHERE object_type = :2 AND object_name = :3'
1188       using P_DEPEND_OBJECT_OWNER, P_DEPEND_OBJECT_TYPE, P_DEPEND_OBJECT_NAME;
1189 
1190     execute immediate 'update bis_obj_prog_linkages set object_owner = :1
1191       WHERE object_type = :2 AND object_name = :3'
1192       using P_DEPEND_OBJECT_OWNER, P_DEPEND_OBJECT_TYPE, P_DEPEND_OBJECT_NAME;
1193 
1194     x_return_status := FND_API.G_RET_STS_SUCCESS;
1195 
1196 -----------------------------------
1197     -- Make a standard call to get message count
1198     -- and if count is 1, get message info.
1199     -- The client will directly display the x_msg_data (which is already
1200     -- translated) if the x_msg_count = 1;
1201     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
1205     FND_MSG_PUB.Count_And_Get
1202     -- Server-side procedure to access the messages, and consolidate them
1203     -- and display them all at once or display one message after another.
1204 
1206         (   p_count        =>      x_msg_count,
1207             p_data         =>      x_msg_data
1208         );
1209 
1210 exception
1211     when no_data_found then
1212         return;
1213     when others then
1214       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1215       IF  FND_MSG_PUB.Check_Msg_Level
1216          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1217       THEN
1218           FND_MSG_PUB.Add_Exc_Msg
1219              (   G_PKG_NAME,
1220                  l_api_name
1221              );
1222       END IF;
1223       FND_MSG_PUB.Count_And_Get
1224          (   p_count        =>      x_msg_count,
1225              p_data         =>      x_msg_data
1226          );
1227       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
1228       raise;
1229 end Update_Dependency_Inner;
1230 
1231 procedure Update_Dependency (
1232  P_ROWID		in ROWID        := null,
1233  P_OBJECT_TYPE		in VARCHAR2,
1234  P_OBJECT_OWNER		in VARCHAR2,
1235  P_OBJECT_NAME		in VARCHAR2,
1236  P_ENABLED_FLAG		in VARCHAR2,
1237  P_DEPEND_OBJECT_TYPE	in VARCHAR2,
1238  P_DEPEND_OBJECT_OWNER	in VARCHAR2,
1239  P_DEPEND_OBJECT_NAME	in VARCHAR2,
1240  P_FROM_UI              in VARCHAR2,
1241  P_LAST_UPDATED_BY	in NUMBER       := null,
1242  P_LAST_UPDATE_LOGIN	in NUMBER       := null,
1243  P_LAST_UPDATE_DATE	in DATE         := null,
1244  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
1245  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
1246  x_return_status        OUT NOCOPY  VARCHAR2,
1247  x_errorcode            OUT NOCOPY  NUMBER,
1248  x_msg_count            OUT NOCOPY  NUMBER,
1249  x_msg_data             OUT NOCOPY  VARCHAR2
1250 ) is
1251 begin
1252 Update_Dependency_Inner (
1253  P_ROWID,
1254  P_OBJECT_TYPE,
1255  P_OBJECT_OWNER,
1256  P_OBJECT_NAME,
1257  P_ENABLED_FLAG,
1258  P_DEPEND_OBJECT_TYPE,
1259  P_DEPEND_OBJECT_OWNER,
1260  P_DEPEND_OBJECT_NAME,
1261  P_FROM_UI,
1262  P_LAST_UPDATED_BY,
1263  P_LAST_UPDATE_LOGIN,
1264  P_LAST_UPDATE_DATE,
1265  p_init_msg_list,
1266  p_commit,
1267  x_return_status,
1268  x_errorcode,
1269  x_msg_count,
1270  x_msg_data
1271 );
1272 
1273 exception
1274     when others then
1275       null;
1276 end Update_Dependency;
1277 
1278 
1279 procedure Delete_Dependency (
1280  P_ROWID		in ROWID
1281 ) is
1282 BEGIN
1283 
1284     delete from bis_obj_dependency
1285     where rowid = P_ROWID;
1286 
1287     If (SQL%NOTFOUND) then
1288         RAISE NO_DATA_FOUND;
1289     End If;
1290 
1291 end Delete_Dependency;
1292 
1293 
1294 
1295 procedure Create_Properties_Inner(
1296  P_OBJECT_TYPE 		in VARCHAR2,
1297  P_OBJECT_NAME		in VARCHAR2,
1298  P_OBJECT_OWNER		in VARCHAR2,
1299  P_SNAPSHOT_LOG_SQL	in VARCHAR2,
1300  P_FAST_REFRESH_FLAG	in VARCHAR2,
1301  P_DIMENSION_FLAG       in VARCHAR2,
1302  P_CUSTOM_API           in VARCHAR2,
1303  P_CREATED_BY             in NUMBER,
1304  P_CREATION_DATE          in DATE,
1305  P_LAST_UPDATED_BY        in NUMBER,
1306  P_LAST_UPDATE_LOGIN	in NUMBER,
1307  P_LAST_UPDATE_DATE	in DATE,
1308  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
1309  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
1310  x_return_status        OUT NOCOPY  VARCHAR2,
1311  x_errorcode            OUT NOCOPY  NUMBER,
1312  x_msg_count            OUT NOCOPY  NUMBER,
1313  x_msg_data             OUT NOCOPY  VARCHAR2
1314 ) IS
1315     l_sysdate            DATE         := sysdate;
1316     l_api_name           CONSTANT VARCHAR2(30)   := 'Create_Properties';
1317     l_created_by         NUMBER := nvl(P_CREATED_BY,g_current_user_id);
1318     l_creation_date      DATE   := nvl(P_CREATION_DATE, l_Sysdate);
1319     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
1320     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
1321     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
1322 
1323 begin
1324     -- Initialize API message list if necessary.
1325     -- Initialize message list if p_init_msg_list is set to TRUE.
1326     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1327        FND_MSG_PUB.initialize;
1328     END IF;
1329 
1330     insert into bis_obj_properties (
1331 	OBJECT_TYPE,
1332 	OBJECT_NAME,
1333 	OBJECT_OWNER,
1334 	--SNAPSHOT_LOG_SQL,
1335 	FAST_REFRESH_FLAG,
1336 	DIMENSION_FLAG,
1337     CUSTOM_API,
1338         CREATED_BY,
1339         CREATION_DATE,
1340         LAST_UPDATED_BY,
1341         LAST_UPDATE_LOGIN,
1342         LAST_UPDATE_DATE)
1343     values(
1344         P_OBJECT_TYPE,
1345         P_OBJECT_NAME,
1346 	P_OBJECT_OWNER,
1347 	--P_SNAPSHOT_LOG_SQL,
1348 	P_FAST_REFRESH_FLAG,
1349 	P_DIMENSION_FLAG,
1350     P_CUSTOM_API,
1351         L_CREATED_BY,
1352         L_CREATION_DATE,
1353         L_LAST_UPDATED_BY,
1354         L_LAST_UPDATE_LOGIN,
1355         L_LAST_UPDATE_DATE);
1356 
1357     x_return_status := FND_API.G_RET_STS_SUCCESS;
1358 
1359 -----------------------------------
1360     -- Make a standard call to get message count
1361     -- and if count is 1, get message info.
1362     -- The client will directly display the x_msg_data (which is already
1363     -- translated) if the x_msg_count = 1;
1364     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
1365     -- Server-side procedure to access the messages, and consolidate them
1366     -- and display them all at once or display one message after another.
1367 
1368     FND_MSG_PUB.Count_And_Get
1369         (   p_count        =>      x_msg_count,
1370             p_data         =>      x_msg_data
1371         );
1372 exception
1373     when no_data_found then
1374         return;
1375     when others then
1376       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1377       IF  FND_MSG_PUB.Check_Msg_Level
1378          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1379       THEN
1380           FND_MSG_PUB.Add_Exc_Msg
1381              (   G_PKG_NAME,
1382                  l_api_name
1383              );
1384       END IF;
1385       FND_MSG_PUB.Count_And_Get
1386          (   p_count        =>      x_msg_count,
1387              p_data         =>      x_msg_data
1388          );
1389       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
1390       raise;
1391 END Create_Properties_Inner;
1392 
1393 procedure Create_Properties(
1394  P_OBJECT_TYPE 		in VARCHAR2,
1395  P_OBJECT_NAME		in VARCHAR2,
1396  P_OBJECT_OWNER		in VARCHAR2,
1397  P_SNAPSHOT_LOG_SQL	in VARCHAR2,
1398  P_FAST_REFRESH_FLAG	in VARCHAR2,
1399  P_DIMENSION_FLAG       in VARCHAR2,
1400  P_CUSTOM_API           in VARCHAR2,
1401  P_CREATED_BY             in NUMBER,
1402  P_CREATION_DATE          in DATE,
1403  P_LAST_UPDATED_BY        in NUMBER,
1404  P_LAST_UPDATE_LOGIN	in NUMBER,
1405  P_LAST_UPDATE_DATE	in DATE,
1406  p_init_msg_list        IN   VARCHAR2   :=  fnd_api.g_FALSE,
1407  p_commit               IN   VARCHAR2   :=  fnd_api.g_FALSE,
1408  x_return_status        OUT NOCOPY  VARCHAR2,
1409  x_errorcode            OUT NOCOPY  NUMBER,
1410  x_msg_count            OUT NOCOPY  NUMBER,
1411  x_msg_data             OUT NOCOPY  VARCHAR2
1412 ) IS
1413 begin
1414 
1415 Create_Properties_Inner(
1416  P_OBJECT_TYPE,
1417  P_OBJECT_NAME,
1418  P_OBJECT_OWNER,
1419  P_SNAPSHOT_LOG_SQL,
1420  P_FAST_REFRESH_FLAG,
1421  P_DIMENSION_FLAG,
1422  P_CUSTOM_API,
1423  P_CREATED_BY,
1424  P_CREATION_DATE,
1425  P_LAST_UPDATED_BY,
1426  P_LAST_UPDATE_LOGIN,
1427  P_LAST_UPDATE_DATE,
1428  p_init_msg_list,
1429  p_commit,
1430  x_return_status,
1431  x_errorcode,
1432  x_msg_count,
1433  x_msg_data
1434 );
1435 exception
1436     when others then
1437       null;
1438 END;
1439 
1440 
1441 -- added for bug3040249
1442 procedure Update_Obj_Last_Refresh_Date(
1443  P_OBJECT_TYPE 		in VARCHAR2,
1444  P_OBJECT_NAME		in VARCHAR2,
1445  P_LAST_REFRESH_DATE		in DATE
1446 ) IS
1447 Begin
1448 	  update bis_obj_properties
1449 	  set
1450 	   LAST_REFRESH_DATE	= P_LAST_REFRESH_DATE
1451       WHERE OBJECT_TYPE           = P_OBJECT_TYPE
1452       AND OBJECT_NAME             = P_OBJECT_NAME ;
1453 END;
1454 
1455 -- new API which consider the CUSTOM_API colomn.
1456 procedure Update_Properties_Inner(
1457  P_OBJECT_TYPE 		in VARCHAR2,
1458  P_OBJECT_NAME		in VARCHAR2,
1459  P_OBJECT_OWNER		in VARCHAR2,
1460  P_SNAPSHOT_LOG_SQL	in VARCHAR2,
1461  P_FAST_REFRESH_FLAG	in VARCHAR2,
1462  P_DIMENSION_FLAG       in VARCHAR2,
1463  P_CUSTOM_API           in VARCHAR2,
1464  P_LAST_UPDATED_BY        in NUMBER,
1465  P_LAST_UPDATE_LOGIN	in NUMBER,
1466  P_LAST_UPDATE_DATE	in DATE,
1467  p_init_msg_list        IN   VARCHAR2,
1468  p_commit               IN   VARCHAR2,
1469  x_return_status        OUT NOCOPY  VARCHAR2,
1470  x_errorcode            OUT NOCOPY  NUMBER,
1471  x_msg_count            OUT NOCOPY  NUMBER,
1472  x_msg_data             OUT NOCOPY  VARCHAR2
1473 ) IS
1474     l_sysdate            DATE         := sysdate;
1475     l_api_name           CONSTANT VARCHAR2(30)   := 'Update_Properties';
1476     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
1477     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
1478     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
1479 begin
1480     -- Initialize API message list if necessary.
1481     -- Initialize message list if p_init_msg_list is set to TRUE.
1482     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1483        FND_MSG_PUB.initialize;
1484     END IF;
1485 
1486 	  update bis_obj_properties
1487 	  set
1488 	   OBJECT_OWNER		= P_OBJECT_OWNER,
1489 	   -- SNAPSHOT_LOG_SQL  	= P_SNAPSHOT_LOG_SQL,
1490          FAST_REFRESH_FLAG 	= P_FAST_REFRESH_FLAG,
1491  	   DIMENSION_FLAG 	= P_DIMENSION_FLAG,
1492        CUSTOM_API         = P_CUSTOM_API,
1493  	   LAST_UPDATED_BY        = L_LAST_UPDATED_BY,
1494  	   LAST_UPDATE_LOGIN	= L_LAST_UPDATE_LOGIN,
1495 	   LAST_UPDATE_DATE	= L_LAST_UPDATE_DATE
1496       WHERE OBJECT_TYPE           = P_OBJECT_TYPE
1497       AND OBJECT_NAME             = P_OBJECT_NAME ;
1498 
1499     x_return_status := FND_API.G_RET_STS_SUCCESS;
1500 
1501 -----------------------------------
1502     -- Make a standard call to get message count
1506     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
1503     -- and if count is 1, get message info.
1504     -- The client will directly display the x_msg_data (which is already
1505     -- translated) if the x_msg_count = 1;
1507     -- Server-side procedure to access the messages, and consolidate them
1508     -- and display them all at once or display one message after another.
1509 
1510     FND_MSG_PUB.Count_And_Get
1511         (   p_count        =>      x_msg_count,
1512             p_data         =>      x_msg_data
1513         );
1514 
1515 exception
1516     when no_data_found then
1517         return;
1518     when others then
1519       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1520       IF  FND_MSG_PUB.Check_Msg_Level
1521          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1522       THEN
1523           FND_MSG_PUB.Add_Exc_Msg
1524              (   G_PKG_NAME,
1525                  l_api_name
1526              );
1527       END IF;
1528       FND_MSG_PUB.Count_And_Get
1529          (   p_count        =>      x_msg_count,
1530              p_data         =>      x_msg_data
1531          );
1532       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
1533       raise;
1534 END Update_Properties_Inner;
1535 
1536 
1537 procedure Update_Properties(
1538  P_OBJECT_TYPE 		in VARCHAR2,
1539  P_OBJECT_NAME		in VARCHAR2,
1540  P_OBJECT_OWNER		in VARCHAR2,
1541  P_SNAPSHOT_LOG_SQL	in VARCHAR2,
1542  P_FAST_REFRESH_FLAG	in VARCHAR2,
1543  P_DIMENSION_FLAG       in VARCHAR2,
1544  P_CUSTOM_API           in VARCHAR2,
1545  P_LAST_UPDATED_BY        in NUMBER,
1546  P_LAST_UPDATE_LOGIN	in NUMBER,
1547  P_LAST_UPDATE_DATE	in DATE,
1548  p_init_msg_list        IN   VARCHAR2,
1549  p_commit               IN   VARCHAR2,
1550  x_return_status        OUT NOCOPY  VARCHAR2,
1551  x_errorcode            OUT NOCOPY  NUMBER,
1552  x_msg_count            OUT NOCOPY  NUMBER,
1553  x_msg_data             OUT NOCOPY  VARCHAR2
1554 ) IS
1555 begin
1556 Update_Properties_Inner(
1557  P_OBJECT_TYPE,
1558  P_OBJECT_NAME,
1559  P_OBJECT_OWNER,
1560  P_SNAPSHOT_LOG_SQL,
1561  P_FAST_REFRESH_FLAG,
1562  P_DIMENSION_FLAG,
1563  P_CUSTOM_API,
1564  P_LAST_UPDATED_BY,
1565  P_LAST_UPDATE_LOGIN,
1566  P_LAST_UPDATE_DATE,
1567  p_init_msg_list,
1568  p_commit,
1569  x_return_status,
1570  x_errorcode,
1571  x_msg_count,
1572  x_msg_data
1573 );
1574 exception
1575     when others then
1576       null;
1577 END;
1578 
1579 
1580 /*
1581 -- this is for backward compitability
1582 procedure Update_Properties(
1583  P_OBJECT_TYPE 		in VARCHAR2,
1584  P_OBJECT_NAME		in VARCHAR2,
1585  P_OBJECT_OWNER		in VARCHAR2,
1586  P_SNAPSHOT_LOG_SQL	in VARCHAR2,
1587  P_FAST_REFRESH_FLAG	in VARCHAR2,
1588  P_DIMENSION_FLAG       in VARCHAR2,
1589  P_LAST_UPDATED_BY        in NUMBER,
1590  P_LAST_UPDATE_LOGIN	in NUMBER,
1591  P_LAST_UPDATE_DATE	in DATE,
1592  p_init_msg_list        IN   VARCHAR2,
1593  p_commit               IN   VARCHAR2,
1594  x_return_status        OUT NOCOPY  VARCHAR2,
1595  x_errorcode            OUT NOCOPY  NUMBER,
1596  x_msg_count            OUT NOCOPY  NUMBER,
1597  x_msg_data             OUT NOCOPY  VARCHAR2
1598 ) IS
1599     l_sysdate            DATE         := sysdate;
1600     l_api_name           CONSTANT VARCHAR2(30)   := 'Update_Properties';
1601     l_last_updated_by    NUMBER := nvl(P_LAST_UPDATED_BY, g_current_user_id);
1602     l_last_update_login  NUMBER := nvl(P_LAST_UPDATE_LOGIN, g_current_login_id);
1603     l_last_update_date   DATE   := nvl(P_LAST_UPDATE_DATE, l_Sysdate);
1604 begin
1605     -- Initialize API message list if necessary.
1606     -- Initialize message list if p_init_msg_list is set to TRUE.
1607     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1608        FND_MSG_PUB.initialize;
1609     END IF;
1610 
1611 	  update bis_obj_properties
1612 	  set
1613 	   OBJECT_OWNER		= P_OBJECT_OWNER,
1614 	   SNAPSHOT_LOG_SQL  	= P_SNAPSHOT_LOG_SQL,
1615          FAST_REFRESH_FLAG 	= P_FAST_REFRESH_FLAG,
1616  	   DIMENSION_FLAG 	= P_DIMENSION_FLAG,
1617  	   LAST_UPDATED_BY        = L_LAST_UPDATED_BY,
1618  	   LAST_UPDATE_LOGIN	= L_LAST_UPDATE_LOGIN,
1619 	   LAST_UPDATE_DATE	= L_LAST_UPDATE_DATE
1620       WHERE OBJECT_TYPE           = P_OBJECT_TYPE
1621       AND OBJECT_NAME             = P_OBJECT_NAME ;
1622 
1623     x_return_status := FND_API.G_RET_STS_SUCCESS;
1624 
1625 -----------------------------------
1626     -- Make a standard call to get message count
1627     -- and if count is 1, get message info.
1628     -- The client will directly display the x_msg_data (which is already
1629     -- translated) if the x_msg_count = 1;
1630     -- Else, i.e. if x_msg_count > 1, client will call the FND_MSG_PUB.Get
1631     -- Server-side procedure to access the messages, and consolidate them
1632     -- and display them all at once or display one message after another.
1633 
1634     FND_MSG_PUB.Count_And_Get
1635         (   p_count        =>      x_msg_count,
1636             p_data         =>      x_msg_data
1637         );
1638 
1639 exception
1640     when no_data_found then
1641         return;
1642     when others then
1643       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1644       IF  FND_MSG_PUB.Check_Msg_Level
1645          (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1646       THEN
1647           FND_MSG_PUB.Add_Exc_Msg
1648              (   G_PKG_NAME,
1649                  l_api_name
1650              );
1651       END IF;
1652       FND_MSG_PUB.Count_And_Get
1653          (   p_count        =>      x_msg_count,
1654              p_data         =>      x_msg_data
1655          );
1656       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
1657 
1658 END;
1659 */
1660 
1661 procedure Delete_Properties(
1662  P_OBJECT_TYPE 		in VARCHAR2,
1663  P_OBJECT_NAME		in VARCHAR2
1664 ) IS
1665 BEGIN
1666   delete bis_obj_properties
1667   where object_type = p_object_type
1668     and object_name = p_object_name;
1669 
1670   If (SQL%NOTFOUND) then
1671       RAISE NO_DATA_FOUND;
1672   End If;
1673 end Delete_Properties;
1674 
1675 
1676 -- new implementation for removal of _OA
1677 function Get_User_Object_Name (
1678  P_OBJECT_TYPE          IN VARCHAR2,
1679  P_OBJECT_NAME          IN VARCHAR2
1680 ) RETURN varchar2 IS
1681  x_user_object_name     varchar2(480); --Enhancement 4106617
1682  i                      number;
1683 
1684  cursor c_portlet_report(p_object_name varchar2) is
1685     select user_function_name
1686     from fnd_form_functions_vl
1687     where function_name = p_object_name;
1688 
1689  -- new implementation to uptake get_function_by_page
1690  cursor c_oa_page(p_object_name varchar2) is
1691     select user_function_name
1692       from fnd_form_functions_vl
1693       where UPPER(web_html_call) like '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
1694       and get_function_by_page(p_object_name) = function_name;
1695 
1696 begin
1697   if (P_OBJECT_TYPE = 'TABLE' OR P_OBJECT_TYPE = 'VIEW' OR P_OBJECT_TYPE = 'MV' or P_OBJECT_TYPE='AWCUBE') then
1698     X_USER_OBJECT_NAME := P_OBJECT_NAME;
1699   elsif (P_OBJECT_TYPE = 'PORTLET' OR P_OBJECT_TYPE = 'REPORT') then
1700     open c_portlet_report(p_object_name);
1701     fetch c_portlet_report into x_user_object_name;
1702     i := c_portlet_report%ROWCOUNT;
1703     close c_portlet_report;
1704     if (i <= 0) then -- nothing matches
1705         X_USER_OBJECT_NAME := P_OBJECT_NAME;
1706     end if;
1707    elsif (P_OBJECT_TYPE = 'PAGE') THEN
1708      open c_oa_page(p_object_name);
1709      fetch c_oa_page into x_user_object_name;
1710      i := c_oa_page%ROWCOUNT;
1711      close c_oa_page;
1712      IF (i > 0) THEN
1713 	RETURN x_user_object_name;
1714      END IF;
1715 
1716      -- bug 3975359: if the given page is a portal page return its object name as user object name
1717      X_USER_OBJECT_NAME := P_OBJECT_NAME;
1718   end if;
1719 
1720   return X_USER_OBJECT_NAME;
1721 EXCEPTION
1722   when no_data_found then
1723     return P_OBJECT_NAME;
1724   when others then
1725     return P_OBJECT_NAME;
1726 
1727 end Get_User_Object_Name;
1728 
1729 function is_page_migrated (
1730  P_PAGE_NAME		in VARCHAR2
1731 ) RETURN boolean
1732 IS
1733   cursor c_page_migrated(P_PAGE_NAME varchar2) is
1734     SELECT /*+ FIRST_ROWS*/ 'Y'
1735     FROM BIS_OBJ_DEPENDENCY
1736     WHERE OBJECT_TYPE = 'PAGE'
1737     AND P_PAGE_NAME like '%_OA'
1738     AND OBJECT_NAME = SUBSTR(P_PAGE_NAME, 1, LENGTH(P_PAGE_NAME) - 3)
1739     AND ROWNUM = 1;
1740     L_MIGRATED  VARCHAR2(10) := NULL;
1741 
1742 BEGIN
1743   open c_page_migrated(P_PAGE_NAME);
1744   fetch c_page_migrated into L_MIGRATED;
1745   close c_page_migrated;
1746   IF (L_MIGRATED = 'Y') THEN
1747     return true;
1748   else
1749     return false;
1750   end if;
1751 END is_page_migrated;
1752 
1753 function get_function_by_page (
1754  P_PAGE_NAME		in VARCHAR2
1755 ) RETURN varchar2
1756 IS
1757   cursor c_page1(P_PAGE_NAME varchar2) is
1758     select f.function_name
1759     from
1760       fnd_form_functions f
1761     where
1762       UPPER(f.web_html_call) like '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
1763     and function_name = P_PAGE_NAME;
1764 
1765   cursor c_page2(P_PAGE_NAME varchar2) is
1766     select f.function_name
1767     from
1768       fnd_form_functions f
1769     where
1770       UPPER(f.web_html_call) like '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
1771     and P_PAGE_NAME like '%_OA'
1772     and function_name = SUBSTR(P_PAGE_NAME, 1, LENGTH(P_PAGE_NAME) - 3);
1773 
1774     L_FUNCTION_NAME  fnd_form_functions.function_name%TYPE := NULL;
1775 BEGIN
1776   open c_page1(P_PAGE_NAME);
1777   fetch c_page1 into L_FUNCTION_NAME;
1778   close c_page1;
1779   if (L_FUNCTION_NAME is not null) then
1780     RETURN L_FUNCTION_NAME;
1781   end if;
1782 
1783   open c_page2(P_PAGE_NAME);
1784   fetch c_page2 into L_FUNCTION_NAME;
1785   close c_page2;
1786   RETURN L_FUNCTION_NAME;
1787 
1788 END;
1789 
1790 
1791 procedure migrate_page(
1792  P_PAGE_NAME		in VARCHAR2,
1793  P_NEW_PAGE_NAME	in VARCHAR2
1794 ) IS
1795 
1796   cursor skip_migrate(P_PAGE_NAME varchar2) is
1797     select /*+ FIRST_ROWS*/ 'Y'
1798     from
1799       fnd_form_functions f,
1800       bis_obj_dependency d
1801     where
1802         d.object_name = f.function_name
1803     and d.object_type = 'PAGE'
1804     and UPPER(f.web_html_call) like '%BIS_COMPONENT_PAGE'||'&'||'AKREGIONAPPLICATIONID=191%'
1805     and function_name = P_PAGE_NAME;
1806    l_skip_migrate VARCHAR2(10);
1807 
1808 BEGIN
1809 
1810   open skip_migrate(P_PAGE_NAME);
1811   fetch skip_migrate into l_skip_migrate;
1812   close skip_migrate;
1813 
1814   IF(l_skip_migrate = 'Y') THEN
1815     --FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED, 'bis.maigrate_page', 'no nned to migrate');
1816     RETURN;
1817   END IF;
1818 
1819   update bis_obj_properties
1820   set object_name = P_NEW_PAGE_NAME
1821   where
1822        object_type = 'PAGE'
1823   and object_name = P_PAGE_NAME;
1824   --FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED, 'bis.maigrate_page', SQL%rowcount || ' rows updated :' || P_PAGE_NAME || '->' || P_NEW_PAGE_NAME || ' in bis_obj_properties.object_name');
1825 
1826   update bis_obj_dependency
1827   set object_name = P_NEW_PAGE_NAME
1828   where
1829        object_type = 'PAGE'
1830   and object_name = P_PAGE_NAME;
1831   --FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED, 'bis.maigrate_page', SQL%rowcount || ' rows updated :' || P_PAGE_NAME || '->' || P_NEW_PAGE_NAME || ' in bis_obj_dependency.object_name');
1832 
1833 END migrate_page;
1834 /* starts: bug 3562027 -- change owner for parent object */
1835 /*Bug 4560963 : From now, we will get object owner from bis_obj_properties
1836   unlike the previous approach of getting it from bis_obj_dependency */
1837 FUNCTION is_owner_changed (
1838  p_obj_name IN VARCHAR2,
1839  p_obj_type IN VARCHAR2,
1840  p_new_obj_owner IN VARCHAR2,
1841  p_actual_owner  OUT NOCOPY VARCHAR2
1842 ) RETURN VARCHAR2 IS
1843 
1844    CURSOR c_owner(p_obj_name VARCHAR2, p_obj_type VARCHAR2) IS
1845       SELECT object_owner
1846 	FROM bis_obj_properties
1847 	WHERE object_type = p_obj_type
1848 	AND object_name = p_obj_name;
1849 
1850    v_obj_owner VARCHAR2(50);
1851    v_changed   VARCHAR2(5);
1852 BEGIN
1853    OPEN c_owner(p_obj_name, p_obj_type);
1854    FETCH c_owner INTO v_obj_owner;
1855    IF (c_owner%notfound) THEN
1856         v_changed := 'N';
1857         CLOSE c_owner;
1858         RETURN v_changed;
1859    END IF;
1860    CLOSE c_owner;
1861 
1862    IF (p_new_obj_owner = v_obj_owner) THEN
1863       v_changed := 'N';
1864     ELSE
1865       v_changed := 'Y';
1866       p_actual_owner := v_obj_owner;
1867    END IF;
1868    RETURN v_changed;
1869 EXCEPTION
1870    WHEN OTHERS THEN
1871       RETURN 'Y';
1872 END is_owner_changed;
1873 
1874 PROCEDURE change_prop_linkage_owner (
1875  p_obj_name IN VARCHAR2,
1876  p_obj_type IN VARCHAR2,
1877  p_obj_owner IN VARCHAR2
1878 ) IS
1879 
1880 BEGIN
1881    IF (p_obj_name IS NULL OR p_obj_type IS NULL OR p_obj_owner IS NULL) THEN
1882       RETURN;
1883    END IF;
1884 
1885    execute immediate 'update bis_obj_properties set object_owner = :1
1886      WHERE object_type = :2 AND object_name = :3'
1887      using p_obj_owner, p_obj_type, p_obj_name;
1888 
1889    execute immediate 'update bis_obj_prog_linkages set object_owner = :1
1890      WHERE object_type = :2 AND object_name = :3'
1891      using p_obj_owner, p_obj_type, p_obj_name;
1892 EXCEPTION
1893    WHEN OTHERS THEN
1894       RETURN;
1895 END change_prop_linkage_owner;
1896 /* sends: bug 3562027 -- change owner for parent object */
1897 
1898 /*This procedure has been added for enhcnement 4391651. Given object name and type.
1899 Find out if the object is seeded or not */
1900 
1901 FUNCTION is_object_seeded( p_obj_name IN VARCHAR2, p_obj_type IN VARCHAR2) RETURN VARCHAR2 IS
1902 
1903 cursor c_obj_depend(l_obj_name VARCHAR2, l_obj_type VARCHAR2) is
1904 select CREATED_BY from bis_obj_dependency
1905 where OBJECT_NAME = l_obj_name and OBJECT_TYPE = l_obj_type;
1906 
1907 cursor c_obj_depend_depend(l_obj_name VARCHAR2, l_obj_type VARCHAR2) is
1908 select CREATED_BY from bis_obj_dependency
1909 where DEPEND_OBJECT_NAME = l_obj_name and depend_OBJECT_TYPE = l_obj_type;
1910 
1911 
1912 cursor c_obj_prog(l_obj_name VARCHAR2, l_obj_type VARCHAR2) is
1913 select CREATED_BY from bis_obj_prog_linkages
1914 where OBJECT_NAME = l_obj_name and OBJECT_TYPE = l_obj_type;
1915 
1916 cursor c_obj_prop(l_obj_name VARCHAR2, l_obj_type VARCHAR2) is
1917 select CREATED_BY from bis_obj_properties
1918 where OBJECT_NAME = l_obj_name and OBJECT_TYPE = l_obj_type;
1919 
1920 created_user  number;
1921 
1922 BEGIN
1923 
1924 	for c_obj_depend_rec in c_obj_depend(p_obj_name,p_obj_type) loop
1925 		created_user := c_obj_depend_rec.CREATED_BY;
1926                 --Followed the logic as used in AFLDUTLB.pls for seeded user having 120 to 129 user_id range
1927 		if (created_user =1 or created_user =2 or (created_user >=120 and created_user <=129)) then
1928 			  exit;
1929 		end if;
1930 	end loop;
1931 	if (created_user is null) then
1932 		--check if the object is dependent object and seeded object
1933 		for c_obj_depend_depend_rec in c_obj_depend_depend(p_obj_name,p_obj_type) loop
1934 			created_user := c_obj_depend_depend_rec.CREATED_BY;
1935                         --Followed the logic as used in AFLDUTLB.pls for seeded user having 120 to 129 user_id range
1936 			if (created_user =1 or created_user =2 or (created_user >=120 and created_user <=129)) then
1937 			   exit;
1938 			end if;
1939 		end loop;
1940 		if (created_user is null) then
1941 			for c_obj_prog_rec in c_obj_prog(p_obj_name,p_obj_type) loop
1942 				created_user := c_obj_prog_rec.CREATED_BY;
1943 			end loop;
1944 			if(created_user is null) then
1945 				for c_obj_prop_rec in c_obj_prop(p_obj_name,p_obj_type) loop
1946 					created_user := c_obj_prop_rec.CREATED_BY;
1947 				end loop;
1948 				if (created_user is null) then
1949 					return 'FALSE'; --new object
1950 				else
1951 					if(created_user <>1 and created_user <>2 and (created_user < 120 or created_user > 129))then
1952 					     return 'FALSE';
1953 					else
1954 					     return 'TRUE';
1955 					end if;
1956 				end if;
1957 			else
1958 				if(created_user <>1 and created_user <>2 and (created_user < 120 or created_user > 129))then
1959 				     return 'FALSE';
1960 				else
1961 				     return 'TRUE';
1962 				end if;
1963 			end if;
1964 		else
1965 			  if(created_user <>1 and created_user <>2 and (created_user < 120 or created_user > 129))then
1966 				return 'FALSE';
1967 			   else
1968 				return 'TRUE';
1969 			   end if;
1970 		end if;
1971 	else
1972 	  if(created_user <>1 and created_user <>2 and (created_user < 120 or created_user > 129))then
1973 		return 'FALSE';
1974 	   else
1975 	        return 'TRUE';
1976 	   end if;
1977 	end if;
1978 
1979 END is_object_seeded;
1980 
1981 end BIS_IMPL_DEV_PKG;