FORM二次开发 STEP BY STEP.docx
《FORM二次开发 STEP BY STEP.docx》由会员分享,可在线阅读,更多相关《FORM二次开发 STEP BY STEP.docx(48页珍藏版)》请在冰豆网上搜索。
FORM二次开发STEPBYSTEP
FORM二次开发STEPBYSTEP
作者:
梁贤院
创建日:
2006-9-18
更新日:
控制号:
版本:
1.0
EMAIL:
l_x_yuan@
目录
目录2
FORM二次开发STEPBYSTEP3
1.Ftp->download3
2.安装数据库3
3.命名文件及前期工作3
4.建立数据库BLOCK5
5.布局向导定义6
6.块属性定义8
7.ITEM属性定义9
8.程序单元定义12
9.触发器定义12
10.LOV定义14
11.验证弹性域18
12.实现注销记录功能20
13.实现查询功能21
FOLDER二次开发STEPBYSTEP23
1.第一步到第三步同上23
2.添加标准类和对象24
3.建立数据库BLOCK25
4.布局向导定义26
5.TECH_DOCUMENTS块属性定义28
6.TECH_DOCUMENTS块下ITEM属性定义29
7.堆叠画布属性定义32
8.新增PROMPT块及属性定义33
9.PROMPT块下ITEM及属性定义34
10.LOV定义38
11.程序单元定义42
12.触发器定义43
13.实现注销记录功能(同前面)46
14.实现查询功能(同前面)46
FORM二次开发STEPBYSTEP
1.Ftp->download
一般到相应模块的目录下载$AU_TOP/forms/US$AU_TOP/forms/ZHS$AU_TOP/resource
2.安装数据库配置本地路径
运行:
INSTALL.sql
打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_DevSuiteHome1修改路径:
FORMS_PATH
C:
\DevSuiteHome_1\cgenf61\admin;D:
\resource12\resource;D:
\resource12\ZHS;C:
\DevSuiteHome_1\forms
3.命名文件及前期工作
a)删除BLOCKNAME,DETAILBLOCK块
b)打开BLOCKNAME画布删除所有内容,并命名为MAIN
c)将窗口BLOCKNAME并命名为MAIN
d)修改app_custom包的if(wnd='')then改为if(wnd='MAIN')then
e)WHEN-NEW-FORM-INSTANCE:
$Header:
TEMPLATE.fmb改为$Header:
CUXTECHDEMO.fmb
修改FORM级的PRE-FORM事件中修改为
FND_STANDARD.FORM_INFO('$Revision:
115.11$','DEMOForm','CUX',
'$Date:
2000/05/2517:
20$','$Author:
appldev$');
f)app_standard.event('PRE-FORM');
g)app_window.set_window_position('MAIN','FIRST_WINDOW');
删除后
命名
4.建立数据库BLOCK
5.布局向导定义
6.块属性定义
a)BLOCK名修改为:
TECH_DOCUMENTS
b)子类信息改为BLOCK
c)显示滚动条,设置其画布为:
MAIN
d)
e)
7.ITEM属性定义
DOC_NAME,DESCRIPTION,AUTHOR,DEPT_NAME子类信息改为TEXT_ITEM
COMMIT_DATE子类信息改为TEXT_ITEM_DATE,LOV改为:
ENABLE_LIST_LAMP.
从列表中验证改为:
否
调整画布,ITEM宽度成这样
新增加一个ITEMCURRENT_RECORD_INDICATOR子类信息为:
CURRENT_RECORD_INDICATOR
调整高,宽与其它ITEM对齐
新增加一个DF子类信息为:
TEXT_ITEM_DESC_FLEX.(弹性域)
将列ROW_ID子类属性为ROW_ID
LAST_UPDATE_DATE子类属性为CREATION_OR_LAST_UPDATE_DATE
CREATION_DATE子类属性为CREATION_OR_LAST_UPDATE_DATE
8.程序单元定义
增加程序单元:
TECH_DOCUMENTS_DATA和TECH_DOCUMENTS_PKG
将DEMO的文件代码拷贝到相应的单元
9.触发器定义
在块TECH_DOCUMENTS写下如下触发器和代码:
PRE-INSERT:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-INSERT');
PRE-UPDATE:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-UPDATE');
WHEN-VALIDATE-RECORD:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('WHEN-VALIDATE-RECORD');
PRE-QUERY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-QUERY');
POST-QUERY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('POST-QUERY');
ON-INSERT:
TECH_DOCUMENTS_DATA.INSERT_ROW;
ON-DELETE:
TECH_DOCUMENTS_DATA.DELETE_ROW;
ON-UPDATE:
TECH_DOCUMENTS_DATA.UPDATE_ROW;
ON-LOCK:
TECH_DOCUMENTS_DATA.LOCK_ROW;
打开ITEMDF写下如下SQL和代码:
WHEN-NEW-ITEM-INSTANCE:
TECH_DOCUMENTS_PKG.DF('WHEN-NEW-ITEM-INSTANCE');
WHEN-VALIDATE-ITEM:
TECH_DOCUMENTS_PKG.DF('WHEN-VALIDATE-ITEM');
点击ITEMCOMMIT_DATE新建:
KEY-LISTVAL:
calendar.show;
10.LOV定义
重命名为:
在DEPT_LOV列映射属性.点击弹出对话框:
输入
子类信息:
LOV
返回项:
DEPT_NO:
TECH_DOCUMENTS.DEPT_NO
返回项:
DEPT_NAME:
TECH_DOCUMENTS.DEPT_NAME
选择ITEMDEPT_NAME的LOV属性DEPT_LOV
11.验证弹性域
是否有如下两个触发器(WHEN-NEW-ITEM-INSTANCE,WHEN-VALIDATE-ITEM)的DF字段
并检查触发器代码
块上是否有如下触发器:
PRE-QUERY,POST-QUERY,PRE-INSERT,PRE-UPDATE,WHEN-VALIDATE-RECORD
检查TECH_DOCUMENTS_PKG的相关代码是否完整.FND_FLEX.event
检查FORM级别:
WHEN-NEW-FORM-INSTANCE是否加入弹性域初始化SQL
--弹性域
fnd_descr_flex.define(BLOCK=>'TECH_DOCUMENTS'
field=>'DF'
appl_short_name=>'CUX'
desc_flex_name=>'CUX_TECH_DOCUMENTS_DF');
12.实现注销记录功能
添加FORM级TRIGGER:
SPECIAL1
修改FORM级TRIGGER:
WHEN-NEW-FORM-INSTANCE
添加以下代码,用以定义新的菜单项“注销记录”
APP_SPECIAL.INSTANTIATE('SPECIAL1','注销记录');
13.实现查询功能
从APPSTAND.fmb中拷贝QUERY-FIND对象到开发的FORM
QUERY-FIND对象包含:
QUERY-FINDWINDOW
QUERY-FINDCANVAS
QUERY-FINDBLOCK
本示列从DEMO程序中直接拷贝
拷贝好后,将其名字分别更改为QF_WINDOW,TECH_DOCU_QF,TECH_DOCU_QF,
并将TECH_DOCU_QF块属性设置为:
QUERYALLOWEDNO
PREVIOUSNAVIGATIONDATABLOCK:
TECH_DOCUMENTS
按照前面设置相关子类信息:
TECH_DOCU_QF:
BLOCK
TECH_DOCU_QF.DOC_NAME:
TEXT_ITEM
TECH_DOCU_QF.CLEAR:
BUTTON
TECH_DOCU_QF.FIND:
BUTTON
确认TECH_DOCUMENTS_PKG包里有如下代码:
IF:
parameter.g_query_find='TRUE'THEN
copy(name_in('TECH_DOCU_QF.DOC_NAME'),'TECH_DOCUMENTS.DOC_NAME');
:
parameter.g_query_find:
='FALSE';
ENDIF;
新增TECH_DOCUMENT块触发器QUERY_FIND:
并写下:
APP_FIND.QUERY_FIND('MAIN','QF_WINDOW','TECH_DOCU_QF');
14.上传服务器编译
上传到$AU_TOP/forms/ZHS目录下面
cd$AU_TOP/forms/ZHS
FORMS_PATH="$AU_TOP/resource:
$AU_TOP/resource/stub:
$AU_TOP/forms/ZHS"
exportFORMS_PATH
frmcmp_batchmodule=$AU_TOP/forms/ZHS/CUXTECHDEMO.fmbuserid=apps/appsoutput_file=$CUX_TOP/forms/ZHS/CUXTECHDEMO.fmxmodule_type=form
frmcmp_batchmodule=$AU_TOP/forms/ZHS/CUXTECHDEMOFOLDER.fmbuserid=apps/appsoutput_file=$CUX_TOP/forms/ZHS/CUXTECHDEMOFOLDER.fmxmodule_type=form
另外编译pll文件命令
frmcmp_batchmodule=$AU_TOP/resource/POXPOCTR.plluserid=apps/appsoutput_file=$CUX_TOP/resource/POXPOCTR.plxmodule_type=LIBRARY
FOLDER二次开发STEPBYSTEP
1.第一步到第三步同上
2.添加标准类和对象
●添加附加程序库:
APPFLDR.pll.对话框里选择是
●将APPSTAND.fmb文件中的对象组STANDARD_FOLDER拖到本文件的对象组里
选择子类按钮
3.建立数据库BLOCK
4.布局向导定义
5.TECH_DOCUMENTS块属性定义
a)BLOCK名修改为:
TECH_DOCUMENTS
b)子类信息改为BLOCK
c)显示滚动条,设置其画布为:
MAIN
d)
e)
6.TECH_DOCUMENTS块下ITEM属性定义
DOC_NAME,DESCRIPTION,AUTHOR,DEPT_NAME子类信息改为TEXT_ITEM.并去掉提示属性
COMMIT_DATE子类信息改为TEXT_ITEM_DATE,LOV改为:
ENABLE_LIST_LAMP.
从列表中验证改为:
否.并去掉提示属性
调整画布,ITEM宽度成这样
新增加一个ITEMCURRENT_RECORD_INDICATOR子类信息为:
CURRENT_RECORD_INDICATOR
调整高,宽与其它ITEM对齐.CANVAS为:
MAIN
新增加一个DF子类信息为:
TEXT_ITEM_DESC_FLEX.(弹性域)
画布属性:
新增一个FOLDER_SWITCHER
子类信息:
SWITCHER
画布:
MAIN
将列ROW_ID子类属性为ROW_ID
LAST_UPDATE_DATE子类属性为CREATION_OR_LAST_UPDATE_DAT
CREATION_DATE子类属性为CREATION_OR_LAST_UPDATE_DAT
7.堆叠画布属性定义
名称:
TD_STACK.
子类信息:
CANVAS_STACKED
视图窗口宽度:
6.5
视图窗口高度:
3
X轴位置:
0.33
Y轴位置:
0.2
宽度:
9
高度:
3
显示水平滚动条:
是
调整画布MAIN为如图:
8.新增PROMPT块及属性定义
新增一个块。
不不基表块。
名称:
PROMPT
数据库数据块:
否
9.PROMPT块下ITEM及属性定义
选中图中几个字段。
选择菜单复制。
再再PROMPT块上选择粘贴。
如图拷贝六个ITEM
设置六个ITEM的子类属性为:
FOLDER_PROMPT_MULTIROW
设置六个ITEM初始值为:
DOC_NAME:
文档名称
DESCRIPTION:
描述
AUTHOR:
作者
DEPT_NAME:
部门
COMMIT_DATE:
提交日期
DF:
[]
打开画布:
TD_STACK.调整六个ITEM的位置。
新增三个按钮:
如图:
名称:
ORDER_BY1,ORDER_BY2,ORDER_BY3
子类信息:
FOLDER_ORDERBY
画布:
TD_STACK
添加FOLDER_OPEN按钮
子类信息:
FOLDER_OPEN
画布:
MAIN
添加FOLDER_TITLE
子类信息:
DYNAMIC_TITLE
画布:
MAIN
添加:
FOLDER_DUMMY
子类信息:
FOLDER_DUMMY
画布:
MAIN
10.LOV定义
重命名为:
在DEPT_LOV列映射属性.点击弹出对话框:
输入
子类信息:
LOV
返回项:
DEPT_NO:
ECH_DOCUMENTS.DEPT_NO
返回项:
DEPT_NAME:
ECH_DOCUMENTS.DEPT_NAME
选择ITEMDEPT_NAME的LOV属性DEPT_LOV
11.程序单元定义
增加程序单元:
TECH_DOCUMENTS_DATA和TECH_DOCUMENTS_PKG
将DEMO的文件代码拷贝到相应的单元
12.触发器定义
在块TECH_DOCUMENTS写下如下触发器和代码:
PRE-INSERT:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-INSERT');
PRE-UPDATE:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-UPDATE');
WHEN-VALIDATE-RECORD:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('WHEN-VALIDATE-RECORD');
PRE-QUERY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-QUERY');
POST-QUERY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('POST-QUERY');
ON-INSERT:
TECH_DOCUMENTS_DATA.INSERT_ROW;
ON-DELETE:
TECH_DOCUMENTS_DATA.DELETE_ROW;
ON-UPDATE:
TECH_DOCUMENTS_DATA.UPDATE_ROW;
ON-LOCK:
TECH_DOCUMENTS_DATA.LOCK_ROW;
KEY-PREV-ITEM:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-PREV-ITEM');
KEY-NEXT-ITEM:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-NEXT-ITEM');
KEY-EXEQRY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-EXEQRY');
KEY-ENTQRY:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-ENTQRY');
WHEN-NEW-RECORD-INSTANCE:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('WHEN-NEW-RECORD-INSTANCE');
POST-BLOCK:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('POST-BLOCK');
PRE-BLOCK:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('PRE-BLOCK');
WHEN-NEW-BLOCK-INSTANCE:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('WHEN-NEW-BLOCK-INSTANCE');
KEY-PRVREC:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-PRVREC');
KEY-NXTREC:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-NXTREC');
KEY-CLRBLK:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-CLRBLK');
KEY-CLRREC:
TECH_DOCUMENTS_PKG.BLOCK_EVENT('KEY-CLRREC');
打开ITEMDF写下如下SQL和代码:
WHEN-NEW-ITEM-INSTANCE:
TECH_DOCUMENTS_PKG.DF('WHEN-NEW-ITEM-INSTANCE');
WHEN-VALIDATE-ITEM:
TECH_DOCUMENTS_PKG.DF('WHEN-VALIDATE-ITEM');
点击ITEMCOMMIT_DATE新建:
KEY-LISTVAL:
calendar.show;
更改form级的FOLDER_ACTIONtrigger.
app_folder.event(:
global.folder_action);
更改form级的WHEN-WINDOW-RESIZEDtrigger.
if:
system.event_windowin('MAIN')then
app_folder.event('WHEN-WINDOW-RESIZED');
endif;
更改form级的KEY-CLRFRMtrigger.
APP_STANDARD.EVENT('KEY-CLRFRM');
app_folder.event('KEY-CLRFRM');
更改FORM级的WHEN-NEW-FORM-INSTANCE增加如下代码
--弹性域
fnd_descr_flex.define(BLOCK=>'TECH_DOCUMENTS'
field=>'DF'
appl_short_name=>'CUX'
desc_flex_name=>'CUX_TECH_DOCUMENTS_DF');
--Flolder
app_flolder.define_folder_block(object_name=>'CUXTECHDEMO'
folder_block_name=>'TECH_DOCUMENTS'
prompt_block_name=>'PROMPT'
folder_canvas_name=>'TD_STACK'
folder_window_name=>'MAIN'
disabled_functions=>NULL
tab_canvas_name=>NULL
fixed_canvas_name=>NULL);
app_folder.event('INSTANTIATE');
13.实现注销记录功能(同前面)
同前面
14.实现查询功能(同前面)
同前面