Oracle FORM 开发笔记文档格式.docx
- 文档编号:8167439
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:14
- 大小:182.54KB
Oracle FORM 开发笔记文档格式.docx
《Oracle FORM 开发笔记文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle FORM 开发笔记文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
29、一个块名称超过22个字符,8
30、创建文件夹步骤及注意:
8
31、Oracle开发中出现FRM-40831错误的解决办法?
11
32、JTFGrid开发步骤11
33、使用view开发form步骤:
34、跳转到其他的form,在触发器中添加go_item(‘item_name’)函数,自动弹出item所在的canvas。
12
35、RAISEFORM_TRIGGER_FAILURE;
自动触发整个form的回滚12
36、配置文件存放表:
fnd_profile_options、fnd_profile_option_values12
1、所有的项都必须要继承父项
2、form触发器–了解
3、form中最好使用大写命名
1)全局:
:
global.**----引用全局变量
2)Form级:
PARAMETER.**----引用form级变量
5、fnd_message.debeg(****);
----弹出窗口
6、注意使用block、item、form级的触发器
堆叠画布、内容画布、标签画布
1)创建recordgroup---填入sql语句点击确定
2)创建一个lov---修改标题、记录组(刚刚创建的)、修改列映射属性
3)修改ITEM的lov属性
9、数据块名字不需要和window名称相同
10、FormTrigger触发
11、fnd_message的用法
12、将form挂到erp方法
13、进入form时挑选org_id
在form中要添加org_id,org_code,org_name,chart_of_accounts_id参数
在pre_form触发器中添加fnd_org.choose_org,挑选的组织ID->
global.org_id,在将global.org_id->
parameter.org_id,在块级触发器中添加pre_insert触发器,并将parameter.org_id->
block_name.org_id;
或者:
parameter.org_id:
=fnd_profile.value('
ORG_ID'
);
将org_id显示到windowtitle上,在form或块中添加when_new_form/block_instance触发器,在pl/sql中添加app_window.set_title(window_name,:
parameter.org_id);
14、FORM开发标准使用FND_STANDARD.SET_WHO
为form添加块级触发器:
pre_insert,pre_update触发器,在触发器中添加入,FND_STANDARD.SET_WHO
由于在erp中新建表时必须包括:
organization_id,CREATION_DATE,CREATED_BY,LAST_UPDATE_DATE,LAST_UPDATED_BY,LAST_UPDATED_LOGIN属性
15、主从form,用块中的relations来创建主块与副块的关系
1)创建表,主表与副表(要符合erp规范要求)
2)创建block,主块与副块
3)创建在主块中Relations->
选择要关联的detail_block(副块)->
修改JoinCondition(在数据库中的关联连接)
1)新建一个form,并新建block,cavans,window,设置相关之间的关系
2)添加参数:
org_id,org_code,org_name,chart_of_accountS_id
3)修改pre_form触发器:
app_window.set_window_position(winblock_name,'
FIRST_WINDOW'
FND_ORG.CHOOSE_ORG;
PARAMETER.ORG_ID:
=:
GLOBAL.ORG_ID;
4)修改程序单元中的app_custom
5)为块添加pre_insert,pre_update触发器,并添加FND_STANDARD.SET_WHO;
在pre_insert添加:
CUX_DEPT_CSW.ORGANIZATION_ID:
parameter.org_id;
用于传递org_id。
6)修改form的第一个导航块,使一打开这个form时鼠标跟踪到该数据块,并设置块之间的导航顺序
7)在when_new_form/block_instance设置form标题
app_window.set_title(window_name,:
17、app_find触发器的学习
1)app_find.query_find
格式:
procedureAPP_FIND.QUERY_FIND(lov_namevarchar2);
procedureAPP_FIND.QUERY_FIND(block_windowvarchar2,
find_windowvarchar2,
find_blockvarchar2);
Description
TheseroutinesinvokeeithertheRow-LOVortheFindWindow.Callthemfromauser-namedtrigger"
QUERY_FIND."
Arguments(input)
lov_nameThenameoftheRow-LOV
block_windowThenameofthewindowtheFindWindowisinvokedfor
find_windowThenameoftheFindWindow
find_blockThenameoftheblockintheFindWindow
2)APP_FIND.NEW
格式:
procedureAPP_FIND.NEW(block_namevarchar2);
Thisroutineiscalledbythe"
New"
buttoninaFindWindowtoreturntheusertoanewrecordintheblockonwhichthefindisbased.
block_nameThenameoftheblocktheFindWindowisbasedon
3)APP_FIND.CLEAR
procedureAPP_FIND.CLEAR;
Clear"
buttoninaFindWindowtocleartheFindWindow.
4)APP_FIND.CLEAR_DETAIL
18、不管是基于基表还是基于视图的Block,都建议编写ON-UPDATE、ON-INSERT、ON-DELETE、ON-LOCK触发器,并且,把具体的DML和锁记录代码放入数据库Package中,然后在Form中调用,该Package以后还可以在其他地方调用。
理解:
对于基于非单表视图的Block来说,这里的4个触发器是必须要写的,具体代码可以直接写在触发器内,但为了模块化管理和今后维护方便,这里分为三层调用,触发器中调用ProgramUnit中的过程,ProgramUnit中调用数据库Package中的过程。
19、app_item_property.set_property
(’Item_name’,update/insert/delete_allowed,property_true);
过程用于修改item属性,set_block_property(‘block_name’,update/…._allowed,property_true);
SET_ITEM_INSTANCE_PROPERTY('
CUX_EMP_CSW.EMP_NAME'
CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_FALSE);
设置当前某列的某个属性值
1)添加key_listval触发器,代码:
calendar.show(默认日期);
2)修改项的格式掩码—yyyy-mm-dd时间显示格式
3)修改项的lov属性,为Listofvalue为enable_list_lamp,Validatefromlist为否
21、lov的注意
1)列:
指要返回的列,并在界面显示(一般全选)
2)列显示:
要在界面上显示的标题,并设置返回值(修改标题,设置要返回到那个item)
3)项:
指要在那个列上显示lov按钮(选要进行选择的列)
22、滚动条
1)块滚动条:
水平与垂直其一,一般只添加垂直滚动条
2)画布滚动条:
因为view是显示在界面上的,而canvas是存放item的,如果view太小不足以显示所有的item则需要使用canvas滚动条了,一般使用在堆叠canvas上(一般使用水平滚动条)
23、创建堆叠画布时,要再newform触发器中添加入:
show_view(‘canvas_name’);
步骤:
1)创建一个堆叠画布,设置标题、子类、显示水平滚动条、window与主画布相同
2)设置item到新增加的堆叠画布上
3)调整堆叠画布,
规则:
1)view在canvas上的坐标为:
0,0;
宽度以情况而定,高度与canvas相同
2)canvas左右没有空白,第一个item的坐标为0,0.25(用于放prompt)
3)canvas底部留出0.2的宽度用于存放滚动条
在block中添加一个item,并设置为current_record_indicator
1)打开appstand.fmb,并拖动query_fnd对象组到所需要建立块查询的form中,选择copy的方式
2)删除对象组query_fnd,此时我们的form中会新增加了一个window、canvas、block,分别设置它们的子类属性,并设置block属性的上、下导航块(上为目标块,下为null)而主块的上、下导航为本身
3)修改clear、new、find按钮触发器中的block_name为要查询的块名
4)为query_findblock手动添加所需要的item,并显示到相应的canvas上
5)修改块触发器,为要查询的块block添加一个user_name(name:
query_find)的触发器,并写入代码:
app_find.query_find(‘block_window’,’query_find_window’,’query_find_block’);
将block_window与query_find的window、block进行绑定,调用EBS中的手电筒按钮
6)为要查询的block添加一个pre_query触发器,并写入代码:
(ture和false注意大小写)
if:
parameter.G_query_find='
TRUE'
thencopy(name_in('
query_find.ORGANIZATION_ID'
),'
CUX_DEPT_CSW.ORGANIZATION_ID'
copy(name_in('
query_find.department_id'
CUX_DEPT_CSW.DEPARTMENT_ID'
app_find.query_date_range(:
query_find.VALID_date_f,
:
query_find.VALID_date_t,
'
CUX_DEPT_CSW.VALID_DATE'
parameter.G_query_find:
='
FALSE'
;
ENDIF;
将块查询的条件传递到主块上,并执行ctrl+F11,这样就达到了查询的目的了
1)新建一个tab_canvas,并创建herders与linespages(这两个pages是必须的),设置herders与lines的显示标签
2)设置Item的显示canvas到新建立的tab_canvas上(设置初始化那个page显示)
3)切换到主画布,在view->
stackedcanvas中选择tab_canvas将tab_canvas显示到主画布上
4)控制标签pages的显示
1、在Form级WHEN-NEW-FORM-INSTANCE中追加:
SET_CANVAS_PROPERTY('
TAB_CANVAS'
TOPMOST_TAB_PAGE,'
HEADERS'
2、新建Form级WHEN-TAB-PAGE-CHANGED触发器,该触发器是用鼠标点时才会触
发;
另外注意几个Form标准过程的使用:
IF:
system.tab_previous_page='
THEN
validate(block_scope);
system.MODE='
ENTER-QUERY'
ORNOTform_successTHEN
--Messagehere
set_canvas_property('
TAB_DEMO'
topmost_tab_page,:
system.tab_previous_page);
RETURN;
ELSIF:
LINES'
system.tab_new_page='
--show_view('
ORDER_LINES_STACKED'
go_item('
ORDER_LINES.ORGANIZATION_CODE'
--hide_view('
ORDER_HEADERS.DESCRIPTION'
28、一个导航块中必须有一个ITEM可UPDATE或INSERT可输入,否则会提示目标块中没有可导航的项(frm-40106错误)
29、一个块名称超过22个字符,会提示(frm-41079:
添加组列错误)
注意:
如果创建文件夹不显示prompt,则在new_form_instance触发器中添加app_folder.event('
INSTANTIATE'
为文件夹添加自动伸缩的效果:
在when_window_resized中添加
SYSTEM.EVENT_WINDOWIN(‘WINDOW_NAME’)THEN
APP_FOLDER.EVENT(‘WHEN_WINDOW_RESIZED’);
ENDIF;
1)打开APPSTAND.FMB表单,将objectgroup中的STARNDARD_FOLDER拖动到我们新建的form中,选择subclass,将SAMPLE_FOLDER中的所有触发器拖动到我们要建立文件夹选项的block上
2)为我们新建的form导入APPFLDR.PLL库
3)新建一个promptblock,建完结果图,说明:
ORDER_BY3以下属性为要导航的Item
4)设置各个Item的属性为:
Property
Value
Name
要导航的列
ItemType(项类型)
DisplayItem
SubclassInformation子类信息
FOLDER_PROMPT_MULTIROW
Canvas画布
FOLDER_STACK(这个属性不能设错,必须是你的StackedCanvas)
InitialValue初始值
BrandType、BrandDesc,Category
(这个初始值就是在Form上面你将会看到的prompt值)
Prompt提示
保持为空
Item
ORDER_BY1
ORDER_BY2
ORDER_BY3
ItemType
PushButton
SubclassInformation
FOLDER_ORDERBY
Canvas
CONTEN_CANVAS
XPosition
YPosition
Width
Height
备注
后面的四个0是这是这个Item不需要显示出来,是因为目前我们不需要利用几个Button.
FOLDER_OPEN
自带
TriggerWHEN-BUTTON_PRESSED
copy('
OPEN'
'
global.folder_action'
execute_trigger('
folder_action'
FOLDER_TITLE
DisplayItem
DYNAMICTITLE动态名称
后面的四个0是这是这个Item不需要显示出来,是因为目前我们不需要利用这个Item.
FOLDER_DUMMY
TextItem
TOOLBAR
5)修改block的prompt为空(包括主块和标签块)修改标签块的
设置标签块的InitialValue属性:
为要提示的内容
6)创建stackedcanvas,并设置block显示到改canvas上,包括主块和标签块,设置stackedcanvas的属性,水平滚动条为yes
7)修改trigger,在when_new_form_instance中添加:
app_folder.define_folder_block
(
'
要导航的block名'
--'
ObjectName'
folder_block'
标签块'
prompt_block'
新建的stacked_canvas'
stacked_canvas'
win_name'
window'
NULL--'
disabledfunctions'
);
app_folder.event('
8)在when_window_resized中添加
结束!
在开发ORACLEForm录入界面处理的过程中,出现“FRM-40831:
出现截段,域XXX太长”的错误,经分析处理,发现问题是由于“域xxx”在Form中定义的长度与定义的数据表中的段xxx的长度不一致所致,经在Form中修改“域XXX”的maxlength的长度与数据表中定义的xxx字段长度一致后,问题就解决!
32、JTFGrid开发步骤
“遵循JTFGrid规范”换取“增删字段无需修改Form代码”。
1)建立view,form(参考创建form步骤)并设置相关属性
2)在programunit中添加pkg,pkg中包括insert_row,update_row,delete_row,lock_row等过程,代码可由
begin--Calltheprocedureoms_plsql_generator_pkg.form_view_iud_p(p_block_name=>
p_block_name,p_table_name=>
p_table_name,p_owner=>
p_owner,p_primary_key=>
p_primary_key);
end;
生成
3)在view块中加入on_insert,on_delete,on_update,on_loc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle FORM 开发笔记 开发 笔记
![提示](https://static.bingdoc.com/images/bang_tan.gif)