一、建noTab的Folder Form:
1.创建数据库对象:
  create table  和相应的view。

2.基于模板Template.fmb创建一个新的Form:****.fmb
  添加一个Library:APPFLDR.pll(目录:$AU_TOP/Resource;打开后,系统询问是否去掉绝对路径,选择YES)
  再打开APPSTAND.fmb:将其中的对象组STANDARD_FOLDER拖到自己的FORM中,选择Subclass

3.添加窗口 window:
  设置属性:Subclass information:WINDOW

4.添加画布:MAIN(内容画布) 和 CANVAS(堆叠画布)
   MAIN的type为content ;
   CANVAS的type为stacked
           subclass:canvas_Stacked

5.添加数据块:block(基于数据库)、 block_prompt(放Title)
  设置对应属性:subclass都为BLOCK
                画布block :Number of Records Displayed--8
                            ShowScrolbar--YES
                            Scrollbar Canvas-- MAIN 设置滚动条显示的画布
========== 以下对数据块block:======
6.添加触发器:
  对数据块block:添加支持FOLDER的Block级的Trigger:
  PRE-QUERY -- app_folder.event('PRE-QUERY');
  POST-QUERY -- app_folder.event('POST-QUERY');
                app_globe.event('POST-QUERY');
  WHEN-NEW-BLOCK-INSTANCE    app_folder.event('WHEN-NEW-BLOCK-INSTANCE');
  WHEN-NEW-RECORD-INSTANCE   app_folder.event('WHEN-NEW-RECORD-INSTANCE');
app_folder.event('KEY-PREV-ITEM');          
app_folder.event('KEY-NEXT-ITEM');
app_folder.event('KEY-PRVREC');
app_folder.event('KEY-NXTREC');
app_folder.event('KEY-CLRREC');
app_folder.event('KEY-EXEQRY');
app_folder.event('KEY-ENTQRY');
app_folder.event('PRE-BLOCK');
app_folder.event('POST-BLOCK');
app_folder.event('KEY-CLRBLK');
pre-insert    fnd_standard.set_who;
7.添加ITEM: Folder_Switcher and CURRENT_RECORD_indicator
  注:这两个item要放置在块的最上面。
  设置属性:SWITCHER:
            item type:TEXT ITEM
            SUBCLASS : SWITCHER
            VISIBLE : yes
            canvas   :显示在堆叠画布CANVAS
            PROMPT   : 空
       ------------------------------
            indicator:
            ITEM TYPE: TEXT ITEM
            SUBCLASS : CURRENT_RECORD_INDICATOR
            VISIBLE  : YES
            CANVAS   : 显示在内容画布MAIN
            PROMPT   : 空
========== 以下对数据块block_prompt:======
8.添加6个FOLDER特有的Item
注:放在block中的下方,顺序为:by321 dummy title open
                itemtype      subclass     visible      canvas
FOLDER_OPEN :    push        folder_open     yes         MAIN
FOLDER_TITLE:   Display     dynamic_title    yes         MAIN
FOLDER_DUMMY:    TEXT        FOLDER_DUMMY    YES        TOOLBAR
ORDER_BY1:       PUSH        FOLDER_ORDERBY   NO         CANVAS
ORDER_BY2:       push        FOLDER_ORDERBY   no         canvas
ORDER_BY3:      push        FOLDER_ORDERBY   NO         CANVAS

9.添加与基于数据库的block中的要显示的item对应的用于显示title的item
注:必须与之同名,宽度必须一致,且在block中的上下顺序一致。
  设置属性:ITEMtype : Display Item
            subclass : FOLDER_PROMPT_MULTIROW
            InitialValue:需要显示的名称
10.更改App_custom Package 中的一些代码:
   将wnd='****' ---改为自己的窗口名:WINDOW
           
11.更改Form级Trigger
   pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是显示的第一个窗口
12.设置窗口的primary Canvas 为 主画布MAIN

