Oracle Form Folder 开发--列表类

    Oracle Form Folder 功能个人认为是一个非常人性化的设计, 用户可以根据不同的需求, 将页面的资料栏的位置, 显示与否重新设定, 也因此, 在二次开发中, 此功能也被视为一种基本需求.

    Folder主要分为两种型式, 列表式和表单类, 列表式比效常用, 本文将只介绍列表式的开发:

1

从STANDARD这支程式中,将STANDARD_FOLDER对像组继承过来。

2

手工新增一个PROMPTS数据块。

3

在PROMPTS块中新增DISPLAY_ITEM,Name属性与对应的字段名称一样,Subclass Information为

FOLDER_PROMPT_MULTIROW,由STANDARD.fmb继承的属性。此ITEM为界面上栏位名,所以ITEM_NAME

属性要和对应的字段名称一样。有多少个栏位,创建多少了FOLDER_PROMAT_MULTIROW的ITEM。

4

建立三个ORDER_BY Button,Subclass Informaction为FOLDER_ORDERBY。由STANDARD.fmb继承的属性。

ORDER_BY Button必须是三个,多了会报错。名称需为ORDER_BY1,ORDER_BY2,ORDER_BY3。

同样位于PROMPTS Block下。

给此项增加Trigger:WHEN_BUTTON_PROCESS,语句:app_folder.event('TOGGLE-ORDER-BY');

5

建立FOLDER_OPEN BUTTON,Subclass Informatcion为FOLDER_OPEN,从STANDARD.fmb继承。

位于PROMPTS Block下。需要指定Canvas。

6

建立FOLDER_TITLE项,Subclass Information 为DYNAMIC_TITLE,从STANDARD.fmb继承。

位于PROMPTS Block下。需要指定Canvas。

7

建立FORDER_DUMMY项,Subclass Information为FOLDER_DUMMY,从STANDARD.fmb继承。

位于PROMPTS Block下。

8

修改FORM级的TRIGGER:FOLDER_ACTION,注释是Message语句,并释放话句app_folder.event(:global.folder_action);

9

在FORM级的TRIGGER:WHEN-NEW-FORM-INSTANCE增加以下语句:

app_folder.define_folder_block(

object_name => <FORM_NAME> ,

folder_block_name => <FOLDER_BLOCK_NAME>,

prompt_block_name => <PROMPTS_NAME>,

folder_canvas_name => <FORDER_CANVAS_NAME>,

folder_window_name =><FORDER_WINDOW_NAME>,

disabled_functions => '');

 

app_folder.event('INSTANTIATE');

Object_name参数为Folder子集,即Open_Folder点开时的LOV值集,如果Object_name参数一样,那么便可挑到那个Folder.

当然,如果不适用,系统便会报错,所以一定要注意,特别是同一支Form中有多个Folder时。

10

在Block级增加以下Trigger及相关语名

PRE-QUERY:App_folder.event('PRE-QUERY');--PRE_QUERY

POST-QUERY:App_folder.event('POST-QUERY');

KEY-PREV-ITEM:App_folder.event('KEY-PREV-ITEM');

KEY-NEXT-ITEM:App_folder.event('KEY-NEXT-ITEM');

KEY-EXEQRY:App_folder.event('KEY-EXEQRY');--当点击用户操作界面的前三个栏位进行排序时,会触发该Trigger。

KEY-ENTQRY:App_folder.event('KEY-ENTQRY');

WHEN-NEW-RECORD-INSTANCE:App_folder.event('WHEN-NEW-RECORD-INSTANCE');

POST-BLOCK:App_folder.event('POST-BLOCK');

PRE-BLOCK:App_folder.event('PRE-BLOCK');

WHEN-NEW-BLOCK-INSTANCE:App_folder.event('WHEN-NEW-BLOCK-INSTANCE');

KEY-CLRBLK:App_folder.event('KEY-CLRBLK');

KEY-PRVREC:App_folder.event('KEY-PRVREC');

11

在FOLDER_BLOCK上增加SWITCHER项。Subclass Information为SWITCHER。

12

如果要实现窗口变大时, Block的流动条自动跟着变化, 需要:

  1. 将when-window-resized中的代码放开. 但请务必指定相关的Floder窗口, 否则会影响日历窗口的大小.
  2. 对应的BLOCK 要加current-record-indicator, subclass_information指定为 current-record-indicator. 注意拼写要完成正确, 而且要和滚动条在同一个canvas; 但在TAB中测试时, 发现第一个Page可以, 但第二个不行. 可能需要重新初始化, 这个还未测试.
posted on 2013-05-12 19:51  Ben's Blog  阅读(823)  评论(0编辑  收藏  举报