转自:http://yedward.net/?id=68

Form中一般常用的画布类型包括content、stacked、tab这三种,其实content类型的画布是每一个form都必须有的,而且只能有且仅有一个。其中,Tab画布算是比较特殊的一种画布了,首先不能直接在Tab上放置任何item,所有的item都是放在Tab的下属的标签页中,其次它的切换也还是蛮有门道的,这篇文章就聊聊怎么控制Form中Tab画布不同标签之间的切换。

假设有这样一个例子,有一个Tab画布(名为TAB_DEMO),其下有headers、lines两个标签页,同时还有一个名为order_lines_stacked的stacked类型的画布,我想实现,headers是第一个标签页,也是默认展示的标签页,我要把order_lines_stacked放在lines标签里面,当切换到lines的时候,order_lines_stacked显示,切换到headers的时候,order_lines_stacked又隐藏掉。

对于上面这个例子,首先要知道的是Tab画布及其标签页和堆叠画布其实是独立的,并不能直接通过属性设置来让stacked画布放置在某一个Tab标签页中,这个时候想要实现这样的功能,就要通过代码来实现,这也就是我要说的Tab特殊的一个地方。这里,我们要用到一个Form级的WHEN-TAB-PAGE-CHANGED触发器,特别要注意的是该触发器的fire条件是用鼠标点击时才触发,也正因为这样后面我们还要加一个触发器,以实现当是使用快捷键而不是鼠标点击来切换标签时候的功能实现。

对于上面的例子,实现过程如下:

在Form级添加WHEN-NEW-FORM-INSTANCE,代码如下:

set_canvas_property('TAB_DEMO', TOPMOST_TAB_PAGE, 'HEADERS');
hide_view('ORDER_LINES_STACKED');

在Form级添加WHEN-TAB-PAGE-CHANGED,代码如下:

if :system.tab_previous_page = 'HEADERS' then
validate(block_scope);
if :system.MODE = 'ENTER-QUERY' or not form_success then
set_canvas_property('TAB_DEMO', topmost_tab_page, :system.tab_previous_page);
return;
end if;
elsif :system.tab_previous_page = 'LINES' then
validate(block_scope);
if :system.MODE = 'ENTER-QUERY' or not form_success then
set_canvas_property('TAB_DEMO', topmost_tab_page, :system.tab_previous_page);
return;
end if;
end if;
if :system.tab_new_page = 'LINES' then
show_view('ORDER_LINES_STACKED');
go_item('ORDER_LINES.ORG'); -- ORDER_LINES.ORG是一个Item,假设本来LINES标签页上就已经设置了
elsif :system.tab_new_page = 'HEADERS' THEN
hide_view('ORDER_LINES_STACKED');
go_item('ORDER_HEADERS.DESCRIPTION'); -- ORDER_HEADERS.DESCRIPTION是一个Item,假设本来HEADERS标签页上已经设置了
end if;

如果是使用快捷键切换的话,不会触发上面的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');

[转]Form中控制Tab画布不同标签间切换的方法的更多相关文章

  1. 在多行列表中id同名的<a>标签点击事件处理方法

    Struts2标签 问题描述:最近项目中在使用struts迭代标签动态生成列表的过程中,由于每一行li元素中包含<a>超链接,如下图 一开始超链接是这样的<a href=“#” id ...

  2. html中控制Tab键的顺序

      在做项目中,需要控制html页面上登陆表单的按Tab键的顺序,代码如下: <tr>                         <td width="19%&quo ...

  3. 请写出在ASP.NET中常用的几种页面间传值的方法,并说出它们的特点。

    QueryString 传递一个或多个安全性要求不高或是结构简单的数值.但是对于传递数组或对象的话,就不能用这个方法了 session(viewstate) 简单,但易丢失 作用于用户个人,过量的存储 ...

  4. ElementUI使用v-if控制tab标签显示遇到的Duplicate keys detected: 'xxx'问题

    今天工作遇到一个问题: 需求背景:页面中有几个tab,需要根据登录用户的权限控制tab标签的显示与隐藏 . <el-tabs @tab-click="handleClick" ...

  5. Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行

      H1/H2/H3/H4标题标签常常使用在一个网页中唯一标题.重要栏目.重要标题等情形下. H1在一个网页中最好只使用一次,如对一个网页唯一标题使用.H2.H3.H4标签则可以在一个网页中多次出现, ...

  6. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  7. bootstrap框架中data-toggle="tab"属性会取消a标签默认行为

    这几天做公司项目用了bootstrap框架,在用导航组件的过程中,我发现在a标签里面添加data-toggle="tab"属性之后,这个a标签会失去默认行为,点击a标签的时候不会跳 ...

  8. selenium控制超链接在当前标签页中打开或重新打开一个标签页

    selenium控制超链接在当前标签页中打开或重新打开一个标签页 在web页面源码中,控制超链接的打开是在当前标签页还是重新打开一个标签页,是由属性target=“_black”进行控制的.如果还有属 ...

  9. FORM中的MOAC控制

    1.创建表时,对_ALL表创建同义词 -- Create Multi Org Synonym CREATE  OR REPLACE  SYNONYM CUX_WF_DEF_HEADER FOR CUX ...

随机推荐

  1. BrandZ:2016年全球最具价值品牌百强榜(完整报告)

    https://wppbaz.com/admin/uploads/files/BZ_Global_2016_Report.pdf Millward Brown编制的BrandZ最新排行榜(2016 B ...

  2. MySQL结果集处理

    问题: 1. MySQL对查询的结果集如果返回,一次性还是每条?2. 客户端如何接收结果集? 1. 对于有返回结果集的查询,server端和client端交互的数据包由以下组成: p1:meta da ...

  3. breakpoints、lldb 和 chisel 的使用

    http://www.cocoachina.com/ios/20150803/12805.html Breakpoints BreakPoint分类 breakpoint也是有分类的,我这里的文章内大 ...

  4. IKVM - 0.42.0.3 .NET平台上的Java实现

    IKVM是Microsoft .NET Framework和Mono平台上的一个Java实现,他包括以下一些部分:1. 一个用.NET实现的Java虚拟机2. Java类库的.NET实现3. 一些用于 ...

  5. 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密

    关系型数据库,如SQL Server,使用锁来避免多用户修改数据时的并发冲突.当一组数据被某个用户锁定时,除非第一个用户结束修改并释放锁,否则其他用户就无法修改该组数据. 有些数据库,包括SQL Se ...

  6. struct ifreq结构体与ip,子网掩码,网关等信息

    总结一下,今天学习的关于通过socket,ioctl来获得ip,netmask等信息,其中很多内容参照了很多网上的信息,我会一一列出的 我用的这个函数,就是下面这个函数,其中的有一些全局变量,很好懂, ...

  7. nmon for linux

    nmon(为Nigel's performance Monitor的简写) for linux工具是 IBM开源的在POWER, x86, x86_64, Mainframe & now AR ...

  8. #pragma once

    这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次. #pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以, ...

  9. 经典 Linux & VIM 教程

    简明 Vim 练级攻略: http://coolshell.cn/articles/5426.html VIM快捷键: http://coolshell.cn/wp-content/uploads/2 ...

  10. nginx 重装添加http_ssl_module模块

    起因: 如果出现“[emerg] 10464#0: unknown directive "ssl" in /usr/local/nginx-0.6.32/conf/nginx.co ...