13.添加PACKAGE: Form_pkg
===============================================================
PACKAGE BODY Form_pkg IS
   procedure  new_form_instance is
begin

--定义Folder
     app_folder.define_folder_block('Cup_ORDER_4040_2',--客户化自定义名
    'block',--folder_block_name
    'block_prompt',--prompt_block_name
     'canvas',--folder_canvas_name
     'window',--folder_window_name
      null,--disabled_functions
      null,--tab_canvas_name
       null);--fixed_canvas_name
    app_folder.event('INSTANTIATE');
  SYNCHRONIZE;
   end;
END;

================================
14.更改Form级trigger
 
when-new-form-instance :
FDRCSID('$Header: TRNORD4040.fmb 120.0 2005/05/06 23:25  appldev ship                                                                                                                                                                                                                                                                    $');
APP_STANDARD.EVENT('WHEN-NEW-FORM-INSTANCE');
form_pkg.new_form_instance;
 
folder_action:  
app_folder.event(:global.folder_action);
 
when-window-resized: 
if :system.event_window in ('ORDER_MAIN') then
  app_folder.event('WHEN-WINDOW-RESIZED');
end if;

key-CLRFRM :
APP_STANDARD.EVENT('KEY-CLRFRM');
app_folder.event('KEY-CLRFRM');

更改Item级trigger
folder_switcher:  when-new-item-instance : app_folder_move_cursor('1');
current_record_indicator:   when-new-item-instance:  app_folder_move_cursor('1');

二、建有Tab的Folder Form:

*与非tab不同之处:
1.固定列不再放在内容画布上,而是放在子类型为canvas_stacked_fix_field的堆叠画布上
2.API定义Folder时的参数不同,需指定:tab_canvas_name,fixed_canvas_name 两个参数

*建Tab的Folder Form:
1.创建数据库对象:
  create table  和相应的view。

2.基于模板Template.fmb创建一个新的Form:****.fmb
  添加一个Library:APPFLDR.pll(目录:$AU_TOP/Resource;打开后,系统询问是否去掉绝对路径,选择YES)
  再打开APPSTAND.fmb:将其中的对象组STANDARD_FOLDER拖到自己的FORM中,选择Subclass

3.添加窗口 window:
  设置属性:Subclass information:WINDOW

4.添加画布:MAIN(内容画布) 和 CANVAS(堆叠画布)
   CANVAS的subclass:canvas_Stacked
  添加Tab类型的画布MAIN_Tab
  设置属性:CanvasType: Tab 
            subclass  :TAB_CANVAS
            VISIBLE   : YES
            WINDOW    :window
  对标签页设置label(显示标题) 、设置subclass为TAB_PAGE

5.添加数据库:block(基于数据库)、 block_prompt(放Title)
  设置对应属性:subclass都为BLOCK
                画布block :Number of Records Displayed--8
                            ShowScrolbar--YES
                            Scrollbar Canvas-- ***FIX 设置垂直滚动条显示的画布(为fix画布)
========== 以下对数据块block:======
6.添加触发器:
  对数据块block:添加支持FOLDER的Block级的Trigger:
  PRE-QUERY -- app_folder.event('PRE-QUERY');
  POST-QUERY -- app_folder.event('POST-QUERY');
                app_globe.event('POST-QUERY');
  WHEN-NEW-BLOCK-INSTANCE    app_folder.event('WHEN-NEW-BLOCK-INSTANCE');
  WHEN-NEW-RECORD-INSTANCE   app_folder.event('WHEN-NEW-RECORD-INSTANCE');
app_folder.event('KEY-PREV-ITEM');          
app_folder.event('KEY-NEXT-ITEM');
app_folder.event('KEY-PRVREC');
app_folder.event('KEY-NXTREC');
app_folder.event('KEY-CLRREC');
app_folder.event('KEY-EXEQRY');
app_folder.event('KEY-ENTQRY');
app_folder.event('PRE-BLOCK');
app_folder.event('POST-BLOCK');
app_folder.event('KEY-CLRBLK');
 fnd_standard.set_who;
