create or replace package body odwa_fol is /***************************************************************************************** Purpose Provides HTML Application System Launchpad report Also write the Navigation tree with Folders, Workareas, Configurations Usage Called from cdwp Remarks Procedures that may serve as URL: - list_application_systems - app_home - Revision history When Who Construct Revision What ------------------------------------------------------------------------------------------ $revision_history$ 10-Sep-2003 Kannan Parthasarathy - B2881790: Fixed GIF file name. 12-Jun-2003 Kannan Parthasarathy - Bug 2870973: Do not pass file name through URL 29-sep-2002 Kannan Parthasarathy - Fixed OAC p1 violations. 15-oct-2002 Kannan Parthasarathy - Preserve visual attributes for new splash image 26-sep-2002 Kannan Parthasarathy New splash image 24-sep-2002 Kannan Parthasarathy - References to CDM are hidden from general users 27-jul-2001 Lucas Jellema 3.6 - use new download method using Servlet changes in: * procedure js_go 26-jul-2001 Lucas Jellema 3.5.2 - changed js_go to use the servlet based download option 09-mar-2001 Lucas Jellema 3.5 - add procedure inaccessible_report 02-feb-2001 Lucas Jellema 3.4 Solving issue 105 [odwa project/105%] - reports fail for objects in wastebasket 30-jan-2001 Lucas Jellema 3.3 - remove .. link to application system detail report (solve issue 14) 29-jan-2001 Peter Ebell 1.15 - Added parameter isFile to javascript go procedure (js_go) to prevent opening of new window for file downloads 16-jan-2001 Lucas Jellema 3.2 procedure .inflate_root_in_wa should not reset htmltree 11-jan-2001 Lucas Jellema 3.1 - wastebasket node not in BOLD 09-jan-2001 Peter Ebell 1.12 - Changed heading frame to self service L&F 03-jan-2001 Lucas Jellema 2.9 Several Navigator Issues The wastebasket should be supported in the Navigator: - through a wastebasket icon in the Explorer View (where applicable) - as node within each Workarea - as a global node, below All Containers In the navigator, until recently just before the folder were made clickable, clicking the workarea brought up the launch pad window. Right now it tries to do something in the right hand window, as if a folder was clicked. The initial bulk of data downloaded for the Navigator is a bit large: 1) it includes data hardly ever used such as the All Containers Node 2nd level and the Configurations Node 2nd Level; it also includes the Workareas Root Containers (3rd level). All of this could be downloaded upon user request instead of included on the first go You cannot click on folders or app sys under a Configuration Node. 22-dec-2000 Lucas Jellema 2.8 Changed: js_go and call_go: gl must be go 22-dec-2000 Lucas Jellema 2.7 Added call_go, js_go, go: to act as central router for requests for element reports. 08-dec-2000 Lucas Jellema 2.6 New splash image: odwa6i_splash 20-sep-2000 Lucas Jellema 2.5 Ensure context is updated by every procedure that is invoked as a HTML document updated procedure appsBottom. 20-sep-2000 Lucas Jellema 2.4 Check whether context is passed properly procedure inflate_node: reset pac_irid/pac_ivid context 15-sep-2000 Lucas Jellema 2,3 Try out: show list of files in right frame when folder is clicked 28-aug-2000 Lucas Jellema 2.2 Support Nodes under and direct launchpad links for: - Workarea - Folder in Workarea - Configuration - Folder outside of Workarea Some corrections in nodes values 10-aug-2000 Lucas Jellema 2.1 Provide Code Frame locator to Inflate_Node/Populate Tree 27-jul-2000 Lucas Jellema 2.0 Many changes: - support Configurations and All Containers node - support working outside of Workarea Context - accept more parameters on inflate_request p_root_node_value and _classification To do: --------- -Workarea (laucnhpad) report - version unresolved (for Folder IVID) Application System Home (launchpad report) - build folder node contents outside of workarea context (based on folder ivid) 10-jul-2000 Lucas Jellema 1.0 Creation *****************************************************************************************/ -- -- private constants -- REVISION_LABEL constant varchar2(30) := '$x.y:: 3.6 $'; PACKAGE_NAME constant varchar2(30) := 'ODWA_FOL'; procedure app_home ( p_session_id in number , p_app_id in number default -1 , p_root_value in varchar2 default null , p_root_classification in varchar2 default null ) is begin odwalpad.app_home ( p_session_id => p_session_id , p_app_id => p_app_id , p_root_value => p_root_value , p_root_classification => p_root_classification ); end; -- app_home -- returns the HREF value for URLs to ODWA reports for any element, given its IVID -- the value is only useful in documents that contain the go function, written through -- a call to procedure js_go function call_go ( p_ivid in number ) return varchar2 is begin return 'javascript:go('''||to_char(p_ivid)||''')'; end; -- call_go -- this procedure write a JavaScript function that can be called to hyperjump -- to the report for a specific ivid value procedure js_go ( p_session_id in number , p_target in varchar2 default 'document' -- values are: _new, document, top, parent, ) is begin if upper(p_target) = '_NEW' then -- 3.6 added a replace function (from JHeadstart form.js) to support the replacing of spaces with plus signs in the filename -- Bug 2870973: Do not pass file name through URL as it may contain -- multibyte characters htp.p (' '|| ' '); else htp.p (' '|| ' '); end if; end; -- js_go -- this procedure is a central router that can be called for any ivid value -- the procedure will determine what type the element has and will re-route -- to the appropriate report-procedure procedure go ( p_session_id in number , p_ivid in number ) is l_procedure varchar2(100) := null; l_irid number(38) := cdwpbase.get_irid( p_ivid); l_type_of varchar2(100) := cdwpbase.get_type_of ( p_ivid => p_ivid); l_in_wastebasket boolean := false; -- 3.4 to indicate whether the link is to an object that is currently in the waste basket; if it is, the name and the wastebasket icon are shown but no link is available function get_procedure ( p_type_of in varchar2 ) return varchar2 is cursor c_prc( b_type_of in varchar2) is select DETAIL_PROCEDURE from pie_element_types pie where pie.short_name = b_type_of ; r_prc c_prc%rowtype; begin open c_prc( b_type_of => p_type_of); fetch c_prc into r_prc ; close c_prc; return r_prc.detail_procedure; end; -- get_procedure begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'go_link' , p_pac_ivid => p_ivid , p_pac_irid => l_irid ); l_in_wastebasket := odwavrsn.is_in_wastebasket(p_ivid => p_ivid); if l_in_wastebasket then odwa_fol.wastebasket_report(p_ivid); elsif l_type_of ='FILES' -- if l_type_of ='FILES' -- then start download of file then cdwp_fil.download_file ( p_session_id => odwactxt.get_session_id , p_irid => odwactxt.get_pac_irid ,p_ivid => odwactxt.get_pac_ivid ); else l_procedure := get_procedure( p_type_of => l_type_of); if l_procedure is not null then execute immediate ' begin ' ||' '||l_procedure ||' ( p_session_id => '||nvl(to_char(odwactxt.get_session_id),'null') ||' , p_irid => '||nvl( to_char(l_irid), 'null') ||' , p_ivid => '||to_char(p_ivid) ||' );' ||' end;' ; else odwabrow.object_browser ( p_session_id => odwactxt.get_session_id , p_ivid => nvl( odwactxt.get_pac_ivid, cdwpbase.get_best_ivid(odwactxt.get_pac_irid)) ); end if; --l_procedure is not null end if; -- l_type_of ='FILES' end; -- go procedure js_setWA ( p_session_id in number ) is begin htp.p (' '|| ' '); end; -- js_setWA -- -- public procedures and functions -- -- -- A P P L I C A T I O N S Y S T E M S -- procedure folderTree ( p_session_id in number ) is l_first boolean; begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'folderTree' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); htp.headClose; -- -- body -- htp.bodyOpen ( cattributes=>'BGCOLOR="#FFFFFF" ' ||'onLoad="top.init();top.drawOnLoad()"' ); htp.p(Rob_msg.GetMsg(Rob_msg.DSP169_ODWA_WAITMSG,'','','','')); htp.bodyClose; htp.htmlClose; end; -- folderTree -- this procedure prints a very simple report, informing the user that the object he -- requested a report for is in the Wastebasket and therefore not available for reporting procedure wastebasket_report ( p_ivid in number ) is begin odwainfo.infowindow(p_session_id => odwactxt.get_session_id,p_ivid => p_ivid); end; -- wastebasket_report -- this procedure prints a very simple report, informing the user that the object he -- requested a report for is not accessible since it is owned by a folder he has no access to procedure inaccessible_report ( p_ivid in number ) is begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); cdwp.include_report_styles; htp.title ( Rob_msg.GetMsg(Rob_msg.MSG150_ODWA_NOOBJ,jr_name.get_crn_from_ivid(i_ivid => p_ivid,format => 'NAME'),'','','')); htp.headClose; htp.bodyOpen(cattributes=>'BGCOLOR="#FFFFFF"'); cdwp.p ( p_string => cdwp.add_images ( '{noacc.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.MSG150_ODWA_NOOBJ, USER, '','','')) || Rob_msg.GetMsg(Rob_msg.MSG151_ODWA_NOACCESS, jr_name.get_crn_from_ivid(i_ivid => p_ivid,format => 'NAME'), USER, '','') , p_style => 'partitle' ); htp.nl; htp.nl; htp.p(Rob_msg.GetMsg(Rob_msg.MSG152_ODWA_NOACCESS,USER,'','','')); htp.bodyclose; htp.htmlclose; end; -- inaccessible_report procedure logoFrame ( p_session_id in number ) is begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'logoFrame' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); htp.headClose; htp.bodyOpen(cattributes=>'BGCOLOR="#FFFFFF"'); htp.nl; htp.tableData ( ' ' ||cdwp.add_images( p_text => '{rob_splash.gif}', p_attributes => 'ALT="ROB Splash Screen"') -- ,p_static => p_static) ||hwsf.fontOpen(HWS.MS_SANS_SERIF, 6)|| '
' ||Rob_msg.GetMsg(Rob_msg.DSP170_ROB,'','','','') ||hwsf.fontClose||'
' ||hwsf.fontOpen(HWS.COMIC_SANS_MS) ||cdwp.release_banner ||hwsf.fontClose , 'RIGHT' , cattributes=>'ROWSPAN="20" WIDTH="400"' ); htp.bodyClose; htp.htmlClose; end; -- logoFrame function get_procedure ( p_el_type_of in varchar2 ) return varchar2 is cursor c_pie ( b_el_type_of in varchar2) is select root_procedure from pie_element_types where short_name = b_el_type_of ; r_pie c_pie%rowtype; begin open c_pie( b_el_type_of => p_el_type_of); fetch c_pie into r_pie; close c_pie; return r_pie.root_procedure; end; -- get_procedure -- this procedure can be called from the tree from nodes that represents a specific element type -- within an application system or folder; this procedure will have to redirect to a procedure -- that can procedure the appropriate report procedure type_rep ( p_session_id in number , p_app_id in number , p_el_type_of in varchar2 , p_root_value in varchar2 , p_root_classification in varchar2 ) is l_cfg_id number(38); l_wa_irid number(38); l_app_ivid number(38); l_type_of varchar2(20); l_type varchar2(40); l_root_type_of varchar2(30); begin l_type_of:= cdwpbase.get_tag_value( p_string=> p_el_type_of, p_tag => 'TYPE_OF'); l_type := cdwpbase.get_tag_value( p_string=> p_el_type_of, p_tag => 'TYPE'); l_root_type_of:= cdwpbase.get_tag_value( p_string=> p_root_classification, p_tag => 'TYPE'); if l_root_type_of = 'CFG' then l_cfg_id := cdwpbase.get_tag_value( p_string=> p_el_type_of, p_tag => 'CFG_IVID'); end if; if l_root_type_of = 'WA' then l_wa_irid := p_root_value; end if; if l_type_of in ('FOL','APP') and l_root_type_of ='WA' then l_app_ivid:= cdwpbase.get_tag_value( p_string=> p_el_type_of, p_tag => 'APP_IVID'); elsif l_type='WA' then l_app_ivid:=null; elsif l_type='CFG' then l_app_ivid:=null; else l_app_ivid:= to_number(p_app_id); end if; odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'type_rep' , p_folder_irid => cdwpbase.get_irid( p_ivid => l_app_ivid) , p_folder_ivid => l_app_ivid , p_cfg_ivid => l_cfg_id , p_workarea_irid => l_wa_irid ); if false and get_procedure( p_el_type_of) is not null and p_el_type_of in ('BR','FUN','BRDD','FILES') then cdwpbase.exec_sql ( ' begin ' ||get_procedure( l_type_of) ||'( p_session_id => '||to_char(odwactxt.get_session_id)||');' ||' end;' ); else odwarprt.explorer_view ( p_session_id => odwactxt.get_session_id , p_el_type_of => l_type_of , p_app_irid => odwactxt.get_folder_irid , p_app_ivid => l_app_ivid , p_cfg_id => l_cfg_id , p_wa_id => l_wa_irid , p_view_name => cdwpbase.get_ci_view ( p_type_id => cdwpbase.short_name_to_type_id ( l_type_of) ) , p_order_by => null , p_ctxt_type => p_root_classification||';'||p_root_value||';'||p_el_type_of , p_descriptor_column => 'NAME' ); end if; -- get_procedure( p_el_type_of) is not null end; -- type_rep procedure nested_folders_outside_wa ( p_folder_ivid in number , p_level in number ) is -- cursor to be used outside of workarea context for a specific folder version -- Bug 3643526: increasing the size of l_icon wasn't that great idea. -- let's just live with a smaller ALT text for l_icon. l_icon varchar2(250); l_link varchar2(2000); l_prev_app_irid number(38):=0; begin -- now outside workarea context, any folder potentially has -- multiple versions. We will return one node at level 2 for each root-folder -- and one or more nodes at level 3 for each version of each root folder -- when a folder is not versioned, there will be but one level: level 2 for r_app_vrsn in c_nested_apps(b_folder_ivid => p_folder_ivid) loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_app_vrsn.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); if r_app_vrsn.app_id <> l_prev_app_irid then l_prev_app_irid:= r_app_vrsn.app_id; htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name , p_node_level => p_level , p_has_children => r_app_vrsn.state <> 'N' , p_is_expanded => false , p_value => cdwpbase.ifThenElse -- if application is unversioned, it may act as a link itself ( r_app_vrsn.state = 'N' , to_char(r_app_vrsn.app_ivid) , to_char(r_app_vrsn.app_id) ) , p_additional_label => cdwpbase.ifThenElse -- if application is unversioned, it may act as a link itself ( r_app_vrsn.state = 'N' , '' ) , p_is_inflatable => r_app_vrsn.state = 'N' -- for versioned folders, this is just a placeholder (IRID) for the tree and the versions , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' -- , p_classification => r_app_vrsn.app_type ); end if; if r_app_vrsn.state <> 'N' -- UNVERSIONED then htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_app_vrsn.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name ||cdwpbase.ifThenElse ( r_app_vrsn.vlabel is not null , ' ('||r_app_vrsn.vlabel||')' ) , p_node_level => p_level + 1 , p_has_children => true , p_is_expanded => false , p_value => to_char(r_app_vrsn.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' -- , p_classification => r_app_vrsn.app_type ); end if; -- r_app_vrsn.state <> 'N' -- UNVERSIONED end loop; -- r_app_vrsn end; -- nested_folders_outside_wa procedure nested_folders ( p_folder_ivid in number , p_level in number ) is -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); begin for r_nested_app in c_nested_apps( b_folder_ivid => p_folder_ivid) loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_nested_app.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_nested_app.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_nested_app.app_name -- ||cdwpbase.ifThenElse -- ( r_nested_app.vlabel is not null -- , ' ('||r_nested_app.vlabel||')' -- ) , p_node_level => p_level , p_has_children => false , p_is_expanded => false , p_value => to_char(r_nested_app.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_nested_app.app_type||'}' ||'{FOLDER_IVID='||to_char(p_folder_ivid)||'}' -- , p_classification => r_nested_app.app_type ); end loop; -- r_nested_app end; -- nested_folders procedure nested_folders_in_cfg ( p_folder_ivid in number , p_cfg_ivid in number , p_level in number ) is -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); l_prev_app_irid number(38):=0; begin -- now outside workarea context, any folder potentially has -- multiple versions. We will return one node at level 2 for each root-folder -- and one or more nodes at level 3 for each version of each root folder -- when a folder is not versioned, there will be but one level: level 2 for r_app_vrsn in c_nested_apps_in_cfg ( b_folder_ivid => p_folder_ivid , b_cfg_ivid => p_cfg_ivid ) loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_app_vrsn.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_app_vrsn.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name ||cdwpbase.ifThenElse ( r_app_vrsn.vlabel is not null , ' ('||r_app_vrsn.vlabel||')' ) , p_node_level => p_level , p_has_children => true , p_is_expanded => false , p_value => to_char(r_app_vrsn.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' ||'{CFG_IVID='||to_char(p_cfg_ivid)||'}' -- , p_classification => r_app_vrsn.app_type ); end loop; -- r_app_vrsn end; -- nested_folders_in_cfg procedure inflate_folder_contents ( p_node_level in number -- level of node-to-be-inflated (all its children will have p_node_level + 1 or higher) , p_folder_id in number , p_root_type in varchar2 default 'WA' -- WA, CFG, FOL/APP , p_root_id in number -- CFG IVID, WA IRID ) is l_root_type varchar2(200):= cdwpbase.get_tag_value( p_string=> p_root_type, p_tag => 'TYPE'); l_link varchar2(500); begin if l_root_type = 'WA' then nested_folders ( p_folder_ivid => p_folder_id , p_level => p_node_level + 1 ); odwa_app.populate_app_el_tbl ( p_app_id => cdwpbase.get_irid( p_ivid=> p_folder_id) ); elsif p_root_type = 'WASTEBASKET' then odwa_app.populate_app_el_tbl ( p_app_id => null , p_app_ivid => null , p_cfg_ivid => null , p_ctxt_type => 'WASTEBASKET' ); elsif l_root_type = 'CFG' then nested_folders_in_cfg ( p_folder_ivid => p_folder_id , p_cfg_ivid => p_root_id , p_level => p_node_level + 1 ); odwa_app.populate_app_el_tbl ( p_app_id => null , p_app_ivid => p_folder_id , p_cfg_ivid => p_root_id , p_ctxt_type => 'CFG' ); else nested_folders_outside_wa ( p_folder_ivid => p_folder_id , p_level => p_node_level + 1 ); odwa_app.populate_app_el_tbl ( p_app_id => null , p_app_ivid => p_folder_id , p_ctxt_type => 'FOL' ); end if; -- workarea context set for i in 1..odwa_app.g_app_el_tbl.count loop if odwa_app.g_app_el_tbl(i).short_name not in ('APP','FOL') then htmltree.add_node ( p_display_label => cdwp.add_images ( '{' ||odwa_app.g_app_el_tbl(i).gif_file ||'}' ) ||cdwpbase.ifThenElse ( nvl(odwa_app.g_app_el_tbl(i).number_owned,0) + nvl(odwa_app.g_app_el_tbl(i).number_short_cut,0) > 1 , odwa_app.g_app_el_tbl(i).plural_name , odwa_app.g_app_el_tbl(i).display_name ) ||' (' ||to_char( nvl(odwa_app.g_app_el_tbl(i).number_owned,0) + nvl(odwa_app.g_app_el_tbl(i).number_short_cut,0) ) ||')' , p_node_level => p_node_level + 1 , p_has_children => false , p_is_expanded => false , p_value => to_char(p_folder_id) , p_additional_label => '' -- l_link , p_is_inflatable => false , p_classification => '{APP_IVID='||to_char(p_folder_id)||'}' ||'{TYPE_OF='||odwa_app.g_app_el_tbl(i).short_name||'}' ||cdwpbase.ifthenelse ( p_root_type = 'WASTEBASKET' , '{WASTEBASKET}' ) ||cdwpbase.ifThenElse ( cdwpbase.get_tag_value( p_string=> p_root_type, p_tag => 'TYPE') = 'CFG' , '{CFG_IVID='||to_char(p_root_id)||'}' ) ); end if; -- no APP or FOL end loop; end; -- inflate_folder_contents -- this procedure builds up the Folder Tree for the current workarea procedure inflate_cfg_contents ( p_node_level in number -- level of node-to-be-inflated (all its children will have p_node_level + 1 or higher) , p_cfg_ivid in number ) is -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); begin -- now outside workarea context, any folder potentially has -- multiple versions. We will return one node at level 2 for each root-folder -- and one or more nodes at level 3 for each version of each root folder -- when a folder is not versioned, there will be but one level: level 2 for r_app_vrsn in c_root_in_cfg( b_cfg_ivid => p_cfg_ivid) loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_app_vrsn.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_app_vrsn.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name ||cdwpbase.ifThenElse ( r_app_vrsn.vlabel is not null , ' ('||r_app_vrsn.vlabel||')' ) , p_node_level => p_node_level + 1 , p_has_children => true , p_is_expanded => false , p_value => to_char(r_app_vrsn.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' ||'{CFG_IVID='||to_char(p_cfg_ivid)||'}' --, p_classification => r_app_vrsn.app_type ); end loop; -- r_app_vrsn -- NOW ADD all OBJECTS (or Object Types?) that are in a Folder that is not in the CFG! end; -- inflate_config_contents -- this procedure builds up the Folder Tree for the current workarea procedure inflate_configs is cursor c_cfg is select cfg.IRID , cfg.IVID , cfg.NAME , cfg.DESCRIPTION , ov.vlabel , nvl(ov.state, 'N') state from sdd_configurations cfg , sdd_object_versions ov where ov.ivid = cfg.ivid order by cfg.name , ov.branch_id -- to at least group by branch; probably need name of branch as well , ov.sequence_in_branch ; -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); l_prev_cfg_irid number(38):=0; begin -- CONFIGURATIONS -- ================= jr_context.set_workarea( to_number(null)); l_icon:= cdwp.add_images ( p_text => '{configuration.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP176_ODWA_CONFIG,'','','','') || '"' ); for r_cfg in c_cfg loop if r_cfg.irid <> l_prev_cfg_irid then l_prev_cfg_irid:= r_cfg.irid; htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||r_cfg.name , p_node_level => 2 , p_has_children => r_cfg.state <> 'N' , p_is_expanded => false , p_value => to_char(r_cfg.irid) , p_additional_label => '' , p_is_inflatable => r_cfg.state = 'N' -- for versioned folders, this is just a placeholder (IRID) for the tree and the versions , p_classification => '{TYPE=CFG}' ||cdwpbase.ifThenElse -- if application is unversioned, it may act as a link itself ( r_cfg.state <> 'N' , 'nolink' ) ); end if; if r_cfg.state <> 'N' -- UNVERSIONED then htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_cfg.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_cfg.name ||' ('||r_cfg.vlabel||')' , p_node_level => 3 , p_has_children => true , p_is_expanded => false , p_value => to_char(r_cfg.ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE=CFG}' ||'{CFG_IVID='||to_char(r_cfg.ivid)||'}' ); end if; -- r_cfg.state <> 'N' -- UNVERSIONED end loop; -- r_cfg end; -- inflate_configs procedure inflate_all_folders is -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); l_prev_app_irid number(38):=0; begin -- now outside workarea context, any folder potentially has -- multiple versions. We will return one node at level 2 for each root-folder -- and one or more nodes at level 3 for each version of each root folder -- when a folder is not versioned, there will be but one level: level 2 for r_app_vrsn in c_root_app loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_app_vrsn.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); if r_app_vrsn.app_id <> l_prev_app_irid then l_prev_app_irid:= r_app_vrsn.app_id; htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name , p_node_level => 2 , p_has_children => true , p_is_expanded => false , p_value => cdwpbase.ifThenElse -- if application is unversioned, it may act as a link itself ( r_app_vrsn.state = 'N' , to_char(r_app_vrsn.app_ivid) , to_char(r_app_vrsn.app_id) ) , p_additional_label => cdwpbase.ifThenElse -- if application is unversioned, it may act as a link itself ( r_app_vrsn.state = 'N' , '' ) , p_is_inflatable => r_app_vrsn.state = 'N' -- for versioned folders, this is just a placeholder (IRID) for the tree and the versions , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' ||'nolink' ); end if; if r_app_vrsn.state <> 'N' -- UNVERSIONED then htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_app_vrsn.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name ||cdwpbase.ifThenElse ( r_app_vrsn.vlabel is not null , ' ('||r_app_vrsn.vlabel||')' ) , p_node_level => 3 , p_has_children => true , p_is_expanded => false , p_value => to_char(r_app_vrsn.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' ||'nolink' ); end if; -- r_app_vrsn.state <> 'N' -- UNVERSIONED end loop; -- r_app_vrsn end; -- inflate_all_folders procedure inflate_root_in_wa ( p_wa_irid in number ) is -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_link varchar2(2000); l_prev_app_irid number(38):=0; begin jr_context.set_workarea( p_wa_irid); for r_app_vrsn in c_root_app loop l_icon:= cdwp.add_images ( p_text => '{' ||cdwpbase.ifThenElse ( r_app_vrsn.app_type = 'APP' , 'app_sys' , 'folder' ) ||'.gif}' ); l_link:= cdwpbase.nbsp(2) ||cdwp.report_link ( p_app_id => r_app_vrsn.app_id , p_app_ivid => r_app_vrsn.app_ivid , p_type_of => 'APP_DETAILS' , p_text => '..' , p_bookmark => '' , p_target => '_NEW' , p_wa_id => p_wa_irid ); htmltree.add_node ( p_display_label => cdwpbase.ifThenElse ( r_app_vrsn.state ='O' -- checked out , cdwp.add_images('{check_mark.gif}') ) ||l_icon ||cdwpbase.nbsp(1) ||r_app_vrsn.app_name -- ||cdwpbase.ifThenElse -- ( r_app_vrsn.vlabel is not null -- , ' ('||r_app_vrsn.vlabel||')' -- ) , p_node_level => 3 , p_has_children => true , p_is_expanded => false , p_value => to_char(r_app_vrsn.app_ivid) , p_additional_label => '' , p_is_inflatable => true -- there are always the element types within the folder , p_classification => '{TYPE='||r_app_vrsn.app_type||'}' ); end loop; -- r_app_vrsn l_icon:= cdwp.add_images ( p_text => '{wastebasket.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP177_ODWA_WABASKET ,'','','','')|| '"' ); htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||Rob_msg.GetMsg(Rob_msg.DSP178_ODWA_WASTEBASKET ,'','','','') , p_node_level => 3 , p_has_children => true , p_is_expanded => false , p_value => 'WASTEBASKET' , p_additional_label => '' , p_is_inflatable => true , p_classification => '{TYPE=WASTEBASKET}' ); end; -- inflate_root_in_wa procedure inflate_Node ( p_node_index in number , p_node_level in number -- level of node-to-be-inflated (all its children will have p_node_level + 1 or higher) -- node levels in client are number 0..(highest level-1). in server 1..highest level , p_num_of_nodes in number , p_node_value in varchar2 default null , p_node_type in varchar2 default null , p_entry_point in number default null , p_session_id in number , p_root_value in varchar2 , p_root_classification in varchar2 default null ) is l_type varchar2(200):= cdwpbase.get_tag_value( p_string=> p_node_type, p_tag => 'TYPE'); l_root_type varchar2(200):= cdwpbase.get_tag_value( p_string=> p_root_classification, p_tag => 'TYPE'); begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'inflate_node' , p_pac_ivid => null -- 2.4 , p_pac_irid => null -- 2.4 ); htmltree.reset_tbl; if l_root_type = 'WA' then odwactxt.update_context ( p_session_id => p_session_id , p_workarea_irid => to_number(p_root_value) , p_new_request => false ); jr_context.set_workarea( to_number(p_root_value)); end if; -- l_root_type ='WA' -- populate tree if l_type in ('APP','FOL') then if p_node_value ='FOL' then inflate_all_folders; else inflate_folder_contents ( p_node_level => p_node_level , p_folder_id => to_number(p_node_value) , p_root_type => p_root_classification -- WA, CFG, FOL/APP , p_root_id => cdwpbase.ifThenElse ( instr( p_node_type, 'CFG_IVID') > 0 , to_number(cdwpbase.get_tag_value( p_string=> p_node_type, p_tag => 'CFG_IVID')) -- p_node_value) , to_number( p_root_value) -- CFG IVID, WA IRID ) ); end if; end if; if l_type = 'WA' then inflate_root_in_wa( p_wa_irid => to_number( p_node_value)); end if; if l_type = 'WASTEBASKET' then inflate_folder_contents ( p_node_level => p_node_level , p_folder_id => null , p_root_type => 'WASTEBASKET' , p_root_id => odwactxt.get_workarea_irid ); end if; if l_type = 'CFG' then if p_node_value ='CFG' then inflate_configs; else inflate_cfg_contents ( p_node_level => p_node_level , p_cfg_ivid => to_number(cdwpbase.get_tag_value( p_string=> p_node_type, p_tag => 'CFG_IVID')) -- p_node_value) ); end if; end if; htmltree.find_folder_nodes; -- to set the had_children property where appropriate htmltree.write_inflate_code ( p_node_index => p_node_index , p_num_of_nodes => p_num_of_nodes , p_frame_locator => 'top.' , p_entry_point => p_entry_point ); end; -- inflate_node procedure dataXchange ( p_session_id in number ) is begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'dataXchange' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); htp.headClose; htp.bodyOpen; htp.bodyClose; htp.htmlClose; end; -- dataXchange -- this procedure builds up the Folder Tree for the current workarea procedure load_folder_tree is cursor c_wa is select wa.irid , wa.OWNER , wa.NAME , wa.KIND , wa.DESCRIPTION from sdd_workareas wa order by wa.name ; cursor c_cfg is select cfg.IRID , cfg.IVID , cfg.NAME , cfg.DESCRIPTION , ov.vlabel , nvl(ov.state, 'N') state from sdd_configurations cfg , sdd_object_versions ov where ov.ivid = cfg.ivid order by cfg.name , ov.branch_id -- to at least group by branch; probably need name of branch as well , ov.sequence_in_branch ; -- Bug 3643526: see the previous comment on this, above l_icon varchar2(250); l_launchpad_icon varchar2(200); l_link varchar2(2000); l_prev_app_irid number(38):=0; l_prev_cfg_irid number(38):=0; begin htmltree.reset_tbl; l_icon:= cdwp.add_images ( p_text => '{workarea.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP179_ODWA_ALLWAS,'','','','') || '"' ); l_launchpad_icon:= cdwp.add_images ( p_text => '{lp.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP180_ODWA_LPAD,'','','','') || '"' ); /*cdwpbase.nbsp(3) ||htf.anchor2 ( curl => , ctext => l_launchpad_icon , ctarget => '_TOP' ) */ htmltree.add_node ( p_display_label => l_icon ||'' || Rob_msg.GetMsg(Rob_msg.DSP181_ODWA_WAS ,'','','','') || '' , p_node_level => 1 , p_has_children => true , p_is_expanded => true , p_value => 'WA' , p_additional_label => '' --l_link , p_is_inflatable => false , p_classification => 'nolink' ); for r_wa in c_wa loop jr_context.set_workarea( r_wa.irid); l_icon:= cdwp.add_images ( p_text => '{workarea.gif}' , p_attributes => 'ALT="'||r_wa.name ||' - '||substr(r_wa.description, 0, 100) ||'"' ); htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||r_wa.name , p_node_level => 2 , p_has_children => false -- if there are children, the next step will include them and find_folder_nodes will correct this setting where appropriate , p_is_expanded => false , p_value => to_char(r_wa.irid) , p_additional_label => '' , p_is_inflatable => true -- root folders not included , p_classification => '{TYPE=WA}' ); end loop; -- r_wa -- CONFIGURATIONS -- ================= jr_context.set_workarea( to_number(null)); l_icon:= cdwp.add_images ( p_text => '{configuration.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP176_ODWA_CONFIG ,'','','','') || '"' ); htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||'' || Rob_msg.GetMsg(Rob_msg.DSP176_ODWA_CONFIG ,'','','','') || '' , p_node_level => 1 , p_has_children => true , p_is_expanded => false , p_value => 'CFG' , p_additional_label => '' --l_link , p_is_inflatable => true , p_classification => 'nolink'||'{TYPE=CFG}' ); l_icon:= cdwp.add_images ( p_text => '{AllFolders.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP182_ODWA_FOLVIEW ,'','','','') || '"' ); htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||'' || Rob_msg.GetMsg(Rob_msg.DSP183_ODWA_ALLFOLDERS ,'','','','') || '' , p_node_level => 1 , p_has_children => true , p_is_expanded => false , p_value => 'FOL' , p_additional_label => '' --l_link , p_is_inflatable => true , p_classification => 'nolink'||'{TYPE=FOL}' ); l_icon:= cdwp.add_images ( p_text => '{wastebasket.gif}' , p_attributes => 'ALT="' || Rob_msg.GetMsg(Rob_msg.DSP184_ODWA_GLOBALBASKET ,'','','','') || '"' ); htmltree.add_node ( p_display_label => l_icon ||cdwpbase.nbsp(1) ||Rob_msg.GetMsg(Rob_msg.DSP178_ODWA_WASTEBASKET ,'','','','') , p_node_level => 1 , p_has_children => true , p_is_expanded => false , p_value => 'WASTEBASKET' , p_additional_label => '' --l_link , p_is_inflatable => true , p_classification => '{TYPE=WASTEBASKET}' ); htmltree.find_folder_nodes; -- to set the has_children property where appropriate end; -- load_folder_tree -- write the frame waSelector procedure waSelector ( p_session_id in number ) is begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'waSelector' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); htp.headClose; htp.bodyopen(cattributes => 'BGCOLOR = #FFFFFF'); cdwp.tool_header('navigator'); htp.bodyClose; htp.htmlClose; end; -- waSelector procedure rightSide ( p_session_id in number ) is begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'rightSide' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); htp.headClose; htp.framesetopen ( crows => '100%,*' , cattributes => 'FRAMEBORDER="NO" BORDER="0" TITLE="'||rob_msg.getmsg(rob_msg.ACC002_DATA_FRAME,'','','','')|| '"LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( 'odwa_fol.logoFrame?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'logoFrame' , cattributes=> 'TITLE="'||rob_msg.getmsg(rob_msg.ACC001_LOGO_FRAME,'','','','')||'"' || 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( 'odwa_fol.dataXchange?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'dataXchange' , cscrolling => 'no' , cattributes=> 'TITLE="'||rob_msg.getmsg(rob_msg.ACC002_DATA_FRAME,'','','','')||'"' || 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.framesetclose; htp.htmlClose; end; -- rightSide procedure appsBottom ( p_session_id in number ) is begin odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'appsBottom' ); htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); cdwp.include_report_styles; htp.title(Rob_msg.GetMsg(Rob_msg.DSP173_ODWA_DISPELEMENTS ,'','','','')); htp.headClose; htp.framesetopen ( ccols => '40%,60%' , cattributes => 'FRAMEBORDER="YES" BORDER="1" TITLE="'||rob_msg.getmsg(rob_msg.ACC007_APP_FRAME,'','','','')|| '"LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( csrc => 'odwa_fol.folderTree?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'folderTree' , cattributes=> 'TITLE="'||rob_msg.getmsg(rob_msg.ACC003_TREE_FRAME,'','','','')||'"' || 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( 'odwa_fol.rightSide?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'rightSide' , cattributes=> 'TITLE="'||rob_msg.getmsg(rob_msg.ACC004_OBJECTS_FRAME,'','','','')||'"' || 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.framesetclose; htp.htmlClose; end; -- appsBottom -- main procedure for the select WA and Folder screen -- sets up a frame that ultimately will look as follows: -- ------------------------------- -- | waSelector | -- ------------------------------| -- | | | -- | folderTree | logoFrame | } appsBottom -- | |------------- | -- | | dataXchange | -- ------------------------------- -- { rightSide } procedure list_application_systems ( p_session_id in number , p_workarea_id in number default -1 ) is l_js_action varchar2(4000); l_node_href varchar2(2000); begin -- create session when necessary, refresh session cache, set workarea context -- from here on reference to odwactxt.get_... functions for any context value odwactxt.update_context ( p_session_id => p_session_id , p_package_name => PACKAGE_NAME , p_procedure_name=> 'list_application_systems' , p_folder_irid => null , p_folder_ivid => null , p_cfg_ivid => null , p_workarea_irid => null , p_pac_irid => null , p_pac_ivid => null ); l_js_action:= 'function pickNode( idx) { var url; selectedIdx = idx; redrawTree(); ' /* if ( nodesTree[idx].classification.indexOf("TYPE=WA}") != -1 || nodesTree[idx].classification.indexOf("TYPE=CFG") != -1 ) { url = "odwalpad.app_home?p_session_id='||to_char(odwactxt.get_session_id) ||chr(38)||'"+ ifThenElse ( nodesTree[idx].classification.indexOf("TYPE=WA") != -1 // nodesTree[idx].classification =="WA" , "p_wa_id" , ifThenElse ( nodesTree[idx].classification.indexOf("TYPE=CFG") != -1 //nodesTree[idx].classification =="CFG" ,"p_cfg_id" ,"p_app_id" ) ) +"="+nodesTree[idx].value+"' ||chr(38)||'p_root_value="+nodesTree[top.getParentNodeAbsolute( idx, 1)].value+"' -- //Workarea or Root Folder or Configuration level node ||chr(38)||'p_root_classification="+nodesTree[top.getParentNodeAbsolute( idx, 1)].classification+"' -- //Workarea or Root Folder or Configuration classification ||chr(38)||'p_classification="+nodesTree[idx].classification ; window2=open ( url , ''launchpadWindow'' , ''toolbar=yes,scrollbars=yes,location=yes,directories=yes'' +'',status=yes,menubar=yes,resizable=yes'' ); } // type = WA or CFG => open Launchpad Window ' */ ||' if ( nodesTree[idx].classification.indexOf("WASTEBASKET") != -1 ) { top.appsBottom.rightSide.logoFrame.location = "odwa_fol.type_rep?p_session_id='||to_char(odwactxt.get_session_id) ||chr(38)||'p_app_id=' ||chr(38)||'p_el_type_of="+nodesTree[idx].classification+"' ||chr(38)||'p_root_value="+nodesTree[getParentNodeAbsolute( idx, 1)].value+"' -- //Workarea or Root Folder or Configurationnode ||chr(38)||'p_root_classification="+nodesTree[getParentNodeAbsolute( idx, 1)].classification } else if (nodesTree[idx].classification.indexOf("TYPE=APP") != -1 || nodesTree[idx].classification.indexOf("TYPE=FOL") != -1 || nodesTree[idx].classification.indexOf("TYPE=WA") != -1 || nodesTree[idx].classification.indexOf("TYPE=CFG") != -1 ) { top.appsBottom.rightSide.logoFrame.location = "odwa_fol.type_rep?p_session_id='||to_char(odwactxt.get_session_id) ||chr(38)||'p_app_id="+nodesTree[idx].value+"' ||chr(38)||'p_el_type_of="+nodesTree[idx].classification+"' ||chr(38)||'p_root_value="+nodesTree[getParentNodeAbsolute( idx, 1)].value+"' -- //Workarea or Root Folder or Configurationnode ||chr(38)||'p_root_classification="+nodesTree[getParentNodeAbsolute( idx, 1)].classification } else { top.appsBottom.rightSide.logoFrame.location = "odwa_fol.type_rep?p_session_id='||to_char(odwactxt.get_session_id) ||chr(38)||'p_app_id="+nodesTree[idx].value+"' ||chr(38)||'p_el_type_of="+nodesTree[idx].classification+"' ||chr(38)||'p_root_value="+nodesTree[getParentNodeAbsolute( idx, 1)].value+"' -- //Workarea or Root Folder or Configurationnode ||chr(38)||'p_root_classification="+nodesTree[getParentNodeAbsolute( idx, 1)].classification } // TYPE=APP or TYPE = FOL } '; -- now we could use the function getParentNodeRelative( idx, levels) or getParentNodeAbsolute( idx, level) -- to retrieve values/classifications of parent nodes -- e.g. to get the root Folder irid for any selected node, refer to: -- nodesTree[ getParentNodeAbsolute( idx, 0)].value l_node_href:= 'pickNode(\"" +idx + "\" )'; -- (\"" +elId + "\","+idx+" )'; --\""+name+\"")'; htp.htmlOpen; htp.headOpen; cdwp.write_about(package_name, revision_label); cdwp.include_report_styles; -- if the workarea context has been set -- then we can build the tree and its data in this Frame load_folder_tree; htp.p(' '); htmltree.js_tree ( p_codeFrameName => 'top' , p_treeFrameName => 'folderTree' , p_treeFramePath => 'top.appsBottom.folderTree' , p_xchangeFramePath => 'top.appsBottom.rightSide.dataXchange' , p_js_action => l_js_action , p_node_href => l_node_href , p_inflate_request => 'odwa_fol.inflate_Node' , p_inflate_parameters => '"' ||chr(38) ||'p_session_id='||to_char(odwactxt.get_session_id) ||chr(38) ||'p_root_value="+nodesTree[getParentNodeAbsolute( idx, 1)].value' ||'+"' ||chr(38) ||'p_root_classification="+nodesTree[getParentNodeAbsolute( idx, 1)].classification' ); htp.p(' '); htp.title(Rob_msg.GetMsg(Rob_msg.DSP173_ODWA_DISPELEMENTS ,'','','','')); htp.headClose; htp.framesetopen ( crows => '130,*' , cattributes => 'FRAMEBORDER="NO" BORDER="0" TITLE="'||rob_msg.getmsg(rob_msg.DSP173_ODWA_DISPELEMENTS,'','','','')|| '"LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( csrc => 'odwa_fol.waSelector?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'waSelector' , cattributes => 'SCROLLING="NO" TITLE="'||rob_msg.getmsg(rob_msg.ACC006_WA_FRAME,'','','','')||'"'|| 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.frame ( 'odwa_fol.appsBottom?p_session_id=' ||to_char(odwactxt.get_session_id) , cname=> 'appsBottom' , cattributes => 'TITLE="'||rob_msg.getmsg(rob_msg.ACC007_APP_FRAME,'','','','')||'"' || 'LONGDESC="odwahelp.rightside?p_session_id=&p_him_id=400"' ); htp.framesetclose; htp.htmlClose; end; -- list_application_systems end; -- odwa_fol /