技术开发 频道

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

  FORM6i引入JAVA类

  看到FORM中有一个导入JAVA类的菜单,就特亲切。^_^,至少不会让我学的JAVA知识白费。事实上ORACLE很多产品都是要么是用JAVA开发,要么提供了JAVA编程接口。所以JAVA程序员转到ORACLE阵容,还是比较容易的。

  1. 安装JDK,FORM6i最好安装1.4的版本,太高版本怕支持不了,比如泛型类。

  2. 设置环境变量。

  2.1首先设置JAVA基本环境变量。

  JAVA_HOME:C:\j2sdk1.4.2_17

  Classpath:C:\j2sdk1.4.2_17\lib\tools.jar;

  Path:C:\j2sdk1.4.2_17\bin;

  2.2设置FORM有关JAVA的环境变量。

  Classpath:.;C:\orant\TOOLS\COMMON60\JAVA\IMPORTER.JAR;C:\orant\TOOLS\COMMON60\JAVA

  Path::C:\Program Files\Java\j2re1.4.2_17\bin;C:\j2sdk1.4.2_17\jre\bin\client

  3.引入JAVA类。

  3.1首先,写一个Test的JAVA类。然后将这个类的目录加入Classpath环境变量中。 Classpath:D:\JAVA_FORM\Socket\classes;

  3.2导入类。

  导入成功后,FORMS会将JAVA类转成PL/SQL包。

  3.3调用Test类。

  declare

  obj

  ORA_JAVA.JOBJECT;

  a varchar2(50);

  begin

  obj := Test.new();

  a:=TEST.GETTEST(obj);

  message(a);

  end;

  FORMS之列表项动态赋值

  1.在数据块d_test,增加一列表项l_test。

  2.在when-new-form-instance触发器中加入。

  declare

  rg_name_test varchar2(40) :='test_name';

  v_sql_test varchar2(300);

  rg_id_test recordgroup; v_status number;

  begin

  clear_list('d_test.l_test');

  rg_id_test := find_group(rg_name_test);

  if id_null(rg_id_test) then --记录组要求有两个为varchar2的列

  v_sql_test := ' select hname,hmark from hek_test_headers';

  rg_id_test := create_group_from_query(rg_name_test,v_sql_test);

  end if;

  v_status := populate_group(rg_id_test);

  populate_list(' d_test.l_test ', rg_id_test);

  end;

  FORMS之LOV动态赋给记录组

  1.在数据块d_test,增加一文本项l_test、LOV项lov_test、记录组Rec_test1、Rec_test2。

  2.给记录组Rec_test1、Rec_test2赋SQL语句,并将项Lov_test的记录组设成Rec_test1。

  3.在WHEN-BUTTON-PRESS触发器中加入

  Declare Lov_id LOV;

  Begin

  Lov_id := Find_Lov('lov_test');

  if Get_Lov_Property(Lov_id,Group_Name)=' Rec_test1' then

  Set_Lov_Property(kpi_lov_xsbb,Group_Name,'

  Rec_test2');

  end if;

  End;

  屏蔽FORM系统提示信息

  1.1直接将SYSTEM.MESSAGE_LEVEL 设成25,这样大于25的信息提示就不会提示了。

  Declare

  t_l number := :SYSTEM.MESSAGE_LEVEL;

  Begin :

  SYSTEM.MESSAGE_LEVEL :=25;

  …….. :

  SYSTEM.MESSAGE_LEVEL := t_l;

  End;

  1.2上述方法只适用于小于25的信息提示,无法屏蔽错误提示屏蔽错误提示可以FORM的ON-ERROR或ON-MESSAGE中加入拦截代码(不提倡屏蔽错误提示。)。

  declare

  t varchar2(10) := error_type;

  begin

  if (error_code=40202 or error_code=40401) or t='FRM' then NULL;

  end if;

  end;

  FORM之间的调用

  ORACLE FORM提供多种方法来实现不同FORM之间的调用。

  1.CALL_FORM或OPEN_FORM

  这种方法比较直观,但此种方法需要给出FORM的详细路径。如:

  call_form('/data/deve/deveappl/au/11.5.0/forms/ZHS/HEK_DISCOUNT_PERIOD_NEW.fmx');

  其中:call_form与open_form的区别:open_form可以保留原表单。

  2. APP_NAVIGATE.EXECUTE或FND_FUNCTION.EXECUTE

  例:APP_NAVIGATE.EXECUTE('HEK_DISCOUNT_PERIOD_NEW', 'Y', 'Y', null);

  其中APP_NAVIGATE.EXECUTE与FND_FUNCTION.EXECUTE的区别:

  APP_NAVIGATE.EXECUTE只打一个FORM,而FND_FUNCTION.EXECUTE调用多少次,就打开多少个。

  Tree-层次树之使用

0
相关文章