7.添加ITEM: Folder_Switcher and CURRENT_RECORD_indicator
  注:这两个item要放置在块的最上面。
  设置属性:SWITCHER:
            item type:TEXT ITEM
            SUBCLASS : SWITCHER
            VISIBLE : yes
            canvas   :显示在堆叠画布CANVAS
            PROMPT   : 空
       ------------------------------
            indicator:
            ITEM TYPE: TEXT ITEM
            SUBCLASS : CURRENT_RECORD_INDICATOR
            VISIBLE  : YES
            CANVAS   : 显示在内容画布MAIN
            PROMPT   : 空
========== 以下对数据块block_prompt:======
8.添加6个FOLDER特有的Item
注:放在block中的下方,顺序为:by321 dummy title open
                itemtype      subclass     visible      canvas
FOLDER_OPEN :    push        folder_open     yes         MAIN---改为fix
FOLDER_TITLE:   Display     dynamic_title    yes         MAIN---改为fix
FOLDER_DUMMY:    TEXT        FOLDER_DUMMY    YES        TOOLBAR
ORDER_BY1:       PUSH        FOLDER_ORDERBY   NO         CANVAS--更改为fix
ORDER_BY2:       push        FOLDER_ORDERBY   no         canvas
ORDER_BY3:      push        FOLDER_ORDERBY   NO         CANVAS

9.添加与基于数据库的block中的要显示的item对应的用于显示title的item
注:必须与之同名,宽度必须一致,且在block中的上下顺序一致。
  设置属性:ITEMtype : Display Item
            subclass : FOLDER_PROMPT_MULTIROW
            InitialValue:需要显示的名称
10.更改App_custom Package 中的一些代码:
   将wnd='****' ---改为自己的窗口名:WINDOW
           
11.更改Form级Trigger
   pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是显示的第一个窗口
12.设置窗口的primary Canvas 为 主画布MAIN

13.添加PACKAGE: Form_pkg
===============================================================
PACKAGE BODY Form_pkg IS
---------------------------
   procedure  new_form_instance is
begin

--定义TabFolder
   app_folder.define_folder_block('Cup_ORDER_4040_2',
    'ORDER_LINES',--folder_block_name
    'ORDER_LINES_PROMPT',--prompt_block_name
     'ORDER_CREATE_PROMPT,ORDER_CREATE_PROMPT_ADDITION',--folder_canvas_name
     'ORDER_TAB',--folder_window_name
      null,--disabled_functions
      'MAIN_TAB',--tab_canvas_name
       'FIX');--fixed_canvas_name
    app_folder.event('INSTANTIATE');
  SYNCHRONIZE;
   end;

----------------------------------
/*隐藏标签页*/  
    PROCEDURE hide_main_tab( p_tab_name  varchar2) IS 
BEGIN
 IF p_tab_name = 'ORDER_CREATE_PROMPT' THEN
   hide_view('ORDER_CREATE_PROMPT_ADDITION'); 
 ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' THEN  
   hide_view('ORDER_CREATE_PROMPT');
 END IF;
END hide_main_tab;
----------------------------------
/*定位光标*/ 
    PROCEDURE go_tab_first_item(p_tab_name  varchar2) IS
BEGIN
 IF p_tab_name = 'ORDER_CREATE_PROMPT'  THEN
  go_item('ORDER_LINES.ITEM_NUMBER');
 ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' then
  go_item('ORDER_LINES.ADDITION1');
 END IF;
END go_tab_first_item;
----------------------------------
/*显示标签页*/
    PROCEDURE show_main_tab( p_tab_name  varchar2) is 
begin
 IF p_tab_name = 'ORDER_CREATE_PROMPT'  THEN
  show_view('ORDER_CREATE_PROMPT');
  show_view('FIX');
  ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' THEN
  show_view('ORDER_CREATE_PROMPT_ADDITION'); 
  show_view('FIX');    
 end if;
