0% found this document useful (0 votes)
9 views74 pages

Folder Function and Find Window Step by Step - CHS

Folder Function and Find Window Step By Step_CHS

Uploaded by

dabuliuxi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views74 pages

Folder Function and Find Window Step by Step - CHS

Folder Function and Find Window Step By Step_CHS

Uploaded by

dabuliuxi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 74

以下内容将协助您在 Form Builder 内完成 Folder Function & Find Window 的设计;

运行环境:

OS: Compaq Tru64 UNIX V5.1A (Rev. 1885);


DB: Oracle9i Enterprise Edition Release 9.2.0.5.0 – Production;
Application: Oracle ERP Release 11.5.9;

Department: ECSM MIS


Author: Anykey
MSN: [email protected]
Creation Date: 06-MAY-2005

建议您的 Form Builder 至少升级到 Forms [32 Bit] Version 6.0.8.23.2 (Production)以上版本:

1
打开 Template,并且另存为目标程序

2
修改 Form Name:

3
修改 Form Level PRE-FORM Trigger,包括 Date & Author,

4
以及程序名称(Application Short Name 是否修改,视您是否创建 Help 而定):

5
增加 Number Data Type Parameters:ORG_ID,ORGANIZATION_ID,CHART_OF_ACCOUNTS_ID;

6
Char(Length = 3) Data Type Parameter:ORG_CODE;
Char(Length = 240) Data Type Parameter:ORG_NAME;

返回修改 Form Level PRE-FORM Trigger,增加如下两行:


fnd_org.choose_org;

7
:parameter.organization_id := :parameter.org_id;

增加 APPFLDR.pll 至 Attached Libraries:

8
在同一次 Form Builder 运行之中,打开 APPSTAND.fmb:

9
在目标程序(ECSTP090)内新增一个 Object Group,并且重新命名为(STANDARD_FOLDER):

10
将刚才新增的 STANDARD_FOLDER 从 APPSTAND.fmb(STANDARD_OBJECTS)继承 STANDARD_FOLDE 属性:

11
可以确认,继承此属性后会得到哪些对象:

12
手动建立一个新的 Data Block,名称为 PROMPTS(名称可自定义),继承 BLOCK 属性类:

13
设定 PROMPTS Block 的 Database Data Block 属性为 No:

14
新增 Content 型 Canvas,并继承 CANVAS 属性类:

15
新增一个 Window(ECS_SERIAL),并继承 WINDOW 属性类:

16
设定刚新增 Window 的 Primary Canvas 为前述增加之 Content 型 Canvas:

17
返回设定新增之 Content 型 Canvas 的 Window 属性为刚新增之 Window:

18
修改 Program Unit:APP_CUSTOM Package Body,wnd name 为刚才新增的主 Window:

19
修改 Form Level WHEN_NEW_FORM_INSTANCE Trigger,增加一行:
APP_WINDOW.set_title('ECS_SERIAL',:parameter.org_code);

20
用 Layout Editor 打开新增的 Content 型 Canvas,在其上新建立 Stacked 型 Canvas:

21
自定义 Canvas Name,并继承属性类:CANVAS_STACKED:

22
使用 Data Block Wizard 新增 Base table or view Block:

23
Data Block Wizard 结束后,选择启动 Layout Wizard,Canvas 选择已经建立的 Stacked 型 Canvas:

24
选择 Displayed Items:

25
清除所有由 Layout Wizard 带来的默认 Prompt 域名:

26
选择 Layout Style 为 Tabular:

27
指定行数:

28
重新确认刚才新增之 Block Name & 属性类:

29
设定 Form First Navigation Data Block 为刚新增之 Base table or view Block:

30
返回修改 Form Level PRE-FORM Trigger:

31
新增 Number Data Type Parameter:<Data block>_ RECORD_COUNT(ECS_SERIAL_RECORD_COUNT),

32
Initial Value 设定为 2:

设定新增 Block 内 Items 属性类,Layout 布局,相关 Trigger 等工作,此处不表;

33
若您在 Stacked 型 Canvas 上呈现的 Items 有 N 个,则在 PROMPTS Block 内,新增 N 个 Items,并且:
1,每一 Item 的 Item Name 与呈现在 Stacked 型 Canvas 上的 Item 对应并相同;
2,每一 Item 的 Item Type 均设定为 Display Item;
3,每一 Item 的 Subclass 均继承为 FOLDER_PROMPT_MULTIROW;
4,每一 Item 的 Initial Value 均需设定,若没有宽度的问题,建议使用<Item Name>;
5,每一 Item 的 Canvas 值均设定为前述新增之 Stacked 型 Canvas;

