一、建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. PHP strstr 字符串函数

    定义和用法 strstr - 查找字符串的首次出现 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 V5.3.0 新增可选的 before_needle 参数. V4.3.0 strstr( ...

  2. iOS----------iPhone导出手机所有短信

    第一步:手机连接到itunes  选择本电脑备份   备份的时候不要加密  然后立即备份 第二步:前往文件夹,找到itunes的备份路径~/Library/Application Support/Mo ...

  3. liunx用户环境初始化脚本

          liunx用户环境初始化脚本 编写生成脚本基本格式,包括作者,联系方式,版本,时间,描述等 [root@magedu ~]# vim .vimrc set ignorecase set c ...

  4. Impala基于内存的SQL引擎的详细介绍

    一.简介 1.概述 Impala是Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能. •基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等 ...

  5. Undo 相关的等待事件和已知问题 (Doc ID 1575701.1)

    Undo Related Wait Events & Known Issues (Doc ID 1575701.1) APPLIES TO: Oracle Database - Enterpr ...

  6. [日常] win10开启和安装ubuntu子系统

    在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统 在微软商店里搜索ubuntu,直接点击安装就可以了 安装完成后的windows与linux的磁盘映射见 ...

  7. busybox启动流程简单解析:从init到shell login

    关键词:kernel_init().init.inittab.wait/waitpid.fork/vfork.setsid().execvp/execlp.dup2等等. 由于遇到一系列定制,从ini ...

  8. java8-02-再探Lambda表达式

    Lambda表达式   主要作用替代匿名内部类   达到简化代码的操作                                  Lambda表达式 在对象中的使用   Employee类

  9. acwing 23. 矩阵中的路径

    习题地址 https://www.acwing.com/problem/content/description/21/ 题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路 ...

  10. jq Sortable的使用

    本文仅做翻译记录查看,GitHub原项目地址: https://github.com/RubaXa/Sortable/ ,建议将Sortable.js下载到本地,GitHub上的例子在复制到本地运行, ...