END show_main_tab;
----------------------------------
/*当切换tab页*/
PROCEDURE when_tab_page_changed is
    new_tab varchar2(30) := :system.tab_new_page;
    prev_tab varchar2(30) := :system.tab_previous_page;
begin
      hide_main_tab(prev_tab);
      show_main_tab(new_tab);
      go_tab_first_item(new_tab);
end when_tab_page_changed;
----------------------------------
/*当隐藏item,不能隐藏第一个item*/
PROCEDURE folder_return_action is
BEGIN
 IF(:global.folder_action = 'CONFIRM-HIDE-FIELD') THEN
  IF :global.folder_field = 'ADDITION1' THEN
   :global.folder_action_allowed := 'FALSE';
  elsif :global.folder_field='ITEM_NUMBER' then
   :global.folder_action_allowed := 'FALSE';
  END IF;
 ELSIF (:global.folder_action = 'SET-WHERE-CLAUSE') THEN
  --:global.folder_action_allowed := 'FALSE';
  null;
  END IF;
END folder_return_action;
----------------------------------

/*When_New_Item_Instance */
PROCEDURE When_New_Item_Instance IS
 
  curr_canvas_name Varchar2(30) := get_item_property(Name_In('SYSTEM.CURSOR_ITEM'),item_canvas);
 
  current_tab varchar2(30)      := get_canvas_property('MAIN_TAB',topmost_tab_page);
  tab_canvas_name    Varchar2(30) := Name_In('SYSTEM.EVENT_CANVAS');
Begin

IF curr_canvas_name in ('ORDER_CREATE_PROMPT','ORDER_CREATE_PROMPT_ADDITION') THEN
    IF curr_canvas_name != current_tab THEN
      set_canvas_property('MAIN_TAB', topmost_tab_page, curr_canvas_name);
    END IF;
 END IF;

END When_New_Item_Instance;
----------------------------------
   
END;

================================
14.更改Form级trigger
 
when-new-form-instance :
FDRCSID('$Header: TRNORD4040.fmb 120.0 2005/05/06 23:25  appldev ship                                                                                                                                                                                                                                                                    $');
APP_STANDARD.EVENT('WHEN-NEW-FORM-INSTANCE');
form_pkg.new_form_instance;
 
folder_action:  
app_folder.event(:global.folder_action);
 
when-window-resized: 
if :system.event_window in ('ORDER_MAIN') then
  app_folder.event('WHEN-WINDOW-RESIZED');
end if;

key-CLRFRM :
APP_STANDARD.EVENT('KEY-CLRFRM');
app_folder.event('KEY-CLRFRM');

Folder_return_action: form_pkg.folder_return_action;

添加:when-tab-page-changed: form_pkg.when_tab_page_changed;

更改Item级trigger
folder_switcher:  when-new-item-instance : app_folder_move_cursor('1');
current_record_indicator:   when-new-item-instance:  app_folder_move_cursor('1');

更改block级trigger:--解决TAB键在各个item之间导航时,tab页不变的问题
when-new-item-instance:form_pkg.when_new_item_instance;

