EBS Form带Folder的Tab标签页开发


 如上图,为一个很标准且很简单的Folder文件夹界面,此时遇到需求需要增加维护界面,且维护的界面是其他维度,也就是和当前的界面不是同一张数据库表了,此时就需要用到TAB标签页,使界面可以有多个页面,效果如下。

 接下来我们就详细讲解下如何实现这种多个标签页的Form。

首先我们需要理解Form界面展示的一种模式,Folder的开发会用到堆叠画布。内容画布和堆叠画布都对应同一个窗口的话,此时堆叠画布的内容就可以起到展示效果,所以一般来说我们把展示字段都放在堆叠画布上就可以了。我们还可以在打开主内容画布时通过“视图-堆叠视图”来选择查看显示对应的堆叠画布。

 然后如果要做TAB页的开发,除了内容画布,堆叠画布之外,此时还需要用到一个新的画布类型“标签”类型,子类为“TAB_CANVAS”,在此画布下可以新增多个标签页,多个标签页之间可以切换。


此时还需要了解这种方式的一个基本原理,每个TAB页上放的字段内容肯定是不同的,但是由于需要用Folder必须用到堆叠画布。所以此时不是在“块.字段”的属性里面去设置对应的TAB标签的。也就是说此时字段的属性仍然只能作用于画布,而不能直接作用于TAB标签。所以我们不同字段需要先放在放在不同的堆叠画布上的,然后是再通过代码来决定哪个堆叠画布放到哪个TAB标签页面上。

首先大脑里面有这个思路了,下面的开发和设置就更好理解了。
块:G_DATA
字段:USER_TYPE_NAME
可见:是
画布:G_DATA_STK
标签页:空

 块:B_DATA
字段:USER_TYPE_NAME
可见:是
画布:B_DATA_STK
标签页:空

字段与PROMPT字段设置的方式与普通Folder开发的一样,所以其堆叠画布展示出来的效果也一样。

新增了一个子类为CANCAS_STACKED_FIXED_FIELD的堆叠画布,用来放CURRENT_RECORD_INDICATOR和FOLDER_OPEN。

所有的字段和画布设置完成后:

 众所周知,Folder开发是需要在Form级的“WHEN-NEW-FORM-INSTANCE”触发器去初始化画布信息的。TAB标签画布的初始化代码有所不同,如下:

 FORM_UTIL.INIT_FOLDERS(EVENT                => 'WHEN-NEW-FORM-INSTANCE',
                             P_OBJECT_NAME        => 'CUXPACONSTRUCTSCH',
                             P_FOLDER_BLOCK_NAME  => 'G_DATA',
                             P_PROMPT_BLOCK_NAME  => 'G_DATA_PROMPT',
                             P_FOLDER_CANVAS_NAME => 'G_DATA_STK',
                             P_FOLDER_WINDOW_NAME => 'AR_DATA',
                             P_DISABLED_FUNCTIONS => NULL,
                             P_TAB_CANVAS_NAME    => 'AR_DATA_TAB',
                             P_FIXED_CANVAS_NAME  => 'G_DATA_FIX');
                             
FORM_UTIL.INIT_FOLDERS(EVENT                => 'WHEN-NEW-FORM-INSTANCE',
                             P_OBJECT_NAME        => 'CUXPACONSTRUCTSCH',
                             P_FOLDER_BLOCK_NAME  => 'B_DATA',
                             P_PROMPT_BLOCK_NAME  => 'B_DATA_PROMPT',
                             P_FOLDER_CANVAS_NAME => 'B_DATA_STK',
                             P_FOLDER_WINDOW_NAME => 'AR_DATA',
                             P_DISABLED_FUNCTIONS => NULL,
                             P_TAB_CANVAS_NAME    => 'AR_DATA_TAB',
                             P_FIXED_CANVAS_NAME  => 'B_DATA_FIX'); 

上面这份初始化代码有做封装,其原标准代码如下,可按如下代码设置即可:

APP_FOLDER.DEFINE_FOLDER_BLOCK(OBJECT_NAME        => P_OBJECT_NAME,
                               FOLDER_BLOCK_NAME  => P_FOLDER_BLOCK_NAME,
                               PROMPT_BLOCK_NAME  => P_PROMPT_BLOCK_NAME,
                               FOLDER_CANVAS_NAME => P_FOLDER_CANVAS_NAME,
                               FOLDER_WINDOW_NAME => P_FOLDER_WINDOW_NAME,
                               DISABLED_FUNCTIONS => P_DISABLED_FUNCTIONS,
                               TAB_CANVAS_NAME    => P_TAB_CANVAS_NAME,
                               FIXED_CANVAS_NAME  => P_FIXED_CANVAS_NAME);