34
35
36
在 PROMPTS Block 内新增 Order_by items,假设 3 个足够,则新增 ORDER_BY1, ORDER_BY2, ORDER_BY3,并且:
1,每一 Item 的 Item Type 均设定为 Push Button;
2,每一 Item 的 Subclass 均继承为 FOLDER_ORDERBY;

37
在 PROMPTS Block 内新增 FOLDER_OPEN Item,并且:
1,Item Type 设定为 Push Button;
2,Subclass 继承为 FOLDER_OPEN;
3,Canvas 值设定为 Content 型主 Canvas(ECS_SERIAL_MASTER);

在 PROMPTS Block 内新增 FOLDER_TITLE Item,并且:

38
1,Item Type 设定为 Display Item;
2,Subclass 继承为 DYNAMIC_TITLE;
3,Canvas 值设定为 Content 型主 Canvas(ECS_SERIAL_MASTER);

在 PROMPTS Block 内新增 FOLDER_DUMMY Item,并且:

39
1, Item Type 设定为 Text Item;
2, Subclass 继承为 FOLDER_DUMMY;
3,Canvas 值设定为 TOOLBAR;

在 Base table or view Block(ECS_SERIAL)内新增 SWITCHER Item,并且:

40
1, Item Type 设定为 Text Item;
2, Subclass 继承为 SWITCHER;

修改 Form Level FOLDER_ACTION Trigger,注释已有内容,新增一行:

41
app_folder.event(:global.folder_action);

返回修改 Form Level WHEN_NEW_FORM_INSTANCE Trigger,增加一行:

42
app_folder.define_folder_block('ECSTP090', -- 'Object Name'
'ECS_SERIAL', -- 'folder_block',
'PROMPTS', -- 'prompt_block',
'ITEM_STACKED', --'stacked_canvas',
'ECS_SERIAL', --'window',
NULL); --'disabled functions'

在 Base table or view Block Level 创建 WHEN-NEW-BLOCK-INSTANCE Trigger:

43
内容为: app_folder.event('WHEN-NEW-BLOCK-INSTANCE');

在 Base table or view Block Level 创建 KEY-PREV-ITEM Trigger:

44
内容为:
if (:parameter.ecs_serial_record_count = 1) then
previous_item;
else
app_folder.event('KEY-PREV-ITEM');
end if;

在 Base table or view Block Level 创建 KEY-NEXT-ITEM Trigger:


内容为:

45
if (:parameter.ecs_serial_record_count = 1) then
next_item;
else
app_folder.event('KEY-NEXT-ITEM');
end if;

在 Base table or view Block Level 创建 PRE-BLOCK Trigger:


内容为: app_folder.event('PRE-BLOCK');

46
在 Base table or view Block Level 创建 POST-BLOCK Trigger:
内容为: app_folder.event('POST-BLOCK');

47
在 Base table or view Block Level 创建 KEY-ENTQRY Trigger:
内容为: app_folder.event('KEY-ENTQRY');

48
在 Base table or view Block Level 创建 KEY-EXEQRY Trigger:
内容为: app_folder.event('KEY-EXEQRY');

49
在 Base table or view Block Level 创建 PRE-QUERY Trigger:
内容为: app_folder.event('PRE-QUERY');

50
在 Base table or view Block Level 创建 POST-QUERY Trigger:
内容为: app_folder.event('POST-QUERY');

51
为 PROMPTS Block 的 ORDER_BYx Items 增加 WHEN-BUTTON-PRESSED Trigger:
内容为: app_folder.event('TOGGLE-ORDER-BY');

52
OK,让我们来看一下实际运行的效果:

53
为了让程序好用一点,我们打算给它增加一个 Find Window:

54
从 APPSTAND.fmb(STANDARD_OBJECTS)复制(提示:请不要使用继承,因为稍后需要修改) QUERY_FIND Object Group 至目标程序
(ECSTP090);
这个群组包括一个 QUERY_FIND Data Block,一个 QUERY_FIND Canvas,一个 QUERY_FIND Window;
随即删除这个 object Group。

将 QUERY_FIND Data Block Name 修改为<MASTER_BLOCK>_QF(ECS_SERIAL_QF),并继承 BLOCK 属性类:

55
将 QUERY_FIND Canvas Name 修改为<MASTER_BLOCK>_QF_CANVAS(ECS_SERIAL_QF_CANVAS),并继承 CANVAS

56
属性类:

将 QUERY_FIND Window Name 修改为<MASTER_BLOCK>_QF_WINDOW(ECS_SERIAL_QF_WINDOW),并继承

57
WINDOW 属性类:

