1.ITEM 属性控制
SET_ITEM_PROPERTY 和SET_ITEM_INSTANCE_PROPERTY 区别:
如果是控制单行记录或者多行记录中的全部记录:SET_ITEM_PROPERTY
如果是控制多行记录中的单一行记录:SET_ITEM_INSTANCE_PROPERTY
若控制数据块MTL_PLAN(多条记录)中,某些符合特定条件的record中的ITEM 才可以更改。可以
在post-query(每查询一条记录,执行一次) 触发中加入:
ifnvl(name_in('MTL_PLAN.ENABLED_FLAG'),'N') = 'N' then
set_item_instance_property('MTL_PLAN.REDUCING_FLAG',CURRENT_RECORD,UPDATE_ALLOWED,property_false);
End if;
控制数据块中的 全部记录的单个ITEM是否可更改。
SET_ITEM_PROPERTY('T_TEST.TID',ENABLED,PROPERTY_FALSE);--ITEM不可获得焦点
或:
SET_ITEM_PROPERTY('T_TEST.TID’,INSERT_ALLOWED,PROPERTY_FALSE);--ITEM可以获得焦点
SET_ITEM_PROPERTY('T_TEST.TID',UPDATE_ALLOWED,PROPERTY_FALSE);
用代码控制ITEM 的焦点转移
有两个ITEM,ITEM1输入省份,ITEM2 输入市级。在省份ITEM 为空时,市级ITEM 是不允许输入了。
在ITEM2的的WHEN-NEW-ITEM-INSTANCE 加入
if :block.item1 is nullthen
fnd_message.debug('年度不能为空');
Go_Item(‘block.item1');
end if
2.Form 实现复制上条记录
此功能就是要实现,同时按下shift+F6自动复制上条记录。在数据块的KEY-DUPREC 触发器中加入
begin
duplicate_record;
end;
3.控制删除条件的触发器
在相应数据块的KEY_DELREC加入条件控制参数。
if:parameter.P_APPROVE_FLAG = 'Y' then
fnd_message.debug('您不能删除此记录,只能由录入员删除。');
raise form_trigger_failure;
end if;
4.日历设置calendar
1.设置item的lov属性(Enable_list_lamp)
2.(务必)在validate from list 处选择no
3.在Item trigger : Key_listval 中写上 calendar.show;
Calendar.show 是可以带参数的,缺省就是当天(可以打开attached libraries -> appdaypk -> calendar ),其参数就是设日历的缺省date
For example : calendar.show(to_date('2009-08-29','YYYY-MM-DD'));
5.Forms 数据提交的方式
commit_form
先针对form上面的数据变动进行commit,然后对于代码中的类似DML 语句也进行提交;
如果form上面的数据变动和代码中的数据变动有冲突,最后以FORM 上的为准。
适用:一般来在直接修改Form上的数据时,就使用commit_form。
commit
对form 和数据库进行提交。如果form上面的数据和代码中的数据变动有冲突,最后以FORM 上的为准。
适用:一般来在直接使用DML代码修改数据时,就使用commit。
do_key('commit_form')
会首先寻找form 下的triggers中的KEY-COMMIT 这个trigger,并执行KEY-COMMIT 中所写的代码。
如果没有KEY-COMMIT这个trigger,则会针对form 和代码一起提交。
如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准。
适用:只是更改了一下代码执行的任先顺序,没有什么实质区别。
forms_ddl('commit')
只针对代码中的update,insert,delete语句进行提交。如果form 上面的数据有变动,是不会提交的。
适用:一般不用。
6.ITEM默认显示时间
将ITME的 INITIAL value 设置为 $$DBDATETIME$$
7.创建汇总ITEM
在form中创建一个item,用于加总另一个item的值
1.首先创建的Item必须与要统计值的Item在同一个block上.
2.在创建好的 item 上的 calculation 中设置好相应的函数
3.在这个 item 所对应的 block 上把 advanceddatabase 中 precompute summaries 修改为 Yes。
8.更改信息级别
每次成功退出保存修改或添加记录时窗体都会弹出“FRM-40400:事务完成:已应用和保存X条记录。"
的消息窗,可不可以在适当的触发器中改变它的属性?
:system.message_level:=25;
commit;
:system.message_level:=0;
9.go_block
如果block_name不对造成go_block出错,exception不能捕获!说明Forms内置过程出错时,不会抛出pl/sqlexception,而是产生一个runtime event。
根据event类型,控制转到on-error或on-message触发器。如果没有这两个触发器,runtime显示错误代码信息。
注意runtime仅管forms报告错误,go_block后的代码会继续执行.即使在on-error中raiseform_trigger_failure也是如此,因为raise异常只会从当前pl/sql块退出(这一点我之前说的有误,现在改过来:)上例应该改为这样:
go_block('block_name');
if not form_success then
raise form_trigger_failure;
else
...
10.失效标准菜单功能
失效保存按钮
在WHEN-NEW-FORM-INSTANCE中加入set_menu_item_property('FILE.SAVE',enabled, property_off);
如果想在保存按钮失效后保存记录,可以在自己设计的按钮触发器中写DO_KEY('COMMIT_FORM');
注意:请失效保存快捷键Ctrl+S
KEY-COMMIT
NULL;
与 此类似的还有。
set_menu_item_property('Edit.delete',enabled, property_off); 失效"Deletes Recode
set_menu_item_property('Edit.Clear',enabled, property_off); 失效"Clear Recode"
也可以隐藏掉
set_menu_item_property('Edit.delete',displayed, property_off);
set_menu_item_property('FILE.NEW',displayed, property_off);
11.DO_KEY
Do_key()这里说明一下,它的作用是执行某个key-xxxx即按键动作,在6i下,有如下一些动作:
Built-in Key Trigger Associated Function Key
--------------------------------------------------------------------------------
BLOCK_MENU Key-MENU [Block Menu]
CLEAR_BLOCK Key-CLRBLK [Clear Block]
CLEAR_FORM Key-CLRFRM [Clear Form]
CLEAR_RECORD Key-CLRREC [Clear Record]
COMMIT_FORM Key-COMMIT [Commit]
COUNT_QUERY Key-CQUERY [Count Query Hits]
CREATE_RECORD Key-CREREC [Insert Record]
DELETE_RECORD Key-DELREC [Delete Record]
DOWN Key-DOWN [Down]
DUPLICATE_ITEM Key-DUP-ITEM [Duplicate Item]
DUPLICATE_RECORD Key-DUPREC [Duplicate Record]
EDIT_TEXTITEM Key-EDIT [Edit]
ENTER Key-ENTER [Enter]
ENTER_QUERY Key-ENTQRY [Enter Query]
EXECUTE_QUERY Key-EXEQRY [Execute Query]
EXIT_FORM Key-EXIT [Exit/Cancel]
HELP Key-HELP [Help]
LIST_VALUES Key-LISTVAL [List]
LOCK_RECORD Key-UPDREC [Lock Record]
NEXT_BLOCK Key-NXTBLK [Next Block]
NEXT_ITEM Key-NEXT-ITEM [Next Item]
NEXT_KEY Key-NXTKEY [Next Primary Key Fld]
NEXT_RECORD Key-NXTREC [Next Record]
NEXT_SET Key-NXTSET [Next Set of Records]
PREVIOUS_BLOCK Key-PRVBLK [Previous Block]
PREVIOUS_ITEM Key-PREV-ITEM [Previous Item]
PREVIOUS_RECORD Key-PRVREC [Previous Record]
PRINT Key-PRINT [Print]
SCROLL_DOWN Key-SCRDOWN [Scroll Down]
SCROLL_UP Key-SCRUP [Scroll Up]
UP Key-UP [Up]
12.defaul twhere
set_block_property('JOBTSF',
default_where,
' group_id = ' || :parameter.group_id);
go_block('JOBTSF');
execute_query;
set_block_property('JOBTSF', default_where,'');
13.遍历数据块
块循环
Go_block(‘xxx’);--光标到块xxx
Go_record(1); --光标到第一条记录
Loop
Todo-1 --添加代码
Exit when(:system.last_record = 'TRUE'); --退出循环的条件
Next_record; --下一条记录
End loop;
Go_record(1); --循环结束,光标跳回第一条将记录
14.返回上一条记录
previous_record; --返回上一条记录
15.进入form前,弹出组织选择框
(1):首先在parameter中加上CHART_OF_ACCOUNTS_ID,ORG_NAME,ORG_CODE,ORG_ID四个参数
(2)在form级的pre-form触发器中添加代码:fnd_org.choose_org;
WHEN-NEW-FORM-INSTANCE或者 WHEN-NEW-BLOCK-INSTANCE上增
APP_WINDOW.SET_TITLE('RESULT',:PARAMETER.ORG_CODE);
其中'RESULT'是window的名字,用于设置window的title
16.打开FORM自动查询
在FORM级别的WHEN-NEW-FORM-INSTANCE 添加
EXECUTE_QUERY;
17.鼠标状态控制
set_application_property(cursor_style,'BUSY');
set_application_property(cursor_style,'DEFAULT');