APP_FOLDER.EVENT('INSTANTIATE');

还是在“WHEN-NEW-FORM-INSTANCE”触发器,上面的Folder初始化完后,就需要设置展示的堆叠画布了。其实这里就是通过show_view('CANVAS')和hide_view('CANVAS')来控制的。代码如下:

if :parameter.project_id is not null then 
     	 app_find.find('CONSTRUCT_SCH_H');
end if ;
set_canvas_property('AR_DATA_TAB'
                       ,topmost_tab_page
                       ,'AR_DATA');
show_view('AR_DATA_FIX');
show_view('AR_DATA_STK');
hide_view('G_DATA_FIX');
hide_view('G_DATA_STK'); 
hide_view('B_DATA_FIX');
hide_view('B_DATA_STK'); 


另外还需要先定义一个Form级的'WHEN-TAB-PAGE-CHANGED'触发器,主要用来控制标签页切换时,需要隐藏哪个画布,显示哪个画布。

FORM_ACTION.event('WHEN-TAB-PAGE-CHANGED')代码如下:

ELSIF event = 'WHEN-TAB-PAGE-CHANGED' THEN
    IF :system.tab_previous_page = 'AR_DATA' THEN
        validate(block_scope);
        IF :system.mode = 'ENTER-QUERY'
           OR NOT form_success THEN
            --MESSAGE HERE
            set_canvas_property('AR_DATA_TAB'
                               ,topmost_tab_page
                               ,:system.tab_previous_page);
            RETURN;
        END IF;
    ELSIF :system.tab_previous_page = 'G_DATA' THEN
        validate(block_scope);
        IF :system.mode = 'ENTER-QUERY'
           OR NOT form_success THEN
            --MESSAGE HERE
            set_canvas_property('AR_DATA_TAB'
                               ,topmost_tab_page
                               ,:system.tab_previous_page);
            RETURN;
        END IF;
     ELSIF :system.tab_previous_page = 'B_DATA' THEN
        validate(block_scope);
        IF :system.mode = 'ENTER-QUERY'
           OR NOT form_success THEN
            --MESSAGE HERE
            set_canvas_property('AR_DATA_TAB'
                               ,topmost_tab_page
                               ,:system.tab_previous_page);
            RETURN;
        END IF;  
       
    END IF;
    IF :system.tab_new_page = 'AR_DATA' THEN
        hide_view('G_DATA_FIX');
    				hide_view('G_DATA_STK'); 
    				hide_view('B_DATA_FIX');
    				hide_view('B_DATA_STK'); 
    		    go_item('AR_DATA.FW_NAME');
    		    show_view('AR_DATA_FIX');
    		    show_view('AR_DATA_STK');     	 
    ELSIF :system.tab_new_page = 'G_DATA' THEN
        hide_view('AR_DATA_FIX');
    				hide_view('AR_DATA_STK'); 
    				hide_view('B_DATA_FIX');
    				hide_view('B_DATA_STK'); 
    		    go_item('G_DATA.USER_TYPE_NAME');
    		    show_view('G_DATA_FIX');
    		    show_view('G_DATA_STK'); 
    ELSIF :system.tab_new_page = 'B_DATA' THEN
        hide_view('AR_DATA_FIX');
    				hide_view('AR_DATA_STK'); 
    				hide_view('G_DATA_FIX');
    				hide_view('G_DATA_STK'); 
    		    go_item('B_DATA.USER_TYPE_NAME');
    		    show_view('B_DATA_FIX');
    		    show_view('B_DATA_STK'); 	    
    END IF; 
ELSIF event = '' THEN

基本按上述设置就没问题了,后续就是自己调试字段和画布的排版了。
 

另外,还可以通过代码判断控制,哪些标签页可维护。
set_tab_page_property('AR_DATA_TAB.AR_DATA', ENABLED,PROPERTY_ON);

