FORMS开发中FOLDER(文件夹)功能的应用

FORMS开发中FOLDER(文件夹)功能的应用[@more@]

一、模板制作:YSFOLDER.FMB

打开TEMPLATE.FMB,如果打开的是APPSTAND.FMB,以下步骤省略

1FORM级触发器:

1、 WHEN-NEW-FORM-INSTANCE后面添加以下代码:

--定义文件夹数据块

app_folder.define_folder_block(

object_name => ' DETAILBLOCK _FOLDER' ,

folder_block_name => 'DETAILBLOCK',

prompt_block_name => 'DETAILBLOCK_PROMPT',

folder_canvas_name => 'DETAILBLOCK_STACKED',

folder_window_name => 'BLOCKNAME',

disabled_functions => '');

--以上参数均为VARCHAR2,长度不得超过20个字符

2、 增加FORM级触发器:FOLDER_ACTION PL/SQL代码如下:

app_folder.event(:global.folder_action);

3、 增加FORM级触发器:FOLDER_RETURN_ACTION PL/SQL代码如下:

null;

--

-- action code is in :global.folder_action

-- affected field is in :global.folder_field

--

2Attached Libraries

添加文件:APPFLDR.PLL

来源:ERP安装目录下,AU目录下查找该类文件所在的目录

3Object Groups

继承一个对象组:STANDARD_FOLDER

做法:复制APPSTAND.FMB中的同名对象,粘贴到模板对象组中,选择“Refence”(继承),路径方式选择“Remove path”(不要路经)。

结果:将会把对象组中的所有对象映射添加到相应的对象节点中。

二、模板例子的制作

1、 修改WHEN-NEW-FORM-INSTANCE中文件夹数据块定义语句中的参数,确定对象名称(一般为form对象名称)、文件夹数据块名称、标题块名称、堆叠画布名称、窗口名称。

2、 定义窗口(windows),win_main:继承属性WINDOW_NORMAL

3、 定义堆叠画布(stacked canvas-views, cv_detail_stacked:继承属性类CANVAS_STACKED

4、 定义文件夹数据块(folder block),blk_detail:继承属性类BLOCK

(1) 触发器:

· KEY-EXEQRY

app_folder.event('KEY-EXEQRY');

· KEY-NEXT-ITEM

app_folder.event('KEY-NEXT-ITEM');

· KEY-PREV-ITEM

app_folder.event('KEY-PREV-ITEM');

· 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_ENTQRY

App_folder.event(' KEY_ENTQRY ');

· KEY_NXTREC

App_folder.event(' KEY_NXTREC ');

· KEY_PRVREC

App_folder.event(' KEY_PRVREC ');

· PRE_QUERY

App_folder.event(' PRE_QUERY ');

· WHEN-NEW-RECORD-INSTANCE

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

(2) 定义数据项,可以是表项,也可以是非基表项,确定哪些项需要放在堆叠画布上,注意只有在堆叠画布上的项才能使用文件夹功能

(3) 注意:数据项的类型不能是:Display ItemList Item等;

可以是:Text ItemCheck Box等;

如果打开folder时出现错误:“Set_Item_Property没有这样的属性”,说明erp标准程序中用到的属性在个别项中不存在,出现几次就有几个缺乏这个属性的Item;是否拥有这个属性,是由Item的类型确定的,因此有些Item类型不能用于folder功能。

(4) 确定各个项在画布中的位置

5、 定义标题数据块(prompt block, blk_detail_prompt:继承属性类BLOCK_DIALOG

便捷的做法:先复制文件夹数据块blk_detail,改名称,再删去新块下的全部触发器,然后除去不需要的项,修改剩下所有项的属性继承FOLDER_PROMPT_MULTRIROW,最后将各个项的default value属性值写入对应的中文或英文标题

(1) 触发器:无

(2) 标题项,来自文件夹数据块blk_detail,属性继承自FOLDER_PROMPT_MULTIROWdefault value属性值写入相应的中英文标题

标题项必须和参与folder功能的数据项保持一一对应,名称必须一致

(3) 文件夹功能项(6个):

· FOLDER_OPEN:属性继承FOLDER_OPEN

Canvas: CV_MAIN

· FOLDER_TITLE:属性继承DYNAMIC_TITLE

Canvas: CV_MAIN

· ORDER_BY1ORDER_BY2ORDER_BY3

属性:

继承FOLDER_ORDERBY

触发器:

WHEN-BUTTON-PRESSED:

APP_FOLDER.EVENT('TOGGLE-ORDER-BY');

Canvas: CV_DETAIL_STACKED

FOLDER_OPENFOLDER_TITLE可见,放置在堆叠画布的左上位置

(4) 确定各个项在画布上的位置

(5) 注意:在文件夹数据块中,项的初始宽度由同名的标题项的宽度确定,而且只有存在标题项的文件夹数据项才能使用文件夹功能。设计时,应该将文件夹数据块中项的宽度与标题块中项的宽度保持一致

(6) 如果文件夹数据块在第一个窗口,可能会出现初次进入窗口标题项没有显示的现象,需要在form级触发器when-new-form-instance中,在导航到控制块之前,先将导航到标题块,例如:

GO_BLOCK(‘BLK_DETAIL_PROMPT’);

GO_BLOCK(‘BLOCKCONTROL’);

(7) Q&A

三、基于模板的开发过程

1.模板名:XZ_FOLDER.fmb

2.模板说明:

2.1 APP_FOLDER.DEFINE_FOLDER_BLOCK参数说明

'XZ_FOLDER'àMODULE NAME ,表单名称

'BLK_DETAIL'àFOLDER数据块名称

'BLK_DETAIL_PROMPT'àFOLDER标题块名称

'CAVSTACK'àFOLDER数据块所在画布

'WINFOLDER'à FOLDER数据块所在画布所属的窗口

2.2数据块

2.2.1 BLK_DETAILàFOLDER数据块

2.2.2 BLK_DETAIL_PROMPTàFOLDER标题块

其中的:FOLDER_OPENFOLDER_TITLEORDER_BY1ORDER_BY2ORDER_BY3,不用动。

2.3画布

'CAVSTACK'àFOLDER数据块所在画布,堆叠类型

'CAVMAIN'àcontent类型, CAVSTACK堆叠在其上边。

2.4窗口

3修改过程

3.1修改form级触发器WHEN-NEW-FORM-INSTANCEAPP_FOLDER.DEFINE_FOLDER_BLOCK('XZ_FOLDER','BLK_DETAIL','BLK_DETAIL_PROMPT','CAVSTACK','WINFOLDER','ENABLED');

在模板xz_folder.fmb基础上开发程序时,把‘XZ_FOLDER’替换为自己的表单名即可。

3.2修改数据块BLK_DETAIL,在模板块的基础上改数据源,增删数据项

3.3修改数据块BLK_DETAIL_ PROMPT在模板块的基础上增删项,BLK_DETAIL中的项一一对应。

3.4调整画布输出及大小格式
请使用浏览器的分享功能分享到微信等