DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIS_IMPL_OPT_PKG

Source


1 PACKAGE BODY BIS_IMPL_OPT_PKG AS
2   /*$Header: BISIMPLB.pls 120.11 2005/12/20 10:59:30 tiwang noship $*/
3 
4   PROCEDURE DEBUG( P_TEXT VARCHAR2, P_IDENT NUMBER DEFAULT 0)
5   IS
6   BEGIN
7     FND_LOG_REPOSITORY.INIT;
8     IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9       FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED, icx_sec.getsessioncookie, FND_LOG.LEVEL_UNEXPECTED );
10       FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED, P_TEXT, FND_LOG.LEVEL_UNEXPECTED );
11     END IF;
12   END;
13 
14  PROCEDURE enableImplementation(
15     p_object_name varchar2)
16  IS
17    stmt varchar2(2000);
18  BEGIN
19 
20    update bis_obj_properties prop
21    set implementation_flag = 'Y'
22    where OBJECT_type = 'PAGE'
23    and OBJECT_NAME = p_object_name;
24 
25    update bis_obj_properties
26    set implementation_flag = 'Y'
27    where (object_type, OBJECT_NAME)
28    in( select distinct
29          depend_object_type,
30          depend_OBJECT_NAME
31        from bis_obj_dependency
32        where enabled_flag='Y'
33        start with object_type='PAGE'
34               and object_name = p_object_name
35        connect by prior DEPEND_OBJECT_NAME  = object_name
36        AND PRIOR depend_object_type = object_type);
37    DEBUG('Done enableImplementation');
38  END;
39 
40 
41  PROCEDURE disableImplPruned (
42     p_object_type varchar2,
43     p_object_name varchar2)
44  IS
45  BEGIN
46           update BIS_OBJ_PROPERTIES
47           set implementation_flag = 'N'
48           where not exists (
49             -- back traverse and hit Pages that are implemented
50             (select distinct
51              dep.object_owner,
52              dep.object_type,
53              dep.OBJECT_NAME
54              from bis_obj_dependency dep
55              where dep.enabled_flag= 'Y'
56              and dep.object_type = 'PAGE'
57              and exists (
58                select 1
59                from BIS_OBJ_PROPERTIES tmp
60                where tmp.OBJECT_NAME = dep.OBJECT_NAME
61                and tmp.OBJECT_TYPE = dep.object_type
62                and tmp.implementation_flag = 'Y'
63              )
64              start with (
65                dep.depend_object_type = p_object_type and
66                dep.depend_object_name = p_object_name
67              )
68              connect by dep.DEPEND_OBJECT_NAME  = prior dep.object_name
69 	     AND dep.depend_object_type = PRIOR dep.object_type
70             )
71           )
72           and BIS_OBJ_PROPERTIES.object_type = p_object_type
73           and BIS_OBJ_PROPERTIES.object_NAME = p_object_name;
74  END;
75 
76 
77  PROCEDURE smartPrunImpl(
78     p_object_name varchar2)
79  IS
80     l_depend_object_type bis_obj_dependency.depend_OBJECT_TYPE%type;
81     l_depend_object_name bis_obj_dependency.depend_OBJECT_NAME%type;
82 
83     CURSOR C_DISIMPLGRP ( P_PGNAME bis_obj_dependency.object_name%type )
84     IS
85       select distinct
86        depend_object_type,
87        depend_OBJECT_NAME
88        from bis_obj_dependency
89        where enabled_flag='Y'
90        start with object_type='PAGE' and object_name = P_PGNAME
91 	connect by prior DEPEND_OBJECT_NAME  = object_name
92 	AND PRIOR depend_object_type = object_type;
93  BEGIN
94     open C_DISIMPLGRP(p_object_name);
95     loop
96       fetch C_DISIMPLGRP into l_depend_object_type, l_depend_object_name;
97       exit when C_DISIMPLGRP%NOTFOUND;
98       DEBUG('Processing ' || l_depend_object_type|| ', ' || l_depend_object_name);
99       disableImplPruned(l_depend_object_type, l_depend_object_name);
100     end loop;
101 
102  END;
103 
104  PROCEDURE disableImplementation(
105     p_object_name varchar2)
106  IS
107    stmt varchar2(2000);
108  BEGIN
109    update bis_obj_properties prop
110    set implementation_flag = 'N'
111    where OBJECT_type = 'PAGE'
112    and OBJECT_NAME = p_object_name;
113 
114    smartPrunImpl(p_object_name);
115    DEBUG('Done disableImplementation');
116  END;
117 
118 
119  -- this procedure should be used to change implementation flag for page object only
120  PROCEDURE changeImplementation(
121     p_object_name varchar2,
122     p_impl_flag varchar2)
123  IS
124    stmt varchar2(2000);
125  BEGIN
126   -- original implementation
127   /*
128   IF p_impl_flag = 'Y' THEN
129     enableImplementation(p_object_name);
130   ELSE
131     disableImplementation(p_object_name);
132   END IF;
133   */
134 
135   execute immediate
136     'update bis_obj_properties set IMPLEMENTATION_FLAG = :1
137      where OBJECT_NAME = :2 AND object_type = :3'
138     using p_impl_flag, p_object_name, 'PAGE';
139  END;
140 
141 
142  PROCEDURE  processChange
143  IS
144  BEGIN
145    null;
146  END;
147 
148  PROCEDURE Init_impl IS
149  BEGIN
150    null;
151  END Init_impl;
152 
153  PROCEDURE  setImplementationOptions(
154      errbuf  			   OUT NOCOPY VARCHAR2,
155     retcode		           OUT NOCOPY VARCHAR2
156  ) IS
157  BEGIN
158     errbuf  := NULL;
159     retcode := '0';
160     IF (Not BIS_COLLECTION_UTILITIES.setup('BIS_IMPL_OPT_PKG.setImplementationOptions')) THEN
161       RAISE_APPLICATION_ERROR (-20000,'Error in SETUP: ' || errbuf);
162       return;
163     END IF;
164     propagateimplementationoptions();
165   EXCEPTION
166   WHEN OTHERS THEN
167     errbuf := sqlerrm;
168     retcode := sqlcode;
169     BIS_COLLECTION_UTILITIES.put_line(' ');
170     BIS_COLLECTION_UTILITIES.put_line('Error occurred:');
171     BIS_COLLECTION_UTILITIES.put_line(errbuf);
172 
173     BIS_COLLECTION_UTILITIES.WRAPUP(
174       FALSE,
175       0,
176       errbuf,
177       null,
178       null
179     );
180 
181  END setImplementationOptions;
182 
183 
184 /** Comment out the following two APIs because in 4422645
185     UI is provided for the user to set impl flag for any reports
186 function check_top_node(p_object_type in varchar2,p_object_name in varchar2) return varchar2 is
187 l_dummy varchar2(1);
188 cursor c_top_node is
189 select 'Y'
190 from dual
191 where not exists
192 (select 'Y'
193  from bis_obj_dependency
194  where depend_object_name=p_object_name
195  and depend_object_type=p_object_type);
196 begin
197    l_dummy:='N';
198    ------As of now, we only consider page or report has
199    -----the chance being top node
200    if p_object_type in ('MV','TABLE','VIEW','REGION') then
201      return 'N';
202    else ----'REPORT' or 'PAGE'
203      open c_top_node;
204      fetch c_top_node into l_dummy;
205      close c_top_node;
206      return l_dummy;
207    end if;
208  exception
209   when others then
210    raise;
211 end;
212 
213 
214 ---This api is added for enhancement 3999465.
215 ----It is called by preparation program before calling setImplementationOptions.
216 ----Since we don't have UI for the user to set impl flag for reports,
217 ---we have to use this API to set impl flag to "Y" at runtime (it is better
218 ---than doing this at seeding time, because the user may create lots of reports
219 ---while end up only run request set for few of them) so that
220 ---reports (MVs under reports) can be refreshed properly.
221 ---Note that once the flag is set to "Y", there is no chance to set it back
222 ---to "N". This may cause potential issue for MV logs.
223 ---Once we have UI for the user to set impl flag for reports, we
224 ----can get rid of this API call.
225 procedure set_implflag_reports_in_set(p_set_name in varchar2,p_set_app_id in number) is
226 
227 l_sql varchar2(1000):='
228  update bis_obj_properties
229  set implementation_flag=''Y''
230  where object_type=''REPORT''
231  and object_name in (
232  select distinct object_name
233  from bis_request_set_objects
234  where object_type=''REPORT''
235  and REQUEST_SET_NAME=:1
236  and SET_APP_ID=:2 )';
237 begin
238   execute immediate l_sql using p_set_name,p_set_app_id;
239   commit;
240  exception
241    when others then
242      bis_collection_utilities.put_line('error in set_implflag_reports_in_set '||sqlerrm);
243 end;
244 **/
245 
246 ----this procedure is added for enhancement 3999465,4422645
247 ----set impl flag under reports because separate UI
248 ---is provided for the user to set impl flag for reports
249 --- Modified again for bug 4664831 on Oct 12, 2006
250 
251 procedure propagate_impl_flag_reports is
252 cursor c_impl_reports is
253 select object_name
254 from bis_obj_properties
255 where object_type='REPORT'
256 and implementation_flag='Y';
257 
258 /**
259 cursor c_unimpl_reports is
260 select object_name
261 from bis_obj_properties
262 where object_type='REPORT'
263 and implementation_flag='N';
264 **/
265 cursor c_obj_under_reports (p_report_name varchar2) is
266  select distinct dep.depend_object_name, dep.depend_object_type
267  from
268   ( select object_name,
269            object_type,
270            depend_object_name,
271            depend_object_type
272            from  bis_obj_dependency
273 		   where enabled_flag='Y') dep
274  where dep.depend_object_type<>'REPORT'--bug 4609286
275  start with dep.object_type = 'REPORT'
276    and dep.object_name=p_report_name
277   connect by prior dep.depend_object_name = dep.object_name
278   and prior dep.depend_object_type = dep.object_type;
279 
280 
281 l_impl_report_rec c_impl_reports%rowtype;
282 ---l_unimpl_report_rec c_unimpl_reports%rowtype;
283 l_obj_under_report_rec c_obj_under_reports%rowtype;
284 
285 begin
286 
287 /** commented for bug 4664831
288   for l_unimpl_report_rec in c_unimpl_reports loop
289     for l_obj_under_report_rec in c_obj_under_reports(l_unimpl_report_rec.object_name) loop
290 	   update bis_obj_properties
291 	   set IMPLEMENTATION_FLAG ='N'
292 	   where object_type=l_obj_under_report_rec.depend_object_type
293 	   and object_name=l_obj_under_report_rec.depend_object_name;
294     end loop;
295  end loop;
296 **/
297 
298  for l_impl_report_rec in c_impl_reports loop
299     for l_obj_under_report_rec in c_obj_under_reports(l_impl_report_rec.object_name) loop
300   	   update bis_obj_properties
301 	   set IMPLEMENTATION_FLAG ='Y'
302 	   where object_type=l_obj_under_report_rec.depend_object_type
303 	   and object_name=l_obj_under_report_rec.depend_object_name;
304     end loop;
305  end loop;
306 end ;
307 
308 
309 ---added for enhancement 3999465 and 4422645.
310 FUNCTION report_in_impl_pages(p_report_name varchar2) return varchar2
311 is
312 cursor report_in_impl_pages is
313 select 'Y' from dual
314 where exists
315 (select 'Y'
316  from
317 (SELECT distinct object_name
318   FROM
319   ( select object_name,
320            object_type,
321            object_owner,
322            depend_object_name,
323            depend_object_type,
324            depend_object_owner,
325            enabled_flag
326      from
327      bis_obj_dependency
328      where enabled_flag='Y' ) obj
329   where object_type='PAGE'
330   START WITH depend_object_name =p_report_name AND depend_object_type ='REPORT'
331   CONNECT BY PRIOR object_name = depend_object_name AND PRIOR object_type = depend_object_type) pages,
332 bis_obj_properties properties
333 where pages.object_name=properties.object_name
334 and properties.object_type='PAGE'
335 and properties.implementation_flag='Y');
336 
337 l_report_in_impl_pages varchar2(1);
338 begin
339    l_report_in_impl_pages:='N';
340    open report_in_impl_pages;
341    fetch report_in_impl_pages into l_report_in_impl_pages;
342    close report_in_impl_pages;
343    if l_report_in_impl_pages is null then
344      l_report_in_impl_pages:='N';
345    end if;
346    return l_report_in_impl_pages;
347 end;
348 
349 
350 -----this procedure is called by RSG preparation program through setImplementationOptions,
351 -----as well as in page configuration module directly
352  PROCEDURE propagateimplementationoptions IS
353   l_report_in_impl_pages varchar2(1);
354 
355   cursor c_reports_impl_null is
356   select object_name
357   from bis_obj_properties
358   where object_type='REPORT'
359   and implementation_flag is null;
360 
361   l_reports_rec c_reports_impl_null%rowtype;
362 
363  BEGIN
364 
365 
366     ---added for enhancement 3999465 and 4422645.
367     ---For backward compatibility
368     ---When a new report (implementation flag is null) is added to an existing implemented page
369     ---the report should have impl flag set to Y automatically
370     for l_reports_rec in c_reports_impl_null loop
371         l_report_in_impl_pages:=report_in_impl_pages(l_reports_rec.object_name);
372         if l_report_in_impl_pages='Y' then
373           execute immediate 'update bis_obj_properties set IMPLEMENTATION_FLAG = ''Y''
374            where object_type=''REPORT'' and object_name=:1' using l_reports_rec.object_name;
375         end if;
376     end loop;
377 
378     -- Reset implementation flag. Note if implementation option flag is null, treat as N
379     ----Modified for enhancement 3999465 and 4422645
380     ----Exclude reports because we will have UI to set impl flag for reports
381  	execute immediate
382         'update bis_obj_properties set IMPLEMENTATION_FLAG = ''N''
383          WHERE (object_type not in ( ''PAGE'',''REPORT''))
384          OR implementation_flag IS NULL';
385 
386 
387 	------set implementation flag to 'Y' for objects under implemented pages
388 	------Modified for enhancement 3999465 and 4422645. Exclude reports
389     execute immediate
390         'update bis_obj_properties set IMPLEMENTATION_FLAG = :1
391          where object_type<> ''REPORT''
392 		  and   (object_name, object_type) in (
393             select distinct dep.depend_object_name, dep.depend_object_type
394             from bis_obj_dependency dep
395             where dep.enabled_flag = :2
396             start with dep.object_type = :3
397                   and exists (select 1
398                               from bis_obj_properties prop
399                               where prop.object_type = dep.object_type
400                               and prop.object_name = dep.object_name
401                               and prop.implementation_flag = :4)
402             connect by prior dep.depend_object_name = dep.object_name
403 		and prior dep.depend_object_type = dep.object_type
404 		AND PRIOR dep.enabled_flag = :5
405          )'
406          using 'Y', 'Y', 'PAGE', 'Y', 'Y';
407 
408     ----added this call for enhancement 3999465,4422645
409     ----set implementation flag to 'Y' for objects under implemented reports
410 	propagate_impl_flag_reports ;
411 
412  END propagateimplementationoptions;
413 
414 
415 
416 -- begin: added for bug 3560408
417 -- private function used to find if a form function name is valid
418  -- not take portal page into consideration
419  FUNCTION is_valid_page_func (
420     p_func_name   IN VARCHAR2) RETURN VARCHAR2
421  IS
422     CURSOR c_funcs (p_func_name VARCHAR2) IS
423        SELECT function_name
424 	 FROM fnd_form_functions
425 	 WHERE function_name = p_func_name
426 	 AND web_html_call LIKE 'OA.jsp?akRegionCode=BIS_COMPONENT_PAGE'||'&'||'akRegionApplicationId=191%';
427     v_func_name fnd_form_functions.function_name%type; --Enhancement 4106617
428     v_is_valid_func VARCHAR2(5);
429  BEGIN
430     IF (p_func_name IS NULL OR p_func_name = '') THEN
431        RETURN 'N';
432     END IF;
433 
434     OPEN c_funcs(p_func_name);
435     FETCH c_funcs INTO v_func_name;
436     IF (c_funcs%notfound) THEN
437        -- not a valid page form function
438        v_is_valid_func := 'N';
439      ELSE
440        -- valid page form function
441        v_is_valid_func := 'Y';
442     END IF;
443     CLOSE c_funcs;
444     RETURN v_is_valid_func;
445  EXCEPTION
446     WHEN OTHERS THEN
447        RETURN 'N';
448  END is_valid_page_func;
449 
450  -- private function used to find the page object name for a given fnd form function
451  FUNCTION get_page_name_by_func (
452     p_func_name   IN VARCHAR2) RETURN VARCHAR2
453  IS
454     CURSOR c_page_object_name(p_func_name VARCHAR2) IS
455        SELECT object_name FROM bis_obj_dependency
456 	 WHERE object_type = 'PAGE' AND object_name = p_func_name || '_OA'
457        UNION ALL
458        SELECT object_name FROM bis_obj_properties
459 	 WHERE object_type = 'PAGE' AND object_name = p_func_name || '_OA';
460 
461        v_object_name bis_obj_dependency.object_name%type; --Enhancement 4106617
462  BEGIN
463     IF (p_func_name IS NULL OR p_func_name = '') THEN
464        RETURN NULL;
465     END IF;
466     OPEN c_page_object_name(p_func_name);
467     FETCH c_page_object_name INTO v_object_name;
468     IF (c_page_object_name%notfound) THEN
469        -- no _OA attached
470        v_object_name := p_func_name;
471     END IF;
472     CLOSE c_page_object_name;
473     RETURN v_object_name;
474  EXCEPTION
475    WHEN OTHERS THEN
476       RETURN NULL;
477  END get_page_name_by_func;
478 
479 
480 
481 ---Added for enhancement 4422645
482 PROCEDURE  cascade_implflag_to_reports(p_page_function in varchar2,
483                                       p_impl_flag in varchar2) is
484 
485 cursor reports_under_page(p_page_name varchar2) is
486 select depend_objects.obj_name
487 from
488 ( select distinct
489    obj.depend_OBJECT_NAME obj_name,
490    obj.depend_object_type obj_type,
491    obj.depend_object_owner obj_owner
492  from
493   ( select object_name,
494            object_type,
495            object_owner,
496            depend_object_name,
497            depend_object_type,
498            depend_object_owner,
499            enabled_flag
500      from
501      bis_obj_dependency
502      where enabled_flag='Y' ) obj
503   start with obj.object_type ='PAGE'
504   and obj.object_name = p_page_name
505   connect by prior obj.DEPEND_OBJECT_NAME=obj.object_name
506   and prior depend_object_type=object_type
507   ) depend_objects
508   where depend_objects.obj_type='REPORT';
509 
510 l_report_rec reports_under_page%rowtype;
511 
512 l_page_name bis_obj_properties.object_name%type;
513 
514 l_report_in_impl_pages varchar2(1);
515 
516 begin
517  l_page_name:=get_page_name_by_func(p_page_function);
518  for l_report_rec in reports_under_page(l_page_name) loop
519   l_report_in_impl_pages:='N';
520   if p_impl_flag='Y' then
521     execute immediate 'update bis_obj_properties set implementation_flag=:1 where object_type=:2 and object_name=:3'
522     using 'Y','REPORT',l_report_rec.obj_name;
523   else ---p_impl_flag='N'
524    l_report_in_impl_pages:=report_in_impl_pages(l_report_rec.obj_name);
525    if l_report_in_impl_pages='N' then
526       execute immediate 'update bis_obj_properties set implementation_flag=:1 where object_type=:2 and object_name=:3'
527       using 'N','REPORT',l_report_rec.obj_name;
528    end if;
529   end if;
530  end loop;
531 exception
532  when others then
533   raise;
534 end ;
535 
536  -- public api: set implementation flag for a page identified by form function name
537  PROCEDURE setfndformfuncpageimplflag (
538     p_func_name                   IN VARCHAR2,
539     p_impl_flag                   IN VARCHAR2,
540     x_return_status               OUT nocopy VARCHAR2,
541     x_msg_data                    OUT nocopy VARCHAR2
542  ) IS
543     v_impl_flag VARCHAR2(10);
544     v_page_name VARCHAR2(480); --Enhancement 4106617
545  BEGIN
546     IF (p_func_name IS NULL OR p_func_name = '') THEN
547        x_return_status := fnd_api.g_ret_sts_error;
548        x_msg_data := 'BIS_BIA_INV_PAGE_FORM_FUNC';
549        RETURN;
550     END IF;
551 
552     IF (p_impl_flag IS NULL OR (p_impl_flag <> 'Y' AND p_impl_flag <> 'N')) THEN
553        x_return_status := fnd_api.g_ret_sts_error;
554        x_msg_data := 'BIS_BIA_INVALID_IMPL_FLAG';
555        RETURN;
556     END IF;
557 
558     v_impl_flag := getfndformfuncpageimplflag(p_func_name);
559 
560     IF (v_impl_flag IS NOT NULL AND v_impl_flag = 'INVALID') THEN
561        -- object doesn't have at least one enabled portlet
562        x_return_status := fnd_api.g_ret_sts_error;
563        x_msg_data := 'BIS_BIA_PAGE_NO_ENABLED_PORTLETS';
564      ELSIF (v_impl_flag IS NULL) THEN
565        -- invalid form function name
566        x_return_status := fnd_api.g_ret_sts_error;
567        x_msg_data := 'BIS_BIA_INVALID_FORM_FUNC_FOR_PAGE';
568      ELSIF (v_impl_flag = 'Y' OR v_impl_flag = 'N') THEN
569        v_page_name :=  get_page_name_by_func(p_func_name);
570        changeimplementation(v_page_name, p_impl_flag);
571        -- successfully return
572        x_return_status := FND_API.G_RET_STS_SUCCESS;
573     END IF;
574 
575 	---06/21/2005 Modified for enhancement 4422645, added logic to enable/disable reports
576     ---under the page based on UI requirement
577     cascade_implflag_to_reports(p_func_name, p_impl_flag);
578 
579     RETURN;
580  EXCEPTION
581     WHEN OTHERS THEN
582        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
583        x_msg_data := 'BIS_BIA_UNEXPECTED_ERROR';
584        RETURN;
585  END;
586 
587 
588 ---added for enhancement 4422645
589  PROCEDURE setreportimplflag (
590     p_report_name                   IN VARCHAR2,
591     p_impl_flag                   IN VARCHAR2,
592     x_return_status               OUT nocopy VARCHAR2,
593     x_msg_data                    OUT nocopy VARCHAR2
594  ) IS
595  BEGIN
596     IF (p_impl_flag IS NULL OR (p_impl_flag <> 'Y' AND p_impl_flag <> 'N')) THEN
597        x_return_status := fnd_api.g_ret_sts_error;
598        x_msg_data := 'BIS_BIA_INVALID_IMPL_FLAG';
599        RETURN;
600     END IF;
601 
602     execute immediate 'update bis_obj_properties set implementation_flag=:1 where object_type=:1 and object_name=:2'
603     using    p_impl_flag,'REPORT' ,p_report_name;
604      x_return_status := FND_API.G_RET_STS_SUCCESS;
605     RETURN;
606  EXCEPTION
607     WHEN OTHERS THEN
608        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
609        x_msg_data := 'BIS_BIA_UNEXPECTED_ERROR';
610        RETURN;
611  END;
612 
613 
614 
615 
616  -- public api to get implementation flag for a page object identified by form function name
617  FUNCTION getfndformfuncpageimplflag (
618     p_func_name                  IN VARCHAR2
619  ) RETURN VARCHAR2 IS
620     v_is_valid_page_func VARCHAR2(5);
621     v_page_name bis_obj_dependency.object_name%type; --Enhancement 4106617
622     v_portlet_name bis_obj_dependency.depend_object_name%type; --Enhancement 4106617
623     v_ret_code VARCHAR2(10);
624 
625     CURSOR c_enabled_dep_portlets (p_page_obj_name VARCHAR2) IS
626        SElECT depend_object_name
627 	 FROM bis_obj_dependency objdep
628 	 WHERE objdep.object_name = p_page_obj_name
629 	 AND objdep.object_type = 'PAGE'
630 	 AND objdep.depend_object_type = 'PORTLET'
631 	 AND objdep.ENABLED_FLAG = 'Y';
632 
633     CURSOR c_getimpl_flag (p_page_obj_name VARCHAR2) IS
634        SELECT Nvl (implementation_flag, 'N') implflag
635 	 FROM bis_obj_properties
636 	 WHERE object_type = 'PAGE' AND object_name = p_page_obj_name;
637  BEGIN
638     v_is_valid_page_func := is_valid_page_func(p_func_name);
639     --dbms_output.put_line('v_is_valid_page_func: '||v_is_valid_page_func);
640     IF (v_is_valid_page_func = 'N') THEN
641        -- invalid page form function name
642        RETURN NULL;
643     END IF;
644 
645     v_page_name := get_page_name_by_func(p_func_name);
646     --dbms_output.put_line('v_page_name: '||v_page_name);
647     OPEN c_enabled_dep_portlets(v_page_name);
648     FETCH c_enabled_dep_portlets INTO v_portlet_name;
649     IF (c_enabled_dep_portlets%notfound) THEN
650        -- doesn't have at least one enabled dependent portlet object
651        v_ret_code := 'INVALID';
652        --dbms_output.put_line('invalid');
653      ELSE
654        -- for implementation flag, default null as 'N'
655        IF (c_getimpl_flag%ISOPEN) THEN
656 	  CLOSE c_getimpl_flag;
657        END IF;
658        OPEN c_getimpl_flag(v_page_name);
659        FETCH c_getimpl_flag INTO v_ret_code;
660        CLOSE c_getimpl_flag;
661     END IF;
662     CLOSE c_enabled_dep_portlets;
663     RETURN v_ret_code;
664  EXCEPTION
665     WHEN OTHERS THEN
666        RETURN NULL;
667  END getfndformfuncpageimplflag;
668  -- end: added for bug 3560408
669 
670 
671  ---added for enhancement 4422645
672  -- public api to get implementation flag for a report
673  ---Returned values: 'Y', 'N' ---implementation flags
674  ---'INVALID' when the report is not in RSG or doesn't have dependent objects,the UI should grey out
675  ---the Enabled check box
676  ---null when exception happens
677   FUNCTION getreportimplflag (
678     p_report_name                  IN VARCHAR2
679  ) RETURN VARCHAR2 IS
680 
681     v_ret_code VARCHAR2(10);
682 
683     CURSOR c_enabled_dep_objects  IS
684      select 'Y'
685      from dual
686      where exists
687      (SElECT depend_object_name
688 	 FROM bis_obj_dependency objdep
689 	 WHERE objdep.object_name = p_report_name
690 	 AND objdep.object_type = 'REPORT'
691 	 AND objdep.ENABLED_FLAG = 'Y');
692 
693     --added for bug 4532066
694     CURSOR c_linked_programs  IS
695      select 'Y'
696      from dual
697      where exists
698      (SElECT object_name
699 	 FROM bis_obj_prog_linkages
700 	 WHERE object_name = p_report_name
701 	 AND object_type = 'REPORT'
702          AND ENABLED_FLAG = 'Y');
703 
704     CURSOR c_getimpl_flag  IS
705        SELECT  object_name,implementation_flag implflag
706 	 FROM bis_obj_properties
707 	 WHERE object_type = 'REPORT' AND object_name = p_report_name;
708 
709 	 l_dummy varchar2(1);
710          l_prog_exist varchar2(1);
711 	 l_report_in_impl_pages varchar2(1);
712 	 l_object_name bis_obj_properties.object_name%type;
713 
714  BEGIN
715     l_dummy:='N';
716     l_object_name:=null;
717 
718     OPEN c_enabled_dep_objects;
719     FETCH c_enabled_dep_objects INTO l_dummy;
720     close c_enabled_dep_objects;
721 
722     -- logic modified for the bug 4532066
723     -- if no dep objects then we have to check if there is any program associated with
724     -- the report
725     l_prog_exist:='N';
726     OPEN c_linked_programs;
727     FETCH c_linked_programs INTO l_prog_exist;
728     close c_linked_programs;
729 
730     IF l_dummy='N' AND l_prog_exist='N' THEN
731        -- report doesn't have at least one enabled dependent object
732        -- and no program is linked with the report
733        v_ret_code := 'INVALID';
734     ELSE
735        OPEN c_getimpl_flag;
736        FETCH c_getimpl_flag INTO l_object_name, v_ret_code;
737        CLOSE c_getimpl_flag;
738        if v_ret_code is null then
739          if l_object_name is not null then
740             ----added for backward compatibility
741             --- For the case when a new report is added to an existing implemented page
742             ----at that moment the report in bis_obj_properties has implementation_flag as null
743             l_report_in_impl_pages:=report_in_impl_pages(p_report_name) ;
744             if l_report_in_impl_pages='Y' then
745                v_ret_code:='Y';
746             else
747               v_ret_code:='N';
748             end if;
749          else --l_object_name is null, which means the report doesn't exist in RSG
750              v_ret_code:='INVALID';
751          end if ;--if l_object_name is not null
752        end if; --v_ret_code is null
753     END IF;
754     RETURN v_ret_code;
755  EXCEPTION
756     WHEN OTHERS THEN
757        RETURN NULL;
758  END ;
759 
760 
761 
762  -- code added for bug 3736131
763  -- this public API has been added at the request of Product teams
764  -- As they needed one API To check if their Module has been implemented or not
765  -- public api to know if the page is implemented or not
766  -- This will raise whatever exception occurs, so that the wrapper JAVA API
767  -- or whoever is calling this exception may get the exception and error is easy to track
768  -- Though in normal circumstances there will be no exception. ONLY IF Database goes down
769  -- Or the tables do not exist which is rarest possibility
770 
771  FUNCTION isPageImplemented (
772 			     p_func_name                  IN VARCHAR2
773 			     ) RETURN VARCHAR2 IS
774 				v_is_valid_page_func VARCHAR2(5);
775 				v_page_name VARCHAR2(480); --Enhancement 4106617
776 				v_ret_code VARCHAR2(10);
777  BEGIN
778     v_is_valid_page_func := is_valid_page_func(p_func_name);
779 
780     IF (v_is_valid_page_func = 'N') THEN          -- invalid page form function name
781        RETURN NULL;
782     END IF;
783 
784     v_page_name := get_page_name_by_func(p_func_name);
785 
786     -- for implementation flag, default null as 'N'
787     execute immediate 'select nvl(implementation_flag, :1) implflag
788       FROM bis_obj_properties
789       WHERE object_type = :2 AND object_name = :3'
790       INTO v_ret_code
791       using 'N','PAGE', v_page_name;
792 
793     return v_ret_code;
794 
795  EXCEPTION
796     WHEN OTHERS THEN
797        RAISE;
798  END;
799  -- end: added for Enhancement 3736131
800 
801 
802 ---This function is for RSG internal use only
803 function get_impl_flag(p_obj_name in varchar2,p_obj_type in varchar2) return varchar2 is
804  l_impl_flag varchar2(1);
805 begin
806   select implementation_flag
807   into l_impl_flag
808   from bis_obj_properties where object_name=p_obj_name and object_type=p_obj_type;
809   return l_impl_flag;
810   exception
811     when no_data_found then
812       return 'N';
813     when others then
814      raise;
815 end;
816 
817 function check_implementation return varchar2 is
818 l_dummy varchar2(1);
819 
820 cursor l_check_impl is
821 select 'Y'
822 from dual
823 where exists
824 (select 'Y' from bis_obj_properties
825  where implementation_flag='Y'
826  and object_type in ('PAGE','REPORT')
827 ) ;
828 
829 begin
830   l_dummy:='N';
831  open l_check_impl;
832  fetch l_check_impl into l_dummy;
833  if  l_check_impl%notfound then
834     l_dummy:='N';
835  end if;
836  close l_check_impl;
837  return l_dummy;
838  exception
839   when others then
840     raise;
841 end;
842 
843 END BIS_IMPL_OPT_PKG;
844 
845