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-层次树之使用