ITPub博客

首页 > 数据库 > Oracle > 1015FORM

1015FORM

原创 Oracle 作者:YoungEric 时间:2007-10-15 16:48:54 0 删除 编辑

P.S

[@more@]form 总结:

1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句:
在form级的触发器when-new-form-instance中,
写如下代码:
go_block('XXXX');
execute_query;
要查询的数据块的名称
说明:
当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块
当查询数据到一个块里去,可通过execute_query进行处理

2.如何实现当用户输入一条记录生效后,准备输入第二条新记录时,你要自动保存前一条输入的记录。并且防止客户重复插入数据:
a)自动保存
在参数中,添加一个新参数:ISMODIFY,参数数据类型:字符;最大长度:30 参数初始值:FALSE
在数据块的触发器WHEN-NEW-RECORD-INSTANCE中,添加如下代码:
ARAMETER.ISMODIFY = 'TRUE' THEN
--保存记录
:system.message_level := 25;
commit;
:system.message_level := 0;
ARAMETER.ISMODIFY := 'FALSE';
END IF;
B)
在数据块的触发器WHEN-VALIDATE-RECORD中,添加代码:
DECLARE
V_COUNT NUMBER;
BEGIN
IF GET_RECORD_PROPERTY(GET_BLOCK_PROPERTY('QS_INV_LINE', current_record), 'QS_INV_LINE', STATUS) IN ('NEW','INSERT') THEN
SELECT COUNT(*) INTO V_COUNT
FROM qs_inv_line qil
WHERE qil.SUB_INV=S_INV_LINE.SUB_INV
AND qil.LINE_ID=S_INV_LINE.LINE_ID
AND qil.organization_id=:parameter.org_id;
IF V_COUNT > 0 THEN FND_MESSAGE.DEBUG('库房与生产线对应重复!');
raise form_trigger_failure;
END IF;
END IF;
END;
-设为修改标记
ARAMETER.ISMODIFY := 'TRUE'; 把这里的SQL语句修改成要校验唯一性的语句。
代码说明:
1关于GET_RECORD_PROPERTY(GET_BLOCK_PROPERTY('QS_INV_LINE', current_record), 'QS_INV_LINE', STATUS) IN ('NEW','INSERT')中的两个form包的用法:
GET_RECORD_PROPERTY的用法:
get_record_property(record number,block name,property); --标识指定记录的状态。被支持的属性为:status.不同的状态值是:new,changed,query,insert
GET_BLOCK_PROPERTY的用法:
get_block_property(name,property)--返回块属性值
current_record:系统变量;Current_Record,
get_block_property('blockname',Current_Record)的结果并非总是一样的,后者更加保险!特别是刚打开Form的时候,
在WHEN-NEW-RECORD-INSTANCE里面,前者是0,后者是1
2.FND_MESSAGE.DEBUG与form_trigger_failure
FND_MESSAGE.DEBUG为系统对话框弹出,
form_trigger_failure 阻止用户保存

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10484922/viewspace-976742/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle Report学习- -
下一篇: 对齐!
请登录后发表评论 登录
全部评论

注册时间:2007-12-18

  • 博文量
    79
  • 访问量
    214860