一、建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. vue-cli 引用elementUI打包后文件过大

    解决方案:使用externals引用第三方资源,防止element资源被打包到自己项目中,(总共修改3个页面index.html.webpack.base.conf.js.main.js) 1.修改i ...

  2. apache部分报错解决方法

    AH00558: 进入apache文件夹下的conf文件夹,打开httpd.conf文件,用ctrl+F找到ServerName,如下图 在下面加上一句: ServerName domain_name ...

  3. 剑指offer 25:二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  4. 你以为的Jquery选择器是什么样子的?

    $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素  $("d ...

  5. (办公)访问其他系统接口httpClient,异步访问

    访问其他系统接口httpClient,但是都是同步的,同步意味当前线程是阻塞的,只有本次请求完成后才能进行下一次请求;异步意味着所有的请求可以同时塞入缓冲区,不阻塞当前的线程; httpClient请 ...

  6. 个人的一点小愚见,java有什么优点和缺点

    java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的.可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏. j ...

  7. JUC-1-volatile

    什么是volatile关键字      volatile是轻量级同步机制,与synchronized相比,他的开销更小一些,同时安全性也有所降低,在一些特定的场景下使用它可以在完成并发目标的基础上有一 ...

  8. Please make sure you have the correct access rights and the repository exists.

    参考:https://blog.csdn.net/jingtingfengguo/article/details/51892864,感谢老哥. 从码云克隆项目到新的服务器上,报错: Please ma ...

  9. centos安装mongodb 4.x及配置用户名密码(官方推荐的方式)

    安装mongodb 先在本地用记事本做一个这样的文件(命名为:mongodb-org-4.0.repo): [mongodb-org-4.0] name=MongoDB Repository base ...

  10. DirectShow 应用开发过程

    本文准备总结一些 Direct Show 常用的API接口函数,方便以后查询回忆.如果这里没有你想了解的函数,你可以自行搜索MSDN + 函数名去 MSDN 查找你想要了解的函数,也可以查看百度百科相 ...