FOLDER的更多相关文章

  1. Visual Basic 函数速查

    Calendar 常数 可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbCalGreg 0 指出使用的是阳历. vbCalHijri 1 指出使用的是伊斯兰历法. Color 常数 可 ...

  2. VMWare Tools 和 Shared folder(共享文件夹)

    转自: http://www.51testing.com/html/38/225738-143732.html 使用vmwar下shared folders功能实现vmware中host与ghost间 ...

  3. eclipse的package, folder, source folder 异同以及相互转化

    1 相同点:都是文件夹; 不同点: 我们用面对对象思维来看; 首先说folder, 三者的父类(object),就是普通的文件夹,它和我们window下面使用的文件夹没有任何区别; source fo ...

  4. 怎样制作web版的folder treeview

    文件夹treeview的效果 这样的treeview在实际项目中使用的场景较多. 既然用的多,那就DIY一遍,虽没有面面俱到,但也要将其基本实现完成一遍. 1.先准备图标素材  file.gif,文件 ...

  5. iOS项目groups和folder的区别(组和文件夹)

    在引用一个第三方框架的时候,已经拖进去了,但是引用框架里面的文件时,竟然报错说找不到.......查了一下,原来在拖进去时没有注意group和folder的选择! 其实仔细观察一下,不难发现,以gro ...

  6. push or get File or Folder using scp wrapped with expect and bash

    经常需要把服务器的某些文件传到 Mac,或者获取 Mac 的一些文件到服务器.尽管有很多命令scp, ftp, rsync都可以,霸特每次都有敲好长的命令,好烦,而且还要输入密码.所以想着 wrap ...

  7. folder、source folder、package 区别与联系

    在eclipse下,package,source folder,folder都是文件夹.  它们的区别如下:  package:当你在建立一个package时,它自动建立到source folder下 ...

  8. Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同):

    Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同): 1.repository N ...

  9. Django project structure: how does static folder, STATIC_URL, STATIC_ROOT work

    So I've been messing up with Django(1.6+) project setting for quite sometime, this is what i finally ...

  10. cannot determine the location of the vs common tools folder

    问题:打开"VS2010开发人员命令提示后",上面提示"cannot determine the location of the vs common tools fold ...

随机推荐

  1. 松软科技web课堂:SQLServer之NOW() 函数

    NOW() 函数 NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间. SQL NOW() 语法 SELECT ...

  2. JS基础语法---对象总结

        * 编程思想:     * 面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程     * 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果     *   ...

  3. 039.[转] 基于 Kubernetes 和 Spring Cloud 的微服务化实践

    http://dockone.io/article/2967 基于 Kubernetes 和 Spring Cloud 的微服务化实践 写在前面 网易云容器平台期望能给实施了微服务架构的团队提供完整的 ...

  4. SSH远程管理

    目录 SSH远程管理 ssh功能 SSH相关命令 Xshell连接不上虚拟机 scp命令 SSH验证方式 优化 免交互expect[扩展] 免交互sshpass[扩展] 简易跳板机 小结 SSH远程管 ...

  5. HTTPS混合内容解析

    什么是HTTPS混合内容 我们可能会有这样的经验,当我们通过HTTPS访问一个网站的时候,突然有提示:“本页面包含有不安全的内容”.这个时候会询问是否显示“不安全的内容”,这个时候,就是遇到了有混合内 ...

  6. PHP转Go系列:map映射

    映射的定义 初识映射会很懵,因为在PHP中没有映射类型的定义.其实没那么复杂,任何复杂的类型在PHP中都可以用数组表示,映射也不例外. $array['name'] = '平也'; $array['s ...

  7. 学习postman教程

    postman可以做什么 1.可以做单接口的测试 2.可以调试接口 3.对接口设置变量后,可以做多接口的测试,并输出报告 如何用postman调试接口 1.填写api地址 2.选择请求方式 3.输入a ...

  8. LG2145 「JSOI2007」祖码 区间DP

    问题描述 LG2145 题解 把颜色相同的一段看做一个点. 然后类似于合唱队区间DP即可. 但是这题好像出过一些情况,导致我包括题解区所有人需要特判最后一个点. \(\mathrm{Code}\) # ...

  9. 【python爬虫】正则表达式

    一.数据的分类 1.结构化数据 特点:数据以行为单位,每一个数据表示一个实体.每一行数据的属性都是一样的. 举例:关系型数据库中的表就是结构化数据. 处理方法:sql 2.半结构化数据 特点:结构化数 ...

  10. mysql关联两张表时的编码问题

    Mysql关联两张表时,产生错误提示Illegal mix of collations 1.先用工具把数据库.两张表的编码方式改变 2.这步很重要,需要改变字段的编码方式. ALTER TABLE ` ...