实现将LOV可以自行录入内容
在WHEN-NEW-ITEM-INSTANCE触发器加入
begin set_item_property('block.item1',
VALIDATE_FROM_LIST, property_false);
end;
在FORMS调用WEB页面
web.show_document('http://www.sina.com.cn','_blank'); 第二参数为页面的加载方式,有四种选择。
_SELF
_PARENT
_TOP
_BLANK
Effect:自己可以去show一下,印象会比较深。
Name_In()\COPY()函数
1、Name_In()函数有点奇怪,丢进去是字符串,返回也是字符串。Oracle官方文档说是为了实现indirect reference。 例: IF :emp.ename = 'smith' -- direct reference
IF NAME_IN('emp.ename') = 'smith' -- indirect reference
另外:Name_In()可以用来间接引用一些系统函数。例:var t_form varchar2(50):=Name_In(?system.current_form‘);
2、Copy()函数呢?也是一样,也是为了实现indirect reference。 例:
:emp.ename := 'smith'; -- direct reference
Copy('smith','emp.ename'); -- indirect reference
3、后来在ITPUB上面看到,说此两个函数是为了实现类似于C++中宏定义。
3.1 NAME_IN实现宏定义的例子
FUNCTION FUN_JF (PRE_BLOCK_NAME
IN VARCHAR) RETURN BOOLEAN IS
BEGIN
if name_in(pre_block_name'sj.dwjtc')>name_in(pre_block_name'yj.dwjtc') then
message(' 测试!');
return false;
end if;
return true;
END;
-- PRE_BLOCK_NAME是形参,实际调用时,通过Name_in()函数来实现变量宏替换成FORMS.ITEM。
3.2 COPY实现宏定义的例子:
BEGIN
DELCATE
strItemName varchar2(20);
BEGIN
for I in 1 „6 loop
strItemName:=':b.l"to_char(i);
copy(null,strItemName); --strItemName由变量宏替换成Forms中Item。
end loop;
END;
4、通过上面两个例子,应该可以明白indirect reference与direct reference的区别。但我个人觉得C++的宏定义很少这样作用,一般都是起常量的作用。例:#difned BUFFER 100。而且ANSI C++推荐使用const来代替宏定义。