技术开发 频道

ORACLEERP开发基础之OracleForms基础(二)

  实现将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来代替宏定义。

0
相关文章