最后按照其他博主教程,如果需要通过快捷键切换TAB标签的话请继续下面操作:
如果是使用快捷键切换的话,不会触发上面的trigger,所以做如下处理:
在ORDER_LINES.ORG这Item上面添加一个WHEN-NEW-ITEM-INSTANCE触发器,代码如下:
show_view('ORDER_LINES_STACKED');
在ORDER_HEADERS.DESCRIPTION上面添加一个WHEN-NEW-ITEM-INSTANCE触发器,代码如下:
hide_view('ORDER_LINES_STACKED');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: EBS Form开发手册是指Oracle E-Business Suite(EBS)中Form开发的详细指南和教程。Oracle EBS是一套集成的企业资源规划(ERP)软件解决方案,它提供了许多标准的应用程序模块,用于不同的业务领域,例如财务、供应链、人力资源等。 FormEBS中用于开发用户界面的工具之一,它可以创建交互式的数据输入和显示窗体。Form开发手册提供了详细的说明和示例,帮助开发人员理解和使用Form开发工具的各种功能。 在EBS Form开发手册中,你可以学习到如何创建自定义的数据输入和显示窗体,如何利用Form Builder工具进行界面设计和布局,以及如何添加和管理字段、按钮、菜单等控件。手册还解释了各种Form开发的常用概念和技术,例如表单对象、触发器、继承、模块间通信等。 此外,手册还介绍了如何处理Form的验证、处理用户输入、数据保存和查询等操作。它还提供了一些最佳实践和技巧,以帮助开发人员编写高效、可靠和易于维护的Form代码。 总之,EBS Form开发手册是EBS开发人员学习和参考的重要资源。通过学习这份手册,开发人员可以深入了解Form开发工具的使用方法和技巧,从而更好地设计和开发EBS应用程序界面。 ### 回答2: EBS(Elastic Block Store)是亚马逊云计算平台提供的一种云存储服务,EBS Form是用于开发和管理EBS卷的专用工具。EBS Form开发手册为使用EBS Form开发人员提供了详细的操作指南和技术参考。 EBS Form开发手册首先介绍了EBS Form的基本概念和主要特性。它解释了如何使用EBS Form创建、修改和删除EBS卷,描述了EBS卷的各种属性和功能选项,并提供了实际案例和最佳实践,以帮助开发人员更好地理解和应用EBS Form。 手册中还包括了EBS Form的安装配置和环境设置的详细说明。它介绍了EBS Form客户端的安装过程,以及如何配置和连接到云存储服务。开发人员可以按照手册提供的步骤和示例,快速搭建EBS Form开发环境,开始使用EBS Form进行云存储的开发工作。 此外,手册还提供了EBS Form的API文档和开发接口说明,以及与其他云服务的集成方法和建议。开发人员可以通过手册了解如何调用EBS Form的API进行卷的管理和操作,并了解如何将EBS Form与其他云计算服务(如Amazon EC2)进行集成,实现更多复杂的应用场景和业务需求。 综上所述,EBS Form开发手册是一本面向开发人员的指南,它详细介绍了EBS Form的功能和用法,提供了丰富的实例和技术参考,帮助开发人员更好地理解和应用EBS Form。通过熟练使用EBS Form开发人员可以更高效地开发和管理云存储服务,满足不同应用场景的需求。 ### 回答3: ebs form开发手册是一本针对EBS(Enterprise Business Suite)系统的表单开发的指南。EBS是由Oracle开发的一套集成的企业级管理软件,涵盖了各个方面的业务功能,如人力资源管理、财务管理、供应链管理等。 该开发手册提供了详细的指导和说明,帮助开发人员了解和掌握EBS系统中的表单开发。它包含了各个阶段的开发过程,从需求分析、设计、开发、测试到部署和维护。通过遵循这个手册,开发人员可以按照规范的流程正确地开发表单,确保系统的稳定性和可靠性。 在这个开发手册中,开发人员将学习使用EBS系统中的表单开发工具和技术,如Oracle Forms和Oracle PL/SQL。他们将了解如何创建表单界面、定义数据字段、实现业务逻辑、编写触发器和事件等。此外,手册还介绍了与表单开发相关的最佳实践和常用的技巧,帮助开发人员提高开发效率和质量。 EBS表单开发手册还提供了丰富的示例和案例,让开发人员能够更好地理解和应用所学知识。通过实际练习和实践,开发人员可以更好地掌握EBS表单开发的技巧和方法,为企业提供定制化的解决方案。 总之,EBS表单开发手册是一本详尽的指南,帮助开发人员了解和掌握EBS系统中的表单开发。通过遵循手册中的指导,开发人员可以正确地开发表单,并提供高质量的解决方案,以满足企业的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值