修改 NEW 按钮,用<MASTER_BLOCK>(ECS_SERIAL)替代<your blockname here>:

58
修改 FIND 按钮,用<MASTER_BLOCK>(ECS_SERIAL)替代<your blockname here>:

59
设定 FIND_BLOCK(ECS_SERIAL_QF)的 Previous Navigation Data Block 属性为 MASTER_BLOCK(ECS_SERIAL):

60
修改 FIND_BLOCK(ECS_SERIAL_QF)的 KEY–NXTBLK Trigger,用<MASTER_BLOCK>(ECS_SERIAL)替代<your

61
blockname here>:
内容为:
:parameter.G_query_find := 'TRUE';
app_find.find('ECS_SERIAL');
:parameter.G_query_find := 'FALSE';

修改 Find Window Title(ECS_SERIAL_QF_WINDOW),

62
内容为:Find ECS Serial Details:

返回修改 Form Level WHEN_NEW_FORM_INSTANCE Trigger,增加一行:

63
APP_WINDOW.set_title('ECS_SERIAL_QF_WINDOW',:parameter.org_code);

创建必要的查询条件,新增若干个 Items:

64
1,新增的 Items Type 属性设定 Text Item,Subclass 继承为 TEXT_ITEM:

2,新增的 Items Required 属性设定为:No,Initial Value 属性设定为空:

65
3,新增的 Items Canvas 属性设定为<FIND_BLOCK>_QF_CANVAS(ECS_SERIAL_QF_CANVAS):

66
为相关查询条件增加辅助性 Item Level Trigger,例如 WHEN-VALIDATE-ITEM:

67
样例代码:
IF :ECS_SERIAL_QF.NB_SERIAL_FROM IS NOT NULL THEN
:ECS_SERIAL_QF.NB_SERIAL_TO := :ECS_SERIAL_QF.NB_SERIAL_FROM;
END IF;

以及 WHEN-NEW-ITEM-INSTANCE:

68
样例代码:
IF ((:ECS_SERIAL_QF.NB_SERIAL_FROM IS NOT NULL) AND (:ECS_SERIAL_QF.NB_SERIAL_TO IS NULL))
THEN
COPY(:ECS_SERIAL_QF.NB_SERIAL_FROM,'ECS_SERIAL_QF.NB_SERIAL_TO');
SET_ITEM_PROPERTY('ECS_SERIAL_QF.NB_SERIAL_TO',ITEM_IS_VALID,PROPERTY_TRUE);
END IF;

返回修改 MASTER_BLOCK Level Trigger PRE_QUERY:(该触发器 Execution Hierarchy: Before)


增加内容(代码以实际需求为准):

69
IF :PARAMETER.G_QUERY_FIND = 'TRUE' THEN

APP_FIND.QUERY_RANGE(:ECS_SERIAL_QF.NB_SERIAL_FROM,:ECS_SERIAL_QF.NB_SERIAL_TO,'ECS_SERI
AL.SERIAL_ID');

APP_FIND.QUERY_RANGE(:ECS_SERIAL_QF.NB_ITEM_FROM,:ECS_SERIAL_QF.NB_ITEM_TO,'ECS_SERIAL.I
TEM_NUMBER');

APP_FIND.QUERY_RANGE(:ECS_SERIAL_QF.NB_CARTON_FROM,:ECS_SERIAL_QF.NB_CARTON_TO,'ECS_S
ERIAL.CARTON_NAME');

APP_FIND.QUERY_RANGE(:ECS_SERIAL_QF.NB_WE_FROM,:ECS_SERIAL_QF.NB_WE_TO,'ECS_SERIAL.WIP_
ENTITY_NAME');
copy(:mdphdr_qf.nb_mdp_header_id, 'MDPHDR.MDP_HEADER_ID');
:PARAMETER.G_QUERY_FIND := 'FALSE';
END IF;

70
创建一个 MASTER_BLOCK(ECS_SERIAL) level 用户命名的 trigger QUERY_FIND:(该触发器 Execution Hierarchy:
Override)
内容格式为:
APP_FIND.QUERY_FIND('<Results block window>','<Find window>','<Find window block>');
例如:
APP_FIND.QUERY_FIND('ECS_SERIAL','ECS_SERIAL_QF_WINDOW','ECS_SERIAL_QF');

71
返回修改 Form Level WHEN_NEW_FORM_INSTANCE Trigger,增加一行:
EXECUTE_TRIGGER('QUERY_FIND');
该过程将 Find Window 放到整个 Form 的最前端显示。

72
最后,让我们一起来看一下运行效果:

73
自己动手做一次吧,祝您好运 !!!

74

You might also like